示例#1
0
        private void ParseObject(object o)
        {
            string s;

            Dictionary<string, FieldInfo> fields = new Dictionary<string, FieldInfo>();
            //get all class variables
            foreach (var prop in o.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance))
            {
                fields.Add(prop.Name, prop);
            }
            do
            {
                ParseLine();
                s = getString();
                if (o.GetType() == typeof(LoadSubsystem))
                {
                    LoadSubsystem ls = (LoadSubsystem)o;
                    switch(s)
                    {
                        case "InitFile":
                            ls.AddInitFile(getString());
                            break;
                        case "InitFileDebug":
                            ls.AddInitFileDebug(getString());
                            break;
                        case "InitPath":
                            ls.AddInitPath(getString());
                            break;
                        case "IncludePathCinematics":
                            ls.AddIncludePathCinematics(getString());
                            break;
                        case "ExcludePath":
                            ls.AddExcludePath(getString());
                            break;
                    }
                }
                else if (o.GetType() == typeof(AnimationState))
                {
                    AnimationState state = (AnimationState)o;
                    string name;
                    switch(s)
                    {
                        case "Animation":
                            Animation anim = new Animation();
                            ParseObject(anim);
                            state.AddAnimation(anim);
                            break;
                        case "BeginScript":
                            string line = getLine();
                            while (!line.Equals("EndScript"))
                            {
                                state.AddScriptLine(line);
                                line = getLine();
                            }
                            break;
                        case "ParticleSysBone":
                            name = getString();
                            state.AddParticleSysBone(name, ParseParticleSysBone());
                            break;
                    }
                }
                else if (o.GetType() == typeof(Armor))
                {
                    Armor ar = (Armor)o;
                    switch(s)
                    {
                        case "Armor":
                            ar.AddType(getString(), getFloat());
                            break;
                    }
                }
                else if (o.GetType() == typeof(AudioEvent))
                {
                    AudioEvent ae = (AudioEvent)o;
                    switch(s)
                    {
                        case "Sounds":
                            string val = getStrings();
                            string[] sounds = val.Split(' ');
                            foreach (string sound in sounds)
                            {
                                MusicTrack mt;
                                if (INIManager.TryGetMusicTrack(sound, out mt))
                                    ae.AddMusicTrack(mt);
                                //else
                                //    PrintError(" no such MusicTrack found: " + sound);
                            }
                            break;
                    }
                }
                else if (o.GetType() == typeof(Draw))
                {
                    Draw dr = (Draw)o;
                    string name;
                    switch(s)
                    {
                        case "AnimationState":
                            AnimationState astate = new AnimationState();
                            name = getString();
                            ParseObject(astate);
                            dr.AddAnimationState(name, astate);
                            break;
                        case "DefaultModelConditionState":
                            ModelConditionState defMod = new ModelConditionState();
                            ParseObject(defMod);
                            dr.DefaultModelConditionState = defMod;
                            break;
                        case "IdleAnimationState":
                            AnimationState iastate = new AnimationState();
                            ParseObject(iastate);
                            dr.IdleAnimationState = iastate;
                            break;
                        case "ModelConditionState":
                            ModelConditionState mcs = new ModelConditionState();
                            name = getString();
                            ParseObject(mcs);
                            dr.AddModelConditionState(name, mcs);
                            break;
                    }
                }
                else if (o.GetType() == typeof(FXList))
                {
                    FXList fx = (FXList)o;
                    switch(s)
                    {
                        case "BuffNugget":
                            BuffNugget bn = new BuffNugget();
                            ParseObject(bn);
                            fx.buffNugget = bn;
                            break;
                        case "CameraShakerVolume":
                            CameraShakerVolume cs = new CameraShakerVolume();
                            ParseObject(cs);
                            fx.cameraShakerVolume = cs;
                            break;
                        case "DynamicDecal":
                            DynamicDecal dc = new DynamicDecal();
                            ParseObject(dc);
                            fx.AddDynamicDecal(dc);
                            break;
                        case "ParticleSystem":
                            ParticleSystem ps = new ParticleSystem();
                            ParseObject(ps);
                            fx.AddParticleSystem(ps);
                            break;
                        case "Sound":
                            Sound so = new Sound();
                            ParseObject(so);
                            fx.AddSound(so);
                            break;
                        case "TerrainScorch":
                            TerrainScorch ts = new TerrainScorch();
                            ParseObject(ts);
                            fx.AddTerrainScorch(ts);
                            break;
                        case "TintDrawable":
                            TintDrawable td = new TintDrawable();
                            ParseObject(td);
                            fx.tintDrawable = td;
                            break;
                        case "ViewShake":
                            ViewShake vs = new ViewShake();
                            ParseObject(vs);
                            fx.viewShake = vs;
                            break;
                    }
                }
                else if (o.GetType() == typeof(GameData))
                {
                    GameData gd = (GameData)o;
                    switch (s)
                    {
                        case "StandardPublicBone":
                            gd.AddStandardPublicBone(getString());
                            break;
                        case "WeaponBonus":
                            gd.AddWeaponBonus(getString(), getString(), getInt());
                            break;
                    }
                }
                else if (o.GetType() == typeof(ModelConditionState))
                {
                    ModelConditionState mstate = (ModelConditionState)o;
                    string name;
                    switch(s)
                    {
                        case "ParticleSysBone":
                            name = getString();
                            mstate.AddParticleSysBone(name, ParseParticleSysBone());
                            break;
                    }
                }
                else if (o.GetType() == typeof(ModifierList))
                {
                    ModifierList ml = (ModifierList)o;
                    switch(s)
                    {
                        case "Modifier":
                            ml.AddModifier(getString(), getStrings());
                            break;
                    }
                }
                else if (o.GetType() == typeof(Multisound))
                {
                    Multisound ms = (Multisound)o;
                    switch (s)
                    {
                        case "Subsounds":
                            string val = getStrings();
                            string[] sounds = val.Split(' ');
                            foreach (string sound in sounds)
                            {
                                MusicTrack mt;
                                if (INIManager.TryGetMusicTrack(sound, out mt))
                                    ms.AddMusicTrack(mt);
                                //else
                                 //   PrintError(" no such MusicTrack found: " + sound);
                            }
                            break;
                    }
                }
                else if (o.GetType() == typeof(INI.Object))
                {
                    INI.Object obj = (INI.Object)o;
                    string name;
                    switch (s)
                    {
                        case "ArmorSet":
                            ArmorSet set = new ArmorSet();
                            ParseObject(set);
                            obj.AddArmorSet(set);
                            break;
                        case "Behaviour":
                            Behaviour b = new Behaviour();
                            name = getString();
                            ParseObject(b);
                            obj.AddBehaviour(name, b);
                            break;
                        case "Body":
                            Body bo = new Body();
                            name = getString();
                            ParseObject(bo);
                            obj.AddBody(name, bo);
                            break;
                        case "Draw":
                            Draw d = new Draw();
                            name = getString();
                            ParseObject(d);
                            obj.AddDraw(name, d);
                            break;
                    }
                }
                else if (o.GetType() == typeof(Weapon))
                {
                    Weapon w = (Weapon)o;
                    switch(s)
                    {
                        case "AttributeModifierNugget":
                            AttributeModifierNugget amn = new AttributeModifierNugget();
                            ParseObject(amn);
                            w.attributeModifierNugget = amn;
                            break;
                        case "DamageContainedNugget":
                            DamageContainedNugget dcn = new DamageContainedNugget();
                            ParseObject(dcn);
                            w.damageContainedNugget = dcn;
                            break;
                        case "DamageFieldNugget":
                            DamageFieldNugget dfn = new DamageFieldNugget();
                            ParseObject(dfn);
                            w.damageFieldNugget = dfn;
                            break;
                        case "DamageNugget":
                            DamageNugget dn = new DamageNugget();
                            ParseObject(dn);
                            w.damageNugget = dn;
                            break;
                        case "DOTNugget":
                            DOTNugget don = new DOTNugget();
                            ParseObject(don);
                            w.dotNugget = don;
                            break;
                        case "FireLogicNugget":
                            FireLogicNugget fln = new FireLogicNugget();
                            ParseObject(fln);
                            w.fireLogicNugget = fln;
                            break;
                        case "HordeAttackNugget":
                            HordeAttackNugget han = new HordeAttackNugget();
                            ParseObject(han);
                            w.hordeAttackNugget = han;
                            break;
                        case "LuaEventNugget":
                            LuaEventNugget len = new LuaEventNugget();
                            ParseObject(len);
                            w.luaEventNugget = len;
                            break;
                        case "MetaImpactNugget":
                            MetaImpactNugget min = new MetaImpactNugget();
                            ParseObject(min);
                            w.metaImpactNugget = min;
                            break;
                        case "OpenGateNugget":
                            OpenGateNugget ogn = new OpenGateNugget();
                            ParseObject(ogn);
                            w.openGateNugget = ogn;
                            break;
                        case "ParalyzeNugget":
                            ParalyzeNugget pan = new ParalyzeNugget();
                            ParseObject(pan);
                            w.paralyzeNugget = pan;
                            break;
                        case "ProjectileNugget":
                            ProjectileNugget pn = new ProjectileNugget();
                            ParseObject(pn);
                            w.AddProjectileNugget(pn);
                            break;
                        case "SlaveAttackNugget":
                            SlaveAttackNugget san = new SlaveAttackNugget();
                            ParseObject(san);
                            w.slaveAttackNugget = san;
                            break;
                        case "StealMoneyNugget":
                            StealMoneyNugget smn = new StealMoneyNugget();
                            ParseObject(smn);
                            w.stealMoneyNugget = smn;
                            break;
                        case "WeaponOCLNugget":
                            WeaponOCLNugget won = new WeaponOCLNugget();
                            ParseObject(won);
                            w.weaponOCLNugget = won;
                            break;
                    }
                }

                else if (fields.ContainsKey(s))
                {
                    Type type = fields[s].FieldType;
                    if (type == typeof(string))
                        fields[s].SetValue(o, getString());
                    else if (type == typeof(int))
                        fields[s].SetValue(o, getInt());
                    else if (type == typeof(int[]))
                        fields[s].SetValue(o, getInts());
                    else if (type == typeof(float))
                        fields[s].SetValue(o, getFloat());
                    else if (type == typeof(float[]))
                        fields[s].SetValue(o, getFloats());
                    else if (type == typeof(bool))
                        fields[s].SetValue(o, getBool());
                    else if (type == typeof(OpenTK.Vector2))
                        fields[s].SetValue(o, getVec2());
                    else if (type == typeof(OpenTK.Vector3))
                        fields[s].SetValue(o, getVec3());
                    else
                        PrintError("invalid type: " + type);
                }
                else
                {
                    if (!s.Equals("End") && !s.Equals("END"))
                        PrintError("invalid parameter in " + o.GetType() + " class: " + s);
                }
            }
            while (!s.Equals("End") && !s.Equals("END"));
        }
示例#2
0
 public void AddParticleSystem(ParticleSystem ps)
 {
     particleSystems.Add(ps);
 }