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)); } }