Elevator top body

This commit is contained in:
Marco 2025-03-11 15:03:44 +01:00
commit c8cd4ffb1d
10 changed files with 84 additions and 33 deletions

View file

@ -12,6 +12,10 @@ public partial class Bottom : BaseState<ElevatorState, ElevatorProxy>
MainObject.SetPosition(MainObject.Bottom);
MainObject.Activated += ElevatorActivated;
// Enable top body
MainObject.TopBody.Disabled = false;
}
private void ElevatorActivated(ActivationType type)

View file

@ -15,4 +15,5 @@ public partial class Descending : ElevatorMovementState
protected override Vector2 StartingPosition => MainObject.Top;
protected override Vector2 EndingPosition => MainObject.Bottom;
protected override ElevatorState EndState => ElevatorState.Bottom;
}

View file

@ -10,17 +10,16 @@ namespace Cirno.Scripts.Components.FSM.Elevator;
public abstract partial class ElevatorMovementState : BaseState<ElevatorState, ElevatorProxy>
{
protected GTween Tween;
//protected Node2D OldPlayerParent;
protected abstract Vector2 StartingPosition { get; }
protected abstract Vector2 EndingPosition { get; }
protected abstract ElevatorState EndState { get; }
protected CharacterBody2D PlayerBody => MainObject.CachedPlayer?.StateMachine.MainObject;
public override void EnterState()
{
Tween?.Kill();
@ -31,9 +30,15 @@ public abstract partial class ElevatorMovementState : BaseState<ElevatorState, E
public override void ExitState()
{
Tween?.Kill();
RestorePlayerParent();
RestorePlayerParent();
}
// public override void PhysicsProcessState(double delta)
// {
// base.PhysicsProcessState(delta);
// MainObject.TopBody.SetPosition(MainObject.Top);
// }
private void RestorePlayerParent()
{
if (PlayerBody is null) return;
@ -66,7 +71,7 @@ public abstract partial class ElevatorMovementState : BaseState<ElevatorState, E
.Build();
await Tween.PlayAsync(CancellationToken.None);
StateMachine.SetState(EndState);
}
}

View file

@ -7,27 +7,27 @@ namespace Cirno.Scripts.Components.FSM.Elevator;
public partial class ElevatorProxy : Area2D, IActivable
{
[Export]
public ElevatorState StartingState { get; protected set; } = ElevatorState.Bottom;
[Export]
public float MovementTime { get; protected set; } = 1.0f;
[Export]
public Path2D ElevatorPath { get; protected set; }
[Signal] public delegate void ActivatedEventHandler(ActivationType type);
[Export] public ElevatorState StartingState { get; protected set; } = ElevatorState.Bottom;
[Export] public float MovementTime { get; protected set; } = 1.0f;
[Export] public Path2D ElevatorPath { get; protected set; }
[Export] public CollisionShape2D TopBody { get; protected set; }
[Signal]
public delegate void ActivatedEventHandler(ActivationType type);
public Vector2 Top => ElevatorPath.Curve.GetPointPosition(0);
public Vector2 Bottom => ElevatorPath.Curve.GetPointPosition(1);
public IStateMachine<ElevatorState,ElevatorProxy> StateMachine { get; set; }
public IStateMachine<ElevatorState, ElevatorProxy> StateMachine { get; set; }
// public void SetPosition(Vector2 position)
// {
//
// }
public InteractionController CachedPlayer { get; private set; }
public bool Activate(ActivationType activationType = ActivationType.Toggle)
@ -43,7 +43,7 @@ public partial class ElevatorProxy : Area2D, IActivable
CachedPlayer = player;
}
}
private void _on_area_exited(Area2D area)
{
if (area is InteractionController player)

View file

@ -9,6 +9,8 @@ public partial class Init : BaseState<ElevatorState, ElevatorProxy>
public override void EnterState()
{
MainObject.StateMachine = StateMachine;
MainObject.TopBody.Position = MainObject.Top;
StateMachine.SetState(MainObject.StartingState);
}

View file

@ -11,6 +11,9 @@ public partial class Top : BaseState<ElevatorState, ElevatorProxy>
MainObject.SetPosition(MainObject.ElevatorPath.Curve.GetPointPosition(0));
MainObject.Activated += ElevatorActivated;
// Disable top body
MainObject.TopBody.Disabled = true;
}
private void ElevatorActivated(ActivationType type)
@ -42,5 +45,7 @@ public partial class Top : BaseState<ElevatorState, ElevatorProxy>
public override void ExitState()
{
MainObject.Activated -= ElevatorActivated;
// Enable top body
MainObject.TopBody.Disabled = false;
}
}