mirror of
https://gitlab.com/MaddoScientisto/cirnogodot.git
synced 2026-07-01 10:51:17 +00:00
Simplified actor modules
This commit is contained in:
parent
28671c098b
commit
a7f4f4eb28
8 changed files with 57 additions and 34 deletions
|
|
@ -14,40 +14,35 @@ public partial class Actor : CharacterBody2D
|
||||||
|
|
||||||
private GameManager _gameManager;
|
private GameManager _gameManager;
|
||||||
|
|
||||||
private List<MovementHandler> _movementHandlers = new();
|
private List<ActorModule> _modules = new();
|
||||||
|
|
||||||
private List<AnimationHandler> _animationHandlers = new();
|
|
||||||
|
|
||||||
public override void _Ready()
|
public override void _Ready()
|
||||||
{
|
{
|
||||||
_gameManager = this.GetGameManager();
|
_gameManager = this.GetGameManager();
|
||||||
|
|
||||||
var children = GetChildren();
|
var children = GetChildren();
|
||||||
foreach (var child in children) {
|
foreach (var child in children)
|
||||||
if (child is MovementHandler movementHandler)
|
{
|
||||||
{
|
if (child is not ActorModule actorModule) continue;
|
||||||
_movementHandlers.Add(movementHandler);
|
_modules.Add(actorModule);
|
||||||
movementHandler.Init(this);
|
actorModule.Init(this);
|
||||||
}
|
|
||||||
else if (child is AnimationHandler animationHandler)
|
|
||||||
{
|
|
||||||
_animationHandlers.Add(animationHandler);
|
|
||||||
animationHandler.Init(this);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void _PhysicsProcess(double delta)
|
public override void _Process(double delta)
|
||||||
{
|
{
|
||||||
foreach (var handler in _movementHandlers)
|
foreach (var handler in _modules)
|
||||||
{
|
|
||||||
handler.Move(delta);
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var handler in _animationHandlers)
|
|
||||||
{
|
{
|
||||||
handler.Update(delta);
|
handler.Update(delta);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void _PhysicsProcess(double delta)
|
||||||
|
{
|
||||||
|
foreach (var handler in _modules)
|
||||||
|
{
|
||||||
|
handler.PhysicsUpdate(delta);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -25,7 +25,12 @@ public partial class ActorFreeMovement : MovementHandler
|
||||||
FacingDirection = Vector2.Down;
|
FacingDirection = Vector2.Down;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Move(double delta)
|
public override void Update(double delta)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void PhysicsUpdate(double delta)
|
||||||
{
|
{
|
||||||
MovementDirection = AggregateInputProviders().Normalized();
|
MovementDirection = AggregateInputProviders().Normalized();
|
||||||
|
|
||||||
|
|
|
||||||
10
Scripts/Components/Actors/ActorModule.cs
Normal file
10
Scripts/Components/Actors/ActorModule.cs
Normal file
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
@ -34,8 +34,13 @@ public partial class ActorTankMovement : MovementHandler
|
||||||
MovementDirection = Vector2.Zero;
|
MovementDirection = Vector2.Zero;
|
||||||
FacingDirection = Vector2.Down;
|
FacingDirection = Vector2.Down;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Move(double delta)
|
public override void Update(double delta)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void PhysicsUpdate(double delta)
|
||||||
{
|
{
|
||||||
var inputDirection = AggregateInputProviders();
|
var inputDirection = AggregateInputProviders();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,14 +3,14 @@ using Godot;
|
||||||
|
|
||||||
namespace Cirno.Scripts.Components.Actors;
|
namespace Cirno.Scripts.Components.Actors;
|
||||||
|
|
||||||
public partial class AnimationHandler : Node2D
|
public partial class AnimationHandler : ActorModule
|
||||||
{
|
{
|
||||||
[Export]
|
[Export]
|
||||||
public AnimatedSprite2D _animatedSprite { get; protected set; }
|
public AnimatedSprite2D _animatedSprite { get; protected set; }
|
||||||
|
|
||||||
protected Actor _parent;
|
protected Actor _parent;
|
||||||
|
|
||||||
public virtual void Init(Actor parent)
|
public override void Init(Actor parent)
|
||||||
{
|
{
|
||||||
_parent = 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();
|
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)
|
private string DirectionToString(Vector2 direction)
|
||||||
{
|
{
|
||||||
var angle = Mathf.RadToDeg(direction.Angle());
|
var angle = Mathf.RadToDeg(direction.Angle());
|
||||||
|
|
|
||||||
|
|
@ -64,6 +64,11 @@ public partial class EnemyNavigationMovement : MovementHandler
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void Update(double delta)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private void AlarmManagerOnAlarmEnabled(Vector2 location)
|
private void AlarmManagerOnAlarmEnabled(Vector2 location)
|
||||||
{
|
{
|
||||||
if (NavigationEnabled && location.DistanceTo(this.GlobalPosition) <= AlarmReactRange)
|
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)
|
if (_actorAi.Ai is not AiState.Enabled)
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
|
|
@ -14,10 +14,10 @@ public partial class EnemyPossessionMovement : ActorFreeMovement
|
||||||
_actorAi = parent.GetNode<ActorAi>("ActorAi");
|
_actorAi = parent.GetNode<ActorAi>("ActorAi");
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Move(double delta)
|
public override void PhysicsUpdate(double delta)
|
||||||
{
|
{
|
||||||
if (_actorAi.Ai is AiState.Controlled)
|
if (_actorAi.Ai is AiState.Controlled)
|
||||||
base.Move(delta);
|
base.PhysicsUpdate(delta);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -3,7 +3,7 @@ using System.Linq;
|
||||||
using Cirno.Scripts.Components.Actors;
|
using Cirno.Scripts.Components.Actors;
|
||||||
using Godot;
|
using Godot;
|
||||||
|
|
||||||
public abstract partial class MovementHandler : Node2D
|
public abstract partial class MovementHandler : ActorModule
|
||||||
{
|
{
|
||||||
protected Actor _parent;
|
protected Actor _parent;
|
||||||
|
|
||||||
|
|
@ -13,7 +13,7 @@ public abstract partial class MovementHandler : Node2D
|
||||||
|
|
||||||
protected readonly List<InputProvider> _inputProviders = new();
|
protected readonly List<InputProvider> _inputProviders = new();
|
||||||
|
|
||||||
public virtual void Init(Actor parent)
|
public override void Init(Actor parent)
|
||||||
{
|
{
|
||||||
_parent = parent;
|
_parent = parent;
|
||||||
|
|
||||||
|
|
@ -41,6 +41,4 @@ public abstract partial class MovementHandler : Node2D
|
||||||
return _inputProviders.Aggregate(false, (current, inputProvider) => current && inputProvider.GetStrafing());
|
return _inputProviders.Aggregate(false, (current, inputProvider) => current && inputProvider.GetStrafing());
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract void Move(double delta);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue