mirror of
https://gitlab.com/MaddoScientisto/cirnogodot.git
synced 2026-06-08 00:35:55 +00:00
Elevator top body
This commit is contained in:
parent
2ec5671bc2
commit
c8cd4ffb1d
10 changed files with 84 additions and 33 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue