Add PlayerGraphicsComponent to manage player sprite visibility based on movement abilities
This commit is contained in:
@@ -19,6 +19,7 @@ public partial class PlayerController : CharacterBody2D
|
||||
[Export] public PackedScene WallJumpScene { get; set; }
|
||||
|
||||
[Signal] public delegate void JumpInitiatedEventHandler();
|
||||
[Signal] public delegate void MovementAbilitiesChangedEventHandler();
|
||||
|
||||
public Vector2 LastDirection { get; private set; } = Vector2.Right;
|
||||
public Vector2 PreviousVelocity { get; private set; } = Vector2.Zero;
|
||||
@@ -26,6 +27,8 @@ public partial class PlayerController : CharacterBody2D
|
||||
private List<MovementAbility> _abilities = [];
|
||||
private PlayerInputHandler _inputHandler;
|
||||
|
||||
public IReadOnlyList<MovementAbility> GetActiveAbilities() => _abilities;
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
_inputHandler = GetNode<PlayerInputHandler>("PlayerInputHandler");
|
||||
@@ -39,6 +42,7 @@ public partial class PlayerController : CharacterBody2D
|
||||
}
|
||||
|
||||
_ = ConnectJumpAndGravityAbilities();
|
||||
EmitSignalMovementAbilitiesChanged();
|
||||
}
|
||||
|
||||
public override void _PhysicsProcess(double delta)
|
||||
@@ -100,6 +104,7 @@ public partial class PlayerController : CharacterBody2D
|
||||
if (OneWayPlatformScene != null) AddAbility(OneWayPlatformScene.Instantiate<MovementAbility>());
|
||||
|
||||
_ = ConnectJumpAndGravityAbilities();
|
||||
EmitSignalMovementAbilitiesChanged();
|
||||
}
|
||||
|
||||
public void SetSpaceshipMovement()
|
||||
@@ -107,6 +112,7 @@ public partial class PlayerController : CharacterBody2D
|
||||
ClearMovementAbilities();
|
||||
|
||||
if (SpaceshipMovementScene != null) AddAbility(SpaceshipMovementScene.Instantiate<MovementAbility>());
|
||||
EmitSignalMovementAbilitiesChanged();
|
||||
}
|
||||
|
||||
private async Task ConnectJumpAndGravityAbilities()
|
||||
|
43
scripts/components/PlayerGraphicsComponent.cs
Normal file
43
scripts/components/PlayerGraphicsComponent.cs
Normal file
@@ -0,0 +1,43 @@
|
||||
using System.Linq;
|
||||
using Godot;
|
||||
|
||||
namespace Mr.BrickAdventures.scripts.components;
|
||||
|
||||
[GlobalClass]
|
||||
public partial class PlayerGraphicsComponent : Node
|
||||
{
|
||||
[Export] public Node2D DefaultSprite { get; set; }
|
||||
[Export] public Node2D SpaceshipSprite { get; set; }
|
||||
|
||||
private PlayerController _playerController;
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
_playerController = GetOwner<PlayerController>();
|
||||
if (_playerController == null)
|
||||
{
|
||||
GD.PrintErr("PlayerGraphicsComponent must be a child of a PlayerController.");
|
||||
SetProcess(false);
|
||||
return;
|
||||
}
|
||||
|
||||
_playerController.MovementAbilitiesChanged += OnMovementAbilitiesChanged;
|
||||
|
||||
UpdateGraphics();
|
||||
}
|
||||
|
||||
private void OnMovementAbilitiesChanged()
|
||||
{
|
||||
UpdateGraphics();
|
||||
}
|
||||
|
||||
private void UpdateGraphics()
|
||||
{
|
||||
var isSpaceship = _playerController.GetActiveAbilities().Any(ability => ability is SpaceshipMovementAbility);
|
||||
|
||||
if (SpaceshipSprite != null)
|
||||
{
|
||||
SpaceshipSprite.Visible = isSpaceship;
|
||||
}
|
||||
}
|
||||
}
|
1
scripts/components/PlayerGraphicsComponent.cs.uid
Normal file
1
scripts/components/PlayerGraphicsComponent.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://b2aanqykvdnev
|
Reference in New Issue
Block a user