Tuesday, 19 August 2025 01:37:27

This commit is contained in:
2025-08-19 01:37:30 -04:00
parent a47a6331ee
commit dfbad40739
30 changed files with 333 additions and 80 deletions

View File

@@ -12,6 +12,7 @@ public partial class Worker : RigidBody2D
public Vector2 _force = Vector2.Zero;
public Node _collisionTarget;
public Sprite2D _image;
public ProgressBar _healthBar;
public Manager _manager;
public List<Effect> _effects = new();
public override void _Ready()
@@ -26,6 +27,12 @@ public partial class Worker : RigidBody2D
_healthMax = _health;
_image = GetNode<Sprite2D>("Sprite2D");
_effects.Add(new BasicAttack(this));
_healthBar = GetNode<ProgressBar>("HealthBar");
_healthBar.MaxValue = _healthMax;
_healthBar.Value = _health;
}
public override void _Process(double DELTA_)
@@ -104,11 +111,13 @@ public partial class Worker : RigidBody2D
// process on knockout
}
_health += CHANGE;
_healthBar.Value = _health;
if (_health <= 0)
{
Sleeping = true;
_dead = true;
_health = 0;
TriggerSpecificEffects(Effect.Trigger.Death);
TriggerSpecificEffects(Effect.Trigger.Death, _manager);
}
}
@@ -140,7 +149,7 @@ public partial class Worker : RigidBody2D
ApplyCentralForce(_force);
_force = Vector2.Zero;
_primed = false;
TriggerSpecificEffects(Effect.Trigger.Launch);
TriggerSpecificEffects(Effect.Trigger.Launch, _manager);
}
public void Stop()
@@ -149,16 +158,18 @@ public partial class Worker : RigidBody2D
Sleeping = true;
_moving = false;
_rotationalForce = 0f;
TriggerSpecificEffects(Effect.Trigger.Stop);
TriggerSpecificEffects(Effect.Trigger.Stop, _manager);
}
public void TriggerSpecificEffects(Effect.Trigger TRIGGER)
public void TriggerSpecificEffects(Effect.Trigger TRIGGER, Node TARGET = null)
{
List<Effect> triggeredEffects = _effects.Where(e => e._trigger.IndexOf(TRIGGER) > -1).ToList();
for (int i = 0; i < triggeredEffects.Count; i++)
{
triggeredEffects[i].TriggerEffect();
triggeredEffects[i].TriggerEffect(TARGET);
}
List<Effect> expiredEffects = _effects.Where(e => e._trigger.IndexOf(TRIGGER) > -1).ToList();
_effects.Except(expiredEffects);
}
// PRIVATE METHODS
@@ -177,7 +188,7 @@ public partial class Worker : RigidBody2D
if (NODE is Worker)
{
_collisionTarget = NODE;
TriggerSpecificEffects(Effect.Trigger.Stop);
TriggerSpecificEffects(Effect.Trigger.Collision, NODE);
_rotationalForce *= 0.8f;
Vector2 rotatedForce = LinearVelocity.Rotated(((Worker)NODE)._rotationalForce);