From 9ce83ed21b1e1bfe968e8cc873d6d8f57d8064f2 Mon Sep 17 00:00:00 2001 From: Titus Tscharntke Date: Sun, 1 May 2011 20:19:41 +0000 Subject: [PATCH] queued commands are displayed in a better way --- source/glest_game/game/game.cpp | 9 ++++- source/glest_game/gui/gui.cpp | 31 +++++++++++++- source/glest_game/gui/gui.h | 3 ++ source/glest_game/type_instances/unit.cpp | 49 ++++++++++++----------- source/glest_game/type_instances/unit.h | 1 + 5 files changed, 66 insertions(+), 27 deletions(-) diff --git a/source/glest_game/game/game.cpp b/source/glest_game/game/game.cpp index 9f46db56..5d847514 100644 --- a/source/glest_game/game/game.cpp +++ b/source/glest_game/game/game.cpp @@ -1386,9 +1386,14 @@ void Game::mouseMove(int x, int y, const MouseState *ms) { } //display - if (metrics.isInDisplay(x, y) && !gui.isSelecting() && !gui.isSelectingPos()) { + if ( !gui.isSelecting() && !gui.isSelectingPos()) { if (!gui.isSelectingPos()) { - gui.mouseMoveDisplay(x - metrics.getDisplayX(), y - metrics.getDisplayY()); + if(metrics.isInDisplay(x, y)){ + gui.mouseMoveDisplay(x - metrics.getDisplayX(), y - metrics.getDisplayY()); + } + else { + gui.mouseMoveOutsideDisplay(); + } } } diff --git a/source/glest_game/gui/gui.cpp b/source/glest_game/gui/gui.cpp index a3b3d257..f6c7a440 100644 --- a/source/glest_game/gui/gui.cpp +++ b/source/glest_game/gui/gui.cpp @@ -105,6 +105,7 @@ Gui::Gui(){ selectingPos= false; selectingMeetingPoint= false; activePos= invalidPos; + lastPosDisplay= invalidPos; lastQuadCalcFrame=0; selectionCalculationFrameSkip=10; minQuadSize=20; @@ -200,6 +201,10 @@ void Gui::mouseMoveDisplay(int x, int y) { computeInfoString(computePosDisplay(x, y)); } +void Gui::mouseMoveOutsideDisplay() { + computeInfoString(invalidPos); +} + void Gui::mouseDownLeftGraphics(int x, int y, bool prepared) { if(selectingPos) { //give standard orders @@ -603,11 +608,29 @@ void Gui::mouseDownDisplayUnitBuild(int posDisplay){ } } + +string Gui::computeDefaultInfoString(){ + + Lang &lang= Lang::getInstance(); + + string result=""; + + if(selection.isCommandable() && selection.isUniform()){ + // default is the description extension + result=selection.getFrontUnit()->getDescExtension(); + } + return result; +} + + void Gui::computeInfoString(int posDisplay){ Lang &lang= Lang::getInstance(); - display.setInfoText(""); + lastPosDisplay = posDisplay; + + display.setInfoText(computeDefaultInfoString()); + if(posDisplay!=invalidPos && selection.isCommandable()){ if(!selectingBuilding){ if(posDisplay==cancelPos){ @@ -621,6 +644,7 @@ void Gui::computeInfoString(int posDisplay){ if(selection.isUniform()){ const Unit *unit= selection.getFrontUnit(); const CommandType *ct= display.getCommandType(posDisplay); + if(ct!=NULL){ if(unit->getFaction()->reqsOk(ct)){ display.setInfoText(ct->getDesc(unit->getTotalUpgrade())); @@ -782,6 +806,11 @@ void Gui::computeDisplay(){ } } } + + // refresh other things + computeInfoString(lastPosDisplay); + + } int Gui::computePosDisplay(int x, int y){ diff --git a/source/glest_game/gui/gui.h b/source/glest_game/gui/gui.h index 766247ac..ff260bf1 100644 --- a/source/glest_game/gui/gui.h +++ b/source/glest_game/gui/gui.h @@ -120,6 +120,7 @@ private: const CommandType *activeCommandType; CommandClass activeCommandClass; int activePos; + int lastPosDisplay; //composite Display display; @@ -174,6 +175,7 @@ public: bool mouseValid(int x, int y); void mouseDownLeftDisplay(int x, int y); void mouseMoveDisplay(int x, int y); + void mouseMoveOutsideDisplay(); void mouseDownLeftGraphics(int x, int y, bool prepared); void mouseDownRightGraphics(int x, int y, bool prepared); void mouseUpLeftGraphics(int x, int y); @@ -207,6 +209,7 @@ private: void mouseDownDisplayUnitSkills(int posDisplay); void mouseDownDisplayUnitBuild(int posDisplay); void computeInfoString(int posDisplay); + string computeDefaultInfoString(); void addOrdersResultToConsole(CommandClass cc, CommandResult rr); bool isSharedCommandClass(CommandClass commandClass); void computeSelected(bool doubleCkick,bool force); diff --git a/source/glest_game/type_instances/unit.cpp b/source/glest_game/type_instances/unit.cpp index 5695ca5a..28b5de8a 100644 --- a/source/glest_game/type_instances/unit.cpp +++ b/source/glest_game/type_instances/unit.cpp @@ -235,7 +235,7 @@ Unit::Unit(int id, UnitPathInterface *unitpath, const Vec2i &pos, const UnitType Config &config= Config::getInstance(); showUnitParticles = config.getBool("UnitParticles","true"); - maxQueuedCommandDisplayCount = config.getInt("MaxQueuedCommandDisplayCount","1"); + maxQueuedCommandDisplayCount = config.getInt("MaxQueuedCommandDisplayCount","15"); lastPos= pos; progress= 0; @@ -1403,6 +1403,25 @@ bool Unit::decHp(int i) { return false; } +string Unit::getDescExtension() const{ + Lang &lang= Lang::getInstance(); + string str= "\n"; + + if(commands.empty() == false && commands.size() > 1 ){ + Commands::const_iterator it= commands.begin(); + for(unsigned int i= 0; i < min((size_t) maxQueuedCommandDisplayCount, commands.size()); ++i){ + const CommandType *ct= (*it)->getCommandType(); + if(i == 0){ + str+= "\n" + lang.get("OrdersOnQueue") + ": "; + } + str+= "\n#" + intToStr(i + 1) + " " + ct->getName(); + it++; + } + } + + return str; +} + string Unit::getDesc() const { Lang &lang= Lang::getInstance(); @@ -1471,31 +1490,13 @@ string Unit::getDesc() const { } //command info - if(commands.empty() == false) { - Commands::const_iterator it= commands.begin(); - for(unsigned int i = 0; i < min((size_t)maxQueuedCommandDisplayCount,commands.size()); ++i) { - const CommandType *ct = (*it)->getCommandType(); - if(maxQueuedCommandDisplayCount == 1) { - str+= "\n" + ct->getName(); - if(commands.size()>1){ - str+="\n"+lang.get("OrdersOnQueue")+": "+intToStr(commands.size()); - } - } - else { - if(commands.size() == 1) { - str += "\n" + ct->getName(); - } - else { - if(i == 0) { - str += "\n" + lang.get("OrdersOnQueue") + ": " + intToStr(commands.size()); - } - str += "\n#" + intToStr(i+1) + " " + ct->getName(); - } - } - it++; + if(commands.empty() == false) { + str+= "\n" + commands.front()->getCommandType()->getName(); + if(commands.size() > 1) { + str+= "\n" + lang.get("OrdersOnQueue") + ": " + intToStr(commands.size()); } } - else { + else{ //can store if(getType()->getStoredResourceCount() > 0) { for(int i = 0; i < getType()->getStoredResourceCount(); ++i) { diff --git a/source/glest_game/type_instances/unit.h b/source/glest_game/type_instances/unit.h index 26fe976a..633d5f54 100644 --- a/source/glest_game/type_instances/unit.h +++ b/source/glest_game/type_instances/unit.h @@ -454,6 +454,7 @@ public: void resetHighlight(); const CommandType *computeCommandType(const Vec2i &pos, const Unit *targetUnit= NULL) const; string getDesc() const; + string getDescExtension() const; bool computeEp(); bool computeHp(); bool repair();