/** * Updates the map $map by processing the opponents moves. We only need to do * this for regions not present in lasts update map command * * @param \Mastercoding\Conquest\Object\Map $map * @param \Mastercoding\Conquest\Command\OpponentMoves\Moves $movesCommand * @param \Mastercoding\Conquest\Command\UpdateMap\Update $lastUpdateCommand */ public function uppateOpponentMoves(\Mastercoding\Conquest\Object\Map $map, \Mastercoding\Conquest\Command\OpponentMoves\Moves $movesCommand, \Mastercoding\Conquest\Command\UpdateMap\Update $lastUpdateCommand) { // regions not present in last update $moves = new \SplObjectStorage(); foreach ($movesCommand->getMoves() as $move) { // only attack/transfer if ($move instanceof \Mastercoding\Conquest\Move\AttackTransfer) { // attack transfer $attackTransfer = $move->getAttackTransfer(); $regionId = $attackTransfer[0]['regionToId']; // ok foreach ($lastUpdateCommand->getUpdates() as $update) { if ($update['regionId'] == $regionId) { continue 2; } } // not same $moves->attach($move); } } // ok, create update map command $updateMap = new \Mastercoding\Conquest\Command\UpdateMap\Update(); foreach ($moves as $move) { foreach ($move->getAttackTransfer() as $attackTransfer) { $regionId = $attackTransfer['regionToId']; $owner = $move->getPlayerName(); $armies = $attackTransfer['armies']; // add update $updateMap->addUpdate(array('regionId' => $regionId, 'owner' => $owner, 'armies' => $armies)); } } // update $this->updateMap($map, $updateMap); }
/** * @depends testSetupPlayers */ public function testUpdateMap(\Mastercoding\Conquest\Object\Map $map) { // create continents setup $mapUpdate = new \Mastercoding\Conquest\Command\UpdateMap\Update(); // add some updates $mapUpdate->addUpdate(array('regionId' => 1, 'owner' => 'player1', 'armies' => 2)); $mapUpdate->addUpdate(array('regionId' => 2, 'owner' => 'player1', 'armies' => 3)); $mapUpdate->addUpdate(array('regionId' => 4, 'owner' => 'neutral', 'armies' => 4)); $mapUpdate->addUpdate(array('regionId' => 7, 'owner' => 'neutral', 'armies' => 5)); // process $this->mapUpdater->updateMap($map, $mapUpdate); // assert owners $this->assertEquals('player1', $map->getRegionById(2)->getOwner()->getName()); $this->assertEquals('unknown', $map->getRegionById(3)->getOwner()->getName()); $this->assertEquals('neutral', $map->getRegionById(4)->getOwner()->getName()); // asert armies $this->assertEquals(4, $map->getRegionById(4)->getArmies()); $this->assertEquals(2, $map->getRegionById(1)->getArmies()); return $map; }