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

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

       public crea()
       {
           Fields.AddRange(new MetaNode[] {
           new Bitmask("Flags", new string[] { "Does_Not_Cast_Shadow", "Search_Cardinal_Direction_Lightmaps", "unused", "Not_A_Pathfinding_Obstacle", "Extension_Of_Parent", "Does_Not_Cause_Collision_Damage", "Early_Mover", "Early_Mover_Localized_Physics", "Use_Static_Massive_Lightmap_Sample", "Object_Scales_Attachments", "Inherits_Player's_Appearance", "Dead_Bipeds_Can't_Localize", "Attach_To_Clusters_By_Dynamic_Sphere", "Effects_Created_By_This_Object_Do_Not" }, 32),
           new Value("Bounding Radius", typeof(float)),
           new Value("Bounding Offset X", typeof(float)),
           new Value("Bounding Offset Y", typeof(float)),
           new Value("Bounding Offset Z", typeof(float)),
           new Value("Acceleration Scale", typeof(float)),
           new HaloObjects.Enum("Lightmap Shadow Mode", new string[] { "Default", "Never", "Always" }, 32),
           new HaloObjects.Enum("Sweetener Size", new string[] { "Small", "Medium", "Large" }, 32),
           new Value("Dynamic Light Sphere Radius", typeof(float)),
           new Value("Dynamic Light Sphere Offset X", typeof(float)),
           new Value("Dynamic Light Sphere Offset Y", typeof(float)),
           new Value("Dynamic Light Sphere Offset Z", typeof(float)),
           new StringID("Default Model Variant"),
           new TagReference("Model"),
           new TagReference("Crate_Object"),
           new TagReference("Modifier_Shader"),
           new TagReference("Creation_Effect"),
           new TagReference("Material_Effects"),
           new Reflexive("Ai Properties", 16, new MetaNode[] { 
               new Bitmask("Flags", new string[] { "Destroyable_Cover", "Pathfinding_Ignore_When_Dead", "Dynamic_Cover" }, 32),
               new StringID("Type Name"),
               new HaloObjects.Enum("Size", new string[] { "Default", "Tiny", "Small", "Medium", "Large", "Huge", "Immobile" }, 32),
               new HaloObjects.Enum("Leap Jump Speed", new string[] { "None", "Down", "Step", "Crouch", "Stand", "Storey", "Tower", "Infinite" }, 32),
           }),
           new Reflexive("Functions", 32, new MetaNode[] { 
               new Bitmask("Flags", new string[] { "Invert", "Mapping_Does_Not_Controls_Active", "Always_Active", "Random_Time_Offset" }, 32),
               new StringID("Import Name"),
               new StringID("Export Name"),
               new StringID("Turn Off With"),
               new Value("Min Value", typeof(float)),
               new Reflexive("Function Type (Graph)", 1, new MetaNode[] { 
                   new Value("Data", typeof(byte)),
               }),
               new StringID("Scale By"),
           }),
           new Value("Apply Collision Damage Scale", typeof(float)),
           new Value("Min Game Acc (Default)", typeof(float)),
           new Value("Max Game Acc (Default)", typeof(float)),
           new Value("Min Gam Scale (Default)", typeof(float)),
           new Value("Max Gam Scale (Default)", typeof(float)),
           new Value("Min abs Acc (Default)", typeof(float)),
           new Value("Max abs Acc (Default)", typeof(float)),
           new Value("Min abs Scale (Default)", typeof(float)),
           new Value("Max abs Scale (Default)", typeof(float)),
           new Value("Hud Text Message Index", typeof(short)),
           new Unused(2),
           new Reflexive("Attachments", 24, new MetaNode[] { 
               new TagReference("Type"),
               new StringID("Marker"),
               new StringID("Change Color"),
               new StringID("Primary Scale"),
               new StringID("Secondary Scale"),
           }),
           new Reflexive("Widgets", 8, new MetaNode[] { 
               new TagReference("Type"),
           }),
           new Reflexive("Old Functions", 8, new MetaNode[] { 
               new Unused(8),
           }),
           new Reflexive("Change Colors", 16, new MetaNode[] { 
               new Reflexive("Initial Permutations", 32, new MetaNode[] { 
                   new Value("Weight", typeof(float)),
                   new Value("Color Lower Bound R", typeof(float)),
                   new Value("Color Lower Bound G", typeof(float)),
                   new Value("Color Lower Bound B", typeof(float)),
                   new Value("Color Upper Bound R", typeof(float)),
                   new Value("Color Upper Bound G", typeof(float)),
                   new Value("Color Upper Bound B", typeof(float)),
                   new StringID("Variant Name"),
               }),
               new Reflexive("Functions", 36, new MetaNode[] { 
                   new Bitmask("Scale Flags", new string[] { "Blend_In_HSV", "...More_Colors" }, 32),
                   new Value("Color Lower Bound R", typeof(float)),
                   new Value("Color Lower Bound G", typeof(float)),
                   new Value("Color Lower Bound B", typeof(float)),
                   new Value("Color Upper Bound R", typeof(float)),
                   new Value("Color Upper Bound G", typeof(float)),
                   new Value("Color Upper Bound B", typeof(float)),
                   new StringID("Darken By"),
                   new StringID("Scale By"),
               }),
           }),
           new Reflexive("Predicted Resource", 8, new MetaNode[] { 
               new Value("Type", typeof(short)),
               new Value("Resource Index", typeof(short)),
               new Ident("Tag_Index"),
           }),
           new Bitmask("Flags", new string[] { "unused", "Infection_Form", "Immune_To_Falling_Damage", "Rotate_While_Airborne", "Zapped_By_Sheilds", "Attach_Upon_Impact", "Not_On_Motion_Sensor" }, 32),
           new HaloObjects.Enum("Default Team", new string[] { "Deafult", "Player", "Human", "Covenant", "Flood", "Sentinel", "Heretic", "Prophet" }, 16),
           new HaloObjects.Enum("Motion Sensor Blip Size", new string[] { "Medium", "Small", "Large" }, 16),
           new Value("Turning Velocity Max", typeof(float)),
           new Value("Turning Acceleration Max", typeof(float)),
           new Value("Casual Turing Modifer", typeof(float)),
           new Value("Autoaim Width", typeof(float)),
           new Bitmask("Flags", new string[] { "Centered_At_Origin", "Shape_Sperical", "Use_Player_Physics", "Climb_Any_Surface", "Flying", "Not_Physical", "Dead_Character_Collision_Group" }, 32),
           new Value("Height Standing", typeof(float)),
           new Value("Height Crouching", typeof(float)),
           new Value("Radius", typeof(float)),
           new Value("Mass", typeof(float)),
           new StringID("Living Material Name"),
           new StringID("Dead Material Name"),
           new Unused(4),
           new Reflexive("Dead Sphere Shapes", 132, new MetaNode[] { //128
               new StringID("Name"),
               new Value("Material #", typeof(short)),
               new HaloObjects.Enum("Flags", new string[] { "unused" }, 16),
               new Value("Relative Mass Scale", typeof(float)),
               new Value("Friction", typeof(float)),
               new Value("Restitution", typeof(float)),
               new Value("Volume", typeof(float)),
               new Value("Mass", typeof(float)),
               new Value("Phantom", typeof(short)),
               new Value("Size", typeof(short)),
               new Value("Count", typeof(short)),
               new Value("Radius", typeof(float)),
               new Value("Size", typeof(short)),
               new Value("Count", typeof(short)),
               new Value("Rotation i i", typeof(float)),
               new Value("Rotation i j", typeof(float)),
               new Value("Rotation i k", typeof(float)),
               new Value("Rotation j i", typeof(float)),
               new Value("Rotation j j", typeof(float)),
               new Value("Rotation j k", typeof(float)),
               new Value("Rotation k i", typeof(float)),
               new Value("Rotation k j", typeof(float)),
               new Value("Rotation k k", typeof(float)),
               new Value("Translation i", typeof(float)),
               new Value("Translation j", typeof(float)),
               new Value("Translation  k", typeof(float)),
               new Unused(42),
           }),
           new Reflexive("Pill Shapes", 80, new MetaNode[] { 
               new StringID("Name"),
               new Value("Material #", typeof(short)),
               new HaloObjects.Enum("Flags", new string[] { "unused" }, 16),
               new Value("Relative Mass Scale", typeof(float)),
               new Value("Friction", typeof(float)),
               new Value("Restitution", typeof(float)),
               new Value("Volume", typeof(float)),
               new Value("Mass", typeof(float)),
               new Value("Phantom", typeof(short)),
               new Value("Size", typeof(short)),
               new Value("Count", typeof(short)),
               new Value("Radius", typeof(float)),
               new Value("Size", typeof(short)),
               new Value("Count", typeof(short)),
               new Value("Bottom i", typeof(float)),
               new Value("Bottom j", typeof(float)),
               new Value("Bottom k", typeof(float)),
               new Value("Top i", typeof(float)),
               new Value("Top j", typeof(float)),
               new Value("Top k", typeof(float)),
               new Unused(14),
           }),
           new Reflexive("Sphere Shapes", 132, new MetaNode[] { //128
               new StringID("Name"),
               new Value("Material #", typeof(short)),
               new HaloObjects.Enum("Flags", new string[] { "unused" }, 16),
               new Value("Relative Mass Scale", typeof(float)),
               new Value("Friction", typeof(float)),
               new Value("Restitution", typeof(float)),
               new Value("Volume", typeof(float)),
               new Value("Mass", typeof(float)),
               new Value("Phantom", typeof(short)),
               new Value("Size", typeof(short)),
               new Value("Count", typeof(short)),
               new Value("Radius", typeof(float)),
               new Value("Size", typeof(short)),
               new Value("Count", typeof(short)),
               new Value("Rotation i i", typeof(float)),
               new Value("Rotation i j", typeof(float)),
               new Value("Rotation i k", typeof(float)),
               new Value("Rotation j i", typeof(float)),
               new Value("Rotation j j", typeof(float)),
               new Value("Rotation j k", typeof(float)),
               new Value("Rotation k i", typeof(float)),
               new Value("Rotation k j", typeof(float)),
               new Value("Rotation k k", typeof(float)),
               new Value("Translation i", typeof(float)),
               new Value("Translation j", typeof(float)),
               new Value("Translation  k", typeof(float)),
               new Unused(42),
           }),
           new Value("Max Slope Angle", typeof(float)),
           new Value("Downhill Falloff Angle", typeof(float)),
           new Value("Downhill Cutoff Angle", typeof(float)),
           new Value("Uphill Falloff Angle", typeof(float)),
           new Value("Uphill Cutoff Angle", typeof(float)),
           new Value("Downhill Velocity Angle", typeof(float)),
           new Value("Uphill Velocity Scale", typeof(float)),
           new Value("Flying Bank Angle", typeof(float)),
           new Value("Flying Bank Apply Time", typeof(float)),
           new Value("Flying Pitch Ratio", typeof(float)),
           new Value("Flying Max Velocity", typeof(float)),
           new Value("Flying Max Sidestep Velocity", typeof(float)),
           new Value("Flying Acceleration", typeof(float)),
           new Value("Flying Deceleration", typeof(float)),
           new Value("Flying Angular Velocity Max", typeof(float)),
           new Value("Flying Angular Acceleration Max", typeof(float)),
           new Value("Flying Crouch Velocity Modifier", typeof(float)),
           new Unused(24),
           new TagReference("Sentinal_Impact_Damage"),
           new TagReference("Sentinal_Sheild_Impact_Damage"),
           new Value("Destroy After Death Time", typeof(float)),
           new Value("...To", typeof(float)),
           });
       }
    }
}
