mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-20 20:23:03 +02:00
- First part of kingdom overview window (not a 100% stable)
- Implemented town buildings: dwarven treasury, ballista yard, partially - mystic pond
This commit is contained in:
parent
3ec6cfd115
commit
0f22ba0c0f
@ -12,6 +12,7 @@ SOURCES = AdventureMapButton.cpp \
|
||||
CBattleInterface.cpp \
|
||||
CCallback.cpp \
|
||||
CCastleInterface.cpp \
|
||||
CKingdomInterface.cpp \
|
||||
CConsoleHandler.cpp \
|
||||
CCursorHandler.cpp \
|
||||
CGameInfo.cpp \
|
||||
|
@ -5,6 +5,7 @@
|
||||
#include "CCursorHandler.h"
|
||||
#include "CGameInfo.h"
|
||||
#include "CHeroWindow.h"
|
||||
#include "CKingdomInterface.h"
|
||||
#include "CMessage.h"
|
||||
#include "SDL_Extensions.h"
|
||||
#include "CBitmapHandler.h"
|
||||
@ -1550,6 +1551,7 @@ CAdvMapInt::~CAdvMapInt()
|
||||
|
||||
void CAdvMapInt::fshowOverview()
|
||||
{
|
||||
GH.pushInt(new CKingdomInterface);
|
||||
}
|
||||
void CAdvMapInt::fswitchLevel()
|
||||
{
|
||||
|
@ -621,52 +621,82 @@ void CCastleInterface::buildingClicked(int building)
|
||||
GH.pushInt(cmw);
|
||||
break;
|
||||
}
|
||||
//case 15: //resource silo - default handling should be enought
|
||||
//case 15: //resource silo - default handling only
|
||||
|
||||
case 16: //blacksmith
|
||||
{
|
||||
const CGHeroInstance *hero = town->visitingHero;
|
||||
if(!hero)
|
||||
{
|
||||
std::string pom = CGI->generaltexth->allTexts[273];
|
||||
boost::algorithm::replace_first(pom,"%s",CGI->buildh->buildings[town->subID][16]->Name());
|
||||
LOCPLINT->showInfoDialog(pom,std::vector<SComponent*>(), soundBase::sound_todo);
|
||||
return;
|
||||
}
|
||||
int aid = town->town->warMachine;
|
||||
int price = CGI->arth->artifacts[aid].price;
|
||||
bool possible = (LOCPLINT->cb->getResourceAmount(6) >= price);
|
||||
if(vstd::contains(hero->artifWorn,ui16(aid+9))) //hero already has machine
|
||||
possible = false;
|
||||
|
||||
GH.pushInt(new CBlacksmithDialog(possible,CArtHandler::convertMachineID(aid,false),aid,hero->id));
|
||||
break;
|
||||
}
|
||||
//TODO: case 17: //special 1
|
||||
//TODO: case 18: //basic horde 1
|
||||
//TODO: case 19: //upg horde 1
|
||||
case 20: //ship at shipyard
|
||||
LOCPLINT->showInfoDialog(CGI->generaltexth->allTexts[51]); //Cannot build another boat
|
||||
enterBlacksmith(town->town->warMachine);
|
||||
break;
|
||||
//TODO: case 21: //special 2
|
||||
case 22: //special 3
|
||||
case 17:
|
||||
{
|
||||
switch(town->subID)
|
||||
{
|
||||
case 0: //brotherhood of sword
|
||||
enterTavern();
|
||||
/*Rampart*/ case 1://Mystic Pond
|
||||
enterFountain(building);
|
||||
break;
|
||||
/*Tower*/ case 2://Artifact Merchant
|
||||
/*Dungeon*/ case 5://Artifact Merchant
|
||||
/*Conflux*/ case 8://Artifact Merchant
|
||||
tlog4<<"Artifact Merchant not handled\n";
|
||||
break;
|
||||
|
||||
default:
|
||||
defaultBuildingClicked(building);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
//TODO: case 23: //special 4
|
||||
//TODO: case 24: //basic horde 2
|
||||
//TODO: case 25: //upg horde 2
|
||||
//TODO: case 26: //grail
|
||||
//case 18: //basic horde 1 - can't be selected
|
||||
//case 19: //upg horde 1 - can't be selected
|
||||
case 20: //ship at shipyard
|
||||
LOCPLINT->showInfoDialog(CGI->generaltexth->allTexts[51]); //Cannot build another boat
|
||||
break;
|
||||
case 21: //special 2
|
||||
{
|
||||
switch(town->subID)
|
||||
{
|
||||
/*Rampart*/ case 1: //Fountain of Fortune
|
||||
enterFountain(building);
|
||||
break;
|
||||
/*Stronghold*/ case 6: //Freelancer's Guild
|
||||
tlog4<<"Freelancer's Guild not handled\n";
|
||||
break;
|
||||
/*Conflux*/ case 8: //Magic University
|
||||
tlog4<<"Magic University not handled\n";
|
||||
break;
|
||||
default:
|
||||
defaultBuildingClicked(building);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 22: //special 3
|
||||
{
|
||||
switch(town->subID)
|
||||
{
|
||||
/*Castle*/ case 0: //brotherhood of sword
|
||||
enterTavern();
|
||||
break;
|
||||
/*Inferno*/ case 3: //Castle Gate
|
||||
tlog4<<"Castle Gate not handled\n";
|
||||
break;
|
||||
/*Necropolis*/ case 4: //Skeleton Transformer
|
||||
tlog4<<"Skeleton Transformer not handled\n";
|
||||
break;
|
||||
/*Dungeon*/ case 5: //Portal of Summoning
|
||||
tlog4<<"Portal of Summoning not handled\n";
|
||||
break;
|
||||
/*Stronghold*/ case 6: //Ballista Yard
|
||||
enterBlacksmith(4);
|
||||
break;
|
||||
default:
|
||||
defaultBuildingClicked(building);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
//case 23: //special 4 - default handling only
|
||||
//case 24: //basic horde 2 - can't be selected
|
||||
//case 25: //upg horde 2 - can't be selected
|
||||
//case 26: //grail - default handling only
|
||||
default:
|
||||
defaultBuildingClicked(building);
|
||||
break;
|
||||
@ -676,13 +706,51 @@ void CCastleInterface::buildingClicked(int building)
|
||||
void CCastleInterface::defaultBuildingClicked(int building)
|
||||
{
|
||||
std::vector<SComponent*> comps(1,
|
||||
new CCustomImgComponent(SComponent::building,town->subID,building,bicons->ourImages[building].bitmap,false));
|
||||
new CCustomImgComponent(SComponent::building,town->subID,building,bicons->ourImages[building].bitmap,false));
|
||||
|
||||
LOCPLINT->showInfoDialog(
|
||||
CGI->buildh->buildings[town->subID][building]->Description(),
|
||||
comps, soundBase::sound_todo);
|
||||
}
|
||||
|
||||
void CCastleInterface::enterFountain(int building)
|
||||
{
|
||||
std::vector<SComponent*> comps(1,
|
||||
new CCustomImgComponent(SComponent::building,town->subID,building,bicons->ourImages[building].bitmap,false));
|
||||
|
||||
std::string descr = CGI->buildh->buildings[town->subID][building]->Description();
|
||||
if ( building == 21)//we need description for mystic pond as well
|
||||
descr += "\n\n"+CGI->buildh->buildings[town->subID][17]->Description();
|
||||
// if (true)//fountain was builded this week
|
||||
descr += "\n\n"+ CGI->generaltexth->allTexts[677];
|
||||
/* else//fountain produced something;
|
||||
{
|
||||
descr+= "\n\n"+ CGI->generaltexth->allTexts[678];
|
||||
boost::algorithm::replace_first(descr,"%s",CGI->generaltexth->restypes[resID]);
|
||||
char buf[10];
|
||||
SDL_itoa(ResCount,buf,10);
|
||||
boost::algorithm::replace_first(descr,"%d",buf);
|
||||
}*/
|
||||
LOCPLINT->showInfoDialog(descr, comps, soundBase::sound_todo);
|
||||
}
|
||||
|
||||
void CCastleInterface::enterBlacksmith(int ArtifactID)
|
||||
{
|
||||
const CGHeroInstance *hero = town->visitingHero;
|
||||
if(!hero)
|
||||
{
|
||||
std::string pom = CGI->generaltexth->allTexts[273];
|
||||
boost::algorithm::replace_first(pom,"%s",CGI->buildh->buildings[town->subID][16]->Name());
|
||||
LOCPLINT->showInfoDialog(pom,std::vector<SComponent*>(), soundBase::sound_todo);
|
||||
return;
|
||||
}
|
||||
int price = CGI->arth->artifacts[ArtifactID].price;
|
||||
bool possible = (LOCPLINT->cb->getResourceAmount(6) >= price);
|
||||
if(vstd::contains(hero->artifWorn,ui16(ArtifactID+9))) //hero already has machine
|
||||
possible = false;
|
||||
GH.pushInt(new CBlacksmithDialog(possible,CArtHandler::convertMachineID(ArtifactID,false),ArtifactID,hero->id));
|
||||
}
|
||||
|
||||
void CCastleInterface::enterHall()
|
||||
{
|
||||
CHallInterface *h = new CHallInterface(this);
|
||||
|
@ -130,6 +130,8 @@ public:
|
||||
void showAll(SDL_Surface * to);
|
||||
void buildingClicked(int building);
|
||||
void defaultBuildingClicked(int building);//for buildings with simple description + pic left-click messages
|
||||
void enterFountain(int building);
|
||||
void enterBlacksmith(int ArtifactID);//support for blacksmith + ballista yard
|
||||
void enterTavern();
|
||||
void enterMageGuild();
|
||||
void splitClicked(); //for hero meeting (splitting stacks is handled by garrison int)
|
||||
@ -154,7 +156,7 @@ public:
|
||||
{
|
||||
public:
|
||||
int BID;
|
||||
int state;// 0 - no more than one capitol, 1 - lack of water, 2 - forbidden, 3 - Add another level to Mage Guild, 4 - already built, 5 - cannot build, 6 - cannot afford, 7 - build, 8 - lack of requirements
|
||||
int state;// 0 - no more than one capitol, 1 - lack of water, 2 - forbidden, 3 - Add another level to Mage Guild, 4 - already built, 5 - already builded today, 6 - cannot afford, 7 - build, 8 - lack of requirements
|
||||
//(-1) - forbidden in this town, 0 - possible, 1 - lack of res, 2 - requirements/buildings per turn limit, (3) - already exists
|
||||
void hover(bool on);
|
||||
void clickLeft(tribool down, bool previousState);
|
||||
|
533
client/CKingdomInterface.cpp
Normal file
533
client/CKingdomInterface.cpp
Normal file
@ -0,0 +1,533 @@
|
||||
#include "CKingdomInterface.h"
|
||||
#include "AdventureMapButton.h"
|
||||
#include "CAdvmapInterface.h"
|
||||
#include "../CCallback.h"
|
||||
#include "CGameInfo.h"
|
||||
#include "CHeroWindow.h"
|
||||
#include "CMessage.h"
|
||||
#include "SDL_Extensions.h"
|
||||
#include "Graphics.h"
|
||||
#include "../hch/CArtHandler.h"
|
||||
#include "../hch/CDefHandler.h"
|
||||
#include "../hch/CGeneralTextHandler.h"
|
||||
#include "../hch/CObjectHandler.h"
|
||||
#include <boost/assign/std/vector.hpp>
|
||||
#include <sstream>
|
||||
using namespace boost::assign;
|
||||
using namespace CSDL_Ext;
|
||||
|
||||
/*
|
||||
* CKingdomInterface.cpp, part of VCMI engine
|
||||
*
|
||||
* Authors: listed in file AUTHORS in main folder
|
||||
*
|
||||
* License: GNU General Public License v2.0 or later
|
||||
* Full text of license available in license.txt file, in main folder
|
||||
*
|
||||
*/
|
||||
|
||||
int PicCount = 4;
|
||||
|
||||
CDefEssential* CKingdomInterface::slots;
|
||||
CDefEssential* CKingdomInterface::fort;
|
||||
CDefEssential* CKingdomInterface::hall;
|
||||
|
||||
CKingdomInterface::CKingdomInterface()
|
||||
{
|
||||
OBJ_CONSTRUCTION_CAPTURING_ALL;
|
||||
defActions = SHARE_POS;
|
||||
pos.x = screen->w/2 - 400;
|
||||
pos.y = screen->h/2 - 300;
|
||||
size = 4;//we have 4 visible items in the list, would be nice to move this value to configs later
|
||||
heroPos = townPos = 0;
|
||||
state = 2;
|
||||
showHarrisoned = false;
|
||||
|
||||
bg = BitmapHandler::loadBitmap("OVCAST.bmp");
|
||||
graphics->blueToPlayersAdv(bg, LOCPLINT->playerID);
|
||||
mines = CDefHandler::giveDefEss("OVMINES.DEF");
|
||||
slots = CDefHandler::giveDefEss("OVSLOT.DEF");
|
||||
title = CDefHandler::giveDefEss("OVTITLE.DEF");
|
||||
hall = CDefHandler::giveDefEss("ITMTL.DEF");
|
||||
fort = CDefHandler::giveDefEss("ITMCL.DEF");
|
||||
|
||||
toHeroes = new AdventureMapButton (CGI->generaltexth->overview[11],"",
|
||||
boost::bind(&CKingdomInterface::listToHeroes,this),748,492,"OVBUTN1.DEF");
|
||||
toHeroes->block(2);
|
||||
|
||||
toTowns = new AdventureMapButton (CGI->generaltexth->overview[12],"",
|
||||
boost::bind(&CKingdomInterface::listToTowns,this),748,528,"OVBUTN6.DEF");
|
||||
toTowns->block(0);
|
||||
|
||||
exit = new AdventureMapButton (CGI->generaltexth->allTexts[600],"",
|
||||
boost::bind(&CKingdomInterface::close,this),748,563,"OVBUTN1.DEF");
|
||||
exit->bitmapOffset = 3;
|
||||
|
||||
statusbar = new CStatusBar(pos.x+7,pos.y+555,"TSTATBAR.bmp",732);
|
||||
resdatabar = new CResDataBar("KRESBAR.bmp",pos.x+3,pos.y+575,32,2,76,76);
|
||||
|
||||
for (int i=0; i<RESOURCE_QUANTITY; i++)
|
||||
incomes.push_back(new CResIncomePic(i,mines));
|
||||
|
||||
heroes.resize(size);
|
||||
for(size_t i=0;i<size;i++)//preparing lists for input
|
||||
heroes[i] = NULL;
|
||||
towns.resize(size);
|
||||
for(size_t i=0;i<size;i++)
|
||||
towns[i] = NULL;
|
||||
|
||||
slider = new CSlider(4, 4, 483, boost::bind (&CKingdomInterface::sliderMoved, this, _1),
|
||||
size, LOCPLINT->cb->howManyHeroes(showHarrisoned), 0, false, 0);
|
||||
}
|
||||
|
||||
CKingdomInterface::~CKingdomInterface()
|
||||
{
|
||||
SDL_FreeSurface(bg);
|
||||
|
||||
delete statusbar;
|
||||
delete resdatabar;
|
||||
|
||||
delete exit;
|
||||
delete toTowns;
|
||||
delete toHeroes;
|
||||
|
||||
delete slider;
|
||||
delete title;
|
||||
delete slots;
|
||||
delete fort;
|
||||
delete hall;
|
||||
delete mines;
|
||||
|
||||
/* for(size_t i=0;i<size;i++)
|
||||
delete heroes[i];
|
||||
heroes.clear();
|
||||
for(size_t i=0;i<size;i++)
|
||||
delete towns[i];
|
||||
towns.clear();*/
|
||||
for(size_t i=0;i<incomes.size();i++)
|
||||
delete incomes[i];
|
||||
incomes.clear();
|
||||
}
|
||||
|
||||
void CKingdomInterface::close()
|
||||
{
|
||||
GH.popIntTotally(this);
|
||||
}
|
||||
|
||||
void CKingdomInterface::showAll( SDL_Surface * to/*=NULL*/)
|
||||
{
|
||||
LOCPLINT->adventureInt->resdatabar.draw(to);
|
||||
blitAt(bg,pos,to);
|
||||
resdatabar->draw(to);
|
||||
toTowns->show(to);
|
||||
toHeroes->show(to);
|
||||
exit->show(to);
|
||||
if (state == 1)
|
||||
{//printing text "Town", "Harrisoned hero", "Visiting hero"
|
||||
CSDL_Ext::printAtMiddle(CGI->generaltexth->overview[3],pos.x+145,pos.y+12,TNRB16,zwykly,to);
|
||||
CSDL_Ext::printAtMiddle(CGI->generaltexth->overview[4],pos.x+370,pos.y+12,TNRB16,zwykly,to);
|
||||
CSDL_Ext::printAtMiddle(CGI->generaltexth->overview[5],pos.x+600,pos.y+12,TNRB16,zwykly,to);
|
||||
for (size_t i=0; i<size; i++)
|
||||
towns[i]->show(to);//show town list
|
||||
}
|
||||
else
|
||||
{//text "Hero/stats" and "Skills"
|
||||
CSDL_Ext::printAtMiddle(CGI->generaltexth->overview[0],pos.x+150,pos.y+12,TNRB16,zwykly,to);
|
||||
CSDL_Ext::printAtMiddle(CGI->generaltexth->overview[1],pos.x+500,pos.y+12,TNRB16,zwykly,to);
|
||||
for (size_t i=0; i<size; i++)
|
||||
heroes[i]->show(to);//show hero list
|
||||
}
|
||||
|
||||
for(size_t i=0;i<incomes.size();i++)
|
||||
incomes[i]->show(to);//printing resource incomes
|
||||
|
||||
if(screen->w != 800 || screen->h !=600)
|
||||
CMessage::drawBorder(LOCPLINT->playerID,to,828,628,pos.x-14,pos.y-15);
|
||||
show(to);
|
||||
}
|
||||
|
||||
void CKingdomInterface::show(SDL_Surface * to)
|
||||
{
|
||||
statusbar->show(to);
|
||||
}
|
||||
|
||||
void CKingdomInterface::activate()
|
||||
{
|
||||
LOCPLINT->statusbar = statusbar;
|
||||
exit->activate();
|
||||
toTowns->activate();
|
||||
toHeroes->activate();
|
||||
if (state == 1)
|
||||
for (int i=0; i<size; i++)
|
||||
towns[i]->activate();
|
||||
else
|
||||
for (int i=0; i<size; i++)
|
||||
heroes[i]->activate();
|
||||
|
||||
slider->activate();
|
||||
}
|
||||
|
||||
void CKingdomInterface::deactivate()
|
||||
{
|
||||
exit->deactivate();
|
||||
toTowns->deactivate();
|
||||
toHeroes->deactivate();
|
||||
if (state == 1)
|
||||
for (int i=0; i<size; i++)
|
||||
towns[i]->deactivate();
|
||||
else
|
||||
for (int i=0; i<size; i++)
|
||||
heroes[i]->deactivate();
|
||||
slider->deactivate();
|
||||
}
|
||||
|
||||
void CKingdomInterface::keyPressed(const SDL_KeyboardEvent & key)
|
||||
{
|
||||
}
|
||||
|
||||
void CKingdomInterface::recreateHeroList(int pos)
|
||||
{
|
||||
for (int j=0; j<size; j++)
|
||||
delete heroes[j];//removing old list
|
||||
std::vector<const CGHeroInstance*> Heroes = LOCPLINT->cb->getHeroesInfo(true);
|
||||
int i=0, cnt=0;
|
||||
for (int j = 0; ((j<Heroes.size()) && (i<size));j++)
|
||||
{
|
||||
if (Heroes[j]->inTownGarrison && (!showHarrisoned))//if hero in garrison and we don't show them
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (cnt<pos)//skipping heroes
|
||||
{
|
||||
cnt++;
|
||||
continue;
|
||||
}//this hero will be added
|
||||
heroes[i] = new CHeroItem(i, Heroes[j]);
|
||||
i++;
|
||||
}
|
||||
for (i;i<size;i++)//if we still have empty pieces
|
||||
heroes[i] = new CHeroItem(i, NULL);//empty pic
|
||||
GH.totalRedraw();
|
||||
}
|
||||
|
||||
void CKingdomInterface::recreateTownList(int pos)
|
||||
{
|
||||
std::vector<const CGTownInstance*> Towns = LOCPLINT->cb->getTownsInfo(true);
|
||||
for(int i=0;i<size;i++)
|
||||
{
|
||||
delete towns[i];//remove old
|
||||
if (i+pos<Towns.size())
|
||||
towns[i] = new CTownItem(i, Towns[i+pos]);//and add new
|
||||
else
|
||||
towns[i] = new CTownItem(i, NULL);//empty pic
|
||||
}
|
||||
GH.totalRedraw();
|
||||
}
|
||||
|
||||
void CKingdomInterface::listToTowns()
|
||||
{
|
||||
state = 1;
|
||||
toHeroes->block(0);
|
||||
toTowns->block(2);
|
||||
heroPos = slider->value;
|
||||
slider->setAmount(LOCPLINT->cb->howManyTowns());
|
||||
slider->value=townPos;//moving slider
|
||||
recreateTownList(townPos);
|
||||
for (size_t i=0;i<size;i++)//TODO:is this loop needed?
|
||||
{
|
||||
towns[i]->deactivate();
|
||||
heroes[i]->activate();
|
||||
}
|
||||
}
|
||||
|
||||
void CKingdomInterface::listToHeroes()
|
||||
{
|
||||
state = 2;
|
||||
toHeroes->block(2);
|
||||
toTowns->block(0);
|
||||
townPos = slider->value;
|
||||
slider->setAmount(LOCPLINT->cb->howManyHeroes(showHarrisoned));
|
||||
slider->value=heroPos;//moving slider
|
||||
recreateHeroList(heroPos);
|
||||
for (size_t i=0;i<size;i++)//TODO:is this loop needed?
|
||||
{
|
||||
towns[i]->deactivate();
|
||||
heroes[i]->activate();
|
||||
}
|
||||
}
|
||||
|
||||
void CKingdomInterface::sliderMoved(int newpos)
|
||||
{
|
||||
if ( state == 1 )//towns
|
||||
{
|
||||
townPos = newpos;
|
||||
recreateTownList(newpos);
|
||||
}
|
||||
else//heroes
|
||||
{
|
||||
heroPos = newpos;
|
||||
recreateHeroList(newpos);
|
||||
}
|
||||
}
|
||||
|
||||
CKingdomInterface::CResIncomePic::CResIncomePic(int RID, CDefEssential * Mines)
|
||||
{
|
||||
resID = RID;
|
||||
pos.x += 20 + RID*80;
|
||||
pos.y += 495;
|
||||
pos.h = 54;
|
||||
pos.w = (resID!=7)?68:136;//gold pile is bigger
|
||||
mines = Mines;
|
||||
|
||||
value = 0;
|
||||
int resource = resID==7?6:resID;
|
||||
|
||||
for(size_t i = 0; i<CGI->state->map->objects.size(); i++)
|
||||
{
|
||||
CGObjectInstance* obj = CGI->state->map->objects[i];
|
||||
if (obj)
|
||||
if (obj->ID == 53 && obj->subID == resource && //this is mine, produce required resource
|
||||
CGI->state->currentPlayer == obj->tempOwner )//mine is ours
|
||||
value++;
|
||||
}
|
||||
if (resID == 7)//we need to calculate income of whole kingdom
|
||||
{
|
||||
value *=1000;// mines = 1000 gold
|
||||
std::vector<const CGHeroInstance*> heroes = LOCPLINT->cb->getHeroesInfo(true);
|
||||
for(size_t i=0; i<heroes.size();i++)
|
||||
switch(heroes[i]->getSecSkillLevel(13))//some heroes may have estates
|
||||
{
|
||||
case 1: //basic
|
||||
value += 125;
|
||||
break;
|
||||
case 2: //advanced
|
||||
value += 250;
|
||||
break;
|
||||
case 3: //expert
|
||||
value += 500;
|
||||
break;
|
||||
}
|
||||
std::vector<const CGTownInstance*> towns = LOCPLINT->cb->getTownsInfo(true);
|
||||
for(size_t i=0; i<towns.size();i++)
|
||||
value += towns[i]->dailyIncome();
|
||||
}
|
||||
}
|
||||
|
||||
CKingdomInterface::CResIncomePic::~CResIncomePic()
|
||||
{
|
||||
}
|
||||
|
||||
void CKingdomInterface::CResIncomePic::hover(bool on)
|
||||
{
|
||||
}
|
||||
|
||||
void CKingdomInterface::CResIncomePic::show(SDL_Surface * to)
|
||||
{
|
||||
if (resID < 7)//this is not income
|
||||
blitAt(mines->ourImages[resID].bitmap,pos.x,pos.y,to);
|
||||
|
||||
std::ostringstream oss;
|
||||
oss << value;
|
||||
CSDL_Ext::printAtMiddle(oss.str(),pos.x+pos.w/2,pos.y+50,GEOR13,zwykly,to);
|
||||
}
|
||||
|
||||
|
||||
CKingdomInterface::CTownItem::CTownItem(int num, const CGTownInstance * Town)
|
||||
{
|
||||
// defActions = ACTIVATE | DEACTIVATE | SHOWALL | DISPOSE;
|
||||
numb = num;
|
||||
pos.x = screen->w/2 - 400 + 23;
|
||||
pos.y = screen->h/2 - 300 + 26+num*116;
|
||||
pos.w = 702;
|
||||
pos.h = 114;
|
||||
town = Town;
|
||||
}
|
||||
|
||||
CKingdomInterface::CTownItem::~CTownItem()
|
||||
{
|
||||
}
|
||||
|
||||
void CKingdomInterface::CTownItem::activate()
|
||||
{
|
||||
}
|
||||
|
||||
void CKingdomInterface::CTownItem::deactivate()
|
||||
{
|
||||
}
|
||||
|
||||
void CKingdomInterface::CTownItem::show(SDL_Surface * to)
|
||||
{
|
||||
if (!town)
|
||||
{//if NULL - print background & exit
|
||||
blitAt(slots->ourImages[numb % PicCount].bitmap,pos.x,pos.y,to);
|
||||
return;
|
||||
}//background
|
||||
blitAt(slots->ourImages[6].bitmap,pos.x,pos.y,to);
|
||||
//town pic/name
|
||||
int townPic = town->subID*2;
|
||||
if (!town->hasFort())
|
||||
townPic += F_NUMBER*2;
|
||||
if(town->builded >= MAX_BUILDING_PER_TURN)
|
||||
townPic++;
|
||||
blitAt(graphics->bigTownPic->ourImages[townPic].bitmap,pos.x+5,pos.y+6,to);
|
||||
CSDL_Ext::printAt(town->name,pos.x+73,pos.y+7,GEOR13,zwykly,to);
|
||||
//fort pic
|
||||
townPic = town->fortLevel()-1;
|
||||
if (townPic==-1) townPic = 3;
|
||||
blitAt(fort->ourImages[townPic].bitmap,pos.x+111,pos.y+31,to);
|
||||
//hall pic
|
||||
townPic = town->hallLevel();
|
||||
blitAt(hall->ourImages[townPic].bitmap,pos.x+69,pos.y+31,to);
|
||||
//income pic
|
||||
std::ostringstream oss;
|
||||
oss << town->dailyIncome();
|
||||
CSDL_Ext::printAtMiddle(oss.str(),pos.x+188,pos.y+60,GEOR13,zwykly,to);
|
||||
// Creature bonuses/ Creature available texts - need to find text wrapper thingy
|
||||
// CSDL_Ext::printAtWR(CGI->generaltexth->allTexts[265],pos.x,pos.y+80,GEOR13,zwykly,to);
|
||||
// CSDL_Ext::printTo(CGI->generaltexth->allTexts[266],pos.x+350,pos.y+80,GEOR13,zwykly,to);
|
||||
for (int i=0; i<CREATURES_PER_TOWN;i++)
|
||||
{//creatures info
|
||||
int crid = -1;
|
||||
int bid = 30+i;
|
||||
if (!vstd::contains(town->builtBuildings,bid))
|
||||
continue;
|
||||
|
||||
if (vstd::contains(town->builtBuildings,bid+CREATURES_PER_TOWN))
|
||||
{
|
||||
crid = town->town->upgradedCreatures[i];
|
||||
bid += CREATURES_PER_TOWN;
|
||||
}
|
||||
else
|
||||
crid = town->town->basicCreatures[i];
|
||||
//creature growth
|
||||
blitAt(graphics->smallImgs[crid],pos.x+56+i*37,pos.y+78,to);
|
||||
std::ostringstream oss;
|
||||
oss << '+' << town->creatureGrowth(i);
|
||||
CSDL_Ext::printTo(oss.str(),pos.x+87+i*37,pos.y+110,GEORM,zwykly,to);
|
||||
//creature available
|
||||
blitAt(graphics->smallImgs[crid],pos.x+409+i*37,pos.y+78,to);
|
||||
std::ostringstream ostrs;
|
||||
ostrs << town->creatures[i].first;
|
||||
CSDL_Ext::printTo(ostrs.str(),pos.x+440+i*37,pos.y+110,GEORM,zwykly,to);
|
||||
}
|
||||
const CGHeroInstance * hero = town->garrisonHero;
|
||||
int posX = 244;
|
||||
for (int i=0;i<2;i++)
|
||||
{//heroes info
|
||||
if (hero)
|
||||
{
|
||||
int iter = 0;//portrait
|
||||
blitAt(graphics->portraitLarge[hero->portrait],pos.x+posX,pos.y+6,to);
|
||||
for(std::map<si32,std::pair<ui32,si32> >::const_iterator
|
||||
j=hero->army.slots.begin(); j!=hero->army.slots.end(); j++)
|
||||
{//army
|
||||
int X = (iter<4)?(pos.x+posX+70+36*iter):(pos.x+posX+88+36*(iter-4));
|
||||
int Y = (iter<4)?(pos.y+3):(pos.y+40);
|
||||
iter++;
|
||||
blitAt(graphics->smallImgs[j->second.first],X,Y,to);
|
||||
std::ostringstream creanum;
|
||||
creanum << (j->second.second);
|
||||
CSDL_Ext::printTo(creanum.str(),X+30,Y+32,GEORM,zwykly,to);
|
||||
}
|
||||
}
|
||||
hero = town->visitingHero;
|
||||
posX = 476;
|
||||
}
|
||||
}
|
||||
|
||||
CKingdomInterface::CHeroItem::CHeroItem(int num, const CGHeroInstance * Hero)
|
||||
{
|
||||
numb = num;
|
||||
pos.x = screen->w/2 - 400 + 23;
|
||||
pos.y = screen->h/2 - 300 + 26+num*116;
|
||||
pos.w = 702;
|
||||
pos.h = 114;
|
||||
hero = Hero;
|
||||
artGroup = 0;
|
||||
}
|
||||
|
||||
CKingdomInterface::CHeroItem::~CHeroItem()
|
||||
{
|
||||
}
|
||||
|
||||
void CKingdomInterface::CHeroItem::show(SDL_Surface * to)
|
||||
{
|
||||
if (!hero)
|
||||
{//if we have no hero for this slot - print background & exit
|
||||
blitAt(slots->ourImages[numb % PicCount].bitmap,pos.x,pos.y,to);
|
||||
return;
|
||||
}//print background, different for arts view/backpack mode
|
||||
blitAt(slots->ourImages[(artGroup=2)?4:5].bitmap,pos.x,pos.y,to);
|
||||
//text "Artifacts"
|
||||
CSDL_Ext::printAtMiddle(CGI->generaltexth->overview[2],pos.x+320,pos.y+55,GEOR13,zwykly,to);
|
||||
int X = pos.x+6;//portrait
|
||||
blitAt(graphics->portraitLarge[hero->portrait],pos.x+5,pos.y+6,to);
|
||||
for(std::map<si32,std::pair<ui32,si32> >::const_iterator
|
||||
j=hero->army.slots.begin(); j!=hero->army.slots.end(); j++)
|
||||
{//army
|
||||
blitAt(graphics->smallImgs[j->second.first],X,pos.y+78,to);
|
||||
std::ostringstream creanum;
|
||||
creanum << (j->second.second);
|
||||
CSDL_Ext::printTo(creanum.str(),X+30,pos.y+110,GEOR13,zwykly,to);
|
||||
X+=36;
|
||||
}//hero name
|
||||
CSDL_Ext::printAt(hero->name,pos.x+73,pos.y+7,GEOR13,zwykly,to);
|
||||
for (int i = 0; i<6; i++)
|
||||
{//primary skills, mana and exp. pics
|
||||
blitAt(graphics->pskillst->ourImages[i].bitmap,(i<4)?(pos.x+78+36*i):(pos.x+539-52*i),
|
||||
(i<4)?(pos.y+26):(pos.y+6),to);
|
||||
if (i>3) continue;//primary skills text
|
||||
std::ostringstream str;
|
||||
str << (hero->primSkills[i]);
|
||||
CSDL_Ext::printAtMiddle(str.str(),pos.x+95+36*i,pos.y+65,GEOR13,zwykly,to);
|
||||
}
|
||||
{//luck and morale pics, experience and mana text
|
||||
blitAt(graphics->luck30->ourImages[hero->getCurrentLuck()+3].bitmap,pos.x+222,pos.y+30,to);
|
||||
blitAt(graphics->morale30->ourImages[hero->getCurrentMorale()+3].bitmap,pos.x+222,pos.y+54,to);
|
||||
std::ostringstream str;
|
||||
str << (hero->exp);
|
||||
CSDL_Ext::printAtMiddle(str.str(),(pos.x+348),(pos.y+31),GEORM,zwykly,to);
|
||||
std::ostringstream strnew;
|
||||
strnew << (hero->mana)<<"/"<<(hero->manaLimit());
|
||||
CSDL_Ext::printAtMiddle(strnew.str(),(pos.x+298),(pos.y+31),GEORM,zwykly,to);
|
||||
}
|
||||
//hero speciality
|
||||
blitAt(graphics->un32->ourImages[hero->subID].bitmap, pos.x+375, pos.y+6, to);
|
||||
|
||||
for(int i=0; i<hero->secSkills.size(); i++)
|
||||
{//secondary skills
|
||||
int skill = hero->secSkills[i].first,
|
||||
level = hero->secSkills[i].second;
|
||||
blitAt(graphics->abils32->ourImages[skill*3+level+2].bitmap,pos.x+411+i*36,pos.y+6,to);
|
||||
}
|
||||
|
||||
int iter=0;
|
||||
switch (artGroup)
|
||||
{//arts
|
||||
case 1:iter = 9;//misc. arts, spellbook, war machines
|
||||
case 0://equipped arts
|
||||
for (int i = iter ; i<iter+9;i++)
|
||||
{
|
||||
int artID = hero->getArtAtPos(i);
|
||||
if (artID>=0)
|
||||
blitAt(graphics->artDefs->ourImages[artID].bitmap,pos.x+268+48*(i%9),pos.y+66,to);
|
||||
}
|
||||
break;
|
||||
case 2://TODO:backpack
|
||||
break;
|
||||
default: tlog1<<"Unknown artifact group: "<<artGroup<<"\n";
|
||||
}
|
||||
}
|
||||
|
||||
void CKingdomInterface::CHeroItem::onArtChange(int newstate)
|
||||
{
|
||||
artGroup = newstate;
|
||||
}
|
||||
|
||||
void CKingdomInterface::CHeroItem::activate()
|
||||
{
|
||||
}
|
||||
|
||||
void CKingdomInterface::CHeroItem::deactivate()
|
||||
{
|
||||
}
|
109
client/CKingdomInterface.h
Normal file
109
client/CKingdomInterface.h
Normal file
@ -0,0 +1,109 @@
|
||||
#ifndef __CKINGDOMINTERFACE_H__
|
||||
#define __CKINGDOMINTERFACE_H__
|
||||
|
||||
|
||||
|
||||
#include "../global.h"
|
||||
#include <SDL.h>
|
||||
#include "GUIBase.h"
|
||||
#include "../hch/CMusicBase.h"
|
||||
class AdventureMapButton;
|
||||
class CHighlightableButtonsGroup;
|
||||
class CResDataBar;
|
||||
class CStatusBar;
|
||||
class CSlider;
|
||||
class CMinorResDataBar;
|
||||
|
||||
/*
|
||||
* CKingdomInterface.h, part of VCMI engine
|
||||
*
|
||||
* Authors: listed in file AUTHORS in main folder
|
||||
*
|
||||
* License: GNU General Public License v2.0 or later
|
||||
* Full text of license available in license.txt file, in main folder
|
||||
*
|
||||
*/
|
||||
|
||||
class CKingdomInterface : public CIntObject
|
||||
{
|
||||
/* class CDwellingList : public
|
||||
{
|
||||
public:
|
||||
void mouseMoved (const SDL_MouseMotionEvent & sEvent);
|
||||
void genList();
|
||||
void select(int which);
|
||||
void draw(SDL_Surface * to);
|
||||
int size(); //how many elements do we have
|
||||
}*/
|
||||
class CResIncomePic : public CIntObject
|
||||
{
|
||||
public:
|
||||
int resID,value;//resource ID
|
||||
CResIncomePic(int RID, CDefEssential * Mines);//c-tor
|
||||
~CResIncomePic();//d-tor
|
||||
void hover(bool on);
|
||||
void show(SDL_Surface * to);
|
||||
CDefEssential * mines;//pointer to mines pictures;
|
||||
};
|
||||
class CTownItem : public CIntObject
|
||||
{
|
||||
public:
|
||||
int numb;//position on screen (1..4)
|
||||
const CGTownInstance * town;
|
||||
void show(SDL_Surface * to);
|
||||
void activate();
|
||||
void deactivate();
|
||||
CTownItem (int num, const CGTownInstance * Town);//c-tor
|
||||
~CTownItem();//d-tor
|
||||
};
|
||||
class CHeroItem : public CIntObject
|
||||
{
|
||||
public:
|
||||
const CGHeroInstance * hero;
|
||||
int artGroup,numb;//current art group (0 = equiped, 1 = misc, 2 = backpack)
|
||||
void onArtChange(int newstate);//changes artgroup
|
||||
void show(SDL_Surface * to);
|
||||
void activate();
|
||||
void deactivate();
|
||||
CHeroItem (int num, const CGHeroInstance * Hero);//c-tor
|
||||
~CHeroItem();//d-tor
|
||||
};
|
||||
public:
|
||||
//common data
|
||||
int state;//0 = initialisation 1 = towns showed, 2 = heroes;
|
||||
SDL_Surface * bg;//background
|
||||
CStatusBar * statusbar;//statusbar
|
||||
CResDataBar *resdatabar;//resources
|
||||
|
||||
AdventureMapButton *exit;//exit button
|
||||
AdventureMapButton *toTowns;//town button
|
||||
AdventureMapButton *toHeroes;//hero button
|
||||
CDefEssential * title; //title bar
|
||||
//hero/town lists
|
||||
bool showHarrisoned;//show harrisoned hero in heroes list or not
|
||||
CSlider * slider;//slider
|
||||
int heroPos,townPos,size;//position of lists; size of list
|
||||
std::vector<CHeroItem *> heroes;//heroes list
|
||||
std::vector<CTownItem *> towns;//towns list
|
||||
static CDefEssential * slots, *fort, *hall;
|
||||
|
||||
//income pics
|
||||
std::vector<CResIncomePic *> incomes;//mines + incomes
|
||||
CDefEssential * mines;//picture of mines
|
||||
|
||||
CKingdomInterface(); //c-tor
|
||||
~CKingdomInterface(); //d-tor
|
||||
void recreateHeroList(int pos);//recreating heroes list (on slider move)
|
||||
void recreateTownList(int pos);//same for town list
|
||||
void keyPressed(const SDL_KeyboardEvent & key);
|
||||
void listToTowns();//changing list to town view
|
||||
void listToHeroes();//changing list to heroes view
|
||||
void sliderMoved(int newpos);//when we move a slider...
|
||||
void show(SDL_Surface * to);
|
||||
void showAll(SDL_Surface * to);
|
||||
void close();
|
||||
void activate();
|
||||
void deactivate();
|
||||
};
|
||||
|
||||
#endif // __CCASTLEINTERFACE_H__
|
@ -291,9 +291,10 @@ Graphics::Graphics()
|
||||
tasks += GET_DEF_ESS(halls,"ITMTLS.DEF");
|
||||
tasks += GET_DEF_ESS(bigTownPic,"ITPT.DEF");
|
||||
tasks += GET_DEF_ESS(pskillsb,"PSKILL.DEF");
|
||||
tasks += GET_DEF_ESS(pskillsm,"PSKIL42.DEF");
|
||||
tasks += GET_DEF_ESS(pskillsm,"PSKIL42.DEF");
|
||||
tasks += GET_DEF_ESS(pskillst,"PSKIL32.DEF");
|
||||
tasks += GET_DEF_ESS(resources,"RESOUR82.DEF");
|
||||
tasks += GET_DEF_ESS(un32,"UN32.DEF");
|
||||
tasks += GET_DEF_ESS(un44,"UN44.DEF");
|
||||
tasks += GET_DEF_ESS(smallIcons,"ITPA.DEF");
|
||||
tasks += GET_DEF_ESS(resources32,"RESOURCE.DEF");
|
||||
@ -676,3 +677,10 @@ int Font::getWidth(const char *text ) const
|
||||
|
||||
return ret;
|
||||
}
|
||||
/*
|
||||
void Font::WriteAt(const char *text, SDL_Surface *sur, int x, int y )
|
||||
{
|
||||
SDL_Surface *SDL_CreateRGBSurfaceFrom(pixels, w, h, 8, int pitch,
|
||||
224, 28, 3, 0);
|
||||
}
|
||||
*/
|
||||
|
@ -70,8 +70,9 @@ public:
|
||||
std::vector<SDL_Surface *> portraitLarge; //58x64 px portraits of heroes
|
||||
std::vector<CDefEssential *> flags1, flags2, flags3, flags4; //flags blitted on heroes when ,
|
||||
CDefEssential * pskillsb, *resources; //82x93
|
||||
CDefEssential * pskillsm; //42x42 primary skills
|
||||
CDefEssential * pskillsm; //42x42 primary skills
|
||||
CDefEssential * pskillst; //32x32
|
||||
CDefEssential * un32; //many small things
|
||||
CDefEssential * un44; //many things
|
||||
CDefEssential * smallIcons, *resources32; //resources 32x32
|
||||
CDefEssential * flags;
|
||||
|
@ -54,6 +54,8 @@ vcmiclient_SOURCES = \
|
||||
CGameInfo.h \
|
||||
CHeroWindow.cpp \
|
||||
CHeroWindow.h \
|
||||
CKingdomInterface.cpp \
|
||||
CKingdomInterface.h \
|
||||
CMT.cpp \
|
||||
CMessage.cpp \
|
||||
CMessage.h \
|
||||
|
@ -73,7 +73,9 @@ am_vcmiclient_OBJECTS = vcmiclient-CCallback.$(OBJEXT) \
|
||||
vcmiclient-CCreatureAnimation.$(OBJEXT) \
|
||||
vcmiclient-CCursorHandler.$(OBJEXT) \
|
||||
vcmiclient-CGameInfo.$(OBJEXT) \
|
||||
vcmiclient-CHeroWindow.$(OBJEXT) vcmiclient-CMT.$(OBJEXT) \
|
||||
vcmiclient-CHeroWindow.$(OBJEXT) \
|
||||
vcmiclient-CKingdomInterface.$(OBJEXT) \
|
||||
vcmiclient-CMT.$(OBJEXT) \
|
||||
vcmiclient-CMessage.$(OBJEXT) \
|
||||
vcmiclient-CPlayerInterface.$(OBJEXT) \
|
||||
vcmiclient-CPreGame.$(OBJEXT) \
|
||||
@ -296,6 +298,8 @@ vcmiclient_SOURCES = \
|
||||
CGameInfo.h \
|
||||
CHeroWindow.cpp \
|
||||
CHeroWindow.h \
|
||||
CKingdomInterface.cpp \
|
||||
CKingdomInterface.h \
|
||||
CMT.cpp \
|
||||
CMessage.cpp \
|
||||
CMessage.h \
|
||||
@ -421,6 +425,7 @@ distclean-compile:
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vcmiclient-CGameInfo.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vcmiclient-CGameInterface.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vcmiclient-CHeroWindow.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vcmiclient-CKingdomInterface.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vcmiclient-CMT.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vcmiclient-CMessage.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vcmiclient-CMusicHandler.Po@am__quote@
|
||||
@ -712,6 +717,20 @@ vcmiclient-CHeroWindow.obj: CHeroWindow.cpp
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vcmiclient_CXXFLAGS) $(CXXFLAGS) -c -o vcmiclient-CHeroWindow.obj `if test -f 'CHeroWindow.cpp'; then $(CYGPATH_W) 'CHeroWindow.cpp'; else $(CYGPATH_W) '$(srcdir)/CHeroWindow.cpp'; fi`
|
||||
|
||||
vcmiclient-CKingdomInterface.o: CKingdomInterface.cpp
|
||||
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vcmiclient_CXXFLAGS) $(CXXFLAGS) -MT vcmiclient-CKingdomInterface.o -MD -MP -MF $(DEPDIR)/vcmiclient-CKingdomInterface.Tpo -c -o vcmiclient-CKingdomInterface.o `test -f 'CKingdomInterface.cpp' || echo '$(srcdir)/'`CKingdomInterface.cpp
|
||||
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/vcmiclient-CKingdomInterface.Tpo $(DEPDIR)/vcmiclient-CKingdomInterface.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='CKingdomInterface.cpp' object='vcmiclient-CKingdomInterface.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vcmiclient_CXXFLAGS) $(CXXFLAGS) -c -o vcmiclient-CKingdomInterface.o `test -f 'CKingdomInterface.cpp' || echo '$(srcdir)/'`CKingdomInterface.cpp
|
||||
|
||||
vcmiclient-CKingdomInterface.obj: CKingdomInterface.cpp
|
||||
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vcmiclient_CXXFLAGS) $(CXXFLAGS) -MT vcmiclient-CKingdomInterface.obj -MD -MP -MF $(DEPDIR)/vcmiclient-CKingdomInterface.Tpo -c -o vcmiclient-CKingdomInterface.obj `if test -f 'CKingdomInterface.cpp'; then $(CYGPATH_W) 'CKingdomInterface.cpp'; else $(CYGPATH_W) '$(srcdir)/CKingdomInterface.cpp'; fi`
|
||||
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/vcmiclient-CKingdomInterface.Tpo $(DEPDIR)/vcmiclient-CKingdomInterface.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='CKingdomInterface.cpp' object='vcmiclient-CKingdomInterface.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vcmiclient_CXXFLAGS) $(CXXFLAGS) -c -o vcmiclient-CKingdomInterface.obj `if test -f 'CKingdomInterface.cpp'; then $(CYGPATH_W) 'CKingdomInterface.cpp'; else $(CYGPATH_W) '$(srcdir)/CKingdomInterface.cpp'; fi`
|
||||
|
||||
vcmiclient-CMT.o: CMT.cpp
|
||||
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vcmiclient_CXXFLAGS) $(CXXFLAGS) -MT vcmiclient-CMT.o -MD -MP -MF $(DEPDIR)/vcmiclient-CMT.Tpo -c -o vcmiclient-CMT.o `test -f 'CMT.cpp' || echo '$(srcdir)/'`CMT.cpp
|
||||
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/vcmiclient-CMT.Tpo $(DEPDIR)/vcmiclient-CMT.Po
|
||||
|
@ -98,7 +98,8 @@ void FoWChange::applyCl( CClient *cl )
|
||||
else
|
||||
cl->playerint[player]->tileHidden(tiles);
|
||||
|
||||
GS(cl)->calculatePaths(cl->IGameCallback::getSelectedHero(player), *cl->pathInfo);
|
||||
if (cl->IGameCallback::getSelectedHero(player))//if we have selected hero...
|
||||
GS(cl)->calculatePaths(cl->IGameCallback::getSelectedHero(player), *cl->pathInfo);
|
||||
}
|
||||
|
||||
void SetAvailableHeroes::applyCl( CClient *cl )
|
||||
|
@ -352,6 +352,15 @@ void CGeneralTextHandler::load()
|
||||
allTexts.push_back(buflet);
|
||||
}
|
||||
|
||||
std::string stro = bitmaph->getTextFile("Overview.txt");
|
||||
itr=0;
|
||||
while(itr<stro.length()-1)
|
||||
{
|
||||
loadToIt(tmp, stro, itr, 3);
|
||||
trimQuotation(tmp);
|
||||
overview.push_back(tmp);
|
||||
}
|
||||
|
||||
std::string strs = bitmaph->getTextFile("ARRAYTXT.TXT");
|
||||
|
||||
itr=0;
|
||||
|
@ -33,6 +33,7 @@ public:
|
||||
std::vector<std::string> primarySkillNames;
|
||||
std::vector<std::string> jktexts;
|
||||
std::vector<std::string> heroscrn;
|
||||
std::vector<std::string> overview;//text for Kingdom Overview window
|
||||
|
||||
//artifacts
|
||||
std::vector<std::string> artifEvents;
|
||||
|
@ -774,6 +774,9 @@ void CGameHandler::newTurn()
|
||||
NewTurn n;
|
||||
n.day = gs->day + 1;
|
||||
n.resetBuilded = true;
|
||||
|
||||
std::map<ui8, si32> hadGold;//starting gold - for buildings like dwarven treasury
|
||||
srand(time(NULL));
|
||||
|
||||
std::map<ui32,CGHeroInstance *> pool = gs->hpool.heroesPool;
|
||||
|
||||
@ -782,6 +785,10 @@ void CGameHandler::newTurn()
|
||||
if(i->first == 255) continue;
|
||||
else if(i->first > PLAYER_LIMIT) assert(0); //illegal player number!
|
||||
|
||||
std::pair<ui8,si32> playerGold(i->first,i->second.resources[6]);
|
||||
hadGold.insert(playerGold);
|
||||
tlog1<<i->first<<" & "<<i->second.resources[6]<<"\n";
|
||||
|
||||
if(gs->getDate(1)==7) //first day of week - new heroes in tavern
|
||||
{
|
||||
SetAvailableHeroes sah;
|
||||
@ -849,6 +856,20 @@ void CGameHandler::newTurn()
|
||||
ui8 player = (*j)->tempOwner;
|
||||
if(gs->getDate(1)==7) //first day of week
|
||||
{
|
||||
if ( ((**j).subID == 1) && (gs->getDate(0)) && (player < PLAYER_LIMIT) )//this is rampart and not a first day
|
||||
{
|
||||
if (vstd::contains((**j).builtBuildings,22))//we have treasury
|
||||
{
|
||||
n.res[player][6] += hadGold[player]/10; //give 10% of starting gold
|
||||
}
|
||||
if (vstd::contains((**j).builtBuildings,17))//we have mystic pond
|
||||
{//TODO: whole week pond should have message "pond produced %d" - need vars to store it
|
||||
int restype = rand()%4+2;//bonus to random rare resource
|
||||
restype = (restype==2)?1:restype;
|
||||
int cnt = rand()%4+1;//with size 1..4
|
||||
n.res[player][restype] += cnt;
|
||||
}
|
||||
}
|
||||
SetAvailableCreatures sac;
|
||||
sac.tid = (**j).id;
|
||||
sac.creatures = (**j).creatures;
|
||||
|
Loading…
Reference in New Issue
Block a user