diff --git a/Scripts/Components/Actors/Actor.cs b/Scripts/Components/Actors/Actor.cs index 60975d42..a3bfe18f 100644 --- a/Scripts/Components/Actors/Actor.cs +++ b/Scripts/Components/Actors/Actor.cs @@ -14,40 +14,35 @@ public partial class Actor : CharacterBody2D private GameManager _gameManager; - private List _movementHandlers = new(); - - private List _animationHandlers = new(); + private List _modules = new(); public override void _Ready() { _gameManager = this.GetGameManager(); var children = GetChildren(); - foreach (var child in children) { - if (child is MovementHandler movementHandler) - { - _movementHandlers.Add(movementHandler); - movementHandler.Init(this); - } - else if (child is AnimationHandler animationHandler) - { - _animationHandlers.Add(animationHandler); - animationHandler.Init(this); - } + foreach (var child in children) + { + if (child is not ActorModule actorModule) continue; + _modules.Add(actorModule); + actorModule.Init(this); } } - public override void _PhysicsProcess(double delta) + public override void _Process(double delta) { - foreach (var handler in _movementHandlers) - { - handler.Move(delta); - } - - foreach (var handler in _animationHandlers) + foreach (var handler in _modules) { handler.Update(delta); } } + + public override void _PhysicsProcess(double delta) + { + foreach (var handler in _modules) + { + handler.PhysicsUpdate(delta); + } + } } \ No newline at end of file diff --git a/Scripts/Components/Actors/ActorFreeMovement.cs b/Scripts/Components/Actors/ActorFreeMovement.cs index 1eb1527b..de0ebfc4 100644 --- a/Scripts/Components/Actors/ActorFreeMovement.cs +++ b/Scripts/Components/Actors/ActorFreeMovement.cs @@ -25,7 +25,12 @@ public partial class ActorFreeMovement : MovementHandler FacingDirection = Vector2.Down; } - public override void Move(double delta) + public override void Update(double delta) + { + + } + + public override void PhysicsUpdate(double delta) { MovementDirection = AggregateInputProviders().Normalized(); diff --git a/Scripts/Components/Actors/ActorModule.cs b/Scripts/Components/Actors/ActorModule.cs new file mode 100644 index 00000000..303d7414 --- /dev/null +++ b/Scripts/Components/Actors/ActorModule.cs @@ -0,0 +1,10 @@ +using Godot; + +namespace Cirno.Scripts.Components.Actors; + +public abstract partial class ActorModule : Node2D +{ + public abstract void Init(Actor actor); + public abstract void Update(double delta); + public abstract void PhysicsUpdate(double delta); +} \ No newline at end of file diff --git a/Scripts/Components/Actors/ActorTankMovement.cs b/Scripts/Components/Actors/ActorTankMovement.cs index 4a02f636..1e0ec89f 100644 --- a/Scripts/Components/Actors/ActorTankMovement.cs +++ b/Scripts/Components/Actors/ActorTankMovement.cs @@ -34,8 +34,13 @@ public partial class ActorTankMovement : MovementHandler MovementDirection = Vector2.Zero; FacingDirection = Vector2.Down; } - - public override void Move(double delta) + + public override void Update(double delta) + { + + } + + public override void PhysicsUpdate(double delta) { var inputDirection = AggregateInputProviders(); diff --git a/Scripts/Components/Actors/AnimationHandler.cs b/Scripts/Components/Actors/AnimationHandler.cs index 65ab34cf..3af5212d 100644 --- a/Scripts/Components/Actors/AnimationHandler.cs +++ b/Scripts/Components/Actors/AnimationHandler.cs @@ -3,14 +3,14 @@ using Godot; namespace Cirno.Scripts.Components.Actors; -public partial class AnimationHandler : Node2D +public partial class AnimationHandler : ActorModule { [Export] public AnimatedSprite2D _animatedSprite { get; protected set; } protected Actor _parent; - public virtual void Init(Actor parent) + public override void Init(Actor parent) { _parent = parent; @@ -23,7 +23,7 @@ public partial class AnimationHandler : Node2D // } } - public virtual void Update(double delta) + public override void Update(double delta) { var direction = _parent.FacingDirection; //GetSnappedDirection(); @@ -41,7 +41,12 @@ public partial class AnimationHandler : Node2D } } - + + public override void PhysicsUpdate(double delta) + { + + } + private string DirectionToString(Vector2 direction) { var angle = Mathf.RadToDeg(direction.Angle()); diff --git a/Scripts/Components/Actors/EnemyNavigationMovement.cs b/Scripts/Components/Actors/EnemyNavigationMovement.cs index 41cc75da..17ea68e1 100644 --- a/Scripts/Components/Actors/EnemyNavigationMovement.cs +++ b/Scripts/Components/Actors/EnemyNavigationMovement.cs @@ -64,6 +64,11 @@ public partial class EnemyNavigationMovement : MovementHandler } } + public override void Update(double delta) + { + + } + private void AlarmManagerOnAlarmEnabled(Vector2 location) { if (NavigationEnabled && location.DistanceTo(this.GlobalPosition) <= AlarmReactRange) @@ -74,7 +79,7 @@ public partial class EnemyNavigationMovement : MovementHandler } } - public override void Move(double delta) + public override void PhysicsUpdate(double delta) { if (_actorAi.Ai is not AiState.Enabled) return; diff --git a/Scripts/Components/Actors/EnemyPossessionMovement.cs b/Scripts/Components/Actors/EnemyPossessionMovement.cs index ae19dbbd..60bcfe8a 100644 --- a/Scripts/Components/Actors/EnemyPossessionMovement.cs +++ b/Scripts/Components/Actors/EnemyPossessionMovement.cs @@ -14,10 +14,10 @@ public partial class EnemyPossessionMovement : ActorFreeMovement _actorAi = parent.GetNode("ActorAi"); } - public override void Move(double delta) + public override void PhysicsUpdate(double delta) { if (_actorAi.Ai is AiState.Controlled) - base.Move(delta); + base.PhysicsUpdate(delta); } } \ No newline at end of file diff --git a/Scripts/Components/Actors/MovementHandler.cs b/Scripts/Components/Actors/MovementHandler.cs index 265c4289..8ad188b7 100644 --- a/Scripts/Components/Actors/MovementHandler.cs +++ b/Scripts/Components/Actors/MovementHandler.cs @@ -3,7 +3,7 @@ using System.Linq; using Cirno.Scripts.Components.Actors; using Godot; -public abstract partial class MovementHandler : Node2D +public abstract partial class MovementHandler : ActorModule { protected Actor _parent; @@ -13,7 +13,7 @@ public abstract partial class MovementHandler : Node2D protected readonly List _inputProviders = new(); - public virtual void Init(Actor parent) + public override void Init(Actor parent) { _parent = parent; @@ -41,6 +41,4 @@ public abstract partial class MovementHandler : Node2D return _inputProviders.Aggregate(false, (current, inputProvider) => current && inputProvider.GetStrafing()); } - public abstract void Move(double delta); - } \ No newline at end of file