- added more debug statements to try to track beta bugs
- added safer customization of ini files - added ability to customize game keys - added more error checking for ogg file loading - added faction loader progress - added a few more thread protections on custom menu
This commit is contained in:
parent
25bc515466
commit
085d4e4bfe
|
@ -0,0 +1,43 @@
|
||||||
|
; === propertyMap File ===
|
||||||
|
|
||||||
|
RenderNetworkStatus=N
|
||||||
|
ShowFullConsole=M
|
||||||
|
Screenshot=E
|
||||||
|
FreeCameraMode=F
|
||||||
|
ResetCameraMode=32
|
||||||
|
CameraModeLeft=vkLeft
|
||||||
|
CameraModeRight=vkRight
|
||||||
|
CameraModeUp=vkUp
|
||||||
|
CameraModeDown=vkDown
|
||||||
|
PauseGame=P
|
||||||
|
ChangeFontColor=C
|
||||||
|
GameSpeedIncrease=vkAdd
|
||||||
|
GameSpeedDecrease=vkSubtract
|
||||||
|
ExitKey=vkEscape
|
||||||
|
GroupUnitsKey1=0
|
||||||
|
GroupUnitsKey2=1
|
||||||
|
GroupUnitsKey3=2
|
||||||
|
GroupUnitsKey4=3
|
||||||
|
GroupUnitsKey5=4
|
||||||
|
GroupUnitsKey6=5
|
||||||
|
GroupUnitsKey7=6
|
||||||
|
GroupUnitsKey8=7
|
||||||
|
GroupUnitsKey9=8
|
||||||
|
GroupUnitsKey10=9
|
||||||
|
CameraRotateLeft=A
|
||||||
|
CameraRotateRight=D
|
||||||
|
CameraRotateUp=S
|
||||||
|
CameraRotateDown=W
|
||||||
|
HotKeyCenterCameraOnSelection=G
|
||||||
|
HotKeySelectIdleHarvesterUnit=I
|
||||||
|
HotKeySelectBuiltBuilding=B
|
||||||
|
HotKeyShowDebug=?
|
||||||
|
HotKeyDumpWorldToLog=|
|
||||||
|
HotKeyRotateUnitDuringPlacement=R
|
||||||
|
HotKeySelectDamagedUnit=D
|
||||||
|
HotKeySelectStoreUnit=T
|
||||||
|
HotKeySelectedUnitsAttack=A
|
||||||
|
HotKeySelectedUnitsStop=S
|
||||||
|
|
||||||
|
; === propertyMap File ===
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
; === propertyMap File ===
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
; === propertyMap File ===
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@ using namespace Shared::Platform;
|
||||||
namespace Glest{ namespace Game{
|
namespace Glest{ namespace Game{
|
||||||
|
|
||||||
const string mailString= "contact_game@glest.org";
|
const string mailString= "contact_game@glest.org";
|
||||||
const string glestVersionString= "v3.3.5-beta1";
|
const string glestVersionString= "v3.3.5-beta3";
|
||||||
|
|
||||||
string getCrashDumpFileName(){
|
string getCrashDumpFileName(){
|
||||||
return "glest" + glestVersionString + ".dmp";
|
return "glest" + glestVersionString + ".dmp";
|
||||||
|
@ -100,11 +100,11 @@ string getAboutString2(int i){
|
||||||
|
|
||||||
string getTeammateName(int i){
|
string getTeammateName(int i){
|
||||||
switch(i){
|
switch(i){
|
||||||
case 0: return "Marti<EFBFBD>o Figueroa";
|
case 0: return "Martiño Figueroa";
|
||||||
case 1: return "Jos<EFBFBD> Luis Gonz<6E>lez";
|
case 1: return "José Luis González";
|
||||||
case 2: return "Tucho Fern<EFBFBD>ndez";
|
case 2: return "Tucho Fernández";
|
||||||
case 3: return "Jos<EFBFBD> Zanni";
|
case 3: return "José Zanni";
|
||||||
case 4: return "F<EFBFBD>lix Men<65>ndez";
|
case 4: return "Félix Menéndez";
|
||||||
case 5: return "Marcos Caruncho";
|
case 5: return "Marcos Caruncho";
|
||||||
case 6: return "Matthias Braun";
|
case 6: return "Matthias Braun";
|
||||||
case 7: return "Titus Tscharntke";
|
case 7: return "Titus Tscharntke";
|
||||||
|
|
|
@ -162,6 +162,8 @@ void Game::load(){
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] gameSettings.getScenarioDir() = [%s] gameSettings.getScenario() = [%s] scenarioDir = [%s]\n",__FILE__,__FUNCTION__,__LINE__,gameSettings.getScenarioDir().c_str(),gameSettings.getScenario().c_str(),scenarioDir.c_str());
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] gameSettings.getScenarioDir() = [%s] gameSettings.getScenario() = [%s] scenarioDir = [%s]\n",__FILE__,__FUNCTION__,__LINE__,gameSettings.getScenarioDir().c_str(),gameSettings.getScenario().c_str(),scenarioDir.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// give CPU time to update other things to avoid apperance of hanging
|
||||||
|
sleep(0);
|
||||||
if(loadingImageUsed == false){
|
if(loadingImageUsed == false){
|
||||||
// try to use a faction related loading screen
|
// try to use a faction related loading screen
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s] Searching for faction loading screen\n",__FILE__,__FUNCTION__);
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s] Searching for faction loading screen\n",__FILE__,__FUNCTION__);
|
||||||
|
@ -238,6 +240,9 @@ void Game::load(){
|
||||||
//tileset
|
//tileset
|
||||||
world.loadTileset(config.getPathListForType(ptTilesets,scenarioDir), tilesetName, &checksum);
|
world.loadTileset(config.getPathListForType(ptTilesets,scenarioDir), tilesetName, &checksum);
|
||||||
|
|
||||||
|
// give CPU time to update other things to avoid apperance of hanging
|
||||||
|
sleep(0);
|
||||||
|
|
||||||
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__);
|
||||||
|
|
||||||
set<string> factions;
|
set<string> factions;
|
||||||
|
@ -249,12 +254,18 @@ void Game::load(){
|
||||||
|
|
||||||
//tech, load before map because of resources
|
//tech, load before map because of resources
|
||||||
world.loadTech(config.getPathListForType(ptTechs,scenarioDir), techName, factions, &checksum);
|
world.loadTech(config.getPathListForType(ptTechs,scenarioDir), techName, factions, &checksum);
|
||||||
|
|
||||||
|
// give CPU time to update other things to avoid apperance of hanging
|
||||||
|
sleep(0);
|
||||||
|
|
||||||
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__);
|
||||||
|
|
||||||
//map
|
//map
|
||||||
world.loadMap(Map::getMapPath(mapName,scenarioDir), &checksum);
|
world.loadMap(Map::getMapPath(mapName,scenarioDir), &checksum);
|
||||||
|
|
||||||
|
// give CPU time to update other things to avoid apperance of hanging
|
||||||
|
sleep(0);
|
||||||
|
|
||||||
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__);
|
||||||
|
|
||||||
//scenario
|
//scenario
|
||||||
|
@ -263,6 +274,9 @@ void Game::load(){
|
||||||
world.loadScenario(gameSettings.getScenarioDir(), &checksum);
|
world.loadScenario(gameSettings.getScenarioDir(), &checksum);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// give CPU time to update other things to avoid apperance of hanging
|
||||||
|
sleep(0);
|
||||||
|
|
||||||
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__);
|
||||||
//good_fpu_control_registers(NULL,__FILE__,__FUNCTION__,__LINE__);
|
//good_fpu_control_registers(NULL,__FILE__,__FUNCTION__,__LINE__);
|
||||||
}
|
}
|
||||||
|
@ -287,13 +301,29 @@ void Game::init()
|
||||||
|
|
||||||
//init world, and place camera
|
//init world, and place camera
|
||||||
commander.init(&world);
|
commander.init(&world);
|
||||||
|
|
||||||
|
// give CPU time to update other things to avoid apperance of hanging
|
||||||
|
sleep(0);
|
||||||
|
|
||||||
world.init(this, gameSettings.getDefaultUnits());
|
world.init(this, gameSettings.getDefaultUnits());
|
||||||
|
|
||||||
|
// give CPU time to update other things to avoid apperance of hanging
|
||||||
|
sleep(0);
|
||||||
|
|
||||||
gui.init(this);
|
gui.init(this);
|
||||||
|
|
||||||
|
// give CPU time to update other things to avoid apperance of hanging
|
||||||
|
sleep(0);
|
||||||
|
|
||||||
chatManager.init(&console, world.getThisTeamIndex());
|
chatManager.init(&console, world.getThisTeamIndex());
|
||||||
console.clearStoredLines();
|
console.clearStoredLines();
|
||||||
const Vec2i &v= map->getStartLocation(world.getThisFaction()->getStartLocationIndex());
|
const Vec2i &v= map->getStartLocation(world.getThisFaction()->getStartLocationIndex());
|
||||||
gameCamera.init(map->getW(), map->getH());
|
gameCamera.init(map->getW(), map->getH());
|
||||||
gameCamera.setPos(Vec2f(v.x, v.y));
|
gameCamera.setPos(Vec2f(v.x, v.y));
|
||||||
|
|
||||||
|
// give CPU time to update other things to avoid apperance of hanging
|
||||||
|
sleep(0);
|
||||||
|
|
||||||
scriptManager.init(&world, &gameCamera);
|
scriptManager.init(&world, &gameCamera);
|
||||||
|
|
||||||
//good_fpu_control_registers(NULL,__FILE__,__FUNCTION__,__LINE__);
|
//good_fpu_control_registers(NULL,__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
@ -313,6 +343,9 @@ void Game::init()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// give CPU time to update other things to avoid apperance of hanging
|
||||||
|
sleep(0);
|
||||||
|
|
||||||
//wheather particle systems
|
//wheather particle systems
|
||||||
if(world.getTileset()->getWeather() == wRainy){
|
if(world.getTileset()->getWeather() == wRainy){
|
||||||
logger.add("Creating rain particle system", true);
|
logger.add("Creating rain particle system", true);
|
||||||
|
@ -337,6 +370,9 @@ void Game::init()
|
||||||
|
|
||||||
//good_fpu_control_registers(NULL,__FILE__,__FUNCTION__,__LINE__);
|
//good_fpu_control_registers(NULL,__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
|
||||||
|
// give CPU time to update other things to avoid apperance of hanging
|
||||||
|
sleep(0);
|
||||||
|
|
||||||
//sounds
|
//sounds
|
||||||
SoundRenderer &soundRenderer= SoundRenderer::getInstance();
|
SoundRenderer &soundRenderer= SoundRenderer::getInstance();
|
||||||
|
|
||||||
|
@ -359,10 +395,21 @@ void Game::init()
|
||||||
logger.add("Waiting for network players", true);
|
logger.add("Waiting for network players", true);
|
||||||
networkManager.getGameNetworkInterface()->waitUntilReady(&checksum);
|
networkManager.getGameNetworkInterface()->waitUntilReady(&checksum);
|
||||||
|
|
||||||
std::string worldLog = world.DumpWorldToLog(true);
|
//std::string worldLog = world.DumpWorldToLog(true);
|
||||||
|
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s] Starting music stream\n",__FILE__,__FUNCTION__);
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] Starting music stream\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
logger.add("Starting music stream", true);
|
logger.add("Starting music stream", true);
|
||||||
|
|
||||||
|
if(world.getThisFaction() == NULL) {
|
||||||
|
throw runtime_error("world.getThisFaction() == NULL");
|
||||||
|
}
|
||||||
|
if(world.getThisFaction()->getType() == NULL) {
|
||||||
|
throw runtime_error("world.getThisFaction()->getType() == NULL");
|
||||||
|
}
|
||||||
|
//if(world.getThisFaction()->getType()->getMusic() == NULL) {
|
||||||
|
// throw runtime_error("world.getThisFaction()->getType()->getMusic() == NULL");
|
||||||
|
//}
|
||||||
|
|
||||||
StrSound *gameMusic= world.getThisFaction()->getType()->getMusic();
|
StrSound *gameMusic= world.getThisFaction()->getType()->getMusic();
|
||||||
soundRenderer.playMusic(gameMusic);
|
soundRenderer.playMusic(gameMusic);
|
||||||
|
|
||||||
|
@ -762,13 +809,15 @@ void Game::keyDown(char key){
|
||||||
if(!chatManager.getEditEnabled()){
|
if(!chatManager.getEditEnabled()){
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] key = %d\n",__FILE__,__FUNCTION__,__LINE__,key);
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] key = %d\n",__FILE__,__FUNCTION__,__LINE__,key);
|
||||||
|
|
||||||
if(key=='N'){
|
Config &configKeys = Config::getInstance(std::pair<ConfigType,ConfigType>(cfgMainKeys,cfgUserKeys));
|
||||||
|
|
||||||
|
if(key == configKeys.getCharKey("RenderNetworkStatus")) {
|
||||||
renderNetworkStatus= true;
|
renderNetworkStatus= true;
|
||||||
}
|
}
|
||||||
else if(key=='M'){
|
else if(key == configKeys.getCharKey("ShowFullConsole")) {
|
||||||
showFullConsole= true;
|
showFullConsole= true;
|
||||||
}
|
}
|
||||||
else if(key=='E'){
|
else if(key == configKeys.getCharKey("Screenshot")) {
|
||||||
for(int i=0; i<100; ++i){
|
for(int i=0; i<100; ++i){
|
||||||
string path= "screens/screen" + intToStr(i) + ".tga";
|
string path= "screens/screen" + intToStr(i) + ".tga";
|
||||||
|
|
||||||
|
@ -782,40 +831,34 @@ void Game::keyDown(char key){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//move camera left
|
//move camera left
|
||||||
else if(key==vkLeft){
|
else if(key == configKeys.getCharKey("CameraModeLeft")) {
|
||||||
gameCamera.setMoveX(-1);
|
gameCamera.setMoveX(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
//move camera right
|
//move camera right
|
||||||
else if(key==vkRight){
|
else if(key == configKeys.getCharKey("CameraModeRight")) {
|
||||||
gameCamera.setMoveX(1);
|
gameCamera.setMoveX(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
//move camera up
|
//move camera up
|
||||||
else if(key==vkUp){
|
else if(key == configKeys.getCharKey("CameraModeUp")) {
|
||||||
gameCamera.setMoveZ(1);
|
gameCamera.setMoveZ(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
//move camera down
|
//move camera down
|
||||||
else if(key==vkDown){
|
else if(key == configKeys.getCharKey("CameraModeDown")) {
|
||||||
gameCamera.setMoveZ(-1);
|
gameCamera.setMoveZ(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
//change camera mode
|
//change camera mode
|
||||||
else if(key=='F'){
|
else if(key == configKeys.getCharKey("FreeCameraMode")) {
|
||||||
gameCamera.switchState();
|
gameCamera.switchState();
|
||||||
string stateString= gameCamera.getState()==GameCamera::sGame? lang.get("GameCamera"): lang.get("FreeCamera");
|
string stateString= gameCamera.getState()==GameCamera::sGame? lang.get("GameCamera"): lang.get("FreeCamera");
|
||||||
console.addLine(lang.get("CameraModeSet")+" "+ stateString);
|
console.addLine(lang.get("CameraModeSet")+" "+ stateString);
|
||||||
}
|
}
|
||||||
|
|
||||||
//reset camera mode to normal
|
//reset camera mode to normal
|
||||||
else if(key==' '){
|
else if(key == configKeys.getCharKey("ResetCameraMode")) {
|
||||||
gameCamera.resetPosition();
|
gameCamera.resetPosition();
|
||||||
}
|
}
|
||||||
//pause
|
//pause
|
||||||
else if(key=='P'){
|
else if(key == configKeys.getCharKey("PauseGame")) {
|
||||||
if(speedChangesAllowed){
|
if(speedChangesAllowed){
|
||||||
if(paused){
|
if(paused){
|
||||||
console.addLine(lang.get("GameResumed"));
|
console.addLine(lang.get("GameResumed"));
|
||||||
|
@ -828,34 +871,39 @@ void Game::keyDown(char key){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//switch display color
|
//switch display color
|
||||||
else if(key=='C'){
|
else if(key == configKeys.getCharKey("ChangeFontColor")) {
|
||||||
gui.switchToNextDisplayColor();
|
gui.switchToNextDisplayColor();
|
||||||
}
|
}
|
||||||
|
|
||||||
//increment speed
|
//increment speed
|
||||||
else if(key==vkAdd){
|
else if(key == configKeys.getCharKey("GameSpeedIncrease")) {
|
||||||
if(speedChangesAllowed){
|
if(speedChangesAllowed){
|
||||||
incSpeed();
|
incSpeed();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//decrement speed
|
//decrement speed
|
||||||
else if(key==vkSubtract){
|
else if(key == configKeys.getCharKey("GameSpeedDecrease")) {
|
||||||
if(speedChangesAllowed){
|
if(speedChangesAllowed){
|
||||||
decSpeed();
|
decSpeed();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//exit
|
//exit
|
||||||
else if(key==vkEscape){
|
else if(key == configKeys.getCharKey("ExitKey")) {
|
||||||
showMessageBox(lang.get("ExitGame?"), "", true);
|
showMessageBox(lang.get("ExitGame?"), "", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
//group
|
//group
|
||||||
else if(key>='0' && key<'0'+Selection::maxGroups){
|
//else if(key>='0' && key<'0'+Selection::maxGroups){
|
||||||
|
else {
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] key = %d\n",__FILE__,__FUNCTION__,__LINE__,key);
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] key = %d\n",__FILE__,__FUNCTION__,__LINE__,key);
|
||||||
|
|
||||||
gui.groupKey(key-'0');
|
for(int idx = 1; idx <= Selection::maxGroups; idx++) {
|
||||||
|
string keyName = "GroupUnitsKey" + intToStr(idx);
|
||||||
|
if(key == configKeys.getCharKey(keyName.c_str())) {
|
||||||
|
//gui.groupKey(key-'0');
|
||||||
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] key = %d\n",__FILE__,__FUNCTION__,__LINE__,key);
|
||||||
|
gui.groupKey(idx-1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//hotkeys
|
//hotkeys
|
||||||
|
@ -866,24 +914,21 @@ void Game::keyDown(char key){
|
||||||
|
|
||||||
gui.hotKey(key);
|
gui.hotKey(key);
|
||||||
}
|
}
|
||||||
else{
|
else {
|
||||||
//rotate camera leftt
|
//rotate camera leftt
|
||||||
if(key=='A'){
|
if(key == configKeys.getCharKey("CameraRotateLeft")) {
|
||||||
gameCamera.setRotate(-1);
|
gameCamera.setRotate(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
//rotate camera right
|
//rotate camera right
|
||||||
else if(key=='D'){
|
else if(key == configKeys.getCharKey("CameraRotateRight")){
|
||||||
gameCamera.setRotate(1);
|
gameCamera.setRotate(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
//camera up
|
//camera up
|
||||||
else if(key=='S'){
|
else if(key == configKeys.getCharKey("CameraRotateUp")) {
|
||||||
gameCamera.setMoveY(1);
|
gameCamera.setMoveY(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
//camera down
|
//camera down
|
||||||
else if(key=='W'){
|
else if(key == configKeys.getCharKey("CameraRotateDown")) {
|
||||||
gameCamera.setMoveY(-1);
|
gameCamera.setMoveY(-1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1181,6 +1226,9 @@ void Game::checkWinnerStandard(){
|
||||||
if(this->gameSettings.getEnableObserverModeAtEndGame() == true) {
|
if(this->gameSettings.getEnableObserverModeAtEndGame() == true) {
|
||||||
// Let the poor user watch everything unfold
|
// Let the poor user watch everything unfold
|
||||||
world.setFogOfWar(false);
|
world.setFogOfWar(false);
|
||||||
|
//gameCamera.setClampBounds(false);
|
||||||
|
Renderer::getInstance().setPhotoMode(true);
|
||||||
|
gameCamera.setMaxHeight(500);
|
||||||
// but don't let him cheat via teamchat
|
// but don't let him cheat via teamchat
|
||||||
chatManager.setDisableTeamMode(true);
|
chatManager.setDisableTeamMode(true);
|
||||||
}
|
}
|
||||||
|
@ -1209,6 +1257,9 @@ void Game::checkWinnerStandard(){
|
||||||
if(this->gameSettings.getEnableObserverModeAtEndGame() == true) {
|
if(this->gameSettings.getEnableObserverModeAtEndGame() == true) {
|
||||||
// Let the happy winner view everything left in the world
|
// Let the happy winner view everything left in the world
|
||||||
world.setFogOfWar(false);
|
world.setFogOfWar(false);
|
||||||
|
//gameCamera.setClampBounds(false);
|
||||||
|
Renderer::getInstance().setPhotoMode(true);
|
||||||
|
gameCamera.setMaxHeight(500);
|
||||||
}
|
}
|
||||||
|
|
||||||
showWinMessageBox();
|
showWinMessageBox();
|
||||||
|
|
|
@ -56,11 +56,11 @@ GameCamera::GameCamera() : pos(0.f, defaultHeight, 0.f),
|
||||||
|
|
||||||
move= Vec3f(0.f);
|
move= Vec3f(0.f);
|
||||||
|
|
||||||
maxRenderDistance = Config::getInstance().getFloat("RenderDistanceMax","64");
|
//maxRenderDistance = Config::getInstance().getFloat("RenderDistanceMax","64");
|
||||||
maxHeight = Config::getInstance().getFloat("CameraMaxDistance","20");
|
maxHeight = Config::getInstance().getFloat("CameraMaxDistance","20");
|
||||||
minHeight = Config::getInstance().getFloat("CameraMinDistance","7");
|
minHeight = Config::getInstance().getFloat("CameraMinDistance","7");
|
||||||
maxCameraDist = maxHeight;
|
//maxCameraDist = maxHeight;
|
||||||
minCameraDist = minHeight;
|
//minCameraDist = minHeight;
|
||||||
minVAng = -Config::getInstance().getFloat("CameraMaxYaw","77.5");
|
minVAng = -Config::getInstance().getFloat("CameraMaxYaw","77.5");
|
||||||
maxVAng = -Config::getInstance().getFloat("CameraMinYaw","20");
|
maxVAng = -Config::getInstance().getFloat("CameraMinYaw","20");
|
||||||
fov = Config::getInstance().getFloat("CameraFov","45");
|
fov = Config::getInstance().getFloat("CameraFov","45");
|
||||||
|
|
|
@ -71,11 +71,11 @@ private:
|
||||||
//config
|
//config
|
||||||
float speed;
|
float speed;
|
||||||
bool clampBounds;
|
bool clampBounds;
|
||||||
float maxRenderDistance;
|
//float maxRenderDistance;
|
||||||
float maxHeight;
|
float maxHeight;
|
||||||
float minHeight;
|
float minHeight;
|
||||||
float maxCameraDist;
|
//float maxCameraDist;
|
||||||
float minCameraDist;
|
//float minCameraDist;
|
||||||
float minVAng;
|
float minVAng;
|
||||||
float maxVAng;
|
float maxVAng;
|
||||||
float fov;
|
float fov;
|
||||||
|
@ -122,6 +122,12 @@ public:
|
||||||
void load(const XmlNode *node);
|
void load(const XmlNode *node);
|
||||||
void save(XmlNode *node) const;
|
void save(XmlNode *node) const;
|
||||||
|
|
||||||
|
bool setClampBounds(bool value) { clampBounds = value; }
|
||||||
|
bool setMaxHeight(float value) { maxHeight = value; }
|
||||||
|
bool setFov(float value) { fov = value; }
|
||||||
|
bool setMinVAng(float value) { minVAng = value; }
|
||||||
|
bool setMaxVAng(float value) { maxVAng = value; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void clampPosXYZ(float x1, float x2, float y1, float y2, float z1, float z2);
|
void clampPosXYZ(float x1, float x2, float y1, float y2, float z1, float z2);
|
||||||
void clampPosXZ(float x1, float x2, float z1, float z2);
|
void clampPosXZ(float x1, float x2, float z1, float z2);
|
||||||
|
|
|
@ -15,10 +15,17 @@
|
||||||
#include "game_constants.h"
|
#include "game_constants.h"
|
||||||
#include "platform_util.h"
|
#include "platform_util.h"
|
||||||
#include "game_util.h"
|
#include "game_util.h"
|
||||||
|
#include <map>
|
||||||
|
#include "conversion.h"
|
||||||
|
#include "window.h"
|
||||||
|
#include <stdexcept>
|
||||||
|
//#include <cstdio>
|
||||||
|
//#include <cstdlib>
|
||||||
#include "leak_dumper.h"
|
#include "leak_dumper.h"
|
||||||
|
|
||||||
using namespace Shared::Platform;
|
using namespace Shared::Platform;
|
||||||
using namespace Shared::Util;
|
using namespace Shared::Util;
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
namespace Glest{ namespace Game{
|
namespace Glest{ namespace Game{
|
||||||
|
|
||||||
|
@ -35,77 +42,236 @@ const char *GameConstants::folder_path_tutorials = "tutorials";
|
||||||
// class Config
|
// class Config
|
||||||
// =====================================================
|
// =====================================================
|
||||||
|
|
||||||
Config::Config(){
|
const string defaultNotFoundValue = "~~NOT FOUND~~";
|
||||||
|
|
||||||
string cfgFile = "glest.ini";
|
map<ConfigType,Config> Config::configList;
|
||||||
|
|
||||||
|
Config::Config(std::pair<ConfigType,ConfigType> type, std::pair<string,string> file, std::pair<bool,bool> fileMustExist) {
|
||||||
|
fileLoaded.first = false;
|
||||||
|
fileLoaded.second = false;
|
||||||
|
cfgType = type;
|
||||||
|
|
||||||
|
fileName = file;
|
||||||
if(getGameReadWritePath() != "") {
|
if(getGameReadWritePath() != "") {
|
||||||
cfgFile = getGameReadWritePath() + cfgFile;
|
fileName.first = getGameReadWritePath() + fileName.first;
|
||||||
|
fileName.second = getGameReadWritePath() + fileName.second;
|
||||||
}
|
}
|
||||||
|
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] cfgFile = [%s]\n",__FILE__,__FUNCTION__,__LINE__,cfgFile.c_str());
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] cfgFile.first = [%s]\n",__FILE__,__FUNCTION__,__LINE__,fileName.first.c_str());
|
||||||
properties.load(cfgFile);
|
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] cfgFile = [%s]\n",__FILE__,__FUNCTION__,__LINE__,cfgFile.c_str());
|
if(fileMustExist.first == true ||
|
||||||
|
(fileMustExist.first == false && fileExists(fileName.first) == true)) {
|
||||||
|
properties.first.load(fileName.first);
|
||||||
|
fileLoaded.first = true;
|
||||||
|
|
||||||
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] cfgFile.first = [%s]\n",__FILE__,__FUNCTION__,__LINE__,fileName.first.c_str());
|
||||||
|
}
|
||||||
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] cfgFile.first = [%s]\n",__FILE__,__FUNCTION__,__LINE__,fileName.first.c_str());
|
||||||
|
|
||||||
|
if(properties.first.getString("UserOverrideFile", defaultNotFoundValue.c_str()) != defaultNotFoundValue) {
|
||||||
|
fileName.second = properties.first.getString("UserOverrideFile");
|
||||||
|
}
|
||||||
|
|
||||||
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] cfgFile.second = [%s]\n",__FILE__,__FUNCTION__,__LINE__,fileName.second.c_str());
|
||||||
|
|
||||||
|
if(fileMustExist.second == true ||
|
||||||
|
(fileMustExist.second == false && fileExists(fileName.second) == true)) {
|
||||||
|
properties.second.load(fileName.second);
|
||||||
|
fileLoaded.second = true;
|
||||||
|
|
||||||
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] cfgFile.second = [%s]\n",__FILE__,__FUNCTION__,__LINE__,fileName.second.c_str());
|
||||||
|
}
|
||||||
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] cfgFile.second = [%s]\n",__FILE__,__FUNCTION__,__LINE__,fileName.second.c_str());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Config &Config::getInstance(){
|
Config &Config::getInstance(std::pair<ConfigType,ConfigType> type, std::pair<string,string> file, std::pair<bool,bool> fileMustExist) {
|
||||||
static Config config;
|
if(configList.find(type.first) == configList.end()) {
|
||||||
return config;
|
Config config(type, file, fileMustExist);
|
||||||
|
configList.insert(map<ConfigType,Config>::value_type(type.first,config));
|
||||||
|
}
|
||||||
|
|
||||||
|
return configList.find(type.first)->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Config::save(const string &path){
|
void Config::save(const string &path){
|
||||||
properties.save(path);
|
if(fileLoaded.second == true) {
|
||||||
|
if(path != "") {
|
||||||
|
fileName.second = path;
|
||||||
|
}
|
||||||
|
properties.second.save(fileName.second);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(path != "") {
|
||||||
|
fileName.first = path;
|
||||||
|
}
|
||||||
|
properties.first.save(fileName.first);
|
||||||
}
|
}
|
||||||
|
|
||||||
int Config::getInt(const char *key,const char *defaultValueIfNotFound) const {
|
int Config::getInt(const char *key,const char *defaultValueIfNotFound) const {
|
||||||
return properties.getInt(key,defaultValueIfNotFound);
|
if(fileLoaded.second == true &&
|
||||||
|
properties.second.getString(key, defaultNotFoundValue.c_str()) != defaultNotFoundValue) {
|
||||||
|
return properties.second.getInt(key,defaultValueIfNotFound);
|
||||||
|
}
|
||||||
|
return properties.first.getInt(key,defaultValueIfNotFound);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Config::getBool(const char *key,const char *defaultValueIfNotFound) const {
|
bool Config::getBool(const char *key,const char *defaultValueIfNotFound) const {
|
||||||
return properties.getBool(key,defaultValueIfNotFound);
|
if(fileLoaded.second == true &&
|
||||||
|
properties.second.getString(key, defaultNotFoundValue.c_str()) != defaultNotFoundValue) {
|
||||||
|
return properties.second.getBool(key,defaultValueIfNotFound);
|
||||||
|
}
|
||||||
|
|
||||||
|
return properties.first.getBool(key,defaultValueIfNotFound);
|
||||||
}
|
}
|
||||||
|
|
||||||
float Config::getFloat(const char *key,const char *defaultValueIfNotFound) const {
|
float Config::getFloat(const char *key,const char *defaultValueIfNotFound) const {
|
||||||
return properties.getFloat(key,defaultValueIfNotFound);
|
if(fileLoaded.second == true &&
|
||||||
|
properties.second.getString(key, defaultNotFoundValue.c_str()) != defaultNotFoundValue) {
|
||||||
|
return properties.second.getFloat(key,defaultValueIfNotFound);
|
||||||
|
}
|
||||||
|
|
||||||
|
return properties.first.getFloat(key,defaultValueIfNotFound);
|
||||||
}
|
}
|
||||||
|
|
||||||
const string Config::getString(const char *key,const char *defaultValueIfNotFound) const {
|
const string Config::getString(const char *key,const char *defaultValueIfNotFound) const {
|
||||||
return properties.getString(key,defaultValueIfNotFound);
|
if(fileLoaded.second == true &&
|
||||||
|
properties.second.getString(key, defaultNotFoundValue.c_str()) != defaultNotFoundValue) {
|
||||||
|
return properties.second.getString(key,defaultValueIfNotFound);
|
||||||
|
}
|
||||||
|
|
||||||
|
return properties.first.getString(key,defaultValueIfNotFound);
|
||||||
}
|
}
|
||||||
|
|
||||||
int Config::getInt(const string &key,const char *defaultValueIfNotFound) const{
|
int Config::getInt(const string &key,const char *defaultValueIfNotFound) const{
|
||||||
return properties.getInt(key,defaultValueIfNotFound);
|
if(fileLoaded.second == true &&
|
||||||
|
properties.second.getString(key, defaultNotFoundValue.c_str()) != defaultNotFoundValue) {
|
||||||
|
return properties.second.getInt(key,defaultValueIfNotFound);
|
||||||
|
}
|
||||||
|
|
||||||
|
return properties.first.getInt(key,defaultValueIfNotFound);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Config::getBool(const string &key,const char *defaultValueIfNotFound) const{
|
bool Config::getBool(const string &key,const char *defaultValueIfNotFound) const{
|
||||||
return properties.getBool(key,defaultValueIfNotFound);
|
if(fileLoaded.second == true &&
|
||||||
|
properties.second.getString(key, defaultNotFoundValue.c_str()) != defaultNotFoundValue) {
|
||||||
|
return properties.second.getBool(key,defaultValueIfNotFound);
|
||||||
|
}
|
||||||
|
|
||||||
|
return properties.first.getBool(key,defaultValueIfNotFound);
|
||||||
}
|
}
|
||||||
|
|
||||||
float Config::getFloat(const string &key,const char *defaultValueIfNotFound) const{
|
float Config::getFloat(const string &key,const char *defaultValueIfNotFound) const{
|
||||||
return properties.getFloat(key,defaultValueIfNotFound);
|
if(fileLoaded.second == true &&
|
||||||
|
properties.second.getString(key, defaultNotFoundValue.c_str()) != defaultNotFoundValue) {
|
||||||
|
return properties.second.getFloat(key,defaultValueIfNotFound);
|
||||||
|
}
|
||||||
|
|
||||||
|
return properties.first.getFloat(key,defaultValueIfNotFound);
|
||||||
}
|
}
|
||||||
|
|
||||||
const string Config::getString(const string &key,const char *defaultValueIfNotFound) const{
|
const string Config::getString(const string &key,const char *defaultValueIfNotFound) const{
|
||||||
return properties.getString(key,defaultValueIfNotFound);
|
if(fileLoaded.second == true &&
|
||||||
|
properties.second.getString(key, defaultNotFoundValue.c_str()) != defaultNotFoundValue) {
|
||||||
|
return properties.second.getString(key,defaultValueIfNotFound);
|
||||||
|
}
|
||||||
|
|
||||||
|
return properties.first.getString(key,defaultValueIfNotFound);
|
||||||
|
}
|
||||||
|
|
||||||
|
char Config::translateStringToCharKey(const string &value) const {
|
||||||
|
char result = 0;
|
||||||
|
|
||||||
|
if(IsNumeric(value.c_str()) == true) {
|
||||||
|
result = strToInt(value);
|
||||||
|
}
|
||||||
|
else if(value.substr(0,2) == "vk") {
|
||||||
|
if(value == "vkLeft") {
|
||||||
|
result = vkLeft;
|
||||||
|
}
|
||||||
|
else if(value == "vkRight") {
|
||||||
|
result = vkRight;
|
||||||
|
}
|
||||||
|
else if(value == "vkUp") {
|
||||||
|
result = vkUp;
|
||||||
|
}
|
||||||
|
else if(value == "vkDown") {
|
||||||
|
result = vkDown;
|
||||||
|
}
|
||||||
|
else if(value == "vkAdd") {
|
||||||
|
result = vkAdd;
|
||||||
|
}
|
||||||
|
else if(value == "vkSubtract") {
|
||||||
|
result = vkSubtract;
|
||||||
|
}
|
||||||
|
else if(value == "vkEscape") {
|
||||||
|
result = vkEscape;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
string sError = "Unsupported key translation" + value;
|
||||||
|
throw runtime_error(sError.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(value.length() >= 1) {
|
||||||
|
result = value[0];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
string sError = "Unsupported key translation" + value;
|
||||||
|
throw runtime_error(sError.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
char Config::getCharKey(const char *key) const {
|
||||||
|
if(fileLoaded.second == true &&
|
||||||
|
properties.second.getString(key, defaultNotFoundValue.c_str()) != defaultNotFoundValue) {
|
||||||
|
|
||||||
|
string value = properties.second.getString(key);
|
||||||
|
return translateStringToCharKey(value);
|
||||||
|
}
|
||||||
|
string value = properties.first.getString(key);
|
||||||
|
return translateStringToCharKey(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Config::setInt(const string &key, int value){
|
void Config::setInt(const string &key, int value){
|
||||||
properties.setInt(key, value);
|
if(fileLoaded.second == true) {
|
||||||
|
properties.second.setInt(key, value);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
properties.first.setInt(key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Config::setBool(const string &key, bool value){
|
void Config::setBool(const string &key, bool value){
|
||||||
properties.setBool(key, value);
|
if(fileLoaded.second == true) {
|
||||||
|
properties.second.setBool(key, value);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
properties.first.setBool(key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Config::setFloat(const string &key, float value){
|
void Config::setFloat(const string &key, float value){
|
||||||
properties.setFloat(key, value);
|
if(fileLoaded.second == true) {
|
||||||
|
properties.second.setFloat(key, value);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
properties.first.setFloat(key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Config::setString(const string &key, const string &value){
|
void Config::setString(const string &key, const string &value){
|
||||||
properties.setString(key, value);
|
if(fileLoaded.second == true) {
|
||||||
|
properties.second.setString(key, value);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
properties.first.setString(key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
string Config::toString(){
|
string Config::toString(){
|
||||||
return properties.toString();
|
return properties.first.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
vector<string> Config::getPathListForType(PathType type, string scenarioDir) {
|
vector<string> Config::getPathListForType(PathType type, string scenarioDir) {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// ==============================================================
|
// ==============================================================
|
||||||
// This file is part of Glest (www.glest.org)
|
// This file is part of Glest (www.glest.org)
|
||||||
//
|
//
|
||||||
// Copyright (C) 2001-2008 Martiño Figueroa
|
// Copyright (C) 2001-2008 Martio Figueroa
|
||||||
//
|
//
|
||||||
// You can redistribute this code and/or modify it under
|
// You can redistribute this code and/or modify it under
|
||||||
// the terms of the GNU General Public License as published
|
// the terms of the GNU General Public License as published
|
||||||
|
@ -26,16 +26,38 @@ using Shared::Util::Properties;
|
||||||
// Game configuration
|
// Game configuration
|
||||||
// =====================================================
|
// =====================================================
|
||||||
|
|
||||||
class Config{
|
enum ConfigType {
|
||||||
|
cfgMainGame,
|
||||||
|
cfgUserGame,
|
||||||
|
cfgMainKeys,
|
||||||
|
cfgUserKeys
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class Config {
|
||||||
private:
|
private:
|
||||||
Properties properties;
|
//Properties properties;
|
||||||
|
//ConfigType cfgType;
|
||||||
|
//string fileName;
|
||||||
|
//bool fileLoaded;
|
||||||
|
|
||||||
|
std::pair<Properties,Properties> properties;
|
||||||
|
std::pair<ConfigType,ConfigType> cfgType;
|
||||||
|
std::pair<string,string> fileName;
|
||||||
|
std::pair<bool,bool> fileLoaded;
|
||||||
|
|
||||||
|
static map<ConfigType,Config> configList;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Config();
|
Config(std::pair<ConfigType,ConfigType> type, std::pair<string,string> file, std::pair<bool,bool> fileMustExist);
|
||||||
|
|
||||||
|
char translateStringToCharKey(const string &value) const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static Config &getInstance();
|
static Config &getInstance(std::pair<ConfigType,ConfigType> type = std::pair<ConfigType,ConfigType>(cfgMainGame,cfgUserGame),
|
||||||
void save(const string &path="glest.ini");
|
std::pair<string,string> file = std::pair<string,string>("glest.ini","glestuser.ini"),
|
||||||
|
std::pair<bool,bool> fileMustExist = std::pair<bool,bool>(true,false));
|
||||||
|
void save(const string &path="");
|
||||||
|
|
||||||
int getInt(const string &key,const char *defaultValueIfNotFound=NULL) const;
|
int getInt(const string &key,const char *defaultValueIfNotFound=NULL) const;
|
||||||
bool getBool(const string &key,const char *defaultValueIfNotFound=NULL) const;
|
bool getBool(const string &key,const char *defaultValueIfNotFound=NULL) const;
|
||||||
|
@ -46,6 +68,7 @@ public:
|
||||||
bool getBool(const char *key,const char *defaultValueIfNotFound=NULL) const;
|
bool getBool(const char *key,const char *defaultValueIfNotFound=NULL) const;
|
||||||
float getFloat(const char *key,const char *defaultValueIfNotFound=NULL) const;
|
float getFloat(const char *key,const char *defaultValueIfNotFound=NULL) const;
|
||||||
const string getString(const char *key,const char *defaultValueIfNotFound=NULL) const;
|
const string getString(const char *key,const char *defaultValueIfNotFound=NULL) const;
|
||||||
|
char getCharKey(const char *key) const;
|
||||||
|
|
||||||
void setInt(const string &key, int value);
|
void setInt(const string &key, int value);
|
||||||
void setBool(const string &key, bool value);
|
void setBool(const string &key, bool value);
|
||||||
|
|
|
@ -124,7 +124,8 @@ const float Renderer::magicCircleRadius= 1.f;
|
||||||
//perspective values
|
//perspective values
|
||||||
const float Renderer::perspFov= 60.f;
|
const float Renderer::perspFov= 60.f;
|
||||||
const float Renderer::perspNearPlane= 1.f;
|
const float Renderer::perspNearPlane= 1.f;
|
||||||
const float Renderer::perspFarPlane= 50.f;
|
//const float Renderer::perspFarPlane= 50.f;
|
||||||
|
const float Renderer::perspFarPlane= 1000.f;
|
||||||
|
|
||||||
const float Renderer::ambFactor= 0.7f;
|
const float Renderer::ambFactor= 0.7f;
|
||||||
const Vec4f Renderer::fowColor= Vec4f(0.0f, 0.0f, 0.0f, 1.0f);
|
const Vec4f Renderer::fowColor= Vec4f(0.0f, 0.0f, 0.0f, 1.0f);
|
||||||
|
@ -133,7 +134,7 @@ const Vec4f Renderer::defDiffuseColor= Vec4f(1.f, 1.f, 1.f, 1.f);
|
||||||
const Vec4f Renderer::defAmbientColor= Vec4f(1.f * ambFactor, 1.f * ambFactor, 1.f * ambFactor, 1.f);
|
const Vec4f Renderer::defAmbientColor= Vec4f(1.f * ambFactor, 1.f * ambFactor, 1.f * ambFactor, 1.f);
|
||||||
const Vec4f Renderer::defColor= Vec4f(1.f, 1.f, 1.f, 1.f);
|
const Vec4f Renderer::defColor= Vec4f(1.f, 1.f, 1.f, 1.f);
|
||||||
|
|
||||||
const float Renderer::maxLightDist= 50.f;
|
const float Renderer::maxLightDist= 1000.f;
|
||||||
|
|
||||||
// ==================== constructor and destructor ====================
|
// ==================== constructor and destructor ====================
|
||||||
|
|
||||||
|
|
|
@ -381,6 +381,8 @@ public:
|
||||||
void renderUnitTitles(Font2D *font, Vec3f color);
|
void renderUnitTitles(Font2D *font, Vec3f color);
|
||||||
Vec3f computeScreenPosition(const Vec3f &worldPos);
|
Vec3f computeScreenPosition(const Vec3f &worldPos);
|
||||||
|
|
||||||
|
bool setPhotoMode(bool value) { photoMode = value; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
//private misc
|
//private misc
|
||||||
float computeSunAngle(float time);
|
float computeSunAngle(float time);
|
||||||
|
|
|
@ -326,27 +326,28 @@ void Gui::groupKey(int groupIndex){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Gui::hotKey(char key){
|
void Gui::hotKey(char key) {
|
||||||
|
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s] key = [%c][%d]\n",__FILE__,__FUNCTION__,key,key);
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s] key = [%c][%d]\n",__FILE__,__FUNCTION__,key,key);
|
||||||
|
|
||||||
if(key=='G'){
|
Config &configKeys = Config::getInstance(std::pair<ConfigType,ConfigType>(cfgMainKeys,cfgUserKeys));
|
||||||
|
|
||||||
|
if(key == configKeys.getCharKey("HotKeyCenterCameraOnSelection")) {
|
||||||
centerCameraOnSelection();
|
centerCameraOnSelection();
|
||||||
}
|
}
|
||||||
else if(key=='I'){
|
else if(key == configKeys.getCharKey("HotKeySelectIdleHarvesterUnit")) {
|
||||||
selectInterestingUnit(iutIdleHarvester);
|
selectInterestingUnit(iutIdleHarvester);
|
||||||
}
|
}
|
||||||
else if(key=='B'){
|
else if(key == configKeys.getCharKey("HotKeySelectBuiltBuilding")) {
|
||||||
selectInterestingUnit(iutBuiltBuilding);
|
selectInterestingUnit(iutBuiltBuilding);
|
||||||
}
|
}
|
||||||
else if(key=='?') {
|
else if(key == configKeys.getCharKey("HotKeyShowDebug")) {
|
||||||
this->showDebugUI = !this->showDebugUI;
|
this->showDebugUI = !this->showDebugUI;
|
||||||
}
|
}
|
||||||
else if(key=='|') {
|
else if(key == configKeys.getCharKey("HotKeyDumpWorldToLog")) {
|
||||||
std::string worldLog = world->DumpWorldToLog();
|
std::string worldLog = world->DumpWorldToLog();
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] worldLog dumped to [%s]\n",__FILE__,__FUNCTION__,__LINE__,worldLog.c_str());
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] worldLog dumped to [%s]\n",__FILE__,__FUNCTION__,__LINE__,worldLog.c_str());
|
||||||
}
|
}
|
||||||
else if(key=='R'){
|
else if(key == configKeys.getCharKey("HotKeyRotateUnitDuringPlacement")){
|
||||||
// Here the user triggers a unit rotation while placing a unit
|
// Here the user triggers a unit rotation while placing a unit
|
||||||
if(allowRotateUnits == true && isPlacingBuilding()) {
|
if(allowRotateUnits == true && isPlacingBuilding()) {
|
||||||
if(getBuilding()->getRotationAllowed()){
|
if(getBuilding()->getRotationAllowed()){
|
||||||
|
@ -354,16 +355,16 @@ void Gui::hotKey(char key){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(key=='D'){
|
else if(key == configKeys.getCharKey("HotKeySelectDamagedUnit")) {
|
||||||
selectInterestingUnit(iutDamaged);
|
selectInterestingUnit(iutDamaged);
|
||||||
}
|
}
|
||||||
else if(key=='T'){
|
else if(key == configKeys.getCharKey("HotKeySelectStoreUnit")) {
|
||||||
selectInterestingUnit(iutStore);
|
selectInterestingUnit(iutStore);
|
||||||
}
|
}
|
||||||
else if(key=='A'){
|
else if(key == configKeys.getCharKey("HotKeySelectedUnitsAttack")) {
|
||||||
clickCommonCommand(ccAttack);
|
clickCommonCommand(ccAttack);
|
||||||
}
|
}
|
||||||
else if(key=='S'){
|
else if(key == configKeys.getCharKey("HotKeySelectedUnitsStop")) {
|
||||||
clickCommonCommand(ccStop);
|
clickCommonCommand(ccStop);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -352,6 +352,11 @@ int glestMain(int argc, char** argv){
|
||||||
|
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] Font::charCount = %d, Font::fontTypeName [%s] Shared::Platform::charSet = %d\n",__FILE__,__FUNCTION__,__LINE__,Font::charCount,Font::fontTypeName.c_str(),Shared::Platform::charSet);
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] Font::charCount = %d, Font::fontTypeName [%s] Shared::Platform::charSet = %d\n",__FILE__,__FUNCTION__,__LINE__,Font::charCount,Font::fontTypeName.c_str(),Shared::Platform::charSet);
|
||||||
|
|
||||||
|
Config &configKeys = Config::getInstance(
|
||||||
|
std::pair<ConfigType,ConfigType>(cfgMainKeys,cfgUserKeys),
|
||||||
|
std::pair<string,string>("glestkeys.ini","glestuserkeys.ini"),
|
||||||
|
std::pair<bool,bool>(true,false));
|
||||||
|
|
||||||
//showCursor(config.getBool("Windowed"));
|
//showCursor(config.getBool("Windowed"));
|
||||||
showCursor(false);
|
showCursor(false);
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// ==============================================================
|
// ==============================================================
|
||||||
// This file is part of Glest (www.glest.org)
|
// This file is part of Glest (www.glest.org)
|
||||||
//
|
//
|
||||||
// Copyright (C) 2001-2005 Marti<EFBFBD>o Figueroa
|
// Copyright (C) 2001-2005 Martiño Figueroa
|
||||||
//
|
//
|
||||||
// You can redistribute this code and/or modify it under
|
// You can redistribute this code and/or modify it under
|
||||||
// the terms of the GNU General Public License as published
|
// the terms of the GNU General Public License as published
|
||||||
|
|
|
@ -385,16 +385,6 @@ void MenuStateCustomGame::mouseClick(int x, int y, MouseButton mouseButton){
|
||||||
|
|
||||||
soundRenderer.playFx(coreData.getClickSoundA());
|
soundRenderer.playFx(coreData.getClickSoundA());
|
||||||
|
|
||||||
/*
|
|
||||||
if( listBoxPublishServer.getEditable() &&
|
|
||||||
listBoxPublishServer.getSelectedItemIndex() == 0) {
|
|
||||||
needToRepublishToMasterserver = true;
|
|
||||||
lastMasterserverPublishing = 0;
|
|
||||||
publishToMasterserver();
|
|
||||||
simpleTask();
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
MutexSafeWrapper safeMutex(&masterServerThreadAccessor);
|
MutexSafeWrapper safeMutex(&masterServerThreadAccessor);
|
||||||
needToBroadcastServerSettings = false;
|
needToBroadcastServerSettings = false;
|
||||||
needToRepublishToMasterserver = false;
|
needToRepublishToMasterserver = false;
|
||||||
|
@ -448,8 +438,6 @@ void MenuStateCustomGame::mouseClick(int x, int y, MouseButton mouseButton){
|
||||||
|
|
||||||
needToRepublishToMasterserver = true;
|
needToRepublishToMasterserver = true;
|
||||||
lastMasterserverPublishing = 0;
|
lastMasterserverPublishing = 0;
|
||||||
//publishToMasterserver();
|
|
||||||
//simpleTask();
|
|
||||||
|
|
||||||
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__);
|
||||||
}
|
}
|
||||||
|
@ -1108,6 +1096,9 @@ void MenuStateCustomGame::simpleTask() {
|
||||||
|
|
||||||
MutexSafeWrapper safeMutex(&masterServerThreadAccessor);
|
MutexSafeWrapper safeMutex(&masterServerThreadAccessor);
|
||||||
bool republish = (needToRepublishToMasterserver == true && publishToServerInfo != "");
|
bool republish = (needToRepublishToMasterserver == true && publishToServerInfo != "");
|
||||||
|
if(publishToMasterserverThread == NULL || publishToMasterserverThread->getQuitStatus() == true || publishToMasterserverThread->getRunningStatus() == false) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
safeMutex.ReleaseLock(true);
|
safeMutex.ReleaseLock(true);
|
||||||
|
|
||||||
if(republish == true) {
|
if(republish == true) {
|
||||||
|
@ -1126,8 +1117,11 @@ void MenuStateCustomGame::simpleTask() {
|
||||||
|
|
||||||
//printf("the request is:\n%s\n",request.c_str());
|
//printf("the request is:\n%s\n",request.c_str());
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d] the request is:\n%s\n",__FILE__,__FUNCTION__,__LINE__,request.c_str());
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d] the request is:\n%s\n",__FILE__,__FUNCTION__,__LINE__,request.c_str());
|
||||||
|
|
||||||
|
|
||||||
|
if(publishToMasterserverThread == NULL || publishToMasterserverThread->getQuitStatus() == true || publishToMasterserverThread->getRunningStatus() == false) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
std::string serverInfo = SystemFlags::getHTTP(request);
|
std::string serverInfo = SystemFlags::getHTTP(request);
|
||||||
//printf("the result is:\n'%s'\n",serverInfo.c_str());
|
//printf("the result is:\n'%s'\n",serverInfo.c_str());
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d] the result is:\n'%s'\n",__FILE__,__FUNCTION__,__LINE__,serverInfo.c_str());
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d] the result is:\n'%s'\n",__FILE__,__FUNCTION__,__LINE__,serverInfo.c_str());
|
||||||
|
@ -1146,6 +1140,11 @@ void MenuStateCustomGame::simpleTask() {
|
||||||
|
|
||||||
safeMutex.Lock();
|
safeMutex.Lock();
|
||||||
bool broadCastSettings = needToBroadcastServerSettings;
|
bool broadCastSettings = needToBroadcastServerSettings;
|
||||||
|
|
||||||
|
if(publishToMasterserverThread == NULL || publishToMasterserverThread->getQuitStatus() == true || publishToMasterserverThread->getRunningStatus() == false) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
safeMutex.ReleaseLock(true);
|
safeMutex.ReleaseLock(true);
|
||||||
|
|
||||||
if(broadCastSettings)
|
if(broadCastSettings)
|
||||||
|
@ -1160,9 +1159,17 @@ void MenuStateCustomGame::simpleTask() {
|
||||||
if(serverInterface->hasClientConnection() == true) {
|
if(serverInterface->hasClientConnection() == true) {
|
||||||
//printf("Sending game settings broadcast since we have at least 1 client connected'\n");
|
//printf("Sending game settings broadcast since we have at least 1 client connected'\n");
|
||||||
|
|
||||||
|
if(publishToMasterserverThread == NULL || publishToMasterserverThread->getQuitStatus() == true || publishToMasterserverThread->getRunningStatus() == false) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
GameSettings gameSettings;
|
GameSettings gameSettings;
|
||||||
loadGameSettings(&gameSettings);
|
loadGameSettings(&gameSettings);
|
||||||
|
|
||||||
|
if(publishToMasterserverThread == NULL || publishToMasterserverThread->getQuitStatus() == true || publishToMasterserverThread->getRunningStatus() == false) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
serverInterface->setGameSettings(&gameSettings);
|
serverInterface->setGameSettings(&gameSettings);
|
||||||
serverInterface->broadcastGameSetup(&gameSettings);
|
serverInterface->broadcastGameSetup(&gameSettings);
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,6 +42,9 @@ ServerInterface::ServerInterface(){
|
||||||
gameHasBeenInitiated = false;
|
gameHasBeenInitiated = false;
|
||||||
gameSettingsUpdateCount = 0;
|
gameSettingsUpdateCount = 0;
|
||||||
|
|
||||||
|
enabledThreadedClientCommandBroadcast = Config::getInstance().getBool("EnableThreadedClientCommandBroadcast","false");
|
||||||
|
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] enabledThreadedClientCommandBroadcast = %d\n",__FILE__,__FUNCTION__,__LINE__,enabledThreadedClientCommandBroadcast);
|
||||||
|
|
||||||
for(int i= 0; i<GameConstants::maxPlayers; ++i){
|
for(int i= 0; i<GameConstants::maxPlayers; ++i){
|
||||||
slots[i]= NULL;
|
slots[i]= NULL;
|
||||||
switchSetupRequests[i]= NULL;
|
switchSetupRequests[i]= NULL;
|
||||||
|
|
|
@ -96,26 +96,32 @@ void SoundRenderer::update(){
|
||||||
// ======================= Music ============================
|
// ======================= Music ============================
|
||||||
|
|
||||||
void SoundRenderer::playMusic(StrSound *strSound){
|
void SoundRenderer::playMusic(StrSound *strSound){
|
||||||
strSound->setVolume(musicVolume);
|
if(strSound != NULL) {
|
||||||
strSound->restart();
|
strSound->setVolume(musicVolume);
|
||||||
if(soundPlayer != NULL) {
|
strSound->restart();
|
||||||
if(runThreadSafe == true) mutex.p();
|
if(soundPlayer != NULL) {
|
||||||
soundPlayer->play(strSound);
|
if(runThreadSafe == true) mutex.p();
|
||||||
if(runThreadSafe == true) mutex.v();
|
soundPlayer->play(strSound);
|
||||||
|
if(runThreadSafe == true) mutex.v();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SoundRenderer::setMusicVolume(StrSound *strSound){
|
void SoundRenderer::setMusicVolume(StrSound *strSound){
|
||||||
strSound->setVolume(musicVolume);
|
if(strSound != NULL) {
|
||||||
|
strSound->setVolume(musicVolume);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SoundRenderer::stopMusic(StrSound *strSound){
|
void SoundRenderer::stopMusic(StrSound *strSound){
|
||||||
if(soundPlayer != NULL) {
|
if(soundPlayer != NULL) {
|
||||||
if(runThreadSafe == true) mutex.p();
|
if(runThreadSafe == true) mutex.p();
|
||||||
soundPlayer->stop(strSound);
|
soundPlayer->stop(strSound);
|
||||||
if(strSound->getNext() != NULL) {
|
if(strSound != NULL) {
|
||||||
soundPlayer->stop(strSound->getNext());
|
if(strSound->getNext() != NULL) {
|
||||||
}
|
soundPlayer->stop(strSound->getNext());
|
||||||
|
}
|
||||||
|
}
|
||||||
if(runThreadSafe == true) mutex.v();
|
if(runThreadSafe == true) mutex.v();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -154,11 +160,13 @@ void SoundRenderer::playFx(StaticSound *staticSound){
|
||||||
// ======================= Ambient ============================
|
// ======================= Ambient ============================
|
||||||
|
|
||||||
void SoundRenderer::playAmbient(StrSound *strSound){
|
void SoundRenderer::playAmbient(StrSound *strSound){
|
||||||
strSound->setVolume(ambientVolume);
|
if(strSound != NULL) {
|
||||||
if(soundPlayer != NULL) {
|
strSound->setVolume(ambientVolume);
|
||||||
if(runThreadSafe == true) mutex.p();
|
if(soundPlayer != NULL) {
|
||||||
soundPlayer->play(strSound, ambientFade);
|
if(runThreadSafe == true) mutex.p();
|
||||||
if(runThreadSafe == true) mutex.v();
|
soundPlayer->play(strSound, ambientFade);
|
||||||
|
if(runThreadSafe == true) mutex.v();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1083,17 +1083,34 @@ void Unit::clearCommands(){
|
||||||
|
|
||||||
CommandResult Unit::checkCommand(Command *command) const{
|
CommandResult Unit::checkCommand(Command *command) const{
|
||||||
|
|
||||||
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
|
||||||
|
if(command == NULL) {
|
||||||
|
char szBuf[1024]="";
|
||||||
|
sprintf(szBuf,"In [%s::%s Line: %d] ERROR: command == NULL\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
throw runtime_error(szBuf);
|
||||||
|
}
|
||||||
//if not operative or has not command type => fail
|
//if not operative or has not command type => fail
|
||||||
if(!isOperative() || command->getUnit()==this || !getType()->hasCommandType(command->getCommandType())){
|
if(!isOperative() || command->getUnit()==this || !getType()->hasCommandType(command->getCommandType())){
|
||||||
return crFailUndefined;
|
return crFailUndefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
|
||||||
//if pos is not inside the world (if comand has not a pos, pos is (0, 0) and is inside world
|
//if pos is not inside the world (if comand has not a pos, pos is (0, 0) and is inside world
|
||||||
if(!map->isInside(command->getPos())){
|
if(!map->isInside(command->getPos())){
|
||||||
return crFailUndefined;
|
return crFailUndefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
|
||||||
//check produced
|
//check produced
|
||||||
|
if(command->getCommandType() == NULL) {
|
||||||
|
char szBuf[1024]="";
|
||||||
|
sprintf(szBuf,"In [%s::%s Line: %d] ERROR: command->getCommandType() == NULL\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
throw runtime_error(szBuf);
|
||||||
|
}
|
||||||
|
|
||||||
const ProducibleType *produced= command->getCommandType()->getProduced();
|
const ProducibleType *produced= command->getCommandType()->getProduced();
|
||||||
if(produced!=NULL){
|
if(produced!=NULL){
|
||||||
if(!faction->reqsOk(produced)){
|
if(!faction->reqsOk(produced)){
|
||||||
|
@ -1104,9 +1121,18 @@ CommandResult Unit::checkCommand(Command *command) const{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
|
||||||
//build command specific, check resources and requirements for building
|
//build command specific, check resources and requirements for building
|
||||||
if(command->getCommandType()->getClass()==ccBuild){
|
if(command->getCommandType()->getClass()==ccBuild){
|
||||||
const UnitType *builtUnit= command->getUnitType();
|
const UnitType *builtUnit= command->getUnitType();
|
||||||
|
|
||||||
|
if(builtUnit == NULL) {
|
||||||
|
char szBuf[1024]="";
|
||||||
|
sprintf(szBuf,"In [%s::%s Line: %d] ERROR: builtUnit == NULL\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
throw runtime_error(szBuf);
|
||||||
|
}
|
||||||
|
|
||||||
if(!faction->reqsOk(builtUnit)){
|
if(!faction->reqsOk(builtUnit)){
|
||||||
return crFailReqs;
|
return crFailReqs;
|
||||||
}
|
}
|
||||||
|
@ -1118,11 +1144,20 @@ CommandResult Unit::checkCommand(Command *command) const{
|
||||||
//upgrade command specific, check that upgrade is not upgraded
|
//upgrade command specific, check that upgrade is not upgraded
|
||||||
else if(command->getCommandType()->getClass()==ccUpgrade){
|
else if(command->getCommandType()->getClass()==ccUpgrade){
|
||||||
const UpgradeCommandType *uct= static_cast<const UpgradeCommandType*>(command->getCommandType());
|
const UpgradeCommandType *uct= static_cast<const UpgradeCommandType*>(command->getCommandType());
|
||||||
|
|
||||||
|
if(uct == NULL) {
|
||||||
|
char szBuf[1024]="";
|
||||||
|
sprintf(szBuf,"In [%s::%s Line: %d] ERROR: uct == NULL\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
throw runtime_error(szBuf);
|
||||||
|
}
|
||||||
|
|
||||||
if(faction->getUpgradeManager()->isUpgradingOrUpgraded(uct->getProducedUpgrade())){
|
if(faction->getUpgradeManager()->isUpgradingOrUpgraded(uct->getProducedUpgrade())){
|
||||||
return crFailUndefined;
|
return crFailUndefined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
|
||||||
return crSuccess;
|
return crSuccess;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -66,6 +66,9 @@ void TechTree::load(const string &dir, set<string> &factions, Checksum* checksum
|
||||||
throw runtime_error("Error loading Resource Types: "+ dir + "\n" + e.what());
|
throw runtime_error("Error loading Resource Types: "+ dir + "\n" + e.what());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// give CPU time to update other things to avoid apperance of hanging
|
||||||
|
sleep(0);
|
||||||
|
|
||||||
//load tech tree xml info
|
//load tech tree xml info
|
||||||
try{
|
try{
|
||||||
XmlTree xmlTree;
|
XmlTree xmlTree;
|
||||||
|
@ -85,6 +88,9 @@ void TechTree::load(const string &dir, set<string> &factions, Checksum* checksum
|
||||||
attackTypes[i].setId(i);
|
attackTypes[i].setId(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// give CPU time to update other things to avoid apperance of hanging
|
||||||
|
sleep(0);
|
||||||
|
|
||||||
//armor types
|
//armor types
|
||||||
const XmlNode *armorTypesNode= techTreeNode->getChild("armor-types");
|
const XmlNode *armorTypesNode= techTreeNode->getChild("armor-types");
|
||||||
armorTypes.resize(armorTypesNode->getChildCount());
|
armorTypes.resize(armorTypesNode->getChildCount());
|
||||||
|
@ -109,6 +115,9 @@ void TechTree::load(const string &dir, set<string> &factions, Checksum* checksum
|
||||||
throw runtime_error("Error loading Tech Tree: "+ dir + "\n" + e.what());
|
throw runtime_error("Error loading Tech Tree: "+ dir + "\n" + e.what());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// give CPU time to update other things to avoid apperance of hanging
|
||||||
|
sleep(0);
|
||||||
|
|
||||||
//load factions
|
//load factions
|
||||||
str= dir+"/factions/*.";
|
str= dir+"/factions/*.";
|
||||||
try{
|
try{
|
||||||
|
@ -116,8 +125,18 @@ void TechTree::load(const string &dir, set<string> &factions, Checksum* checksum
|
||||||
|
|
||||||
int i=0;
|
int i=0;
|
||||||
for ( set<string>::iterator it = factions.begin(); it != factions.end(); ++it ) {
|
for ( set<string>::iterator it = factions.begin(); it != factions.end(); ++it ) {
|
||||||
|
|
||||||
|
char szBuf[1024]="";
|
||||||
|
sprintf(szBuf,"%s %s %d / %d",Lang::getInstance().get("Loading").c_str(),Lang::getInstance().get("Faction").c_str(),i+1,factions.size());
|
||||||
|
Logger &logger= Logger::getInstance();
|
||||||
|
logger.setState(szBuf);
|
||||||
|
|
||||||
str=dir+"/factions/" + *it;
|
str=dir+"/factions/" + *it;
|
||||||
factionTypes[i++].load(str, this, checksum);
|
factionTypes[i++].load(str, this, checksum);
|
||||||
|
|
||||||
|
// give CPU time to update other things to avoid apperance of hanging
|
||||||
|
sleep(0);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch(const exception &e){
|
catch(const exception &e){
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
using std::string;
|
using std::string;
|
||||||
|
|
||||||
namespace Shared{ namespace Util{
|
namespace Shared { namespace Util {
|
||||||
|
|
||||||
bool strToBool(const string &s);
|
bool strToBool(const string &s);
|
||||||
int strToInt(const string &s);
|
int strToInt(const string &s);
|
||||||
|
@ -32,6 +32,8 @@ string intToHex(int i);
|
||||||
string floatToStr(float f,int precsion=2);
|
string floatToStr(float f,int precsion=2);
|
||||||
string doubleToStr(double f,int precsion=2);
|
string doubleToStr(double f,int precsion=2);
|
||||||
|
|
||||||
|
bool IsNumeric(const char *p, bool allowNegative=true);
|
||||||
|
|
||||||
}}//end namespace
|
}}//end namespace
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -93,11 +93,11 @@ void BaseThread::shutdownAndWait(BaseThread *pThread) {
|
||||||
if(pThread != NULL && pThread->getRunningStatus() == true) {
|
if(pThread != NULL && pThread->getRunningStatus() == true) {
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
pThread->signalQuit();
|
pThread->signalQuit();
|
||||||
for( time_t elapsed = time(NULL); difftime(time(NULL),elapsed) <= 10; ) {
|
for( time_t elapsed = time(NULL); difftime(time(NULL),elapsed) <= 7; ) {
|
||||||
if(pThread->getRunningStatus() == false) {
|
if(pThread->getRunningStatus() == false) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
sleep(10);
|
sleep(0);
|
||||||
//SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
//SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
}
|
}
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
|
|
@ -108,6 +108,7 @@ void createGlFontBitmaps(uint32 &base, const string &type, int size, int width,
|
||||||
|
|
||||||
XFontStruct* fontInfo = XLoadQueryFont(display, type.c_str());
|
XFontStruct* fontInfo = XLoadQueryFont(display, type.c_str());
|
||||||
if(!fontInfo) {
|
if(!fontInfo) {
|
||||||
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] CANNOT load font %s, falling back to default\n",__FILE__,__FUNCTION__,__LINE__,type.c_str());
|
||||||
fontInfo = XLoadQueryFont(display, "fixed");
|
fontInfo = XLoadQueryFont(display, "fixed");
|
||||||
if(!fontInfo) {
|
if(!fontInfo) {
|
||||||
throw std::runtime_error("Font not found: " + type);
|
throw std::runtime_error("Font not found: " + type);
|
||||||
|
|
|
@ -543,6 +543,8 @@ char Window::getKey(SDL_keysym keysym) {
|
||||||
return '8';
|
return '8';
|
||||||
case SDLK_9:
|
case SDLK_9:
|
||||||
return '9';
|
return '9';
|
||||||
|
case SDLK_QUESTION:
|
||||||
|
return '?';
|
||||||
case SDLK_a:
|
case SDLK_a:
|
||||||
return 'A';
|
return 'A';
|
||||||
case SDLK_b:
|
case SDLK_b:
|
||||||
|
|
|
@ -15,10 +15,12 @@
|
||||||
#include <vorbis/vorbisfile.h>
|
#include <vorbis/vorbisfile.h>
|
||||||
|
|
||||||
#include "sound.h"
|
#include "sound.h"
|
||||||
|
#include "util.h"
|
||||||
#include "leak_dumper.h"
|
#include "leak_dumper.h"
|
||||||
|
|
||||||
using namespace Shared::Platform;
|
using namespace Shared::Platform;
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
using namespace Shared::Util;
|
||||||
|
|
||||||
namespace Shared{ namespace Sound{
|
namespace Shared{ namespace Sound{
|
||||||
|
|
||||||
|
@ -146,14 +148,31 @@ void OggSoundFileLoader::open(const string &path, SoundInfo *soundInfo){
|
||||||
}
|
}
|
||||||
|
|
||||||
vf= new OggVorbis_File();
|
vf= new OggVorbis_File();
|
||||||
|
if(vf==NULL) {
|
||||||
|
throw runtime_error("Can't create ogg object for file: "+path);
|
||||||
|
}
|
||||||
|
|
||||||
ov_open(f, vf, NULL, 0);
|
ov_open(f, vf, NULL, 0);
|
||||||
|
|
||||||
vorbis_info *vi= ov_info(vf, -1);
|
vorbis_info *vi= ov_info(vf, -1);
|
||||||
|
if(vi==NULL) {
|
||||||
|
throw runtime_error("Can't read ogg header info for file: "+path);
|
||||||
|
}
|
||||||
|
|
||||||
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] path = [%s] vi->version = %d, vi->channels = %d, vi->rate = %d, vi->bitrate_upper = %d, vi->bitrate_nominal = %d, vi->bitrate_lower = %d, vi->bitrate_window = %d\n",__FILE__,__FUNCTION__,__LINE__,path.c_str(),vi->version,vi->channels,vi->rate,vi->bitrate_upper,vi->bitrate_nominal,vi->bitrate_lower,vi->bitrate_window);
|
||||||
|
|
||||||
soundInfo->setChannels(vi->channels);
|
soundInfo->setChannels(vi->channels);
|
||||||
soundInfo->setsamplesPerSecond(vi->rate);
|
soundInfo->setsamplesPerSecond(vi->rate);
|
||||||
soundInfo->setBitsPerSample(16);
|
soundInfo->setBitsPerSample(16);
|
||||||
soundInfo->setSize(static_cast<uint32>(ov_pcm_total(vf, -1))*2);
|
|
||||||
|
uint32 samples = static_cast<uint32>(ov_pcm_total(vf, -1));
|
||||||
|
|
||||||
|
//if(vi->channels == 1) {
|
||||||
|
soundInfo->setSize(samples * 2);
|
||||||
|
//}
|
||||||
|
//else {
|
||||||
|
// soundInfo->setSize(samples * 4);
|
||||||
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32 OggSoundFileLoader::read(int8 *samples, uint32 size){
|
uint32 OggSoundFileLoader::read(int8 *samples, uint32 size){
|
||||||
|
|
|
@ -128,5 +128,18 @@ string doubleToStr(double d,int precsion){
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool IsNumeric(const char *p, bool allowNegative)
|
||||||
|
{
|
||||||
|
int index = 0;
|
||||||
|
for ( ; *p; p++) {
|
||||||
|
if (*p < '0' || *p > '9') {
|
||||||
|
if(allowNegative == false || (*p != '-' && index == 0)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
}}//end namespace
|
}}//end namespace
|
||||||
|
|
Loading…
Reference in New Issue