예제 #1
0
        ///<summary>
        /// Creates Input, View and Interaction components:
        /// Creates different move processors
        /// for each character on board, registers them in controllers.
        /// Creates interactors and passes created level and view to them.
        /// </summary>
        public void InvokeState()
        {
            var level     = levelFactory.CreateLevel();
            var inputLoop = new InputLoop();
            var playView  = new ConsolePlayView();

            var playerMoveInteractor = new PlayerMoveInteractor(level, playView);
            var mobMoveInteractor    = new MobMoveInteractor(level, playView);
            var saveGameInteractor   = new SaveGameInteractor(level);
            var exitGameInteractor   = new ExitGameInteractor(level);
            var inventoryInteractor  = new InventoryInteractor(level, playView);

            var moveProcessor            = new MoveProcessor(playerMoveInteractor);
            var saveAndExitGameProcessor = new SaveAndExitGameProcessor(exitGameInteractor, saveGameInteractor);
            var inventoryProcessor       = new InventoryProcessor(inventoryInteractor);

            var keyboardController = new KeyboardController(level, OfflinePlayerLogin);
            var tickController     = new TickController();

            keyboardController.AddInputProcessor(moveProcessor);
            keyboardController.AddInputProcessor(saveAndExitGameProcessor);
            keyboardController.AddInputProcessor(inventoryProcessor);

            inputLoop.AddUpdatable(keyboardController);
            inputLoop.AddFixedUpdatable(tickController);

            if (!level.ContainsPlayer(OfflinePlayerLogin))
            {
                level.AddPlayerAtEmpty(OfflinePlayerLogin);
            }

            level.CurrentPlayer = level.GetPlayer(OfflinePlayerLogin);

            var mobs = level.Mobs;

            foreach (var mob in mobs)
            {
                var mobMoveProcessor = new MobMoveProcessor(mob, mobMoveInteractor);
                tickController.AddTickProcessor(mobMoveProcessor);
                mob.OnDie += (sender, args) =>
                {
                    level.Mobs.Remove(mob);
                    tickController.RemoveTickProcessor(mobMoveProcessor);
                };
            }

            level.CurrentPlayer.OnDie += (sender, args) =>
            {
                inputLoop.Stop();
                saveGameInteractor.DeleteSaving();
            };

            exitGameInteractor.OnExit += (sender, player) =>
            {
                inputLoop.Stop();
            };

            playView.Draw(level);
            inputLoop.Start();
        }
예제 #2
0
        public void InventoryInteractorPutOffTest()
        {
            var playView            = new VoidView();
            var inventoryInteractor = new InventoryInteractor(level, playView);

            Assert.AreEqual(3, confusedLevel.CurrentPlayer.GetInventory().Count);
            Assert.AreEqual(1, confusedLevel.CurrentPlayer.GetAppliedInventory().Count);
            Assert.IsInstanceOf(typeof(IncreaseHealthItem), confusedLevel.CurrentPlayer.GetAppliedInventory()[0]);

            var beforeStatistics  = confusedLevel.CurrentPlayer.GetStatistics().Clone() as CharacterStatistics;
            var inventoryPosition = confusedLevel.CurrentPlayer.GetAppliedInventory()[0].Position;

            confusedLevel.Board.IsEmpty(inventoryPosition);

            inventoryInteractor.PutOff(confusedLevel.CurrentPlayer, confusedLevel.CurrentPlayer.GetAppliedInventory()[0].GetStringType());
            Assert.AreEqual(3, confusedLevel.CurrentPlayer.GetInventory().Count);
            Assert.AreEqual(0, confusedLevel.CurrentPlayer.GetAppliedInventory().Count);

            var afterStatistics = confusedLevel.CurrentPlayer.GetStatistics();

            confusedLevel.Board.IsInventory(inventoryPosition);

            Assert.AreEqual(beforeStatistics.Experience, afterStatistics.Experience);
            Assert.AreEqual(beforeStatistics.Force, afterStatistics.Force);
            Assert.AreEqual(beforeStatistics.Health - 3, afterStatistics.Health);
        }
예제 #3
0
        public void InvokeState()
        {
            var playView = new ConsolePlayView();

            var level = client.Login(login, sessionId);

            if (level == null)
            {
                throw new ArgumentException("Login already exists.");
            }

            var inputLoop = new InputLoop();

            var playerMoveInteractor  = new NetworkPlayerMoveInteractor(level, playView);
            var mobMoveInteractor     = new NetworkMobMoveInteractor(level, playView);
            var exitGameInteractor    = new ExitGameInteractor(level);
            var inventoryInteractor   = new InventoryInteractor(level, playView);
            var spawnPlayerInteractor = new SpawnPlayerInteractor(level, playView);

            var moveProcessor      = new MoveProcessor(playerMoveInteractor);
            var exitGameProcessor  = new ExitGameProcessor(exitGameInteractor);
            var inventoryProcessor = new InventoryProcessor(inventoryInteractor);

            var keyboardController = new KeyboardController(level, login);

            keyboardController.AddInputProcessor(client);

            keyboardController.AddInputProcessor(exitGameProcessor);

            client.AddInputProcessor(moveProcessor);
            client.AddInputProcessor(exitGameProcessor);
            client.AddInputProcessor(inventoryProcessor);

            client.SetMobInteractor(mobMoveInteractor);
            client.SetPlayerMoveInteractor(playerMoveInteractor);
            client.SetSpawnPlayerInteractor(spawnPlayerInteractor);

            inputLoop.AddUpdatable(keyboardController);
            inputLoop.AddUpdatable(client);

            level.CurrentPlayer = level.GetPlayer(login);

            level.CurrentPlayer.OnDie += (sender, args) =>
            {
                inputLoop.Stop();
            };

            exitGameInteractor.OnExit += (sender, player) =>
            {
                inputLoop.Stop();
            };

            playView.Draw(level);
            inputLoop.Start();
        }
예제 #4
0
        public void InvokeState()
        {
            var level     = levelFactory.CreateLevel();
            var inputLoop = new InputLoop();
            var playView  = new VoidView();

            var inputController = new ServerInputController(level, newSessionId, inputService);

            var exitGameInteractor   = new ExitGameInteractor(level, inputController);
            var playerMoveInteractor = new PlayerMoveInteractor(level, playView, inputController);
            var mobMoveInteractor    = new MobMoveInteractor(level, playView, inputController);
            var inventoryInteractor  = new InventoryInteractor(level, playView);

            levelFactory.SetPlayerFactory(new NetworkPlayerFactory(exitGameInteractor));

            var moveProcessor      = new MoveProcessor(playerMoveInteractor);
            var exitGameProcessor  = new ExitGameProcessor(exitGameInteractor);
            var inventoryProcessor = new InventoryProcessor(inventoryInteractor, inputController);

            var tickController = new TickController();

            inputController.AddInputProcessor(moveProcessor);
            inputController.AddInputProcessor(inventoryProcessor);
            inputController.AddInputProcessor(exitGameProcessor);

            inputLoop.AddFixedUpdatable(tickController);
            inputLoop.AddUpdatable(inputController);

            level.CurrentPlayer = new Player(DummyLogin, level, new Position(-1, -1));

            var mobs = level.Mobs;

            foreach (var mob in mobs)
            {
                var mobMoveProcessor = new MobMoveProcessor(mob, mobMoveInteractor);
                tickController.AddTickProcessor(mobMoveProcessor);
                mob.OnDie += (sender, args) =>
                {
                    level.Mobs.Remove(mob);
                    tickController.RemoveTickProcessor(mobMoveProcessor);
                };
            }

            inputLoop.Start();
        }
예제 #5
0
        public void InventoryInteractorPutOnTest()
        {
            var playView            = new VoidView();
            var inventoryInteractor = new InventoryInteractor(level, playView);

            Assert.AreEqual(3, level.CurrentPlayer.GetInventory().Count);
            Assert.AreEqual(1, level.CurrentPlayer.GetAppliedInventory().Count);
            Assert.IsInstanceOf(typeof(IncreaseForceItem), level.CurrentPlayer.GetInventory()[2]);

            var beforeStatistics = level.CurrentPlayer.GetStatistics().Clone() as CharacterStatistics;

            inventoryInteractor.PutOn(level.CurrentPlayer, level.CurrentPlayer.GetInventory()[2].GetStringType());

            Assert.AreEqual(2, level.CurrentPlayer.GetInventory().Count);
            Assert.AreEqual(2, level.CurrentPlayer.GetAppliedInventory().Count);

            var afterStatistics = level.CurrentPlayer.GetStatistics();

            Assert.AreEqual(beforeStatistics.Health, afterStatistics.Health);
            Assert.AreEqual(beforeStatistics.Experience, afterStatistics.Experience);
            Assert.AreEqual(beforeStatistics.Force + 3, afterStatistics.Force);
        }
예제 #6
0
 public InventoryProcessor(InventoryInteractor inventoryInteractor, IActionListener listener = null)
 {
     this.inventoryInteractor = inventoryInteractor;
     this.listener            = listener;
 }