// Start is called before the first frame update
    void Start()
    {
        //InitializeDecals();

        collisionEvents = new List <ParticleCollisionEvent>();
        decalsOnCeiling = new List <EasyDecal>();

        particles    = new ParticleSystem.Particle[maxDecals];
        particleData = new BloodParticleData[maxDecals];
        for (int i = 0; i < maxDecals; i++)
        {
            particleData[i] = new BloodParticleData();
        }
    }
    private BloodParticleData GetBloodParticleData(Hazard hazard, Vector2 ninjaPosition)
    {
        var star = hazard as NinjaStarController;

        if (star != null)
        {
            var data = new BloodParticleData(Quaternion.Euler(0, 0, Random.Range(-40.0f, 40.0f)) * (star.Rigidbody2D.velocity * Random.Range(0.1f, 0.75f)), ninjaPosition);
            return(data);
        }
        var saw = hazard as RotatingHazard;

        if (saw != null)
        {
            float   speed    = saw.RotationSpeed;
            float   angle    = Random.Range(0.0f, 359.0f);
            Vector2 velocity = Quaternion.Euler(0, 0, angle) * new Vector2(speed * Random.Range(0.125f, 1.25f), 0);
            Vector2 position = Quaternion.Euler(0, 0, angle) * new Vector2(saw.Radius * 1.1f, 0) + saw.transform.position;
            return(new BloodParticleData(velocity, position));
        }
        return(new BloodParticleData(Random.insideUnitCircle * 10, ninjaPosition));
    }