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

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

       public proj()
       {
           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 Value("Darken By", typeof(float)),
                   new Value("Scale By", typeof(float)),
               }),
           }),
           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[] { "Oriented_Along_Velocity", "AI_Must_Use_Ballistic_Aiming", "Detonation_Max_Time_If_Attached", "Has_Super_Combining_Explosion", "Damage_Scales_Based_On_Distance", "Travels_Instantaneously", "Steering_Adjusts_Orientation", "Don't_Noise_Up_Steering", "Can_Track_Behind_Itself", "Robotron_Steering", "Faster_When_Owned_By_Player" }, 32),
           new HaloObjects.Enum("Detonation Timer Starts", new string[] { "Immediately", "After_first_bounce", "When_at_rest", "After_First_Bounce_Off_Any_Surface" }, 16),
           new HaloObjects.Enum("Impact Noise", new string[] { "Silent", "Medium", "Loud", "Shout", "Quiet" }, 16),
           new Value("AI Perception Radius", typeof(float)),
           new Value("Collision Radius", typeof(float)),
           new Value("Arming Time", typeof(float)),
           new Value("Danger Radius", typeof(float)),
           new Value("Timer(sec)", typeof(float)),
           new Value("...To", typeof(float)),
           new Value("Minimum Velocity", typeof(float)),
           new Value("Maximum Range", typeof(float)),
           new HaloObjects.Enum("Detonation Noise", new string[] { "Silent", "Medium", "Loud", "Shout", "Quiet" }, 16),
           new Value("Super Detonation Projectile Count", typeof(short)),
           new TagReference("Detonation_Started"),
           new TagReference("Airborne_Detonation"),
           new TagReference("Ground_Detonation"),
           new TagReference("Detonation_Damage"),
           new TagReference("Attached_Detonation_Damage"),
           new TagReference("Super_Detonation"),
           new TagReference("Super_Detonation_Damage"),
           new TagReference("Detonation_Sound"),
           new HaloObjects.Enum("Damage Reporting Type", new string[] { "The_Guardians", "Falling_Damage", "Generic_Collision_Damage", "Generic_Melee_Damage", "Generic_Explosion", "Magnum_Pistol", "Plasma_Pistol", "Needler", "SMG", "Plasma_Rifle", "Battle_Rifle", "Carbine", "Shotgun", "Sniper_Rifle", "Beam_Rifle", "Rocket_Launcher", "Flak_Cannon", "Brute_Shot", "Disintegrator", "Brute_Plasma_Rifle", "Energy_Sword", "Frag_Grenade", "Plasma_Grenade", "Flag_Melee_Damage", "Bomb_Melee_Damage", "Bomb_Explosion_Damage", "Ball_Melee_Damage", "Human_Turret", "Plasma_Turret", "Banshee", "Ghost", "Mongoose", "Scorpion", "Spectre_Driver", "Spectre_Gunner", "Warthog_Driver", "Warthog_Gunner", "Wraith", "Tank", "Sentinal_Beam", "Sentinal_RPG", "Teleporter" }, 32),
           new TagReference("Super_Attached_Detonation_Damage"),
           new Value("Material Effect Radius", typeof(float)),
           new TagReference("Fly_By_Sound"),
           new TagReference("Impact_Effect"),
           new TagReference("Impact_Damage"),
           new Value("Boarding Detonation Time", typeof(float)),
           new TagReference("Boarding_Detonation_Damage"),
           new TagReference("Boarding_Attached_Detonation_Damage"),
           new Value("Air Gravity Scale", typeof(float)),
           new Value("Air Damage Range", typeof(float)),
           new Value("...To", typeof(float)),
           new Value("Water Gravity Scale", typeof(float)),
           new Value("Water Damage Range", typeof(float)),
           new Value("...To", typeof(float)),
           new Value("Initial Velocity", typeof(float)),
           new Value("Final Velocity", typeof(float)),
           new Value("Guided Angular Velocity Lower (degrees per sec)", typeof(float)),
           new Value("Guided Angular Velocity Upper (degrees per sec)", typeof(float)),
           new Value("Acceleration range (world units)", typeof(float)),
           new Value("...To", typeof(float)),
           new Value("Targeted Leading Fraction", typeof(float)),
           new Value("Position Loops", typeof(float)),
           new Reflexive("Material Responses", 88, new MetaNode[] { 
               new Bitmask("Flags", new string[] { "Cannot_Be_Overpenetrated" }, 16),
               new HaloObjects.Enum("Default Response", new string[] { "Impact_(Detonate)", "Fizzle", "Overpenetrate", "Attach", "Bounce", "Bounce_(Dud)", "Fizzle_(Ricochet)" }, 16),
               new TagReference("DO_NOT_USE_(OLD_effect)"),
               new StringID("Material Name"),
               new Unused(2),
               new HaloObjects.Enum("Response", new string[] { "Impact_(Detonate)", "Fizzle", "Overpenetrate", "Attach", "Bounce", "Bounce_(Dud)", "Fizzle_(Ricochet)" }, 16),
               new Bitmask("Flags", new string[] { "Only_Against_Units", "Never_Against_Units" }, 32),
               new Value("Chance Fraction", typeof(float)),
               new Value("Between", typeof(float)),
               new Value("To", typeof(float)),
               new Value("And", typeof(float)),
               new Value("To", typeof(float)),
               new TagReference("DO_NOT_USE_(OLD_Effect)"),
               new HaloObjects.Enum("Scale Effects By", new string[] { "Damage", "Angle" }, 32),
               new Value("Angular Noise", typeof(float)),
               new Value("Veloctiy Noise", typeof(float)),
               new TagReference("DO_NOT_USE_(OLD_Detonation)"),
               new Value("Initial Friction", typeof(float)),
               new Value("Maximum Distance", typeof(float)),
               new Value("Parallel Friction", typeof(float)),
               new Value("Perpendicluar Friction", typeof(float)),
           }),
           });
       }
    }
}
