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

namespace HaloPlugins.Xbox
{
    public class crea : TagDefinition
    {
       public crea() : base("crea", "creature", 384)
       {
           // Obje
           Fields.AddRange(new obje().Fields.ToArray());

           // Crea
           Fields.AddRange(new IMetaNode[] {
           new Flags("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 HaloPlugins.Enum("Default Team", new string[] { "Deafult", "Player", "Human", "Covenant", "Flood", "Sentinel", "Heretic", "Prophet" }, 16),
           new HaloPlugins.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 Flags("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 Padding(4),
           new TagBlock("Dead Sphere Shapes", 128, -1, new IMetaNode[] { //132
               new StringId("Name"),
               new Value("Material #", typeof(short)),
               new HaloPlugins.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 Padding(38),
           }),
           new TagBlock("Pill Shapes", 80, -1, new IMetaNode[] { 
               new StringId("Name"),
               new Value("Material #", typeof(short)),
               new HaloPlugins.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 Padding(14),
           }),
           new TagBlock("Sphere Shapes", 128, -1, new IMetaNode[] { //132
               new StringId("Name"),
               new Value("Material #", typeof(short)),
               new HaloPlugins.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 Padding(38),
           }),
           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 Padding(24),
           new TagReference("Sentinal_Impact_Damage", "jpt!"),
           new TagReference("Sentinal_Sheild_Impact_Damage", "jpt!"),
           new Value("Destroy After Death Time", typeof(float)),
           new Value("...To", typeof(float)),
           });
       }
    }
}
