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; }
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); }
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); }
public void AddRemovableObject(ParticleUnit unit) { _removableObjects.Add(unit); }
void Remove(ParticleUnit obj) { _freeObjects.Enqueue(obj); _objects.Remove(obj); }