protected override void OnPopulateMesh(VertexHelper vh) { #if UNITY_EDITOR if (!Application.isPlaying) { if (!Initialize()) { return; } } #endif vh.Clear(); if (!gameObject.activeInHierarchy) { return; } var count = _particleSystem.GetParticles(_particles); for (var i = 0; i < count; ++i) { var particle = _particles[i]; Vector2 position = (_particleSystem.main.simulationSpace == ParticleSystemSimulationSpace.Local ? particle.position : _transform.InverseTransformPoint(particle.position)); var rotation = -particle.rotation * Mathf.Deg2Rad; var particleColor = particle.GetCurrentColor(_particleSystem); //var size = particle.GetCurrentSize(_particleSystem); var size = particle.GetCurrentSize3D(_particleSystem) * ScaleAmount; // apply scale if (_particleSystem.main.scalingMode == ParticleSystemScalingMode.Shape) { position /= canvas.scaleFactor; } // apply texture sheet animation var particleUv = CalculateUv(_uv, particle); UIVertex[] quad; if (_renderer.renderMode == ParticleSystemRenderMode.Stretch) { quad = GenerateStretchedMesh(particleColor, size, position, rotation, particleUv, i); } else if (Math.Abs(rotation) < Tolerance) { quad = QuadUtils.GetBillboardNotRotatedQuad(position, size, particleColor, particleUv); } else { quad = QuadUtils.GetBillboardRotatedQuad(position, rotation, size, particleColor, particleUv); } vh.AddUIVertexQuad(quad); } }
private void DrawQuads(Block block) { if (block.IsSolid() == false) { return; } foreach (Vector3 direction in Block.directions) { GameObject quad = QuadUtils.CreateQuad(block, direction); quad.transform.parent = transform; } }
void DrawQuads(int x, int y, int z, Chunk chunk, GameObject gameObject) { if (chunk.blocks[x, y, z].IsSolid() == false) { return; } foreach (Vector3 direction in Block.directions) { if (!chunk.HasSolidNeighbor(x, y, z, direction)) { GameObject quad = QuadUtils.CreateQuad(chunk.blocks[x, y, z], direction); quad.transform.parent = gameObject.transform; } } }
public BufferGenerator <CornerVertex> .SoftwareBuffer GetCornerBuffer(IBatchContainer container, int repeatCount = 1) { var result = CornerBuffers[repeatCount]; if (result == null) { result = QuadUtils.CreateCornerBuffer(container, repeatCount); var exchanged = Interlocked.CompareExchange(ref CornerBuffers[repeatCount], result, null); if (exchanged != null) { // Dispose result? ; } } return(result); }
private UIVertex[] GenerateStretchedMesh(Color32 meshColor, Vector2 size, Vector2 position, float rotation, Vector4 uv, int particleId) { //print(size); var velocity = _particles[particleId].totalVelocity; var scalefactor = CalculateScale(velocity); var width = size.x; var height = CalculateHeight(size, velocity); var quad = QuadUtils.GenerateModel(width, height, scalefactor, meshColor, uv); var finalAngle = CalculateAngle(velocity, rotation); quad = QuadUtils.ApplyPositionAndRotationTransform(quad, position, finalAngle); return(quad); }
public void Draw(Block block, Material cubeMaterial) { DrawQuads(block); QuadUtils.RenderQuads(gameObject, cubeMaterial); }
public void DrawCombined(Block block, Material cubeMaterial) { DrawQuads(block); QuadUtils.CombineQuads(gameObject, cubeMaterial); }
public void Draw(Chunk chunk, int chunkSize, GameObject gameObject, Material cubeMaterial) { DrawChunk(chunk, chunkSize, gameObject); QuadUtils.RenderQuads(gameObject, cubeMaterial); }
public void DrawCombined(Chunk chunk, int chunkSize, GameObject gameObject, Material cubeMaterial) { DrawChunk(chunk, chunkSize, gameObject); QuadUtils.CombineQuads(gameObject, cubeMaterial); }