37 lines
1.2 KiB
C#
37 lines
1.2 KiB
C#
using Godot;
|
|
using Newlon.Components.Level;
|
|
using Newlon.Components.Zombies;
|
|
|
|
namespace Newlon.Components;
|
|
|
|
[GlobalClass]
|
|
public partial class FallParticle : RigidBody2D
|
|
{
|
|
[Export] private RuntimeZombieData data;
|
|
[Export] private float minAngle;
|
|
[Export] private float maxAngle;
|
|
[Export] private float minTorque;
|
|
[Export] private float maxTorque;
|
|
[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.Particles);
|
|
float rng_angle = Mathf.DegToRad((float)GD.RandRange(minAngle, maxAngle));
|
|
float rng_torque = Mathf.DegToRad((float)GD.RandRange(minTorque, maxTorque));
|
|
if (Impulse != 0)
|
|
ApplyImpulse(new Vector2(Mathf.Sin(rng_angle) * Impulse, Mathf.Cos(rng_angle) * Impulse));
|
|
ApplyTorqueImpulse(rng_torque);
|
|
}).CallDeferred();
|
|
var tween = CreateTween();
|
|
tween.TweenInterval(4.0);
|
|
tween.TweenProperty(this, "modulate", new Color(Modulate.R, Modulate.G, Modulate.B, 0f), 1.0);
|
|
tween.TweenCallback(Callable.From(QueueFree));
|
|
}
|
|
}
|