Exemplo n.º 1
0
    protected void SetPoolSize(int newSize)
    {
        if (newSize <= _poolSize)
        {
            return;
        }

        ParticleUnit unit;

        for (int i = _poolSize; i < newSize; i++)
        {
            unit = new ParticleUnit();
            _freeObjects.Enqueue(unit);
        }

        _poolSize = newSize;
    }
Exemplo n.º 2
0
    ParticleUnit Generate(float generateTime)
    {
        if (_freeObjects.Count <= 0)
        {
            // Resize pool size
            int newSize = (int)(_poolSize * scaleFactor);
            if (newSize <= _poolSize)
            {
                newSize = _poolSize + 1;
            }
            SetPoolSize(newSize);
        }

        ParticleUnit unit = _freeObjects.Dequeue();

        unit.CreateParticleUnit(this, generateTime);
        _objects.Add(unit);

        return(unit);
    }
Exemplo n.º 3
0
    void SimpleFill(BetterList <Vector3> verts, BetterList <Vector2> uvs, BetterList <Color32> cols, Rect outer, Rect inner, ParticleUnit unit)
    {
        // Set scale
        float spriteWidth  = unit.spriteData.width * unit.scale.x * unit.localScale.x;
        float spriteHeight = unit.spriteData.height * unit.scale.y * unit.localScale.y;

        float x0 = -(spriteWidth * 0.5f);
        float y0 = -(spriteHeight * 0.5f);
        float x1 = x0 + spriteWidth;
        float y1 = y0 + spriteHeight;

        Vector2 v0 = new Vector2(x0, y0);
        Vector2 v1 = new Vector2(x0, y1);
        Vector2 v2 = new Vector2(x1, y1);
        Vector2 v3 = new Vector2(x1, y0);

        // Set rotation
        RotateVertex(ref v0, ref v1, ref v2, ref v3, unit.localRotation);

        // Set position
        Vector2 pos = (Vector2)transform.InverseTransformPoint(unit.distanceFromParticle2D + transform.position) + unit.localPosition;

        v0 += pos;
        v1 += pos;
        v2 += pos;
        v3 += pos;

        // Add vertices
        verts.Add(v0);
        verts.Add(v1);
        verts.Add(v2);
        verts.Add(v3);

        // Add texcoords
        Vector4 u = new Vector4(outer.xMin, outer.yMin, outer.xMax, outer.yMax);

        uvs.Add(new Vector2(u.x, u.y));
        uvs.Add(new Vector2(u.x, u.w));
        uvs.Add(new Vector2(u.z, u.w));
        uvs.Add(new Vector2(u.z, u.y));

        // Add colors
        Color32 c = unit.color * mColor;

        cols.Add(c);
        cols.Add(c);
        cols.Add(c);
        cols.Add(c);
    }
Exemplo n.º 4
0
 public void AddRemovableObject(ParticleUnit unit)
 {
     _removableObjects.Add(unit);
 }
Exemplo n.º 5
0
 void Remove(ParticleUnit obj)
 {
     _freeObjects.Enqueue(obj);
     _objects.Remove(obj);
 }