- added new commandline option --map-preview=x where x is the mapname (without extension)

This commit is contained in:
Mark Vejvoda 2011-09-16 00:34:14 +00:00
parent aee6c948a2
commit 8f0db3e30d
6 changed files with 131 additions and 12 deletions

View File

@ -784,6 +784,10 @@ void Game::init(bool initForPreviewOnly)
Window::handleEvent(); Window::handleEvent();
SDL_PumpEvents(); SDL_PumpEvents();
if(world.getFactionCount() == 1 && world.getFaction(0)->getType()->getPersonalityType() == fpt_Observer) {
withRainEffect = false;
}
if(withRainEffect){ if(withRainEffect){
//weather particle systems //weather particle systems
if(world.getTileset()->getWeather() == wRainy){ if(world.getTileset()->getWeather() == wRainy){
@ -2296,7 +2300,17 @@ void Game::checkWinnerStandard() {
} }
scriptManager.onGameOver(true); scriptManager.onGameOver(true);
showWinMessageBox();
if(world.getFactionCount() == 1 && world.getFaction(0)->getType()->getPersonalityType() == fpt_Observer) {
//printf("!!!!!!!!!!!!!!!!!!!!");
//gameCamera.setMoveY(100.0);
gameCamera.zoom(-300);
//gameCamera.update();
}
else {
showWinMessageBox();
}
} }
} }
else { else {

View File

@ -103,6 +103,7 @@ const char *GAME_ARGS[] = {
"--connecthost", "--connecthost",
"--starthost", "--starthost",
"--load-scenario", "--load-scenario",
"--preview-map",
"--version", "--version",
"--opengl-info", "--opengl-info",
"--sdl-info", "--sdl-info",
@ -145,6 +146,7 @@ enum GAME_ARG_TYPE {
GAME_ARG_CLIENT, GAME_ARG_CLIENT,
GAME_ARG_SERVER, GAME_ARG_SERVER,
GAME_ARG_LOADSCENARIO, GAME_ARG_LOADSCENARIO,
GAME_ARG_PREVIEW_MAP,
GAME_ARG_VERSION, GAME_ARG_VERSION,
GAME_ARG_OPENGL_INFO, GAME_ARG_OPENGL_INFO,
GAME_ARG_SDL_INFO, GAME_ARG_SDL_INFO,
@ -1009,6 +1011,7 @@ void printParameterHelp(const char *argv0, bool foundInvalidArgs) {
printf("\n%s=x\t\t\tAuto connects to a network server at IP or hostname x",GAME_ARGS[GAME_ARG_CLIENT]); printf("\n%s=x\t\t\tAuto connects to a network server at IP or hostname x",GAME_ARGS[GAME_ARG_CLIENT]);
printf("\n%s\t\t\tAuto creates a network server.",GAME_ARGS[GAME_ARG_SERVER]); printf("\n%s\t\t\tAuto creates a network server.",GAME_ARGS[GAME_ARG_SERVER]);
printf("\n%s=x\t\tAuto loads the specified scenario by scenario name.",GAME_ARGS[GAME_ARG_LOADSCENARIO]); printf("\n%s=x\t\tAuto loads the specified scenario by scenario name.",GAME_ARGS[GAME_ARG_LOADSCENARIO]);
printf("\n%s=x\t\tAuto Preview the specified map by map name.",GAME_ARGS[GAME_ARG_PREVIEW_MAP]);
printf("\n%s\t\t\tdisplays the version string of this program.",GAME_ARGS[GAME_ARG_VERSION]); printf("\n%s\t\t\tdisplays the version string of this program.",GAME_ARGS[GAME_ARG_VERSION]);
printf("\n%s\t\t\tdisplays your video driver's OpenGL information.",GAME_ARGS[GAME_ARG_OPENGL_INFO]); printf("\n%s\t\t\tdisplays your video driver's OpenGL information.",GAME_ARGS[GAME_ARG_OPENGL_INFO]);
printf("\n%s\t\t\tdisplays your SDL version information.",GAME_ARGS[GAME_ARG_SDL_INFO]); printf("\n%s\t\t\tdisplays your SDL version information.",GAME_ARGS[GAME_ARG_SDL_INFO]);
@ -3116,6 +3119,8 @@ int glestMain(int argc, char** argv) {
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
GameSettings startupGameSettings;
//parse command line //parse command line
if(hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_SERVER]) == true) { if(hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_SERVER]) == true) {
program->initServer(mainWindow,false,true); program->initServer(mainWindow,false,true);
@ -3123,6 +3128,64 @@ int glestMain(int argc, char** argv) {
else if(hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_AUTOSTART_LASTGAME])) == true) { else if(hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_AUTOSTART_LASTGAME])) == true) {
program->initServer(mainWindow,true,false); program->initServer(mainWindow,true,false);
} }
else if(hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_PREVIEW_MAP])) == true) {
int foundParamIndIndex = -1;
hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_PREVIEW_MAP]) + string("="),&foundParamIndIndex);
if(foundParamIndIndex < 0) {
hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_PREVIEW_MAP]),&foundParamIndIndex);
}
string mapName = argv[foundParamIndIndex];
vector<string> paramPartTokens;
Tokenize(mapName,paramPartTokens,"=");
if(paramPartTokens.size() >= 2 && paramPartTokens[1].length() > 0) {
string autoloadMapName = paramPartTokens[1];
GameSettings *gameSettings = &startupGameSettings;
int factionCount= 0;
gameSettings->setMap(autoloadMapName);
gameSettings->setTileset("forest");
gameSettings->setTech("megapack");
gameSettings->setDefaultUnits(false);
gameSettings->setDefaultResources(false);
gameSettings->setDefaultVictoryConditions(true);
gameSettings->setFogOfWar(false);
gameSettings->setAllowObservers(true);
gameSettings->setPathFinderType(pfBasic);
for(int i = 0; i < GameConstants::maxPlayers; ++i) {
ControlType ct= ctClosed;
gameSettings->setNetworkPlayerStatuses(i, 0);
gameSettings->setFactionControl(i, ct);
gameSettings->setStartLocationIndex(i, i);
gameSettings->setResourceMultiplierIndex(i, 10);
gameSettings->setNetworkPlayerName(i, "Closed");
}
ControlType ct= ctHuman;
gameSettings->setNetworkPlayerStatuses(0, 0);
gameSettings->setFactionControl(0, ct);
gameSettings->setFactionTypeName(0, formatString(GameConstants::OBSERVER_SLOTNAME));
gameSettings->setTeam(0, GameConstants::maxPlayers + fpt_Observer - 1);
gameSettings->setStartLocationIndex(0, 0);
gameSettings->setNetworkPlayerName(0, GameConstants::OBSERVER_SLOTNAME);
gameSettings->setFactionCount(1);
Config &config = Config::getInstance();
gameSettings->setEnableServerControlledAI(config.getBool("ServerControlledAI","true"));
gameSettings->setNetworkFramePeriod(config.getInt("NetworkSendFrameCount","20"));
program->initServer(mainWindow,gameSettings);
}
else {
printf("\nInvalid map name specified on commandline [%s] map [%s]\n\n",argv[foundParamIndIndex],(paramPartTokens.size() >= 2 ? paramPartTokens[1].c_str() : NULL));
printParameterHelp(argv[0],foundInvalidArgs);
delete mainWindow;
return -1;
}
}
else if(hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_CLIENT])) == true) { else if(hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_CLIENT])) == true) {
int foundParamIndIndex = -1; int foundParamIndIndex = -1;
hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_CLIENT]) + string("="),&foundParamIndIndex); hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_CLIENT]) + string("="),&foundParamIndIndex);

View File

@ -190,6 +190,15 @@ void Program::initServer(WindowGl *window, bool autostart,bool openNetworkSlots)
mainMenu->setState(new MenuStateCustomGame(this, mainMenu, openNetworkSlots, false, autostart)); mainMenu->setState(new MenuStateCustomGame(this, mainMenu, openNetworkSlots, false, autostart));
} }
void Program::initServer(WindowGl *window, GameSettings *settings) {
MainMenu* mainMenu= NULL;
init(window);
mainMenu= new MainMenu(this);
setState(mainMenu);
mainMenu->setState(new MenuStateCustomGame(this, mainMenu, false, false, true, settings));
}
void Program::initClient(WindowGl *window, const Ip &serverIp) { void Program::initClient(WindowGl *window, const Ip &serverIp) {
MainMenu* mainMenu= NULL; MainMenu* mainMenu= NULL;

View File

@ -35,6 +35,7 @@ namespace Glest{ namespace Game{
class Program; class Program;
class MainWindow; class MainWindow;
class GameSettings;
// ===================================================== // =====================================================
// class ProgramState // class ProgramState
@ -152,6 +153,7 @@ public:
GraphicMessageBox * getMsgBox() { return &msgBox; } GraphicMessageBox * getMsgBox() { return &msgBox; }
void initNormal(WindowGl *window); void initNormal(WindowGl *window);
void initServer(WindowGl *window,bool autostart=false,bool openNetworkSlots=false); void initServer(WindowGl *window,bool autostart=false,bool openNetworkSlots=false);
void initServer(WindowGl *window, GameSettings *settings);
void initClient(WindowGl *window, const Ip &serverIp); void initClient(WindowGl *window, const Ip &serverIp);
void initScenario(WindowGl *window, string autoloadScenarioName); void initScenario(WindowGl *window, string autoloadScenarioName);

View File

@ -47,11 +47,13 @@ struct FormatString {
// class MenuStateCustomGame // class MenuStateCustomGame
// ===================================================== // =====================================================
MenuStateCustomGame::MenuStateCustomGame(Program *program, MainMenu *mainMenu, bool openNetworkSlots,bool parentMenuIsMasterserver, bool autostart) : MenuStateCustomGame::MenuStateCustomGame(Program *program, MainMenu *mainMenu, bool openNetworkSlots,bool parentMenuIsMasterserver, bool autostart, GameSettings *settings) :
MenuState(program, mainMenu, "new-game") MenuState(program, mainMenu, "new-game")
{ {
forceWaitForShutdown = true; forceWaitForShutdown = true;
this->autostart = autostart; this->autostart = autostart;
this->autoStartSettings = settings;
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d] autostart = %d\n",__FILE__,__FUNCTION__,__LINE__,autostart); if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d] autostart = %d\n",__FILE__,__FUNCTION__,__LINE__,autostart);
containerName = "CustomGame"; containerName = "CustomGame";
@ -700,7 +702,7 @@ void MenuStateCustomGame::mouseClick(int x, int y, MouseButton mouseButton){
else if(buttonPlayNow.mouseClick(x,y) && buttonPlayNow.getEnabled()) { else if(buttonPlayNow.mouseClick(x,y) && buttonPlayNow.getEnabled()) {
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d]\n",__FILE__,__FUNCTION__,__LINE__); if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d]\n",__FILE__,__FUNCTION__,__LINE__);
PlayNow(); PlayNow(true);
return; return;
} }
else if(buttonRestoreLastSettings.mouseClick(x,y) && buttonRestoreLastSettings.getEnabled()) { else if(buttonRestoreLastSettings.mouseClick(x,y) && buttonRestoreLastSettings.getEnabled()) {
@ -1114,9 +1116,11 @@ void MenuStateCustomGame::RestoreLastGameSettings() {
} }
} }
void MenuStateCustomGame::PlayNow() { void MenuStateCustomGame::PlayNow(bool saveGame) {
MutexSafeWrapper safeMutex((publishToMasterserverThread != NULL ? publishToMasterserverThread->getMutexThreadObjectAccessor() : NULL),string(__FILE__) + "_" + intToStr(__LINE__)); MutexSafeWrapper safeMutex((publishToMasterserverThread != NULL ? publishToMasterserverThread->getMutexThreadObjectAccessor() : NULL),string(__FILE__) + "_" + intToStr(__LINE__));
saveGameSettingsToFile("lastCustomGamSettings.mgg"); if(saveGame == true) {
saveGameSettingsToFile("lastCustomGamSettings.mgg");
}
forceWaitForShutdown = false; forceWaitForShutdown = false;
closeUnusedSlots(); closeUnusedSlots();
@ -2041,9 +2045,18 @@ void MenuStateCustomGame::update() {
if(SystemFlags::getSystemSettingType(SystemFlags::debugPerformance).enabled && chrono.getMillis() > 0) chrono.start(); if(SystemFlags::getSystemSettingType(SystemFlags::debugPerformance).enabled && chrono.getMillis() > 0) chrono.start();
if(autostart == true) { if(autostart == true) {
autostart = false;
safeMutex.ReleaseLock(); safeMutex.ReleaseLock();
RestoreLastGameSettings(); if(autoStartSettings != NULL) {
PlayNow();
setupUIFromGameSettings(*autoStartSettings);
ServerInterface* serverInterface= NetworkManager::getInstance().getServerInterface();
serverInterface->setGameSettings(autoStartSettings,false);
}
else {
RestoreLastGameSettings();
}
PlayNow((autoStartSettings == NULL));
return; return;
} }
} }
@ -2289,9 +2302,17 @@ void MenuStateCustomGame::loadGameSettings(GameSettings *gameSettings,bool force
gameSettings->setMap(getCurrentMapFile()); gameSettings->setMap(getCurrentMapFile());
gameSettings->setTileset(tilesetFiles[listBoxTileset.getSelectedItemIndex()]); gameSettings->setTileset(tilesetFiles[listBoxTileset.getSelectedItemIndex()]);
gameSettings->setTech(techTreeFiles[listBoxTechTree.getSelectedItemIndex()]); gameSettings->setTech(techTreeFiles[listBoxTechTree.getSelectedItemIndex()]);
gameSettings->setDefaultUnits(true);
gameSettings->setDefaultResources(true); if(autoStartSettings != NULL) {
gameSettings->setDefaultVictoryConditions(true); gameSettings->setDefaultUnits(autoStartSettings->getDefaultUnits());
gameSettings->setDefaultResources(autoStartSettings->getDefaultResources());
gameSettings->setDefaultVictoryConditions(autoStartSettings->getDefaultVictoryConditions());
}
else {
gameSettings->setDefaultUnits(true);
gameSettings->setDefaultResources(true);
gameSettings->setDefaultVictoryConditions(true);
}
gameSettings->setFogOfWar(listBoxFogOfWar.getSelectedItemIndex() == 0 || gameSettings->setFogOfWar(listBoxFogOfWar.getSelectedItemIndex() == 0 ||
listBoxFogOfWar.getSelectedItemIndex() == 1 ); listBoxFogOfWar.getSelectedItemIndex() == 1 );
@ -2653,6 +2674,8 @@ void MenuStateCustomGame::setupUIFromGameSettings(const GameSettings &gameSettin
listBoxMapFilter.setSelectedItemIndex(gameSettings.getMapFilterIndex()); listBoxMapFilter.setSelectedItemIndex(gameSettings.getMapFilterIndex());
listBoxMap.setItems(formattedPlayerSortedMaps[gameSettings.getMapFilterIndex()]); listBoxMap.setItems(formattedPlayerSortedMaps[gameSettings.getMapFilterIndex()]);
printf("In [%s::%s line %d] map [%s]\n",__FILE__,__FUNCTION__,__LINE__,gameSettings.getMap().c_str());
string mapFile = gameSettings.getMap(); string mapFile = gameSettings.getMap();
mapFile = formatString(mapFile); mapFile = formatString(mapFile);
listBoxMap.setSelectedItem(mapFile); listBoxMap.setSelectedItem(mapFile);
@ -2683,12 +2706,15 @@ void MenuStateCustomGame::setupUIFromGameSettings(const GameSettings &gameSettin
if(gameSettings.getFogOfWar() == false){ if(gameSettings.getFogOfWar() == false){
listBoxFogOfWar.setSelectedItemIndex(2); listBoxFogOfWar.setSelectedItemIndex(2);
} }
if((gameSettings.getFlagTypes1() & ft1_show_map_resources) == ft1_show_map_resources){ if((gameSettings.getFlagTypes1() & ft1_show_map_resources) == ft1_show_map_resources){
if(gameSettings.getFogOfWar() == true){ if(gameSettings.getFogOfWar() == true){
listBoxFogOfWar.setSelectedItemIndex(1); listBoxFogOfWar.setSelectedItemIndex(1);
} }
} }
//printf("In [%s::%s line %d]\n",__FILE__,__FUNCTION__,__LINE__);
listBoxAllowObservers.setSelectedItem(gameSettings.getAllowObservers() == true ? lang.get("Yes") : lang.get("No")); listBoxAllowObservers.setSelectedItem(gameSettings.getAllowObservers() == true ? lang.get("Yes") : lang.get("No"));
listBoxEnableObserverMode.setSelectedItem(gameSettings.getEnableObserverModeAtEndGame() == true ? lang.get("Yes") : lang.get("No")); listBoxEnableObserverMode.setSelectedItem(gameSettings.getEnableObserverModeAtEndGame() == true ? lang.get("Yes") : lang.get("No"));
listBoxPathFinderType.setSelectedItemIndex(gameSettings.getPathFinderType()); listBoxPathFinderType.setSelectedItemIndex(gameSettings.getPathFinderType());
@ -2713,9 +2739,12 @@ void MenuStateCustomGame::setupUIFromGameSettings(const GameSettings &gameSettin
if(gameSettings.getFactionControl(i) < listBoxControls[i].getItemCount()) { if(gameSettings.getFactionControl(i) < listBoxControls[i].getItemCount()) {
listBoxControls[i].setSelectedItemIndex(gameSettings.getFactionControl(i)); listBoxControls[i].setSelectedItemIndex(gameSettings.getFactionControl(i));
} }
updateResourceMultiplier(i); updateResourceMultiplier(i);
listBoxRMultiplier[i].setSelectedItemIndex(gameSettings.getResourceMultiplierIndex(i)); listBoxRMultiplier[i].setSelectedItemIndex(gameSettings.getResourceMultiplierIndex(i));
listBoxTeams[i].setSelectedItemIndex(gameSettings.getTeam(i)); listBoxTeams[i].setSelectedItemIndex(gameSettings.getTeam(i));
lastSelectedTeamIndex[i] = listBoxTeams[i].getSelectedItemIndex(); lastSelectedTeamIndex[i] = listBoxTeams[i].getSelectedItemIndex();
string factionName = gameSettings.getFactionTypeName(i); string factionName = gameSettings.getFactionTypeName(i);

View File

@ -147,6 +147,8 @@ private:
Texture2D *mapPreviewTexture; Texture2D *mapPreviewTexture;
bool autostart; bool autostart;
GameSettings *autoStartSettings;
std::map<int,int> lastSelectedTeamIndex; std::map<int,int> lastSelectedTeamIndex;
float rMultiplierOffset; float rMultiplierOffset;
bool hasCheckedForUPNP; bool hasCheckedForUPNP;
@ -162,7 +164,7 @@ private:
bool forceWaitForShutdown; bool forceWaitForShutdown;
public: public:
MenuStateCustomGame(Program *program, MainMenu *mainMenu ,bool openNetworkSlots= false, bool parentMenuIsMasterserver=false, bool autostart=false); MenuStateCustomGame(Program *program, MainMenu *mainMenu ,bool openNetworkSlots= false, bool parentMenuIsMasterserver=false, bool autostart=false,GameSettings *settings=NULL);
virtual ~MenuStateCustomGame(); virtual ~MenuStateCustomGame();
void mouseClick(int x, int y, MouseButton mouseButton); void mouseClick(int x, int y, MouseButton mouseButton);
@ -205,7 +207,7 @@ private:
void loadFactionTexture(string filepath); void loadFactionTexture(string filepath);
void RestoreLastGameSettings(); void RestoreLastGameSettings();
void PlayNow(); void PlayNow(bool saveGame);
void SetActivePlayerNameEditor(); void SetActivePlayerNameEditor();
void cleanup(); void cleanup();