public Cutscene(ThnScriptContext context, GameDataManager gameData, Rectangle viewport, Game game) { scriptContext = context; this.game = game; this.gameData = gameData; camera = new ThnCamera(viewport); }
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; }
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(); }
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); } }