Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
    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;
        }
    }
Ejemplo n.º 3
0
    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;
            }
        }
    }
Ejemplo n.º 4
0
            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);
            }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
 public void Draw(Block block, Material cubeMaterial)
 {
     DrawQuads(block);
     QuadUtils.RenderQuads(gameObject, cubeMaterial);
 }
Ejemplo n.º 7
0
 public void DrawCombined(Block block, Material cubeMaterial)
 {
     DrawQuads(block);
     QuadUtils.CombineQuads(gameObject, cubeMaterial);
 }
Ejemplo n.º 8
0
 public void Draw(Chunk chunk, int chunkSize, GameObject gameObject, Material cubeMaterial)
 {
     DrawChunk(chunk, chunkSize, gameObject);
     QuadUtils.RenderQuads(gameObject, cubeMaterial);
 }
Ejemplo n.º 9
0
 public void DrawCombined(Chunk chunk, int chunkSize, GameObject gameObject, Material cubeMaterial)
 {
     DrawChunk(chunk, chunkSize, gameObject);
     QuadUtils.CombineQuads(gameObject, cubeMaterial);
 }