using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using HaloObjects;

namespace HaloPlugins.Xbox
{
    public class bsdt
    {
       public List<MetaNode> Fields = new List<MetaNode>();

       public bsdt()
       {
           Fields.AddRange(new MetaNode[] {
           new Value("Max Vitality", typeof(float)),
           new TagReference("Effect"),
           new TagReference("Sound"),
           new Reflexive("Particle Systems", 56, new MetaNode[] { 
               new TagReference("Particle"),
               new Value("Location", typeof(short)),
               new HaloObjects.Enum("Coordinate System", new string[] { "World", "Local", "Parent" }, 16),
               new HaloObjects.Enum("Environment", new string[] { "Any_Environment", "Air_Only", "Water_Only", "Space_Only" }, 16),
               new HaloObjects.Enum("Disposition", new string[] { "Either_Mode", "Violent_Mode_Only", "NonViolent_Mode_Only" }, 16),
               new HaloObjects.Enum("Camera Mode", new string[] { "Independant_Of_Camera_Mode", "Only_In_1st_Person", "Only_In_3rd_Person", "Both_1st_And_3rd" }, 16),
               new Value("Sort Bias", typeof(short)),
               new Bitmask("Flags", new string[] { "Glow", "Cinematics", "Looping_Particle", "Disabled_For_Debugging", "Inherit_Effect_Velocity", "Don't_Render_System", "Render_When_Zoomed", "Spread_Between_Ticks", "Persistent_Particle", "Expensive_Visibility" }, 32),
               new Unused(4),
               new Value("LOD In Distance", typeof(float)),
               new Value("LOD Feather In Delta", typeof(float)),
               new Value("LOD Out Distance", typeof(float)),
               new Value("LOD Feather Out Delta", typeof(float)),
               new Unused(4),
               new Reflexive("Emitters", 184, new MetaNode[] { 
                   new TagReference("Particle_Physics"),
                   new HaloObjects.Enum("Output Modifier", new string[] { "", "Plus", "Times" }, 32),
                   new HaloObjects.Enum("Output Modifier", new string[] { "Particle_Age", "Particle_Emit_Time", "Particle_Random_1", "Particle_Random_2", "Emitter_Age", "Emitter_Random_1", "Emitter_Random_2", "System_LOD", "Game_Time", "Effect_A_Scale", "Effect_B_Scale", "Particle_Rotation", "Explosion_Animation", "Explosion_Rotation", "Particle_Random_3", "Particle_Random_4", "Location_Random" }, 32),
                   new Reflexive("Particle Emission Rate", 1, new MetaNode[] { 
                       new Value("Data", typeof(byte)),
                   }),
                   new HaloObjects.Enum("Output Modifier", new string[] { "", "Plus", "Times" }, 32),
                   new HaloObjects.Enum("Output Modifier", new string[] { "Particle_Age", "Particle_Emit_Time", "Particle_Random_1", "Particle_Random_2", "Emitter_Age", "Emitter_Random_1", "Emitter_Random_2", "System_LOD", "Game_Time", "Effect_A_Scale", "Effect_B_Scale", "Particle_Rotation", "Explosion_Animation", "Explosion_Rotation", "Particle_Random_3", "Particle_Random_4", "Location_Random" }, 32),
                   new Reflexive("Particle Lifespan (sec)", 1, new MetaNode[] { 
                       new Value("Data", typeof(byte)),
                   }),
                   new HaloObjects.Enum("Output Modifier", new string[] { "", "Plus", "Times" }, 32),
                   new HaloObjects.Enum("Output Modifier", new string[] { "Particle_Age", "Particle_Emit_Time", "Particle_Random_1", "Particle_Random_2", "Emitter_Age", "Emitter_Random_1", "Emitter_Random_2", "System_LOD", "Game_Time", "Effect_A_Scale", "Effect_B_Scale", "Particle_Rotation", "Explosion_Animation", "Explosion_Rotation", "Particle_Random_3", "Particle_Random_4", "Location_Random" }, 32),
                   new Reflexive("Particle Velocity (World Units Per Sec)", 1, new MetaNode[] { 
                       new Value("Data", typeof(byte)),
                   }),
                   new HaloObjects.Enum("Output Modifier", new string[] { "", "Plus", "Times" }, 32),
                   new HaloObjects.Enum("Output Modifier", new string[] { "Particle_Age", "Particle_Emit_Time", "Particle_Random_1", "Particle_Random_2", "Emitter_Age", "Emitter_Random_1", "Emitter_Random_2", "System_LOD", "Game_Time", "Effect_A_Scale", "Effect_B_Scale", "Particle_Rotation", "Explosion_Animation", "Explosion_Rotation", "Particle_Random_3", "Particle_Random_4", "Location_Random" }, 32),
                   new Reflexive("Particle Angular Velocity (Degrees Per Sec)", 1, new MetaNode[] { 
                       new Value("Data", typeof(byte)),
                   }),
                   new HaloObjects.Enum("Output Modifier", new string[] { "", "Plus", "Times" }, 32),
                   new HaloObjects.Enum("Output Modifier", new string[] { "Particle_Age", "Particle_Emit_Time", "Particle_Random_1", "Particle_Random_2", "Emitter_Age", "Emitter_Random_1", "Emitter_Random_2", "System_LOD", "Game_Time", "Effect_A_Scale", "Effect_B_Scale", "Particle_Rotation", "Explosion_Animation", "Explosion_Rotation", "Particle_Random_3", "Particle_Random_4", "Location_Random" }, 32),
                   new Reflexive("Particle Size (World Units)", 1, new MetaNode[] { 
                       new Value("Data", typeof(byte)),
                   }),
                   new HaloObjects.Enum("Output Modifier", new string[] { "", "Plus", "Times" }, 32),
                   new HaloObjects.Enum("Output Modifier", new string[] { "Particle_Age", "Particle_Emit_Time", "Particle_Random_1", "Particle_Random_2", "Emitter_Age", "Emitter_Random_1", "Emitter_Random_2", "System_LOD", "Game_Time", "Effect_A_Scale", "Effect_B_Scale", "Particle_Rotation", "Explosion_Animation", "Explosion_Rotation", "Particle_Random_3", "Particle_Random_4", "Location_Random" }, 32),
                   new Reflexive("Particle Tint", 1, new MetaNode[] { 
                       new Value("Data", typeof(byte)),
                   }),
                   new HaloObjects.Enum("Output Modifier", new string[] { "", "Plus", "Times" }, 32),
                   new HaloObjects.Enum("Output Modifier", new string[] { "Particle_Age", "Particle_Emit_Time", "Particle_Random_1", "Particle_Random_2", "Emitter_Age", "Emitter_Random_1", "Emitter_Random_2", "System_LOD", "Game_Time", "Effect_A_Scale", "Effect_B_Scale", "Particle_Rotation", "Explosion_Animation", "Explosion_Rotation", "Particle_Random_3", "Particle_Random_4", "Location_Random" }, 32),
                   new Reflexive("Particle Alpha", 1, new MetaNode[] { 
                       new Value("Data", typeof(byte)),
                   }),
                   new HaloObjects.Enum("Emission Shape", new string[] { "Sprayer", "Disc", "Globe", "Implode", "Tube", "Halo", "Impact_Contour", "Impact_Area", "Debris", "Line" }, 32),
                   new HaloObjects.Enum("Output Modifier", new string[] { "", "Plus", "Times" }, 32),
                   new HaloObjects.Enum("Output Modifier", new string[] { "Particle_Age", "Particle_Emit_Time", "Particle_Random_1", "Particle_Random_2", "Emitter_Age", "Emitter_Random_1", "Emitter_Random_2", "System_LOD", "Game_Time", "Effect_A_Scale", "Effect_B_Scale", "Particle_Rotation", "Explosion_Animation", "Explosion_Rotation", "Particle_Random_3", "Particle_Random_4", "Location_Random" }, 32),
                   new Reflexive("Emission Radius (World Units)", 1, new MetaNode[] { 
                       new Value("Data", typeof(byte)),
                   }),
                   new HaloObjects.Enum("Output Modifier", new string[] { "", "Plus", "Times" }, 32),
                   new HaloObjects.Enum("Output Modifier", new string[] { "Particle_Age", "Particle_Emit_Time", "Particle_Random_1", "Particle_Random_2", "Emitter_Age", "Emitter_Random_1", "Emitter_Random_2", "System_LOD", "Game_Time", "Effect_A_Scale", "Effect_B_Scale", "Particle_Rotation", "Explosion_Animation", "Explosion_Rotation", "Particle_Random_3", "Particle_Random_4", "Location_Random" }, 32),
                   new Reflexive("Emission Angle (Degrees)", 1, new MetaNode[] { 
                       new Value("Data", typeof(byte)),
                   }),
                   new Value("Translation Offset X", typeof(float)),
                   new Value("Translation Offset Y", typeof(float)),
                   new Value("Translation Offset Z", typeof(float)),
                   new Value("Relative Direction Yaw", typeof(float)),
                   new Value("Relative Direction Pitch", typeof(float)),
                   new Unused(8),
               }),
           }),
           new Value("Particle Density", typeof(float)),
           });
       }
    }
}
