Esempio n. 1
0
        private void UpdateQuads()
        {
            var rotation = Quaternion.CreateFromAxisAngle(Vector3.UnitZ, CurRotationAngle);
            var right    = Vector3.Transform(Vector3.UnitX * data.width, rotation);
            var up       = Vector3.Transform(Vector3.UnitY * data.width, rotation);
            var center   = data.circlesAround
                ? Vector3.Transform(Vector3.UnitY * data.yOffset, rotation)
                : Vector3.Zero;

            var newTexCoords1 = EffectPartUtility.TexShift(texCoords, 2 * curTexShift, data.texShift);
            var newTexCoords2 = EffectPartUtility.TexShift(texCoords, 2 * curTexShift, -data.texShift);

            var vertices = quadMeshBuffer[quadRange];

            vertices.UpdateQuad(center, right, up, curColor, newTexCoords1);
            if (!data.disableSecondPlane)
            {
                vertices[4..].UpdateQuad(center, -right, up, curColor, newTexCoords2);
Esempio n. 2
0
        public MovingPlanesRenderer(ITagContainer diContainer, DeviceBufferRange locationRange, MovingPlanes data)
        {
            this.data = data;
            var textureLoader = diContainer.GetTag <IAssetLoader <Texture> >();
            var camera        = diContainer.GetTag <Camera>();

            quadMeshBuffer = diContainer.GetTag <IQuadMeshBuffer <EffectVertex> >();
            material       = EffectMaterial.CreateFor(data.renderMode, diContainer);
            material.LinkTransformsTo(camera);
            material.World.BufferRange        = locationRange;
            material.Uniforms.Value           = EffectMaterialUniforms.Default;
            material.Uniforms.Ref.isBillboard = !data.circlesAround && !data.useDirection;
            material.MainTexture.Texture      = textureLoader.LoadTexture(
                IEffectPartRenderer.TexturePath, data.texName);
            material.Sampler.Value = IEffectPartRenderer.SamplerDescription;
            AddDisposable(material);

            quadRange = quadMeshBuffer.Reserve(data.disableSecondPlane ? 1 : 2);
            texCoords = EffectPartUtility.GetTileUV(data.tileW, data.tileH, data.tileId);

            Reset();
        }
Esempio n. 3
0
        public RandomPlanesRenderer(ITagContainer diContainer, DeviceBufferRange locationRange, RandomPlanes data)
        {
            this.data = data;
            var textureLoader = diContainer.GetTag <IAssetLoader <Texture> >();
            var camera        = diContainer.GetTag <Camera>();

            quadMeshBuffer = diContainer.GetTag <IQuadMeshBuffer <EffectVertex> >();
            material       = EffectMaterial.CreateFor(data.renderMode, diContainer);
            material.LinkTransformsTo(camera);
            material.World.BufferRange                 = locationRange;
            material.Uniforms.Value                    = EffectMaterialUniforms.Default;
            material.Uniforms.Ref.isBillboard          = !data.circlesAround;
            AddDisposable(material.MainTexture.Texture = textureLoader.LoadTexture(
                              IEffectPartRenderer.TexturePath, data.texName));
            material.Sampler.Value = SamplerAddressMode.Clamp.AsDescription(SamplerFilter.MinLinear_MagLinear_MipLinear);
            AddDisposable(material);

            planes        = new RandomPlane[(int)(data.planeLife * data.spawnRate / 1000)];
            quadRange     = quadMeshBuffer.Reserve(planes.Length);
            tileTexCoords = EffectPartUtility.GetTileUV(data.tileW, data.tileH, data.tileId, data.tileCount);

            Reset();
        }