using System;
using OpenTK;
using SM.Base.Drawing.Particles;
using SM.Base.Utility;
using SM2D.Types;
namespace SM2D.Drawing
{
///
/// Creates particles.
///
public class DrawParticles : ParticleDrawingBasis
{
///
public override Func MovementCalculation { get; set; } = ParticleMovement.Default2D;
///
/// The direction the particles should travel.
///
public Vector2? Direction;
///
/// The radius the direction is randomized
///
public float DirectionRadius = 25;
///
public DrawParticles(TimeSpan duration) : base(duration)
{
}
///
protected override ParticleStruct CreateObject(int index)
{
Vector2 dir;
if (Direction.HasValue)
{
Vector2 direction = Direction.Value;
dir = (new Vector4(direction.X, direction.Y, 1, 1) *
Matrix4.CreateRotationZ(MathHelper.DegreesToRadians(Randomize.GetFloat(-DirectionRadius / 2, DirectionRadius / 2)))).Xy;
}
else dir = new Vector2(Randomize.GetFloat(-1, 1), Randomize.GetFloat(-1, 1));
return new ParticleStruct()
{
Matrix = Matrix4.CreateScale(1),
Direction = dir,
Speed = Randomize.GetFloat(MaxSpeed)
};
}
///
protected override Matrix4 CreateMatrix(ParticleStruct Struct, Vector2 direction)
{
return Struct.Matrix * Matrix4.CreateTranslation(direction.X, direction.Y, 0);
}
}
}