feat: monogame content loader interface added
This commit is contained in:
parent
200e8ae7da
commit
ad365dc722
@ -0,0 +1,10 @@
|
|||||||
|
using Microsoft.Xna.Framework.Content;
|
||||||
|
|
||||||
|
using Syntriax.Engine.Core;
|
||||||
|
|
||||||
|
namespace Syntriax.Engine.Integration.MonoGame;
|
||||||
|
|
||||||
|
public interface ILoadContent : IBehaviour
|
||||||
|
{
|
||||||
|
void LoadContent(ContentManager content);
|
||||||
|
}
|
@ -0,0 +1,53 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using Syntriax.Engine.Core;
|
||||||
|
|
||||||
|
namespace Syntriax.Engine.Integration.MonoGame;
|
||||||
|
|
||||||
|
public class LoadContentManager : Behaviour, IFirstFrameUpdate
|
||||||
|
{
|
||||||
|
// We use Ascending order because we are using reverse for loop to call them
|
||||||
|
private static Comparer<IBehaviour> SortByAscendingPriority() => Comparer<IBehaviour>.Create((x, y) => x.Priority.CompareTo(y.Priority));
|
||||||
|
|
||||||
|
private readonly ActiveBehaviourCollectorSorted<ILoadContent> loadContents = new() { SortBy = SortByAscendingPriority() };
|
||||||
|
private readonly List<ILoadContent> toCallLoadContents = new(32);
|
||||||
|
|
||||||
|
private MonoGameWindowContainer monoGameWindowContainer = null!;
|
||||||
|
|
||||||
|
public void FirstActiveFrame()
|
||||||
|
{
|
||||||
|
monoGameWindowContainer = Universe.FindRequiredBehaviour<MonoGameWindowContainer>();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnEnteredUniverse(IUniverse universe)
|
||||||
|
{
|
||||||
|
loadContents.Assign(universe);
|
||||||
|
|
||||||
|
universe.OnPreUpdate.AddListener(OnPreUpdate);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnExitedUniverse(IUniverse universe)
|
||||||
|
{
|
||||||
|
loadContents.Unassign();
|
||||||
|
|
||||||
|
universe.OnPreUpdate.RemoveListener(OnPreUpdate);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnPreUpdate(IUniverse sender, IUniverse.UpdateArguments args)
|
||||||
|
{
|
||||||
|
for (int i = toCallLoadContents.Count - 1; i >= 0; i--)
|
||||||
|
{
|
||||||
|
toCallLoadContents[i].LoadContent(monoGameWindowContainer.Window.Content);
|
||||||
|
toCallLoadContents.RemoveAt(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnFirstFrameCollected(IBehaviourCollector<ILoadContent> sender, IBehaviourCollector<ILoadContent>.BehaviourCollectedArguments args)
|
||||||
|
{
|
||||||
|
toCallLoadContents.Add(args.BehaviourCollected);
|
||||||
|
}
|
||||||
|
|
||||||
|
public LoadContentManager()
|
||||||
|
{
|
||||||
|
loadContents.OnCollected.AddListener(OnFirstFrameCollected);
|
||||||
|
}
|
||||||
|
}
|
@ -21,6 +21,9 @@ public class MonoGameWindow : Game
|
|||||||
|
|
||||||
Universe.InstantiateUniverseObject().SetUniverseObject("Window Container")
|
Universe.InstantiateUniverseObject().SetUniverseObject("Window Container")
|
||||||
.BehaviourController.AddBehaviour<MonoGameWindowContainer>(this);
|
.BehaviourController.AddBehaviour<MonoGameWindowContainer>(this);
|
||||||
|
|
||||||
|
Universe.InstantiateUniverseObject().SetUniverseObject("Content Loader")
|
||||||
|
.BehaviourController.AddBehaviour<LoadContentManager>();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void Initialize()
|
protected override void Initialize()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user