コード例 #1
0
void CTimeManager::endDayEventHandler(const IGameEvent &event)
{
	// Only one "NoMoreEventsToday" event is on the events queue at time,
	// so we need to add a new event of this type for tomorrow

	CDate date = event.getDate();
	date.setDay(date.getDay()+1);
	date.setHour(23);
	date.setMin(59);
	date.setSec(59);
	CGameEngine::getInstance()->getEventManager()->addEvent(new CEndDayEvent(date));
}
コード例 #2
0
IGame* CSinglePlayerGame::load(const CPfGames &game)
{
    LOG_DEBUG("CSinglePlayerGame::load");

	CSinglePlayerGame *singlePlayerGame = new CSinglePlayerGame(game);
	singlePlayerGame->loadGameEvents();

	CDate date = singlePlayerGame->m_optionManager->getGameCurrentDate();
	CGameEngine::getInstance()->getTimeManager()->setCurrentTime(date);

	date.setHour(23);
	date.setMin(59);
	date.setSec(59);
	CGameEngine::getInstance()->getEventManager()->addEvent(new CEndDayEvent(date));

	return singlePlayerGame;
}
コード例 #3
0
void CSinglePlayerGame::simulateMatch(const CPfMatches &match)
{
	CEventManager *eventMngr = CGameEngine::getInstance()->getEventManager();

    std::string        currentTimestamp = match.getDMatch().getTimestamp();
	IPfTeamPlayersDAO  *teamPlayersDAO  = m_daoFactory->getIPfTeamPlayersDAO();
    IPfTeamAveragesDAO *teamsAvgDAO     = m_daoFactory->getIPfTeamAveragesDAO();

    eventMngr->addEvent(new CStartMatchEvent(match.getDMatch(), match.getXMatch()));

    int xHomeTeam  = match.getXFkTeamHome();
    int xAwayTeam  = match.getXFkTeamAway();
    CPfTeamAverages *homeTeamAvg = teamsAvgDAO->findByXTeam(xHomeTeam, currentTimestamp);
    CPfTeamAverages *awayTeamAvg = teamsAvgDAO->findByXTeam(xAwayTeam, currentTimestamp);
    int nHomeGoals = getRandomNGoals(homeTeamAvg, awayTeamAvg);
    int nAwayGoals = getRandomNGoals(awayTeamAvg, homeTeamAvg);

    delete homeTeamAvg;
    delete awayTeamAvg;

    if( nHomeGoals>0 ){
        std::vector<CPfTeamPlayers*>* teamPlayesList = teamPlayersDAO->findLineUpByXFkTeam(xHomeTeam, currentTimestamp);
        while( nHomeGoals>0 ){
            int numPlayer = rand()%teamPlayesList->size();
            if(numPlayer == 0) { //Goalie don't score
                numPlayer = 10;
            }
            CPfTeamPlayers *teamPlayer = teamPlayesList->operator[](numPlayer);

            int minute = rand()%90;
            CDate eventDate = match.getDMatch();
            eventDate.setMin(eventDate.getMin()+minute);

            eventMngr->addEvent(new CGoalMatchEvent(eventDate, match.getXMatch(), xHomeTeam, teamPlayer->getXTeamPlayer(), minute, false));

            nHomeGoals--;
        }
        teamPlayersDAO->freeVector(teamPlayesList);
    }
    if( nAwayGoals>0 ){
        std::vector<CPfTeamPlayers*>* teamPlayesList = teamPlayersDAO->findLineUpByXFkTeam(xAwayTeam, currentTimestamp);
        while( nAwayGoals>0 ){
            int numPlayer = rand()%teamPlayesList->size();
            if(numPlayer == 0) { //Goalie don't score
                numPlayer = 10;
            }
            CPfTeamPlayers *teamPlayer = teamPlayesList->operator[](numPlayer);

            int minute = rand()%90;
            CDate eventDate = match.getDMatch();
            eventDate.setMin(eventDate.getMin()+minute);

            eventMngr->addEvent(new CGoalMatchEvent(eventDate, match.getXMatch(), xAwayTeam, teamPlayer->getXTeamPlayer(), minute, false));

            nAwayGoals--;
        }
        teamPlayersDAO->freeVector(teamPlayesList);
    }

    CDate eventDate = match.getDMatch();
    eventDate.setMin(eventDate.getMin()+90);

    eventMngr->addEvent(new CEndMatchEvent(eventDate, match.getXMatch()));
}
コード例 #4
0
IGame* CSinglePlayerGame::newGame(const CPfUsers &user, const std::string &gameName, const std::string &coachName)
{
    LOG_DEBUG("CSinglePlayerGame::newGame");

    CDate nowDate;
    CPfGames game;
    game.setDLastSaved(nowDate);
    game.setSDriverName("SQLite");
    game.setSConnectionString(CResourceManager::getInstance()->getDbFileName());
    game.setSGameName(gameName);
    game.setSGameType(S_GAME_TYPE_SINGLEPLAYER);
    game.setXFkUser(user.getXUser());

    // With this way, here we only need to set the initial environment for
    // a new game, forgetting the creation of attributes for a CSinglePlayerGame
    // object. This task rests now on constructor.
	CSinglePlayerGame *singlePlayerGame = new CSinglePlayerGame(game);

    // retrieve the last season in the database and the end date of the itself
    CDate		maxDate = CDate::MIN_DATE;
    CPfSeasons *season	= singlePlayerGame->m_daoFactory->getIPfSeasonsDAO()->findLastSeason();
    if( season->getXSeason() == 0 ){
    	throw PFEXCEPTION("The last season is NULL");
    }

	IPfCompetitionPhasesBySeasonDAO 			*competitionBySeasonDAO		= singlePlayerGame->m_daoFactory->getIPfCompetitionPhasesBySeasonDAO();
	std::vector<CPfCompetitionPhasesBySeason*>  *competitionsBySeasonList	= competitionBySeasonDAO->findByXFkSeason(season->getXSeason_str());
	std::vector<CPfCompetitionPhasesBySeason*>::iterator itCompetitionsBySeason;
	for( itCompetitionsBySeason=competitionsBySeasonList->begin(); itCompetitionsBySeason!=competitionsBySeasonList->end(); itCompetitionsBySeason++ ){
		CPfCompetitionPhasesBySeason *competitionBySeason = *itCompetitionsBySeason;
		if( competitionBySeason->getDEndCompetitionPhase()>maxDate ){
			maxDate = competitionBySeason->getDEndCompetitionPhase();
		}
	}

	singlePlayerGame->m_optionManager->setGameNew(true);
	singlePlayerGame->m_optionManager->setGameCurrentDate(maxDate);
	singlePlayerGame->m_optionManager->setGameCurrentSeason(season->getXSeason());

	// Create player's coach
	// TODO: create coach in another way. Maybe player settings?
	CPfCoaches *playerCoach = new CPfCoaches();
	playerCoach->setSName(coachName);
	playerCoach->setSShortName(coachName);
	playerCoach->setSPhoto("p_unknown");
	playerCoach->setXFkFormationSelected(1);
	playerCoach->setXFkCountry(1);
	singlePlayerGame->m_daoFactory->getIPfCoachesDAO()->insertReg(playerCoach);
	singlePlayerGame->m_optionManager->setGamePlayerCoach(playerCoach->getXCoach());
	delete playerCoach;


	competitionBySeasonDAO->freeVector(competitionsBySeasonList);
    delete season;

    singlePlayerGame->loadGameEvents();

	CDate date = singlePlayerGame->m_optionManager->getGameCurrentDate();
	CGameEngine::getInstance()->getTimeManager()->setCurrentTime(date);

	date.setHour(23);
	date.setMin(59);
	date.setSec(59);
	CGameEngine::getInstance()->getEventManager()->addEvent(new CEndDayEvent(date));

    return singlePlayerGame;
}