Ejemplo n.º 1
0
        private static void Detonate(
            BehaviorUpdateContext context,
            WeaponTarget target,
            bool detonateCallsKill,
            FXList groundHitFX)
        {
            // TODO: Should this ever be null?
            if (context.GameObject.CurrentWeapon != null)
            {
                context.GameObject.CurrentWeapon.SetTarget(target);
                context.GameObject.CurrentWeapon.Fire();
            }

            if (target.TargetType == WeaponTargetType.Position)
            {
                groundHitFX?.Execute(new FXListExecutionContext(
                                         context.GameObject.Rotation,
                                         context.GameObject.Translation,
                                         context.GameContext));
            }

            if (detonateCallsKill)
            {
                context.GameObject.Kill(DeathType.Detonated);
            }
            else
            {
                context.GameObject.Die(DeathType.Detonated);
            }
        }
Ejemplo n.º 2
0
        public FXListView(DiagnosticViewContext context, FXList fxList)
            : base(context)
        {
            _renderedView = AddDisposable(new RenderedView(context));

            fxList.Execute(
                new FXListExecutionContext(
                    Quaternion.Identity,
                    Vector3.Zero,
                    _renderedView.Scene.GameContext));
        }
Ejemplo n.º 3
0
        internal static void CheckForHit(
            BehaviorUpdateContext context,
            bool detonateCallsKill,
            FXList groundHitFX)
        {
            // Did we hit an object?
            // TODO

            if (DidHitGround(context))
            {
                // TODO: Interpolate to find actual point we hit the ground?
                Detonate(context, new WeaponTarget(context.GameObject.Translation), detonateCallsKill, groundHitFX);
            }
        }
Ejemplo n.º 4
0
        private void HideOnUseItem()
        {
            foreach (Entity ent in ItemsList)
            {
                if (ent.GetField <int>("used") == 1)
                {
                    ent.Hide();

                    foreach (Entity fx in FXList)
                    {
                        if (fx.Origin.DistanceTo(ent.Origin + new Vector3(0, 0, -50)) <= 10)
                        {
                            FXList.Remove(fx);
                            fx.Delete();
                            break;
                        }
                    }

                    Entity newfx = SpawnTriggerFX(redcircle_fx, ent.Origin + new Vector3(0, 0, -50));
                    FXList.Add(newfx);
                }
                else
                {
                    ent.Show();

                    foreach (Entity fx in FXList)
                    {
                        if (fx.Origin.DistanceTo(ent.Origin + new Vector3(0, 0, -50)) <= 10)
                        {
                            FXList.Remove(fx);
                            fx.Delete();
                            break;
                        }
                    }

                    Entity newfx = SpawnTriggerFX(goldcircle_fx, ent.Origin + new Vector3(0, 0, -50));
                    FXList.Add(newfx);
                }
            }
        }
Ejemplo n.º 5
0
        protected override void OnEnterStateImpl(TimeSpan enterTime)
        {
            base.OnEnterStateImpl(enterTime);

            if (Context.Weapon.UsesClip)
            {
                Context.Weapon.CurrentRounds--;
            }

            Context.AudioSystem.PlayAudioEvent(Context.WeaponTemplate.FireSound.Value);

            foreach (var nugget in Context.Weapon.Nuggets)
            {
                nugget.Activate(enterTime);
            }

            var fireFXPosition = Context.GameObject.GetWeaponFireFXBonePosition(
                Context.Weapon.Slot,
                Context.WeaponIndex);

            if (fireFXPosition != null)
            {
                var fireFXListData = Context.WeaponTemplate.FireFX?.Value;
                if (fireFXListData != null)
                {
                    // TODO: Need to dispose this.
                    var fireFXList = new FXList(fireFXListData);

                    var worldMatrix = Context.GameObject.Transform.Matrix;
                    worldMatrix.Translation = fireFXPosition.Value;

                    fireFXList.Execute(
                        new FXListContext(
                            Context.GameObject,
                            worldMatrix,
                            Context.AssetLoadContext));
                }
            }
        }
Ejemplo n.º 6
0
        public INIParser(Stream stream) : base(stream)
        {
            str = (BigStream)stream;
            //Console.WriteLine(str.Name);
            long filesize = str.Length;

            while (str.Position < filesize)
            {
                ParseLine();
                string s = getString();
                string name;
                switch (s)
                {
                case "#include":
                    includeFile(getString());
                    break;

                case "#define":
                    macros.Add(getString().ToUpper(), getStrings());
                    break;

                case "Armor":
                    Armor ar = new Armor();
                    name = getString();
                    ParseObject(ar);
                    INIManager.AddArmor(name, ar);
                    break;

                case "AmbientStream":
                    AmbientStream ast = new AmbientStream();
                    name = getString();
                    ParseObject(ast);
                    INIManager.AddAmbientStream(name, ast);
                    break;

                case "AudioEvent":
                    AudioEvent e = new AudioEvent();
                    name = getString();
                    ParseObject(e);
                    INIManager.AddAudioEvent(name, e);
                    break;

                case "CommandButton":
                    CommandButton cb = new CommandButton();
                    name = getString();
                    ParseObject(cb);
                    INIManager.AddCommandButton(name, cb);
                    break;

                case "DialogEvent":
                    DialogEvent de = new DialogEvent();
                    name = getString();
                    ParseObject(de);
                    INIManager.AddDialogEvent(name, de);
                    break;

                case "FXList":
                    FXList fl = new FXList();
                    name = getString();
                    ParseObject(fl);
                    INIManager.AddFXList(name, fl);
                    break;

                case "GameData":
                    GameData data = new GameData();
                    ParseObject(data);
                    INIManager.SetGameData(data);
                    break;

                case "LoadSubsystem":
                    LoadSubsystem ls = new LoadSubsystem();
                    name = getString();
                    ParseObject(ls);
                    ls.LoadFiles();
                    break;

                case "MappedImage":
                    MappedImage mi = new MappedImage();
                    name = getString();
                    ParseObject(mi);
                    INIManager.AddMappedImage(name, mi);
                    break;

                case "ModifierList":
                    ModifierList ml = new ModifierList();
                    name = getString();
                    ParseObject(ml);
                    INIManager.AddModifierList(name, ml);
                    break;

                case "Multisound":
                    Multisound ms = new Multisound();
                    name = getString();
                    ParseObject(ms);
                    INIManager.AddMultisound(name, ms);
                    break;

                case "MusicTrack":
                    MusicTrack mt = new MusicTrack();
                    name = getString();
                    ParseObject(mt);
                    INIManager.AddMusicTrack(name, mt);
                    break;

                case "Object":
                    INI.Object o = new INI.Object();
                    name = getString();
                    ParseObject(o);
                    INIManager.AddObject(name, o);
                    break;

                case "Science":
                    Science sc = new Science();
                    name = getString();
                    ParseObject(sc);
                    INIManager.AddScience(name, sc);
                    break;

                case "StreamedSound":
                    StreamedSound ss = new StreamedSound();
                    name = getString();
                    ParseObject(ss);
                    INIManager.AddStreamedSound(name, ss);
                    break;

                case "Upgrade":
                    Upgrade u = new Upgrade();
                    name = getString();
                    ParseObject(u);
                    INIManager.AddUpgrade(name, u);
                    break;

                case "Weapon":
                    Weapon w = new Weapon();
                    name = getString();
                    ParseObject(w);
                    INIManager.AddWeapon(name, w);
                    break;

                default:
                    if (!objects.Contains(s))
                    {
                        //PrintError("unhandled entry: " + s);
                        objects.Add(s);
                    }
                    break;
                }
            }
            count++;
        }
Ejemplo n.º 7
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"));
        }
Ejemplo n.º 8
0
        private void SpawnItems()
        {
            //Spawn FX


            //Set Weapons
            List <string> Weapons = new List <string>();

            int[] itemCount = RandomNum(TargetZones.Length, 0, OS_Weapons.Length);
            for (int i = 0; i < itemCount.Length; i++)
            {
                Weapons.Add(OS_Weapons[itemCount[i]]);
            }

            //Spawn Weapons & FX
            int spawnedcount = 0;

            foreach (Vector3 zone in TargetZones)
            {
                Entity fx = SpawnTriggerFX(goldcircle_fx, zone + new Vector3(0, 0, -50));
                FXList.Add(fx);

                Entity wep = SpawnModel(zone - new Vector3(0, 0, 10), FindModelbyWep(Weapons[spawnedcount]));
                ItemsList.Add(wep);
                spawnedcount++;
            }

            //Items Init
            foreach (Entity Items in ItemsList)
            {
                Items.SetField("used", 0);
                if (!OS_Models.Contains(Items.Model))
                {
                    Items.Delete();
                }

                if (!GSCFunctions.IsDefined(Items))
                {
                    ItemsList.Remove(Items);
                }
            }

            //Set Perk Zone
            List <int> PerkZone = new List <int>();

            int[] objperkszone = RandomNum(3, 0, ItemsList.Count);
            for (int i = 0; i < objperkszone.Length; i++)
            {
                PerkZone.Add(objperkszone[i]);
            }

            //Set Perks
            List <int> Perks = new List <int>();

            int[] _numperk = RandomNum(3, 0, os_perks.Length);
            for (int i = 0; i < _numperk.Length; i++)
            {
                Perks.Add(_numperk[i]);
            }

            //Spawn Perks
            int count = 0;

            foreach (int num in PerkZone)
            {
                ItemsList[num].SetModel(os_perk);

                ItemsList[num].SetField("perk", os_perks[_numperk[count]]);
                count++;
            }

            //Rotate Models
            OnInterval(5000, () =>
            {
                foreach (Entity ent in ItemsList)
                {
                    ent.RotateYaw(360, 5);
                }
                return(true);
            });
        }