MegaGlest/source/glest_game/facilities/auto_test.cpp

87 lines
2.2 KiB
C++

// ==============================================================
// This file is part of Glest (www.glest.org)
//
// Copyright (C) 2001-2009 Martio Figueroa
//
// You can redistribute this code and/or modify it under
// the terms of the GNU General Public License as published
// by the Free Software Foundation; either version 2 of the
// License, or (at your option) any later version
// ==============================================================
#include "auto_test.h"
#include "program.h"
#include "main_menu.h"
#include "menu_state_new_game.h"
#include "menu_state_scenario.h"
#include "game.h"
#include "config.h"
#include "leak_dumper.h"
namespace Glest{ namespace Game{
// =====================================================
// class AutoTest
// =====================================================
const time_t AutoTest::invalidTime = -1;
const time_t AutoTest::gameTime = 60*20;
// ===================== PUBLIC ========================
AutoTest::AutoTest(){
gameStartTime = invalidTime;
random.init(time(NULL));
}
AutoTest & AutoTest::getInstance(){
static AutoTest autoTest;
return autoTest;
}
void AutoTest::updateIntro(Program *program){
program->setState(new MainMenu(program));
}
void AutoTest::updateRoot(Program *program, MainMenu *mainMenu){
mainMenu->setState(new MenuStateNewGame(program, mainMenu));
}
void AutoTest::updateNewGame(Program *program, MainMenu *mainMenu){
mainMenu->setState(new MenuStateScenario(program, mainMenu, Config::getInstance().getPathListForType(ptScenarios)));
}
void AutoTest::updateScenario(MenuStateScenario *menuStateScenario){
gameStartTime = invalidTime;
int scenarioIndex = random.randRange(0, menuStateScenario->getScenarioCount()-1);
menuStateScenario->setScenario(scenarioIndex);
menuStateScenario->launchGame();
}
void AutoTest::updateGame(Game *game){
// record start time
if(gameStartTime==invalidTime)
{
gameStartTime = time(NULL);
}
// quit if we've espend enough time in the game
if(time(NULL)-gameStartTime>gameTime){
Program *program = game->getProgram();
Stats endStats = game->quitGame();
Game::exitGameState(program, endStats);
}
}
void AutoTest::updateBattleEnd(Program *program){
program->setState(new MainMenu(program));
}
}}//end namespace