Ejemplo n.º 1
0
void InGameTopMenuLayer::shutdownFunction() {
	CCLOG("QUIT!=================================================================================================");
	std::string quitInfo = "QUITTING";
	if (Model::getInstance()->getGameMode() == NETWORK) {
		ServerCommunication().sendGameInfo(quitInfo);
	} else if (Model::getInstance()->getStartedAs() == PVP || Model::getInstance()->getStartedAs() == PVA) {
		OfflineLogger::getInstance()->logInformationForCurrentGame(quitInfo);
	}

	GameStatistics().increaseSecondsPlayedBy(BW_Time::getMilliSecondsOverCached() / 1000 + 1);

	SceneControl::replaceScene(SceneControl::startMenuScene(), false);
}
Ejemplo n.º 2
0
void Model::initializePlayer() {
	_startedAs = _gameMode;
	GameStatistics gs = GameStatistics();
	if (_gameMode == PVP) {
		_leftArmy->addPlayer(new Player("Left Player", Race::createRaceWithId(_player1race), false, false));
		_rightArmy->addPlayer(new Player("Right Player", Race::createRaceWithId(_player2race), false, false));
		gs.increaseLocalMultiplayerGamesStarted();
	} else if (_gameMode == PVA) {
		_thisPlayer = new Player("Left Player", Race::createRaceWithId(_player1race), false, false);
		_leftArmy->addPlayer(_thisPlayer);

		_rightArmy->addPlayer(new Player("Right Player", Race::createRaceWithId(_player2race), true, false));
		gs.increaseLocalGamesStarted();
	} else if (_gameMode == BALANCE_TEST) {
		_thisPlayer = new Player("Left Player", Race::createRaceWithId(_player1race), true, false);
		_leftArmy->addPlayer(_thisPlayer);

		_rightArmy->addPlayer(new Player("Right Player", Race::createRaceWithId(_player2race), true, false));
	} else if (_gameMode == TUTORIAL) {
		_thisPlayer = new Player("Left Player", Race::createRaceWithId(_player1race), false, false);
		_leftArmy->addPlayer(_thisPlayer);

		_rightArmy->addPlayer(new Player("Right Player", Race::createRaceWithId(_player2race), false, false));
		gs.increaseLocalGamesStarted();
	} else if (_gameMode == NETWORK) {
		CCLOG("init player");
		std::vector<GameStat> gameStats = NetworkSingleton::getInstance()->_gameStats;
		GameStat myGameStat = NetworkSingleton::getInstance()->_myGameStat;
		std::vector < std::string > names = NetworkSingleton::getInstance()->_names;
		int myId = myGameStat.getPlayerId();
		std::string myName = NetworkSingleton::getInstance()->_myName;

		int numberOfPlayers = names.size() + 1; //+1 because of me
		ArmyType firstPlayersArmy = myId < (numberOfPlayers / 2) ? LEFT : RIGHT;
		ArmyType secondPlayersArmy = myId < (numberOfPlayers / 2) ? RIGHT : LEFT;
		_thisPlayer = NULL;
		//create the players, we have ids 1-$numberOfPlayers
		for (int playerId = 0; playerId < numberOfPlayers; playerId++) {
			ArmyType armyType = (playerId < (numberOfPlayers / 2)) ? firstPlayersArmy : secondPlayersArmy;
			std::string armyString = armyType == LEFT ? "left" : "right";
			//search gamestat with the corresponding id
			if (playerId == myId) {
				Race* r = 0;

				if (myGameStat.getRace() == 0) {
					r = Race::buildRaceFromRandomizedRaceString(myGameStat.getRandomRaceString());
				} else {
					r = Race::createRaceWithId(myGameStat.getRace());
				}

				Player* player = new Player(myName, r, false, false);
				player->_networkPlayerId = playerId;
				_thisPlayer = player;
				getMyArmy(armyType)->addPlayer(_thisPlayer);
				CCLOG("Added me with id: %i to %s", playerId, armyString.c_str());
			} else {
				bool addedAPlayer = false;
				for (unsigned int gi = 0; gi < gameStats.size(); gi++) {
					if (gameStats[gi].getPlayerId() == playerId) {
						addedAPlayer = true;
						std::string name = names[gi];
						int raceId = gameStats[gi].getRace();

						Race* r = 0;
						if (raceId == 0) {
							r = Race::buildRaceFromRandomizedRaceString(gameStats[gi].getRandomRaceString());
						} else {
							r = Race::createRaceWithId(raceId);
						}
						if (r == 0) //invalid network message
							r = Race::createRaceWithId(1);
						Player* player = new Player(name, r, false, true);
						player->_networkPlayerId = playerId;
						// adding some gold to avoid too much async behavior
						// but do not give too much to minimize cheating possibilities
						player->applyNetworkPlayerGoldBuffers();
						getMyArmy(armyType)->addPlayer(player);
						CCLOG("Added player with id: %i to %s", playerId, armyString.c_str());
					}
				}
				if (!addedAPlayer)
					CCLOG("If you see this, there is a bug in Model.cpp. A player is missing...");
			}
			if (_thisPlayer == NULL || getMyArmy(LEFT)->getPlayers().size() == 0 || getMyArmy(RIGHT)->getPlayers().size() == 0) {
				//this kills the game!

				CCLOG("KNOWN BUG! KILLED THE GAME. left: %i, right: %i, _thisPlayer: %s", (int) getMyArmy(LEFT)->getPlayers().size(),
						(int) getMyArmy(RIGHT)->getPlayers().size(), (_thisPlayer == NULL ? "NULL" : "NOT NULL"));
				SceneControl::replaceScene(SceneControl::queueScene(myGameStat.getRace(), myName), true);
			}
		}
		gs.increaseNetworkGamesStarted();
	}
}
Ejemplo n.º 3
0
bool AchievementPlayedHours::isAchievedInternCalculation() {
	return ((int) (GameStatistics().getSecondsPlayed() / 3600)) >= _hours;
}