Пример #1
0
        public Cutscene(ThnScriptContext context, GameDataManager gameData, Rectangle viewport, Game game)
        {
            scriptContext = context;
            this.game = game;
            this.gameData = gameData;
			camera = new ThnCamera(viewport);
        }
Пример #2
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;
 }
Пример #3
0
        public Cutscene(ThnScriptContext context, GameDataManager gameData, Viewport viewport, Game game)
        {
            this.game     = game;
            this.gameData = gameData;
            scriptContext = context;
            camera        = new ThnCamera(viewport);

            Renderer = new SystemRenderer(camera, gameData, game.GetService <GameResourceManager>(), game);
            World    = new GameWorld(Renderer, false);
            //thn = script;
            var evs = new List <ThnEvent>();

            foreach (var thn in context.Scripts)
            {
                totalDuration = Math.Max(totalDuration, thn.Duration);
                foreach (var ev in thn.Events)
                {
                    ev.TimeOffset = 0;
                    evs.Add(ev);
                }
                AddEntities(thn);
            }
            //work around SET_CAMERA not being called in disco (match vanilla behaviour)
            var firstCamera = Objects.Values.Where(x => x.Camera != null).FirstOrDefault();

            if (firstCamera != null)
            {
                camera.Transform = firstCamera.Camera;
            }
            evs.Sort((x, y) => x.Time.CompareTo(y.Time));
            foreach (var item in evs)
            {
                events.Enqueue(item);
            }
            //Add starspheres in the right order
            var sorted = ((IEnumerable <Tuple <IDrawable, ThnObject> >)layers).Reverse().OrderBy(x => x.Item2.Entity.SortGroup).ToArray();

            Renderer.StarSphereModels    = new RigidModel[sorted.Length];
            Renderer.StarSphereWorlds    = new Matrix4x4[sorted.Length];
            Renderer.StarSphereLightings = new Lighting[sorted.Length];
            starSphereObjects            = new ThnObject[sorted.Length];
            for (int i = 0; i < sorted.Length; i++)
            {
                Renderer.StarSphereModels[i]    = (sorted[i].Item1 as IRigidModelFile).CreateRigidModel(true);
                Renderer.StarSphereWorlds[i]    = sorted[i].Item2.Rotate * Matrix4x4.CreateTranslation(sorted[i].Item2.Translate);
                Renderer.StarSphereLightings[i] = Lighting.Empty;
                starSphereObjects[i]            = sorted[i].Item2;
            }
            //Add objects to the renderer
            World.RegisterAll();
        }
Пример #4
0
        void SwitchToRoom(bool dolanding)
        {
            Game.Saves.Selected = -1;
            session.RoomEntered(virtualRoom ?? currentRoom.Nickname, currentBase.Nickname);
            if (currentRoom.Music == null)
            {
                Game.Sound.StopMusic();
            }
            else
            {
                Game.Sound.PlayMusic(currentRoom.Music, currentRoom.MusicOneShot);
            }
            var shp = Game.GameData.GetShip(session.PlayerShip);

            playerShip = new GameObject(shp.ModelFile.LoadFile(Game.ResourceManager), Game.ResourceManager);
            playerShip.PhysicsComponent = null;
            CreatePlayerEquipment();
            session.OnUpdatePlayerShip = CreatePlayerEquipment;
            var ctx = new ThnScriptContext(currentRoom.OpenSet());

            ctx.PlayerShip = playerShip;
            if (currentBase.TerrainTiny != null)
            {
                ctx.Substitutions.Add("$terrain_tiny", currentBase.TerrainTiny);
            }
            if (currentBase.TerrainSml != null)
            {
                ctx.Substitutions.Add("$terrain_sml", currentBase.TerrainSml);
            }
            if (currentBase.TerrainMdm != null)
            {
                ctx.Substitutions.Add("$terrain_mdm", currentBase.TerrainMdm);
            }
            if (currentBase.TerrainLrg != null)
            {
                ctx.Substitutions.Add("$terrain_lrg", currentBase.TerrainLrg);
            }
            if (currentBase.TerrainDyna1 != null)
            {
                ctx.Substitutions.Add("$terrain_dyna_01", currentBase.TerrainDyna1);
            }
            if (currentBase.TerrainDyna2 != null)
            {
                ctx.Substitutions.Add("$terrain_dyna_02", currentBase.TerrainDyna2);
            }
            scene = new Cutscene(ctx, Game.GameData, Game.RenderContext.CurrentViewport, Game);
            scene.ScriptFinished += SceneOnScriptFinished;
            sceneScripts          = currentRoom.OpenScene().ToArray();
            if (dolanding && !string.IsNullOrEmpty(currentRoom.LandScript))
            {
                RoomDoSceneScript(new ThnScript(currentRoom.LandScript), ScriptState.Enter);
            }
            else if (!string.IsNullOrEmpty(currentRoom.StartScript))
            {
                RoomDoSceneScript(new ThnScript(currentRoom.StartScript), ScriptState.Enter);
            }
            else
            {
                RoomDoSceneScript(null, ScriptState.None);
            }
        }