/* Sparx * Copyright August Zinsser 2007 * This program is distributed under the terms of the GNU General Public License */ using System; using System.Collections.Generic; using System.Text; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Pina3D.Particles { public struct SaveFileStruct { public enum EntityType { Emitter, Particle, Modifier, Current, Directional, Gravitational, Vortex, Spin }; // Must use references here so we don't create infinite struct recursion public SerializableCommon CommonAttributes; public SerializableEmitter EmitterAttributes; public SerializableParticle ParticleAttributes; public SerializableModifier ModifierAttributes; public SerializableForce ForceAttributes; } /// /// Stores properties common to all sparx entities /// public class SerializableCommon { public string Name; public SaveFileStruct.EntityType Type; } /// /// Stores properties of emitters /// public class SerializableEmitter { public float LifeSpan; public bool Immortal; public List EmissionsForces; public SaveFileStruct RegularEmissionType; public Vector3 MinTrajectory; public Vector3 MaxTrajectory; public float MinMuzzleVelocity; public float MaxMuzzleVelocity; public float MinSpawnRadius; public float MaxSpawnRadius; public Vector3 DisplaceAxes; public float SpawnRate; public int DieAfter; public int EmissionCap; public RenderQueue.BlendMode BlendMode; //public Dictionary> _ScriptedEmissions; /// /// Modifiers placed on this emitter /// public List Modifiers; /// /// Forces placed on this emitter /// public List Forces; } /// /// Stores properties of particles /// public class SerializableParticle { public float LifeSpan; public bool Immortal; public Vector2 UVUpperLeft; public Vector2 UVLowerRight; public float Width; public float Height; public List Modifiers; } /// /// Stores properties of modifiers /// public class SerializableModifier { public float Interval; public float Delay; public Color InitialTint, FinalTint; public float InitialScale, FinalScale; public float InitialOpacity, FinalOpacity; public float InitialAngularVelocity, FinalAngularVelocity; } /// /// Stores properties of forces /// public class SerializableForce { public float LifeSpan; public float Delay; public float Magnitude; public Vector3 DirectionOrDisplacement; public bool Clockwise; } }