예제 #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
 private void MainForm_Load(object sender, EventArgs e)
 {
     this.ClientSize = Properties.Settings.Default.formSize;
     Visibility.Update();
     progressMain.ProgressText = "Updating Name Lookups from abgx.net";
     _scanner = new GameScanner();
     _scanner.OnGameProcessed += _loader_OnGameScanned;
     _scanner.OnStatusUpdate  += _loader_OnStatusUpdate;
     _scanner.OnFinish        += _loader_OnScanFinish;
     _scrapper = new WebScrapper();
     _scrapper.OnGameProcessed += _OnGameProcessed;
     _scrapper.OnStatusUpdate  += _loader_OnStatusUpdate;
     _scrapper.OnFinish        += _loader_OnFinish;
     _abgx                     = new AbgxChecker();
     _abgx.OnFinish           += _loader_OnFinish;
     _abgx.OnGameProcessed    += _OnGameProcessed;
     _abgx.OnStatusUpdate     += _loader_OnStatusUpdate;
     _move                     = new MoveProcessor();
     _move.OnFinish           += _loader_OnFinish;
     _move.OnGameProcessed    += _OnGameProcessed;
     _move.OnStatusUpdate     += _loader_OnStatusUpdate;
     _info                     = new ScannerInfo();
     progressMain.ProgressText = "";
     progressSub.ProgressText  = "";
     if (Program.Wizard)
     {
         menuSettings_Click(null, null);
     }
 }
예제 #3
0
파일: Game.cs 프로젝트: ricksladkey/Spider
        public Game()
        {
            Seed = -1;
            TraceStartFinish = false;
            TraceDeals = false;
            TraceMoves = false;
            ComplexMoves = false;
            Diagnostics = false;
            Instance = -1;

            Shuffled = new Pile();
            Tableau = new Tableau();

            Candidates = new MoveList();
            SupplementaryList = new MoveList();
            RunFinder = new RunFinder();
            FaceLists = new PileList[(int)Face.King + 2];
            for (int i = 0; i < FaceLists.Length; i++)
            {
                FaceLists[i] = new PileList();
            }
            Coefficients = null;

            TableauInputOutput = new TableauInputOutput(Tableau);
            MoveProcessor = new MoveProcessor(this);

            Variation = Variation.Spider4;
            AlgorithmType = AlgorithmType.Study;
        }
예제 #4
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();
        }
예제 #5
0
파일: MapNpc.cs 프로젝트: SupaFresh/Server
 public bool IsInRangeOfFoes(IMap currentMap, Move move, int moveSlot)
 {
     // Check if any players are in range
     foreach (Client i in currentMap.GetClients())
     {
         // Check if the target player is in range
         if (MoveProcessor.IsInRange(move.RangeType, move.Range, this.X, this.Y,
                                     this.Direction,
                                     i.Player.X, i.Player.Y))
         {
             // They are in range, attack them
             return(true);
         }
     }
     return(false);
 }
예제 #6
0
파일: MapNpc.cs 프로젝트: SupaFresh/Server
 public bool IsInRangeOfAllies(IMap currentMap, Move move, int moveSlot)
 {
     for (int i = 0; i < currentMap.ActiveNpc.Length; i++)
     {
         if (currentMap.ActiveNpc[i].Num > 0)
         {
             if (MoveProcessor.IsInRange(move.RangeType, move.Range, this.X, this.Y,
                                         this.Direction,
                                         currentMap.ActiveNpc[i].X, currentMap.ActiveNpc[i].Y))
             {
                 return(true);
             }
         }
     }
     return(false);
 }
예제 #7
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();
        }
예제 #8
0
        public Movement GetMovement(Creature creature)
        {
            ProcessingCreature processingCreature = new ProcessingCreature(creature, TotalCommands, _field);

            while (processingCreature.NotProcessed())
            {
                var dnaNode = processingCreature.ProcessingIndex >= processingCreature.Dna.Length
                    ? DnaNode.Create <MoveProcessor>(0)
                    : processingCreature.Dna[processingCreature.ProcessingIndex];
                var command = dnaNode.Processor.Process(dnaNode.LocalCommand, processingCreature);
                if (command != null)
                {
                    return(command.Movement);
                }
            }
            // Infinitive loop
            return(MoveProcessor.NullMovement(processingCreature.Direction));
        }
예제 #9
0
        public void ApplyNext_QueueNotEmptyAndUserAlive_ReturnsAppliedMoveUse()
        {
            // Arrange
            var moveUse = new MoveUse
            {
                Move            = TestHelpers.CreateMove(),
                User            = TestHelpers.CreateBasicCharacter(),
                OtherCharacters = Enumerable.Empty <Character>(),
            };

            var moveProcessor = new MoveProcessor();

            _ = moveProcessor.Push(moveUse);

            // Act
            var appliedMoveUse = moveProcessor.ApplyNext();

            // Assert
            Assert.That(appliedMoveUse.HasResult, Is.True);
        }
예제 #10
0
        public void ApplyNext_QueueNotEmptyAndUserDead_ReturnsUnappliedMoveUse()
        {
            // Arrange
            var moveUse = new MoveUse
            {
                Move = TestHelpers.CreateMove(),
                User = TestHelpers.CreateBasicCharacter(),
            };

            _ = moveUse.User.ReceiveDamage <Move>(6, TestHelpers.CreateBasicCharacter());

            var moveProcessor = new MoveProcessor();

            _ = moveProcessor.Push(moveUse);

            // Act
            var appliedMoveUse = moveProcessor.ApplyNext();

            // Assert
            Assert.That(appliedMoveUse.HasResult, Is.False);
        }
예제 #11
0
        public void InvokeState()
        {
            var level     = levelFactory.CreateLevel();
            var inputLoop = new InputLoop();
            var playView  = new ConsolePlayView();

            var moveInteractor     = new MoveInteractor(level, playView);
            var exitGameInteractor = new ExitGameInteractor(inputLoop);

            var moveProcessor     = new MoveProcessor(moveInteractor);
            var exitGameProcessor = new ExitGameProcessor(exitGameInteractor);

            var keyboardController = new KeyboardController();

            keyboardController.AddInputProcessor(moveProcessor);
            keyboardController.AddInputProcessor(exitGameProcessor);

            inputLoop.AddUpdatable(keyboardController);

            playView.Draw(level);
            inputLoop.Start();
        }
예제 #12
0
        public void Push_CanUseMove_Succeeds(
            int remainingUses,
            bool expectedResult,
            bool expectedQueueIsEmpty)
        {
            // Arrange
            var moveUse = new MoveUse
            {
                Move = TestHelpers.CreateMove(maxUses: remainingUses),
            };

            var moveProcessor = new MoveProcessor();

            // Act
            var result = moveProcessor.Push(moveUse);

            // Assert
            Assert.Multiple(() =>
            {
                Assert.That(result, Is.EqualTo(expectedResult));
                Assert.That(moveProcessor.MoveUseQueueIsEmpty, Is.EqualTo(expectedQueueIsEmpty));
            });
        }
예제 #13
0
 void Start()
 {
     moveProcessor = gameObject.GetComponent <MoveProcessor>();
     gameModel     = GameObject.FindObjectOfType <GameModel>();
 }
예제 #14
0
 void Start()
 {
     moveProcessor = gameObject.GetComponent<MoveProcessor>();
     gameModel = GameObject.FindObjectOfType<GameModel>();
 }
예제 #15
0
 private void Awake()
 {
     Speed          = speed;
     _moveProcessor = new MoveProcessor(GetComponent <Entity>(), this);
 }
예제 #16
0
파일: Outlaws.cs 프로젝트: zangopmd/Scripts
        public static IEnumerable <Client> GetOutlawPlayersInRange(Client client, int range, Enums.OutlawRole outlawRole)
        {
            var targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, range, client.Player.Map, client.Player.GetActiveRecruit(), client.Player.X, client.Player.Y, Enums.Direction.Up, true, true, false);

            return(targets.Foes.OfType <Recruit>().Where(x => x.Owner.Player.OutlawRole == outlawRole).Select(x => x.Owner));
        }