SupaLidlGame/Characters/Doc.cs

101 lines
2.1 KiB
C#
Raw Normal View History

2023-07-13 23:46:58 -07:00
using Godot;
2023-07-21 02:54:13 -07:00
using GodotUtilities;
2023-07-13 23:46:58 -07:00
namespace SupaLidlGame.Characters;
2023-07-22 20:23:48 -07:00
public partial class Doc : Boss
2023-07-13 23:46:58 -07:00
{
2023-07-22 20:23:48 -07:00
public AnimationPlayer TelegraphAnimation { get; set; }
2023-07-17 09:30:49 -07:00
2023-07-22 20:23:48 -07:00
public override float Health
{
get => base.Health;
set
{
if (IsActive)
{
base.Health = value;
}
else
{
// play opening animation
// then become active when it finishes
base.Health = value;
}
}
}
public override int Intensity
2023-07-18 00:57:28 -07:00
{
get
{
switch (Health)
{
case < 250:
return 3;
case < 500:
return 2;
default:
return 1;
}
}
}
2023-07-22 20:23:48 -07:00
public Doc()
{
ShouldMove = false;
}
2023-07-17 09:30:49 -07:00
public override void _Ready()
{
2023-07-22 20:23:48 -07:00
TelegraphAnimation = GetNode<AnimationPlayer>("Animations/Telegraph");
2023-07-17 09:30:49 -07:00
base._Ready();
2023-07-23 11:05:01 -07:00
// when we are hurt, start the boss fight
Hurt += (Events.HealthChangedArgs args) =>
{
if (!IsActive)
{
IsActive = true;
Inventory.SelectedItem = Inventory.Items[0];
}
};
2023-07-17 09:30:49 -07:00
}
2023-07-13 23:46:58 -07:00
public override void _Process(double delta)
{
2023-07-22 20:23:48 -07:00
if (IsActive)
{
BossStateMachine.Process(delta);
}
2023-07-13 23:46:58 -07:00
base._Process(delta);
}
2023-07-21 02:54:13 -07:00
2023-07-22 20:23:48 -07:00
protected override float ReceiveDamage(
float damage,
Character inflictor,
float knockback,
Vector2 knockbackDir = default)
{
if (IsActive)
{
return base.ReceiveDamage(
damage, inflictor, knockback, knockbackDir);
}
return 1;
}
2023-07-21 02:54:13 -07:00
public override void OnReceivedDamage(
float damage,
Character inflictor,
float knockback,
Vector2 knockbackDir = default)
{
GetNode<GpuParticles2D>("Effects/HurtParticles")
.SetDirection(knockbackDir);
base.OnReceivedDamage(damage, inflictor, knockback, knockbackDir);
}
2023-07-13 23:46:58 -07:00
}