Esempio n. 1
0
        public Cutscene(IEnumerable <ThnScript> scripts, SpaceGameplay gameplay)
        {
            this.game     = gameplay.FlGame;
            this.gameData = gameplay.FlGame.GameData;
            World         = gameplay.world;
            spawnObjects  = false;
            camera        = new ThnCamera(gameplay.FlGame.Viewport);
            //thn = script;
            var evs = new List <ThnEvent>();

            foreach (var thn in scripts)
            {
                totalDuration = Math.Max(totalDuration, thn.Duration);
                foreach (var ev in thn.Events)
                {
                    ev.TimeOffset = 0;
                    evs.Add(ev);
                }
                AddEntities(thn);
            }
            evs.Sort((x, y) => x.Time.CompareTo(y.Time));
            foreach (var item in evs)
            {
                events.Enqueue(item);
            }
        }
 public void GameplayUpdate(SpaceGameplay gp)
 {
     UpdateAudio();
     while (gameplayActions.TryDequeue(out var act))
     {
         act(gp);
     }
 }
Esempio n. 3
0
 public void Update(SpaceGameplay gameplay, TimeSpan elapsed)
 {
     foreach (var t in timers)
     {
         t.Value.T += elapsed.TotalSeconds;
     }
     CheckMissionScript(gameplay);
 }
Esempio n. 4
0
 public Cutscene(ThnScriptContext context, SpaceGameplay gameplay)
 {
     game = gameplay.FlGame;
     gameData = gameplay.FlGame.GameData;
     World = gameplay.world;
     spawnObjects = false;
     camera = new ThnCamera(gameplay.FlGame.RenderContext.CurrentViewport);
     scriptContext = context;
 }
Esempio n. 5
0
 public bool Update(SpaceGameplay gameplay, TimeSpan elapsed)
 {
     forcedLand = null;
     if (msnrun != null)
     {
         msnrun.Update(gameplay, elapsed);
     }
     if (forcedLand != null)
     {
         Game.ChangeState(new RoomGameplay(Game, this, forcedLand));
         return(true);
     }
     return(false);
 }
 void SceneChangeRequired()
 {
     if (PlayerBase != null)
     {
         Game.ChangeState(new RoomGameplay(Game, this, PlayerBase));
         hasChanged = true;
     }
     else
     {
         worldReady = false;
         toAdd      = new List <GameObject>();
         gp         = new SpaceGameplay(Game, this);
         Game.ChangeState(gp);
         hasChanged = true;
     }
 }
Esempio n. 7
0
 void SceneChangeRequired()
 {
     gameplayActions.Clear();
     objects = new Dictionary <int, GameObject>();
     if (PlayerBase != null)
     {
         Game.ChangeState(new RoomGameplay(Game, this, PlayerBase));
         hasChanged = true;
     }
     else
     {
         gp = new SpaceGameplay(Game, this);
         Game.ChangeState(gp);
         hasChanged = true;
     }
 }
Esempio n. 8
0
        public void GameplayUpdate(SpaceGameplay gp)
        {
            UpdateAudio();
            while (gameplayActions.TryDequeue(out var act))
            {
                act();
            }
            var player = gp.world.GetObject("player");
            var tr     = player.GetTransform();
            var pos    = Vector3.Transform(Vector3.Zero, tr);
            var orient = tr.ExtractRotation();

            connection.SendPacket(new PositionUpdatePacket()
            {
                Position    = pos,
                Orientation = orient
            }, PacketDeliveryMethod.SequenceB);
        }
Esempio n. 9
0
        public void Start()
        {
            if (MissionNum != 0 && (MissionNum - 1) < Game.GameData.Ini.Missions.Count)
            {
                msnrun = new MissionRuntime(Game.GameData.Ini.Missions[MissionNum - 1], this);
            }

            if (PlayerBase != null)
            {
                Game.ChangeState(new RoomGameplay(Game, this, PlayerBase));
            }
            else
            {
                worldReady = false;
                toAdd      = new List <GameObject>();
                gp         = new SpaceGameplay(Game, this);
                Game.ChangeState(gp);
            }
        }
Esempio n. 10
0
        public void GameplayUpdate(SpaceGameplay gp)
        {
            UpdateAudio();
            while (gameplayActions.TryDequeue(out var act))
            {
                act();
            }
            var player = gp.player;
            var tr     = player.WorldTransform;
            var pos    = Vector3.Transform(Vector3.Zero, tr);
            var orient = tr.ExtractRotation();

            connection.SendPacket(new PositionUpdatePacket()
            {
                Position    = pos,
                Orientation = orient,
                Speed       = player.GetComponent <CEngineComponent>()?.Speed ?? 0
            }, PacketDeliveryMethod.SequenceB);
        }
Esempio n. 11
0
 void CheckMissionScript(SpaceGameplay gameplay)
 {
     for (int i = 0; i < msn.Triggers.Count; i++)
     {
         if (triggered[i])
         {
             continue;
         }
         var tr = msn.Triggers[i];
         if (!active[i] && tr.InitState != Data.Missions.TriggerInitState.ACTIVE)
         {
             continue;
         }
         active[i] = true;
         if (CheckConditions(tr))
         {
             DoTrigger(i, gameplay);
         }
     }
 }
Esempio n. 12
0
        public bool Update(SpaceGameplay gameplay, TimeSpan elapsed)
        {
            forcedLand = null;
            if (msnrun != null)
            {
                msnrun.Update(gameplay, elapsed);
            }
            if (forcedLand != null)
            {
                Game.ChangeState(new RoomGameplay(Game, this, forcedLand));
                return(true);
            }
            if (Client != null)
            {
                var gt = gp.player.GetTransform();
                Client.SendPositionUpdate(gt.Transform(Vector3.Zero),
                                          gt.ExtractRotation());
            }

            return(false);
        }
Esempio n. 13
0
 public LuaAPI(SpaceGameplay gameplay)
 {
     this.g = gameplay;
 }
Esempio n. 14
0
        void DoTrigger(int i, SpaceGameplay gameplay)
        {
            active[i] = true;
            var tr = msn.Triggers[i];

            if (!CheckConditions(tr))
            {
                return;
            }
            FLLog.Debug("Mission", "Running trigger " + tr.Nickname);
            if (timers.ContainsKey(tr.Nickname))
            {
                timers.Remove(tr.Nickname);
            }
            triggered[i] = true;

            foreach (var act in tr.Actions)
            {
                switch (act.Type)
                {
                case TriggerActions.Act_ActTrig:
                    var trname = act.Entry[0].ToString();
                    for (int j = 0; j < msn.Triggers.Count; j++)
                    {
                        if (trname.Equals(msn.Triggers[j].Nickname, StringComparison.OrdinalIgnoreCase))
                        {
                            DoTrigger(j, gameplay);
                            break;
                        }
                    }
                    break;

                case TriggerActions.Act_PlaySoundEffect:
                    session.Game.Sound.PlaySound(act.Entry[0].ToString());
                    break;

                case TriggerActions.Act_ForceLand:
                    session.ForceLand(act.Entry[0].ToString());
                    break;

                case TriggerActions.Act_AdjAcct:
                    session.Credits += act.Entry[0].ToInt32();
                    break;

                case TriggerActions.Act_SpawnSolar:
                    SpawnSolar(act.Entry[0].ToString(), gameplay.world);
                    break;

                case TriggerActions.Act_StartDialog:
                    RunDialog(msn.Dialogs.First((x) => x.Nickname.Equals(act.Entry[0].ToString(), StringComparison.OrdinalIgnoreCase)));
                    break;

                case TriggerActions.Act_MovePlayer:
                    gameplay.player.Transform = Matrix4.CreateTranslation(act.Entry[0].ToSingle(), act.Entry[1].ToSingle(), act.Entry[2].ToSingle());
                    //last param seems to always be one?
                    break;

                case TriggerActions.Act_LightFuse:
                    var fuse    = session.Game.GameData.GetFuse(act.Entry[1].ToString());
                    var gameObj = gameplay.world.GetObject(act.Entry[0].ToString());
                    var fzr     = new FuseRunnerComponent(gameObj)
                    {
                        Fuse = fuse
                    };
                    gameObj.Components.Add(fzr);
                    fzr.Run();
                    break;

                case TriggerActions.Act_PlayMusic:
                    session.Game.Sound.PlayMusic(act.Entry[3].ToString());
                    break;

                case TriggerActions.Act_CallThorn:
                    var thn = new ThnScript(gameplay.FlGame.GameData.ResolveDataPath(act.Entry[0].ToString()));
                    gameplay.Thn = new Cutscene(new ThnScript[] { thn }, gameplay);
                    break;

                case TriggerActions.Act_SetShipAndLoadout:
                    if (!act.Entry[0].ToString().Equals("none", StringComparison.OrdinalIgnoreCase))
                    {
                        var loadout = session.Game.GameData.Ini.Loadouts.FindLoadout(act.Entry[1].ToString());
                        if (loadout != null)
                        {
                            session.PlayerShip = act.Entry[0].ToString();
                            session.Mounts     = new List <EquipMount>();
                            foreach (var equip in loadout.Equip)
                            {
                                if (equip.Value == null)
                                {
                                    continue;
                                }
                                var hp = equip.Key.StartsWith("__noHardpoint")
                                        ? null
                                        : equip.Key;
                                session.Mounts.Add(new EquipMount(hp, equip.Value));
                            }
                        }
                    }
                    break;
                }
            }
        }