34 lines
1.1 KiB
C#
34 lines
1.1 KiB
C#
using Godot;
|
|
using Newlon.Components.Level;
|
|
using Newlon.Components.Zombies;
|
|
|
|
public partial class FallParticle : RigidBody2D
|
|
{
|
|
[Export] private RuntimeZombieData data;
|
|
[Export] private Timer deathTimer;
|
|
[Export] private Vector2 falloffImpulseMin = Vector2.Zero;
|
|
[Export] private Vector2 falloffImpulseMax = Vector2.Zero;
|
|
[Export] private Vector2 falloffOffsetMin = Vector2.Zero;
|
|
[Export] private Vector2 falloffOffsetMax = Vector2.Zero;
|
|
[Export] private float Impulse;
|
|
public void FallOff()
|
|
{
|
|
SetDeferred("freeze", false);
|
|
foreach (var floor in FallFloor.GetEverythingElse(FallFloor.GetNearest(data.GlobalPosition)))
|
|
{
|
|
AddCollisionExceptionWith(floor);
|
|
}
|
|
Callable.From(() =>
|
|
{
|
|
Reparent(PoolContainer.Instance.Zombies);
|
|
ApplyImpulse(RandomVector(falloffImpulseMin, falloffImpulseMax).Normalized() * Impulse, RandomVector(falloffOffsetMin, falloffOffsetMax));
|
|
}).CallDeferred();
|
|
|
|
deathTimer.Start();
|
|
}
|
|
|
|
private Vector2 RandomVector(Vector2 min, Vector2 max)
|
|
{
|
|
return new Vector2((float)GD.RandRange(min.X,max.X),(float)GD.RandRange(min.Y,max.Y));
|
|
}
|
|
}
|