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

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

       public sfx()
       {
           Fields.AddRange(new MetaNode[] {
           new Reflexive("Sound Effects", 56, new MetaNode[] { 
               new StringID("Name"),
               new Unused(8),
               new Bitmask("Flags", new string[] { "Use_3D_Radio_Hack" }, 32),
               new Unused(8),
               new Reflexive("Filter", 72, new MetaNode[] { 
                   new HaloObjects.Enum("Filter Type", new string[] { "Parametric_EQ", "DLS2", "Both_(Mono_Only)" }, 32),
                   new Value("Filter Width", typeof(float)),
                   new Value("Left Filter Frequence Scale Bounds", typeof(float)),
                   new Value("Left Filter Frequence To", typeof(float)),
                   new Value("Left Filter Frequence Random Base and Variance", typeof(float)),
                   new Value("Left Filter Frequence To", typeof(float)),
                   new Value("Left Filter Gain Scale Bounds", typeof(float)),
                   new Value("Left Filter Gain To", typeof(float)),
                   new Value("Left Filter Gain Random Base and Variance", typeof(float)),
                   new Value("Left Filter Gain To", typeof(float)),
                   new Value("Right Filter Frequence Scale Bounds", typeof(float)),
                   new Value("Right Filter Frequence To", typeof(float)),
                   new Value("Right Filter Frequence Random Base and Variance", typeof(float)),
                   new Value("Right Filter Frequence To", typeof(float)),
                   new Value("Right Filter Gain Scale Bounds", typeof(float)),
                   new Value("Right Filter Gain To", typeof(float)),
                   new Value("Right Filter Gain Random Base and Variance", typeof(float)),
                   new Value("Right Filter Gain To", typeof(float)),
               }),
               new Reflexive("Pitch LFO", 48, new MetaNode[] { 
                   new Value("Delay Scale Bounds", typeof(float)),
                   new Value("Delay Scale To", typeof(float)),
                   new Value("Delay Random Pitch and Variance", typeof(float)),
                   new Value("Delay To", typeof(float)),
                   new Value("Frequence Scale Bounds", typeof(float)),
                   new Value("Frequence To", typeof(float)),
                   new Value("Frequence Random Pitch and Variance", typeof(float)),
                   new Value("Frequence To", typeof(float)),
                   new Value("Pitch Modulation Scale Bounds", typeof(float)),
                   new Value("Pitch Modulation To", typeof(float)),
                   new Value("Pitch Modulation Random Pitch and Variance", typeof(float)),
                   new Value("Pitch Modulation To", typeof(float)),
               }),
               new Reflexive("Filter LFO", 64, new MetaNode[] { 
                   new Value("Delay Scale Bounds", typeof(float)),
                   new Value("Delay Scale To", typeof(float)),
                   new Value("Delay Random Pitch and Variance", typeof(float)),
                   new Value("Delay To", typeof(float)),
                   new Value("Frequence Scale Bounds", typeof(float)),
                   new Value("Frequence To", typeof(float)),
                   new Value("Frequence Random Pitch and Variance", typeof(float)),
                   new Value("Frequence To", typeof(float)),
                   new Value("Cutoff Modulation Scale Bounds", typeof(float)),
                   new Value("Cutoff Modulation To", typeof(float)),
                   new Value("Cutoff Modulation Random Pitch and Variance", typeof(float)),
                   new Value("Cutoff Modulation To", typeof(float)),
                   new Value("Gain Modulation Scale Bounds", typeof(float)),
                   new Value("Gain Modulation To", typeof(float)),
                   new Value("Gain Modulation Random Pitch and Variance", typeof(float)),
                   new Value("Gain Modulation To", typeof(float)),
               }),
               new Reflexive("Sound Effect", 40, new MetaNode[] { 
                   new TagReference("Template"),
                   new Reflexive("Components", 16, new MetaNode[] { 
                       new TagReference("Sound"),
                       new Value("Gain", typeof(float)),
                       new Bitmask("Flags", new string[] { "Don't_play_at_start", "Play_On_Stop", "", "Play_Alternate", "", "Sync_With_Origin_Looping_Sound" }, 32),
                   }),
                   new Unused(16),
                   new Reflexive("Unknown57", 20, new MetaNode[] { 
                       new Reflexive("Unknown58", 28, new MetaNode[] { 
                           new Reflexive("Unknown59", 16, new MetaNode[] { 
                               new Value("Unknown", typeof(int)),
                               new Reflexive("Unknown61", 1, new MetaNode[] { 
                                   new Value("Unknown", typeof(byte)),
                               }),
                               new Value("Unknown", typeof(float)),
                           }),
                           new Reflexive("Unknown66", 4, new MetaNode[] { 
                               new Value("Unknown", typeof(float)),
                           }),
                           new Reflexive("Unknown69", 4, new MetaNode[] { 
                               new Value("Unknown", typeof(int)),
                           }),
                           new Value("Unknown", typeof(int)),
                       }),
                       new Reflexive("Unknown74", 16, new MetaNode[] { 
                           new Value("Unknown", typeof(int)),
                           new Reflexive("Unknown76", 1, new MetaNode[] { 
                               new Value("Unknown", typeof(byte)),
                           }),
                           new Value("Unknown", typeof(float)),
                       }),
                       new Value("Unknown", typeof(int)),
                   }),
               }),
           }),
           });
       }
    }
}
