Add hero runtime
This commit is contained in:
51
godot/scripts/hero/HeroActor.cs
Normal file
51
godot/scripts/hero/HeroActor.cs
Normal file
@@ -0,0 +1,51 @@
|
||||
#nullable enable
|
||||
|
||||
using Godot;
|
||||
using SideScrollerGame.Hero.Rules;
|
||||
|
||||
namespace SideScrollerGame.Hero;
|
||||
|
||||
public partial class HeroActor : Node2D
|
||||
{
|
||||
public override void _PhysicsProcess(double delta)
|
||||
{
|
||||
if (m_Runtime is not null && m_Runtime.State.LifeState != HeroLifeState.Alive)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Vector2 direction = Input.GetVector("move_left", "move_right", "move_up", "move_down");
|
||||
GlobalPosition = ClampToBounds(GlobalPosition + (direction * MoveSpeed * (float)delta));
|
||||
}
|
||||
|
||||
public void SetRuntime(HeroRuntimeService runtime)
|
||||
{
|
||||
m_Runtime = runtime;
|
||||
}
|
||||
|
||||
public void SetPlayBounds(Rect2 bounds)
|
||||
{
|
||||
PlayBounds = bounds;
|
||||
GlobalPosition = ClampToBounds(GlobalPosition);
|
||||
}
|
||||
|
||||
[Export]
|
||||
public float MoveSpeed { get; set; } = 320.0f;
|
||||
|
||||
[Export]
|
||||
public Rect2 PlayBounds { get; set; } = new(new Vector2(260.0f, 96.0f), new Vector2(640.0f, 420.0f));
|
||||
|
||||
private Vector2 ClampToBounds(Vector2 position)
|
||||
{
|
||||
if (PlayBounds.Size == Vector2.Zero)
|
||||
{
|
||||
return position;
|
||||
}
|
||||
|
||||
float x = Mathf.Clamp(position.X, PlayBounds.Position.X, PlayBounds.Position.X + PlayBounds.Size.X);
|
||||
float y = Mathf.Clamp(position.Y, PlayBounds.Position.Y, PlayBounds.Position.Y + PlayBounds.Size.Y);
|
||||
return new Vector2(x, y);
|
||||
}
|
||||
|
||||
private HeroRuntimeService? m_Runtime;
|
||||
}
|
||||
Reference in New Issue
Block a user