예제 #1
0
        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);
            });
        }
예제 #2
0
        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);
                }
            });
        }
예제 #3
0
        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();
        }