Exemplo n.º 1
0
        public static BaseComponent LoadFromDefinition(ContentManager content, string definitionPath, BaseEntity parent)
        {
            ParticleEmitterComponentDefinition compDef = content.Load <ParticleEmitterComponentDefinition>(definitionPath);

            ParticleEmitterComponent newComponent = new ParticleEmitterComponent(parent, compDef);

            return(newComponent);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Constructor.
        /// </summary>
        public ParticleEmitterComponent(BaseEntity parent, ParticleEmitterComponentDefinition compDef)
            : base(parent)
        {
            ActivateComponent();

            this.settings = compDef;

            if (settings.MaterialPath.Length > 0)
            {
                LoadMaterial(settings.MaterialPath);
            }
            else
            {
                throw new Exception("A ParticleEmitterComponentDefinition must contain either a valid material file path");
            }

            InitializeParticleSettings(this.settings);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Initializes a particles settings
        /// </summary>
        /// <param name="settings">settings to initialize particle to</param>
        public void InitializeParticleSettings(ParticleEmitterComponentDefinition settings)
        {
            FinalizeParticleSettings();

            if (vertexDeclaration == null)
            {
                vertexDeclaration = ParticleVertex.VertexDeclaration;
            }

            this.particles = new ParticleVertex[this.settings.MaxParticles * 4];

            for (int i = 0; i < this.settings.MaxParticles; i++)
            {
                this.particles[i * 4 + 0].Corner = new Short2(-1, -1);
                this.particles[i * 4 + 1].Corner = new Short2(1, -1);
                this.particles[i * 4 + 2].Corner = new Short2(1, 1);
                this.particles[i * 4 + 3].Corner = new Short2(-1, 1);
            }

            this.vertexBuffer = new DynamicVertexBuffer(this.parentEntity.Game.GraphicsDevice, ParticleVertex.VertexDeclaration,
                                                        settings.MaxParticles * 4, BufferUsage.WriteOnly);

            // Initialize the vertex buffer contents. This is necessary in order to correctly restore any existing particles after a lost device.
            this.vertexBuffer.SetData(this.particles);

            // Create and populate the index buffer.
            ushort[] indices = new ushort[this.settings.MaxParticles * 6];

            for (int i = 0; i < this.settings.MaxParticles; i++)
            {
                indices[i * 6 + 0] = (ushort)(i * 4 + 0);
                indices[i * 6 + 1] = (ushort)(i * 4 + 1);
                indices[i * 6 + 2] = (ushort)(i * 4 + 2);

                indices[i * 6 + 3] = (ushort)(i * 4 + 0);
                indices[i * 6 + 4] = (ushort)(i * 4 + 2);
                indices[i * 6 + 5] = (ushort)(i * 4 + 3);
            }

            this.indexBuffer = new IndexBuffer(this.parentEntity.Game.GraphicsDevice, typeof(short),
                                               indices.Length, BufferUsage.WriteOnly);

            this.indexBuffer.SetData(indices);
        }