private void LoadLevel(string levelFile) { var level = LevelDefinition.Load(levelFile); this.CurrentLevelDefinition = level; PreviewScene.QueueAction(() => { foreach (var thing in PreviewScene.Things.ToArray()) { if (thing is Cursor) { continue; } PreviewScene.Remove(thing); } foreach (var interaction in PreviewScene.Interactions.ToArray()) { PreviewScene.Remove(interaction); } level.Hydrate(PreviewScene, true); }); }
public void Load(LevelDefinition def) { scenePanel.Scene.QueueAction(() => { Inventory toKeep = null; if (MainCharacter.Current != null) { toKeep = MainCharacter.Current.Inventory; } scenePanel.Scene.Clear(); def.Hydrate(scenePanel.Scene, false); foreach (var portal in scenePanel.Scene.Things.Where(p => p is Portal).Select(p => p as Portal)) { var localPortal = portal; localPortal.PortalEntered.SubscribeForLifetime(() => { Load(LevelDefinition.Load(localPortal.DestinationId)); }, portal.LifetimeManager); } if (MainCharacter.Current != null) { this.MainCharacter = MainCharacter.Current; if (toKeep != null) { MainCharacter.Current.Inventory = toKeep; } InputManager.SetKeyMap(InputManager.KeyMap); MainCharacter.Current.EatenByZombie.SubscribeForLifetime(() => { implicitPause = true; scenePanel.Scene.Stop(); QueueAction(() => { SoundEffects.Instance.PlaySound("playerdead"); Dialog.ShowMessage("Game over :(", () => { Stop(); }); }); }, scenePanel.LifetimeManager); } }); }
public void Play([ArgumentAwareTabCompletion(typeof(LevelCompletionType))] string levelFile) { if (levelFile.EndsWith(".czl") == false) { var guessedFile = System.IO.Path.Combine(LevelDefinition.LevelBuilderLevelsPath, levelFile + ".czl"); if (System.IO.File.Exists(guessedFile) == false) { throw new ArgException("No level called " + levelFile); } else { levelFile = guessedFile; } } else if (System.IO.File.Exists(levelFile)) { throw new ArgException("No level called " + levelFile); } var game = new GameApp(); game.Load(LevelDefinition.Load(levelFile)); game.Start().Wait(); }