public static BaseComponent LoadFromDefinition(ContentManager content, string definitionPath, BaseEntity parent) { ParticleEmitterComponentDefinition compDef = content.Load <ParticleEmitterComponentDefinition>(definitionPath); ParticleEmitterComponent newComponent = new ParticleEmitterComponent(parent, compDef); return(newComponent); }
/// <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); }
/// <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); }