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

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

       public sky ()
       {
           Fields.AddRange(new MetaNode[] {
           new TagReference("Render_Model"),
           new TagReference("Animation_Graph"),
           new Bitmask("Flags", new string[] { "Fixed_In_World_Space", "Depreciated", "Sky_Casts_Light_From_Below", "Disable_Sky_In_Lightmaps", "Fog_Only_Affects_Containing_Cluster", "Use_Clear_Color" }, 32),
           new Value("Render Model Scale", typeof(float)),
           new Value("Movement Scale", typeof(float)),
           new Reflexive("Cube Map", 12, new MetaNode[] { 
               new TagReference("Cube_Map"),
               new Value("Power Scale", typeof(float)),
           }),
           new Value("Indoor Ambient Light Color R", typeof(float)),
           new Value("Indoor Ambient Light Color G", typeof(float)),
           new Value("Indoor Ambient Light Color B", typeof(float)),
           new Value("Indoor Ambient Light Color A", typeof(float)),
           new Value("Outdoor Ambient Light Color R", typeof(float)),
           new Value("Outdoor Ambient Light Color G", typeof(float)),
           new Value("Outdoor Ambient Light Color B", typeof(float)),
           new Value("Outdoor Ambient Light Color A", typeof(float)),
           new Value("Fog Spread Distance", typeof(float)),
           new Reflexive("Atmospheric Fog", 24, new MetaNode[] { 
               new Value("Color R", typeof(float)),
               new Value("Color G", typeof(float)),
               new Value("Color B", typeof(float)),
               new Value("Maximum Density", typeof(float)),
               new Value("Start Distance", typeof(float)),
               new Value("Opaque Distnace", typeof(float)),
           }),
           new Reflexive("Secondary Fog", 24, new MetaNode[] { 
               new Value("Color R", typeof(float)),
               new Value("Color G", typeof(float)),
               new Value("Color B", typeof(float)),
               new Value("Color A", typeof(float)),
               new Value("Maximum Density", typeof(float)),
               new Value("Opaque Distnace", typeof(float)),
           }),
           new Reflexive("Sky Fog", 16, new MetaNode[] { 
               new Value("Color R", typeof(float)),
               new Value("Color G", typeof(float)),
               new Value("Color B", typeof(float)),
               new Value("Color A", typeof(float)),
           }),
           new Reflexive("Patchy Fog", 80, new MetaNode[] { 
               new Value("Color R", typeof(float)),
               new Value("Color G", typeof(float)),
               new Value("Color B", typeof(float)),
               new Value("Color A", typeof(float)),
               new Unused(8),
               new Value("Density Lower", typeof(float)),
               new Value("Density Upper", typeof(float)),
               new Value("Distance Lower", typeof(float)),
               new Value("Distance Upper", typeof(float)),
               new Unused(32),
               new TagReference("Patch_Fog"),
           }),
           new Value("Bloom Override Amount", typeof(float)),
           new Value("Bloom Override Threshold", typeof(float)),
           new Value("Bloom Override Brightness", typeof(float)),
           new Value("Bloom Override Gamma Power", typeof(float)),
           new Reflexive("Lights", 52, new MetaNode[] { 
               new Value("Direction Vector i", typeof(float)),
               new Value("Direction Vector j", typeof(float)),
               new Value("Direction Vector k", typeof(float)),
               new Value("Direction Y", typeof(float)),
               new Value("Direction P", typeof(float)),
               new TagReference("Lens_Flare"),
               new Reflexive("Fog", 44, new MetaNode[] { 
                   new Value("Color R", typeof(float)),
                   new Value("Color G", typeof(float)),
                   new Value("Color B", typeof(float)),
                   new Value("Color A", typeof(float)),
                   new Value("Maximum Density", typeof(float)),
                   new Value("Opaque Distnace", typeof(float)),
                   new Value("Cone Lower", typeof(float)),
                   new Value("Cone Upper", typeof(float)),
                   new Value("Atmospheroc Fog Influence", typeof(float)),
                   new Value("Secondary Fog Influence", typeof(float)),
                   new Value("Sky Fog Influence", typeof(float)),
               }),
               new Reflexive("Fog Opposite", 44, new MetaNode[] { 
                   new Value("Color R", typeof(float)),
                   new Value("Color G", typeof(float)),
                   new Value("Color B", typeof(float)),
                   new Value("Color A", typeof(float)),
                   new Value("Maximum Density", typeof(float)),
                   new Value("Opaque Distnace", typeof(float)),
                   new Value("Cone Lower", typeof(float)),
                   new Value("Cone Upper", typeof(float)),
                   new Value("Atmospheroc Fog Influence", typeof(float)),
                   new Value("Secondary Fog Influence", typeof(float)),
                   new Value("Sky Fog Influence", typeof(float)),
               }),
               new Reflexive("Radiosity", 40, new MetaNode[] { 
                   new Bitmask("Flags", new string[] { "Affects_Interiors", "Affects_Exteriors", "Direct_Illumunation_In_Lightmaps", "Indirect_Illumunation_In_Lightmaps" }, 32),
                   new Value("Color R", typeof(float)),
                   new Value("Color G", typeof(float)),
                   new Value("Color B", typeof(float)),
                   new Value("Power", typeof(float)),
                   new Value("Test Distance", typeof(float)),
                   new Unused(12),
                   new Value("Diameter", typeof(float)),
               }),
           }),
           new Value("Global Sky Rotation", typeof(float)),
           new Unused(28),
           new Value("Clear Color R", typeof(float)),
           new Value("Clear Color G", typeof(float)),
           new Value("Clear Color B", typeof(float)),
           });
       }
    }
}
