64 lines
1.7 KiB
C#
64 lines
1.7 KiB
C#
using Godot;
|
|
|
|
public partial class GodCircuit : Node3D
|
|
{
|
|
[Export]
|
|
private AnimationPlayer _animationPlayer;
|
|
[Export]
|
|
private Timer _attackTimer;
|
|
|
|
[Signal]
|
|
public delegate void OnEnemyBossHitEventHandler(long damage);
|
|
|
|
[Signal]
|
|
public delegate void OnGameEndingEventHandler();
|
|
|
|
[Signal]
|
|
public delegate void DestroyRemainingOrbsEventHandler();
|
|
|
|
private void OnHit(Node3D node)
|
|
{
|
|
if (node is Character character && character.HasMethod(Character.MethodName.OnHit))
|
|
{
|
|
GD.Print("Player hit: " + character.Name);
|
|
character.Call(Character.MethodName.OnHit, node);
|
|
}
|
|
else
|
|
{
|
|
var hpComponent = GetNode<HealthPoints>("HP Component");
|
|
if (hpComponent.CurrentHP > 0)
|
|
{
|
|
GD.Print("Hit");
|
|
_animationPlayer.Play("OnHit");
|
|
hpComponent.TakeDamage(800000);
|
|
EmitSignal(SignalName.OnEnemyBossHit, hpComponent.CurrentHP);
|
|
|
|
if (hpComponent.CurrentHP <= 0)
|
|
{
|
|
_attackTimer.Stop();
|
|
EmitSignal(SignalName.DestroyRemainingOrbs);
|
|
_animationPlayer.Play("OnDeath");
|
|
_animationPlayer.AnimationFinished += OnGameFinished;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private void OnBossOrbDestroyed()
|
|
{
|
|
var hpComponent = GetNode<HealthPoints>("HP Component");
|
|
_animationPlayer.Play("OnHit");
|
|
hpComponent.TakeDamage(30000000);
|
|
EmitSignal(SignalName.OnEnemyBossHit, hpComponent.CurrentHP);
|
|
|
|
if (hpComponent.CurrentHP <= 0)
|
|
hpComponent.CurrentHP = 1;
|
|
}
|
|
|
|
private void OnGameFinished(StringName animationName)
|
|
{
|
|
QueueFree();
|
|
EmitSignal(SignalName.OnGameEnding);
|
|
}
|
|
}
|