/* 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;
}
}