feat: PreUpdate and FirstActiveFrame to Behaviour
This commit is contained in:
parent
d2881e94df
commit
bb6990a80c
|
@ -11,6 +11,10 @@ namespace Syntriax.Engine.Core.Abstract;
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public interface IBehaviourController : IAssignableGameObject
|
public interface IBehaviourController : IAssignableGameObject
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Callback triggered when the <see cref="Update(GameTime)"/> is called but right before the <see cref="OnUpdate"/> action is triggered.
|
||||||
|
/// </summary>
|
||||||
|
Action<IBehaviourController, GameTime>? OnPreUpdate { get; set; }
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Callback triggered when the <see cref="Update(GameTime)"/> is called.
|
/// Callback triggered when the <see cref="Update(GameTime)"/> is called.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -10,6 +10,7 @@ namespace Syntriax.Engine.Core;
|
||||||
|
|
||||||
public class BehaviourController : IBehaviourController
|
public class BehaviourController : IBehaviourController
|
||||||
{
|
{
|
||||||
|
public Action<IBehaviourController, GameTime>? OnPreUpdate { get; set; }
|
||||||
public Action<IBehaviourController, GameTime>? OnUpdate { get; set; } = null;
|
public Action<IBehaviourController, GameTime>? OnUpdate { get; set; } = null;
|
||||||
public Action<IBehaviourController, GameTime>? OnPreDraw { get; set; } = null;
|
public Action<IBehaviourController, GameTime>? OnPreDraw { get; set; } = null;
|
||||||
|
|
||||||
|
@ -111,8 +112,10 @@ public class BehaviourController : IBehaviourController
|
||||||
if (!GameObject.StateEnable.Enabled)
|
if (!GameObject.StateEnable.Enabled)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
OnPreUpdate?.Invoke(this, gameTime);
|
||||||
OnUpdate?.Invoke(this, gameTime);
|
OnUpdate?.Invoke(this, gameTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdatePreDraw(GameTime gameTime)
|
public void UpdatePreDraw(GameTime gameTime)
|
||||||
{
|
{
|
||||||
if (!GameObject.StateEnable.Enabled)
|
if (!GameObject.StateEnable.Enabled)
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
using System;
|
|
||||||
using Microsoft.Xna.Framework;
|
using Microsoft.Xna.Framework;
|
||||||
|
|
||||||
using Syntriax.Engine.Core.Abstract;
|
using Syntriax.Engine.Core.Abstract;
|
||||||
|
@ -7,6 +6,8 @@ namespace Syntriax.Engine.Core;
|
||||||
|
|
||||||
public abstract class BehaviourOverride : Behaviour
|
public abstract class BehaviourOverride : Behaviour
|
||||||
{
|
{
|
||||||
|
private bool isInitializedThisFrame = false;
|
||||||
|
|
||||||
protected IGameObject GameObject => BehaviourController.GameObject;
|
protected IGameObject GameObject => BehaviourController.GameObject;
|
||||||
protected ITransform Transform => BehaviourController.GameObject.Transform;
|
protected ITransform Transform => BehaviourController.GameObject.Transform;
|
||||||
|
|
||||||
|
@ -23,6 +24,9 @@ public abstract class BehaviourOverride : Behaviour
|
||||||
protected virtual void OnInitialize() { }
|
protected virtual void OnInitialize() { }
|
||||||
private void OnInitialize(IInitialize _)
|
private void OnInitialize(IInitialize _)
|
||||||
{
|
{
|
||||||
|
isInitializedThisFrame = true;
|
||||||
|
|
||||||
|
BehaviourController.OnPreUpdate += PreUpdate;
|
||||||
BehaviourController.OnPreDraw += PreDraw;
|
BehaviourController.OnPreDraw += PreDraw;
|
||||||
BehaviourController.OnUpdate += Update;
|
BehaviourController.OnUpdate += Update;
|
||||||
OnInitialize();
|
OnInitialize();
|
||||||
|
@ -31,11 +35,34 @@ public abstract class BehaviourOverride : Behaviour
|
||||||
protected virtual void OnFinalize() { }
|
protected virtual void OnFinalize() { }
|
||||||
private void OnFinalize(IInitialize _)
|
private void OnFinalize(IInitialize _)
|
||||||
{
|
{
|
||||||
|
BehaviourController.OnPreUpdate -= PreUpdate;
|
||||||
BehaviourController.OnPreDraw -= PreDraw;
|
BehaviourController.OnPreDraw -= PreDraw;
|
||||||
BehaviourController.OnUpdate -= Update;
|
BehaviourController.OnUpdate -= Update;
|
||||||
OnFinalize();
|
OnFinalize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected virtual void OnPreUpdatePreEnabledCheck(GameTime time) { }
|
||||||
|
protected virtual void OnPreUpdate(GameTime time) { }
|
||||||
|
private void PreUpdate(IBehaviourController _, GameTime time)
|
||||||
|
{
|
||||||
|
OnPreUpdatePreEnabledCheck(time);
|
||||||
|
|
||||||
|
if (!StateEnable.Enabled)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (isInitializedThisFrame)
|
||||||
|
FirstActiveFrame(time);
|
||||||
|
|
||||||
|
OnPreUpdate(time);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void OnFirstActiveFrame(GameTime time) { }
|
||||||
|
private void FirstActiveFrame(GameTime time)
|
||||||
|
{
|
||||||
|
OnFirstActiveFrame(time);
|
||||||
|
isInitializedThisFrame = false;
|
||||||
|
}
|
||||||
|
|
||||||
protected virtual void OnUpdatePreEnabledCheck(GameTime time) { }
|
protected virtual void OnUpdatePreEnabledCheck(GameTime time) { }
|
||||||
protected virtual void OnUpdate(GameTime time) { }
|
protected virtual void OnUpdate(GameTime time) { }
|
||||||
private void Update(IBehaviourController _, GameTime time)
|
private void Update(IBehaviourController _, GameTime time)
|
||||||
|
|
Loading…
Reference in New Issue