Boss Fight computer terminal implementation

This commit is contained in:
2026-04-29 00:51:45 -07:00
parent 507b7e6a83
commit e57085e5f2
10 changed files with 10561 additions and 1435 deletions
@@ -16,14 +16,39 @@ public partial class BossRoomB : SpecialFloor, IBossRoom, IDungeonFloor
[Node] public DemonWall DemonWall { get; set; } = default!;
[Node] public ComputerTerminal ComputerTerminalA { get; set; } = default!;
[Node] public ComputerTerminal ComputerTerminalB { get; set; } = default!;
[Node] private Area3D ActivateTrap { get; set; } = default!;
[Node] private Area3D _exit { get; set; } = default!;
[Node] private CollisionShape3D BridgeCollision { get; set; } = default!;
[Node] private AnimationPlayer BridgeAnimationPlayer { get; set; } = default!;
public void OnReady()
{
ActivateTrap.BodyEntered += ActivateTrap_AreaEntered;
_exit.AreaEntered += Exit_AreaEntered;
ActivateTrap.BodyEntered += ActivateTrap_AreaEntered;
_exit.AreaEntered += Exit_AreaEntered;
BridgeAnimationPlayer.AnimationFinished += BridgeAnimationPlayer_AnimationFinished;
ComputerTerminalA.HealthComponent.HealthReachedZero += TerminalDefeated;
ComputerTerminalB.HealthComponent.HealthReachedZero += TerminalDefeated;
}
private void TerminalDefeated()
{
if (ComputerTerminalA.HealthComponent.CurrentHP.Value <= 0 && ComputerTerminalB.HealthComponent.CurrentHP.Value <= 0)
OpenBridgeFull();
else
OpenBridgeHalf();
}
private void BridgeAnimationPlayer_AnimationFinished(StringName animName)
{
if (animName == "Bridge Extend Full")
BridgeCollision.SetDeferred(CollisionShape3D.PropertyName.Disabled, true);
}
private void ActivateTrap_AreaEntered(Node3D area) => StartBossFight();
@@ -35,21 +60,31 @@ public partial class BossRoomB : SpecialFloor, IBossRoom, IDungeonFloor
public void StartBossFight()
{
DemonWall.Activate();
DemonWall.Activate();
}
public void ExitReached()
=> Game.FloorExitReached();
=> Game.FloorExitReached();
public void OpenBridgeHalf()
{
BridgeAnimationPlayer.Play("Bridge Extend Half");
}
public void OpenBridgeFull()
{
BridgeAnimationPlayer.Play("Bridge Extend Full");
}
private void Exit_AreaEntered(Area3D area)
{
if (area.GetOwner() is IPlayer)
ExitReached();
if (area.GetOwner() is IPlayer)
ExitReached();
}
public void OnExitTree()
{
ActivateTrap.BodyEntered -= ActivateTrap_AreaEntered;
_exit.AreaEntered -= Exit_AreaEntered;
ActivateTrap.BodyEntered -= ActivateTrap_AreaEntered;
_exit.AreaEntered -= Exit_AreaEntered;
}
}
File diff suppressed because one or more lines are too long