mirror of
https://github.com/vcmi/vcmi.git
synced 2025-07-17 01:32:21 +02:00
Working windmill, water wheel, mystical garden (not tested).
Info windows. Minor changes.
This commit is contained in:
@ -93,14 +93,14 @@ public:
|
|||||||
void draw();
|
void draw();
|
||||||
};
|
};
|
||||||
class CResourceBar
|
class CResourceBar
|
||||||
:public ClickableR, public CIntObject
|
:public ClickableR
|
||||||
{
|
{
|
||||||
SDL_Surface * bg;
|
SDL_Surface * bg;
|
||||||
void clickRight(tribool down);
|
void clickRight(tribool down);
|
||||||
void refresh();
|
void refresh();
|
||||||
};
|
};
|
||||||
class CDataBar
|
class CDataBar
|
||||||
:public ClickableR, public CIntObject
|
:public ClickableR
|
||||||
{
|
{
|
||||||
SDL_Surface * bg;
|
SDL_Surface * bg;
|
||||||
void clickRight(tribool down);
|
void clickRight(tribool down);
|
||||||
|
@ -38,6 +38,11 @@ void CCallback::newTurn()
|
|||||||
{
|
{
|
||||||
//std::map<int, PlayerState>::iterator i = gs->players.begin() ;
|
//std::map<int, PlayerState>::iterator i = gs->players.begin() ;
|
||||||
gs->day++;
|
gs->day++;
|
||||||
|
for (int i=0;i<CGI->objh->objInstances.size();i++)
|
||||||
|
{
|
||||||
|
if (CGI->objh->objInstances[i]->state)
|
||||||
|
CGI->objh->objInstances[i]->state->newTurn();
|
||||||
|
}
|
||||||
for ( std::map<int, PlayerState>::iterator i=gs->players.begin() ; i!=gs->players.end();i++)
|
for ( std::map<int, PlayerState>::iterator i=gs->players.begin() ; i!=gs->players.end();i++)
|
||||||
{
|
{
|
||||||
for (int j=0;j<(*i).second.heroes.size();j++)
|
for (int j=0;j<(*i).second.heroes.size();j++)
|
||||||
@ -373,6 +378,37 @@ int CScriptCallback::getSelectedHero()
|
|||||||
ret = -1;;
|
ret = -1;;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
int CScriptCallback::getDate(int mode)
|
||||||
|
{
|
||||||
|
int temp;
|
||||||
|
switch (mode)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
return gs->day;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
temp = (gs->day)%7;
|
||||||
|
if (temp)
|
||||||
|
return temp;
|
||||||
|
else return 7;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
temp = ((gs->day-1)/7)+1;
|
||||||
|
if (!(temp%4))
|
||||||
|
return 4;
|
||||||
|
else
|
||||||
|
return (temp%4);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
return ((gs->day-1)/28)+1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
void CScriptCallback::giveResource(int player, int which, int val)
|
||||||
|
{
|
||||||
|
gs->players[player].resources[which]+=val;
|
||||||
|
}
|
||||||
void CLuaCallback::registerFuncs(lua_State * L)
|
void CLuaCallback::registerFuncs(lua_State * L)
|
||||||
{
|
{
|
||||||
lua_newtable(L);
|
lua_newtable(L);
|
||||||
@ -398,6 +434,7 @@ void CLuaCallback::registerFuncs(lua_State * L)
|
|||||||
|
|
||||||
lua_setglobal(L, "vcmi");
|
lua_setglobal(L, "vcmi");
|
||||||
#undef REGISTER_C_FUNC(x)
|
#undef REGISTER_C_FUNC(x)
|
||||||
|
|
||||||
}
|
}
|
||||||
int CLuaCallback::getPos(lua_State * L)//(CGObjectInstance * object);
|
int CLuaCallback::getPos(lua_State * L)//(CGObjectInstance * object);
|
||||||
{
|
{
|
||||||
|
@ -61,6 +61,8 @@ public:
|
|||||||
void showInfoDialog(int player, std::string text, std::vector<SComponent*> * components);
|
void showInfoDialog(int player, std::string text, std::vector<SComponent*> * components);
|
||||||
int getHeroOwner(int heroID);
|
int getHeroOwner(int heroID);
|
||||||
int getSelectedHero();
|
int getSelectedHero();
|
||||||
|
int getDate(int mode=0);
|
||||||
|
void giveResource(int player, int which, int val);
|
||||||
friend void initGameState(CGameInfo * cgi);
|
friend void initGameState(CGameInfo * cgi);
|
||||||
};
|
};
|
||||||
class CLuaCallback : public CScriptCallback
|
class CLuaCallback : public CScriptCallback
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
BOOST_TRIBOOL_THIRD_STATE(outOfRange)
|
BOOST_TRIBOOL_THIRD_STATE(outOfRange)
|
||||||
|
|
||||||
using namespace boost::logic;
|
using namespace boost::logic;
|
||||||
class CAdvMapInt;
|
|
||||||
class CCallback;
|
class CCallback;
|
||||||
class CGlobalAI;
|
class CGlobalAI;
|
||||||
class CGHeroInstance;
|
class CGHeroInstance;
|
||||||
|
164
CLua.cpp
164
CLua.cpp
@ -15,6 +15,8 @@
|
|||||||
#include "CCallback.h"
|
#include "CCallback.h"
|
||||||
#include "hch/CGeneralTextHandler.h"
|
#include "hch/CGeneralTextHandler.h"
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
#include "CPlayerInterface.h"
|
||||||
|
#pragma warning (disable : 4311)
|
||||||
bool getGlobalFunc(lua_State * L, std::string fname)
|
bool getGlobalFunc(lua_State * L, std::string fname)
|
||||||
{
|
{
|
||||||
unsigned int hash = lua_calchash(fname.c_str(), fname.size());
|
unsigned int hash = lua_calchash(fname.c_str(), fname.size());
|
||||||
@ -25,7 +27,7 @@ bool getGlobalFunc(lua_State * L, std::string fname)
|
|||||||
|
|
||||||
CObjectScript::CObjectScript()
|
CObjectScript::CObjectScript()
|
||||||
{
|
{
|
||||||
language == ESLan::UNDEF;
|
language = ESLan::UNDEF;
|
||||||
//std::cout << "Tworze obiekt objectscript "<<this<<std::endl;
|
//std::cout << "Tworze obiekt objectscript "<<this<<std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,7 +109,7 @@ void CLua::findFS(std::string fname)
|
|||||||
|
|
||||||
CLuaObjectScript::CLuaObjectScript(std::string filename)
|
CLuaObjectScript::CLuaObjectScript(std::string filename)
|
||||||
{
|
{
|
||||||
language == ESLan::LUA;
|
language = ESLan::LUA;
|
||||||
open(filename);
|
open(filename);
|
||||||
//binit = bnewobject = bonherovisit = brightext = false;
|
//binit = bnewobject = bonherovisit = brightext = false;
|
||||||
//std::cout << "Tworze obiekt CLuaObjectScript "<<this<<std::endl;
|
//std::cout << "Tworze obiekt CLuaObjectScript "<<this<<std::endl;
|
||||||
@ -163,6 +165,7 @@ std::string CLuaObjectScript::hoverText(CGObjectInstance *os)
|
|||||||
}
|
}
|
||||||
std::string ret = lua_tostring(is,1);
|
std::string ret = lua_tostring(is,1);
|
||||||
lua_settop(is, 0);
|
lua_settop(is, 0);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string CCPPObjectScript::hoverText(CGObjectInstance *os)
|
std::string CCPPObjectScript::hoverText(CGObjectInstance *os)
|
||||||
@ -196,15 +199,6 @@ void CVisitableOPH::onHeroVisit(CGObjectInstance *os, int heroID)
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
void CVisitableOPH::onNAHeroVisit(CGObjectInstance *os, int heroID, bool alreadyVisited)
|
void CVisitableOPH::onNAHeroVisit(CGObjectInstance *os, int heroID, bool alreadyVisited)
|
||||||
{
|
|
||||||
if (!alreadyVisited)
|
|
||||||
{
|
|
||||||
switch (os->ID)
|
|
||||||
{
|
|
||||||
case 51:
|
|
||||||
case 23:
|
|
||||||
case 61:
|
|
||||||
case 32:
|
|
||||||
{
|
{
|
||||||
int w=0, ot=0;
|
int w=0, ot=0;
|
||||||
switch(os->ID)
|
switch(os->ID)
|
||||||
@ -215,7 +209,7 @@ void CVisitableOPH::onNAHeroVisit(CGObjectInstance *os, int heroID, bool already
|
|||||||
break;
|
break;
|
||||||
case 23:
|
case 23:
|
||||||
w=1;
|
w=1;
|
||||||
ot=29;
|
ot=39;
|
||||||
break;
|
break;
|
||||||
case 61:
|
case 61:
|
||||||
w=2;
|
w=2;
|
||||||
@ -226,16 +220,30 @@ void CVisitableOPH::onNAHeroVisit(CGObjectInstance *os, int heroID, bool already
|
|||||||
ot=59;
|
ot=59;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (!alreadyVisited)
|
||||||
|
{
|
||||||
|
switch (os->ID)
|
||||||
|
{
|
||||||
|
case 51:
|
||||||
|
case 23:
|
||||||
|
case 61:
|
||||||
|
case 32:
|
||||||
|
{
|
||||||
cb->changePrimSkill(heroID,w,1);
|
cb->changePrimSkill(heroID,w,1);
|
||||||
std::vector<SComponent*> weko;
|
std::vector<SComponent*> weko;
|
||||||
weko.push_back(new SComponent(SComponent::primskill,1,1));
|
weko.push_back(new SComponent(SComponent::primskill,w,1));
|
||||||
cb->showInfoDialog(cb->getHeroOwner(heroID),CGI->objh->advobtxt[ot],&weko);
|
cb->showInfoDialog(cb->getHeroOwner(heroID),CGI->objh->advobtxt[ot],&weko); //TODO: maybe we have memory leak with these windows
|
||||||
for (int ii=0; ii<weko.size();ii++)
|
//for (int ii=0; ii<weko.size();ii++)
|
||||||
delete weko[ii];
|
// delete weko[ii];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ot++;
|
||||||
|
cb->showInfoDialog(cb->getHeroOwner(heroID),CGI->objh->advobtxt[ot],&std::vector<SComponent*>());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<int> CVisitableOPH::yourObjects()
|
std::vector<int> CVisitableOPH::yourObjects()
|
||||||
@ -282,6 +290,104 @@ std::string CVisitableOPH::hoverText(CGObjectInstance *os)
|
|||||||
return CGI->objh->objects[os->defInfo->id].name + add;
|
return CGI->objh->objects[os->defInfo->id].name + add;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CVisitableOPW::onNAHeroVisit(CGObjectInstance *os, int heroID, bool alreadyVisited)
|
||||||
|
{
|
||||||
|
int mid;
|
||||||
|
switch (os->ID)
|
||||||
|
{
|
||||||
|
case 55:
|
||||||
|
mid = 92;
|
||||||
|
break;
|
||||||
|
case 112:
|
||||||
|
mid = 170;
|
||||||
|
break;
|
||||||
|
case 109:
|
||||||
|
mid = 164;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (alreadyVisited)
|
||||||
|
{
|
||||||
|
if (os->ID!=112)
|
||||||
|
mid++;
|
||||||
|
else
|
||||||
|
mid--;
|
||||||
|
cb->showInfoDialog(cb->getHeroOwner(heroID),CGI->objh->advobtxt[mid],&std::vector<SComponent*>()); //TODO: maybe we have memory leak with these windows
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int type, sub, val;
|
||||||
|
type = SComponent::resource;
|
||||||
|
switch (os->ID)
|
||||||
|
{
|
||||||
|
case 55:
|
||||||
|
if (rand()%2)
|
||||||
|
{
|
||||||
|
sub = 5;
|
||||||
|
val = 5;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sub = 6;
|
||||||
|
val = 500;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 112:
|
||||||
|
mid = 170;
|
||||||
|
sub = rand() % 6;
|
||||||
|
val = (rand() % 4) + 3;
|
||||||
|
break;
|
||||||
|
case 109:
|
||||||
|
mid = 164;
|
||||||
|
sub = 6;
|
||||||
|
if(cb->getDate(2)<2)
|
||||||
|
val = 500;
|
||||||
|
else
|
||||||
|
val = 1000;
|
||||||
|
}
|
||||||
|
SComponent * com = new SComponent((SComponent::Etype)type,sub,val);
|
||||||
|
std::vector<SComponent*> weko;
|
||||||
|
weko.push_back(com);
|
||||||
|
cb->giveResource(cb->getHeroOwner(heroID),sub,val);
|
||||||
|
cb->showInfoDialog(cb->getHeroOwner(heroID),CGI->objh->advobtxt[mid],&weko);
|
||||||
|
visited[os] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void CVisitableOPW::newTurn ()
|
||||||
|
{
|
||||||
|
if (cb->getDate(1)==1)
|
||||||
|
{
|
||||||
|
for (std::map<CGObjectInstance*,bool>::iterator i = visited.begin(); i != visited.end(); i++)
|
||||||
|
{
|
||||||
|
(*i).second = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void CVisitableOPW::newObject(CGObjectInstance *os)
|
||||||
|
{
|
||||||
|
visited.insert(std::pair<CGObjectInstance*,bool>(os,false));
|
||||||
|
}
|
||||||
|
|
||||||
|
void CVisitableOPW::onHeroVisit(CGObjectInstance *os, int heroID)
|
||||||
|
{
|
||||||
|
if(visited[os])
|
||||||
|
onNAHeroVisit(os,heroID,true);
|
||||||
|
else
|
||||||
|
onNAHeroVisit(os,heroID,false);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<int> CVisitableOPW::yourObjects() //returns IDs of objects which are handled by script
|
||||||
|
{
|
||||||
|
std::vector<int> ret(3);
|
||||||
|
ret.push_back(55); //mystical garden
|
||||||
|
ret.push_back(112); //windmill
|
||||||
|
ret.push_back(109); //water wheel
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CVisitableOPW::hoverText(CGObjectInstance *os)
|
||||||
|
{
|
||||||
|
return CGI->objh->objects[os->defInfo->id].name + " " + ( (visited[os]) ? (CGI->generaltexth->allTexts[352]) : (CGI->generaltexth->allTexts[353])) ;
|
||||||
|
}
|
||||||
|
|
||||||
//std::string SComponent::getSubtitle()
|
//std::string SComponent::getSubtitle()
|
||||||
//{
|
//{
|
||||||
@ -293,29 +399,3 @@ std::string CVisitableOPH::hoverText(CGObjectInstance *os)
|
|||||||
//void SComponent::getDescription(Etype Type, int Subtype)
|
//void SComponent::getDescription(Etype Type, int Subtype)
|
||||||
//{
|
//{
|
||||||
//}
|
//}
|
||||||
SComponent::SComponent(Etype Type, int Subtype, int Val)
|
|
||||||
{
|
|
||||||
switch (Type)
|
|
||||||
{
|
|
||||||
case primskill:
|
|
||||||
description = CGI->generaltexth->arraytxt[2+Subtype];
|
|
||||||
std::ostringstream oss;
|
|
||||||
oss << ((Val>0)?("+"):("-")) << Val << " " << CGI->heroh->pskillsn[Subtype];
|
|
||||||
subtitle = oss.str();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
type = Type;
|
|
||||||
subtype = Subtype;
|
|
||||||
val = Val;
|
|
||||||
}
|
|
||||||
|
|
||||||
SDL_Surface * SComponent::getImg()
|
|
||||||
{
|
|
||||||
switch (type)
|
|
||||||
{
|
|
||||||
case primskill:
|
|
||||||
return CGI->heroh->pskillsb[subtype].ourImages[0].bitmap;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
|
26
CLua.h
26
CLua.h
@ -25,6 +25,8 @@ public:
|
|||||||
virtual void newObject(CGObjectInstance *os){};
|
virtual void newObject(CGObjectInstance *os){};
|
||||||
virtual void onHeroVisit(CGObjectInstance *os, int heroID){};
|
virtual void onHeroVisit(CGObjectInstance *os, int heroID){};
|
||||||
virtual std::string hoverText(CGObjectInstance *os){return "";};
|
virtual std::string hoverText(CGObjectInstance *os){return "";};
|
||||||
|
virtual void newTurn (){};
|
||||||
|
|
||||||
|
|
||||||
//TODO: implement functions below:
|
//TODO: implement functions below:
|
||||||
virtual void equipArtefact(int HID, int AID, int slot, bool putOn){}; //putOn==0 means that artifact is taken off
|
virtual void equipArtefact(int HID, int AID, int slot, bool putOn){}; //putOn==0 means that artifact is taken off
|
||||||
@ -34,7 +36,6 @@ public:
|
|||||||
//virtual void mouseClick (down,left,screen?, pos??){};
|
//virtual void mouseClick (down,left,screen?, pos??){};
|
||||||
virtual void heroLevelUp (int HID){}; //add possibility of changing available sec. skills
|
virtual void heroLevelUp (int HID){}; //add possibility of changing available sec. skills
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
class CScript
|
class CScript
|
||||||
{
|
{
|
||||||
@ -100,19 +101,16 @@ class CVisitableOPH : public CCPPObjectScript //once per hero
|
|||||||
friend void initGameState(CGameInfo * cgi);
|
friend void initGameState(CGameInfo * cgi);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SComponent
|
class CVisitableOPW : public CCPPObjectScript //once per week
|
||||||
{
|
{
|
||||||
enum Etype
|
CVisitableOPW(CScriptCallback * CB):CCPPObjectScript(CB){};
|
||||||
{
|
std::map<CGObjectInstance*,bool> visited;
|
||||||
primskill, secskill, resource, creature, artifact
|
void onNAHeroVisit(CGObjectInstance *os, int heroID, bool alreadyVisited);
|
||||||
} type;
|
void newObject(CGObjectInstance *os);
|
||||||
int subtype;
|
void onHeroVisit(CGObjectInstance *os, int heroID);
|
||||||
int val;
|
std::vector<int> yourObjects(); //returns IDs of objects which are handled by script
|
||||||
|
std::string hoverText(CGObjectInstance *os);
|
||||||
|
void newTurn ();
|
||||||
|
|
||||||
std::string description; //r-click
|
friend void initGameState(CGameInfo * cgi);
|
||||||
std::string subtitle;
|
|
||||||
|
|
||||||
SComponent(Etype Type, int Subtype, int Val);
|
|
||||||
//SComponent(const & SComponent r);
|
|
||||||
SDL_Surface * getImg();
|
|
||||||
};
|
};
|
8
CMT.cpp
8
CMT.cpp
@ -218,7 +218,9 @@ void initGameState(CGameInfo * cgi)
|
|||||||
/****************************C++ OBJECT SCRIPTS************************************************/
|
/****************************C++ OBJECT SCRIPTS************************************************/
|
||||||
std::map<int,CCPPObjectScript*> scripts;
|
std::map<int,CCPPObjectScript*> scripts;
|
||||||
CScriptCallback * csc = new CScriptCallback();
|
CScriptCallback * csc = new CScriptCallback();
|
||||||
|
csc->gs = cgi->state;
|
||||||
handleCPPObjS(&scripts,new CVisitableOPH(csc));
|
handleCPPObjS(&scripts,new CVisitableOPH(csc));
|
||||||
|
handleCPPObjS(&scripts,new CVisitableOPW(csc));
|
||||||
//created map
|
//created map
|
||||||
|
|
||||||
|
|
||||||
@ -330,6 +332,8 @@ int _tmain(int argc, _TCHAR* argv[])
|
|||||||
cgi->screenh = new CScreenHandler;
|
cgi->screenh = new CScreenHandler;
|
||||||
cgi->screenh->initScreen();
|
cgi->screenh->initScreen();
|
||||||
|
|
||||||
|
THC std::cout<<"Preparing first handlers: "<<tmh.getDif()<<std::endl;
|
||||||
|
|
||||||
//colors initialization
|
//colors initialization
|
||||||
SDL_Color p;
|
SDL_Color p;
|
||||||
p.unused = 0;
|
p.unused = 0;
|
||||||
@ -352,6 +356,7 @@ int _tmain(int argc, _TCHAR* argv[])
|
|||||||
p.r = 0x84; p.g = 0x84; p.b = 0x84;//gray
|
p.r = 0x84; p.g = 0x84; p.b = 0x84;//gray
|
||||||
cgi->neutralColor = p;//gray
|
cgi->neutralColor = p;//gray
|
||||||
//colors initialized
|
//colors initialized
|
||||||
|
THC std::cout<<"Preparing players' colours: "<<tmh.getDif()<<std::endl;
|
||||||
CMessage::init();
|
CMessage::init();
|
||||||
cgi->townh = new CTownHandler;
|
cgi->townh = new CTownHandler;
|
||||||
cgi->townh->loadNames();
|
cgi->townh->loadNames();
|
||||||
@ -364,6 +369,7 @@ int _tmain(int argc, _TCHAR* argv[])
|
|||||||
cgi->heroh = heroh;
|
cgi->heroh = heroh;
|
||||||
cgi->generaltexth = new CGeneralTextHandler;
|
cgi->generaltexth = new CGeneralTextHandler;
|
||||||
cgi->generaltexth->load();
|
cgi->generaltexth->load();
|
||||||
|
THC std::cout<<"Preparing more handlers: "<<tmh.getDif()<<std::endl;
|
||||||
|
|
||||||
//initializing hero flags
|
//initializing hero flags
|
||||||
|
|
||||||
@ -641,7 +647,7 @@ int _tmain(int argc, _TCHAR* argv[])
|
|||||||
|
|
||||||
//hero flags initialized
|
//hero flags initialized
|
||||||
|
|
||||||
THC std::cout<<"Preparing first handlers: "<<tmh.getDif()<<std::endl;
|
THC std::cout<<"Initializing colours and flags: "<<tmh.getDif()<<std::endl;
|
||||||
CPreGame * cpg = new CPreGame(); //main menu and submenus
|
CPreGame * cpg = new CPreGame(); //main menu and submenus
|
||||||
THC std::cout<<"Initialization CPreGame (together): "<<tmh.getDif()<<std::endl;
|
THC std::cout<<"Initialization CPreGame (together): "<<tmh.getDif()<<std::endl;
|
||||||
cpg->mush = mush;
|
cpg->mush = mush;
|
||||||
|
85
CMessage.cpp
85
CMessage.cpp
@ -275,45 +275,76 @@ CInfoWindow * CMessage::genIWindow(std::string text, int player, int charperline
|
|||||||
{
|
{
|
||||||
//TODO: support for more than one component
|
//TODO: support for more than one component
|
||||||
CInfoWindow * ret = new CInfoWindow();
|
CInfoWindow * ret = new CInfoWindow();
|
||||||
|
ret->components = comps;
|
||||||
std::vector<std::string> * brtext = breakText(text,32,true,true);
|
//for (int i=0;i<comps.size();i++)
|
||||||
std::vector<std::string> * brdtext = breakText(comps[0]->subtitle,12,true,true);
|
// comps[i]->
|
||||||
|
std::vector<std::string> * brtext = breakText(text,charperline,true,true);
|
||||||
|
std::vector<std::string> * brdtext;
|
||||||
|
if (comps.size())
|
||||||
|
brdtext = breakText(comps[0]->subtitle,12,true,true);
|
||||||
|
else
|
||||||
|
brdtext = NULL;
|
||||||
std::vector<std::vector<SDL_Surface*> > * txtg = drawText(brtext);
|
std::vector<std::vector<SDL_Surface*> > * txtg = drawText(brtext);
|
||||||
std::pair<int,int> txts = getMaxSizes(txtg);
|
std::pair<int,int> txts = getMaxSizes(txtg);
|
||||||
|
txts.second = txts.second
|
||||||
|
+ ok->ourImages[0].bitmap->h //button
|
||||||
|
+ 15 //after button
|
||||||
|
+ 20; // space between subtitle and button
|
||||||
|
if (comps.size())
|
||||||
txts.second = txts.second
|
txts.second = txts.second
|
||||||
+ 30 //space to first component
|
+ 30 //space to first component
|
||||||
+ comps[0]->getImg()->h
|
+ comps[0]->getImg()->h
|
||||||
+ brdtext->size() * 10 //subtitle //!!!!!!!!!!!!!!!!!!!!
|
+ 5 //img <-> subtitle
|
||||||
+ 20 // space between subtitle and button
|
+ brdtext->size() * 10; //subtitle //!!!!!!!!!!!!!!!!!!!!
|
||||||
+ ok->ourImages[0].bitmap->h //button
|
|
||||||
+ 30; //after button
|
|
||||||
ret->bitmap = drawBox1(txts.first+70,txts.second+70,0);
|
ret->bitmap = drawBox1(txts.first+70,txts.second+70,0);
|
||||||
ret->pos.h=ret->bitmap->h;
|
ret->pos.h=ret->bitmap->h;
|
||||||
ret->pos.w=ret->bitmap->w;
|
ret->pos.w=ret->bitmap->w;
|
||||||
|
|
||||||
|
int curh = 30; //gorny margines
|
||||||
|
for (int i=0; i<txtg->size();i++)
|
||||||
|
{
|
||||||
|
int lw=0;
|
||||||
|
for (int j=0;j<(*txtg)[i].size();j++)
|
||||||
|
lw+=(*txtg)[i][j]->w;
|
||||||
|
int pw = ret->bitmap->w/2;
|
||||||
|
//int pw = Tmar, ph = Lmar;
|
||||||
|
pw -= lw/2;
|
||||||
|
|
||||||
//for (int i=0; i<txtg->size();i++)
|
int tw = pw;
|
||||||
//{
|
for (int j=0;j<(*txtg)[i].size();j++) //blit text
|
||||||
// int lw=0;
|
{
|
||||||
// for (int j=0;j<(*txtg)[i].size();j++)
|
//std::stringstream n;
|
||||||
// lw+=(*txtg)[i][j]->w;
|
//n <<"temp_"<<i<<"__"<<j<<".bmp";
|
||||||
// int pw = ret->bitmap->w/2, ph = ret->bitmap->h/2;
|
//SDL_SaveBMP(ret->bitmap,n.str().c_str());
|
||||||
// //int pw = Tmar, ph = Lmar;
|
blitAt((*txtg)[i][j],tw,curh+i*19,ret->bitmap);
|
||||||
// pw -= lw/2;
|
tw+=(*txtg)[i][j]->w;
|
||||||
// ph -= (19*txtg->size())/2;
|
SDL_FreeSurface((*txtg)[i][j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
curh += (19 * txtg->size()); //wys. tekstu
|
||||||
|
|
||||||
// int tw = pw;
|
if (comps.size())
|
||||||
// for (int j=0;j<(*txtg)[i].size();j++)
|
{
|
||||||
// {
|
curh += 30;
|
||||||
// //std::stringstream n;
|
comps[0]->pos.x = (ret->bitmap->w/2) - ((comps[0]->getImg()->w)/2);
|
||||||
// //n <<"temp_"<<i<<"__"<<j<<".bmp";
|
comps[0]->pos.y = curh;
|
||||||
// blitAt((*txtg)[i][j],tw,ph+i*19,ret->bitmap);
|
blitAt(comps[0]->getImg(),comps[0]->pos.x,comps[0]->pos.y,ret->bitmap);
|
||||||
// //SDL_SaveBMP(ret->bitmap,n.str().c_str());
|
curh += comps[0]->getImg()->h + 5; //obrazek + przerwa
|
||||||
// tw+=(*txtg)[i][j]->w;
|
for (int i=0; i<brdtext->size();i++) //descr.
|
||||||
// SDL_FreeSurface((*txtg)[i][j]);
|
{
|
||||||
// }
|
SDL_Surface * tesu = TTF_RenderText_Blended(GEOR13,(*brdtext)[i].c_str(),zwykly);
|
||||||
//}
|
blitAt(tesu,((comps[0]->getImg()->w - tesu->w)/2)+comps[0]->pos.x,curh,ret->bitmap);
|
||||||
|
curh+=tesu->h;
|
||||||
|
SDL_FreeSurface(tesu);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
curh += 20; //to buttton
|
||||||
|
|
||||||
|
ret->okb.posr.x = (ret->bitmap->w/2) - (ret->okb.imgs[0][0]->w/2);
|
||||||
|
ret->okb.posr.y = curh;
|
||||||
|
ret->okb.show();
|
||||||
|
curh+=ret->okb.imgs[0][0]->h;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ class CDefHandler;
|
|||||||
struct SComponent;
|
struct SComponent;
|
||||||
namespace NMessage
|
namespace NMessage
|
||||||
{
|
{
|
||||||
|
extern CDefHandler * ok, *cancel;
|
||||||
extern std::vector<std::vector<SDL_Surface*> > piecesOfBox; //in colors of all players
|
extern std::vector<std::vector<SDL_Surface*> > piecesOfBox; //in colors of all players
|
||||||
extern SDL_Surface * background ;
|
extern SDL_Surface * background ;
|
||||||
}
|
}
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include "hch/CHeroHandler.h"
|
#include "hch/CHeroHandler.h"
|
||||||
#include "SDL_framerate.h"
|
#include "SDL_framerate.h"
|
||||||
|
#include "hch/CGeneralTextHandler.h"
|
||||||
using namespace CSDL_Ext;
|
using namespace CSDL_Ext;
|
||||||
|
|
||||||
class OCM_HLP_CGIN
|
class OCM_HLP_CGIN
|
||||||
@ -24,12 +25,143 @@ public:
|
|||||||
return (*a.first)<(*b.first);
|
return (*a.first)<(*b.first);
|
||||||
}
|
}
|
||||||
} ocmptwo_cgin ;
|
} ocmptwo_cgin ;
|
||||||
|
CInfoWindow::CInfoWindow()
|
||||||
|
:okb(NMessage::ok,NULL,&CInfoWindow::okClicked)
|
||||||
|
{
|
||||||
|
okb.ourObj = this;
|
||||||
|
okb.delg = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CInfoWindow::okClicked(tribool down)
|
||||||
|
{
|
||||||
|
if (!down)
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CInfoWindow::close()
|
||||||
|
{
|
||||||
|
for (int i=0;i<components.size();i++)
|
||||||
|
delete components[i];
|
||||||
|
okb.deactivate();
|
||||||
|
SDL_FreeSurface(bitmap);
|
||||||
|
bitmap = NULL;
|
||||||
|
LOCPLINT->removeObjToBlit(this);
|
||||||
|
//delete this;
|
||||||
|
LOCPLINT->adventureInt->show();
|
||||||
|
}
|
||||||
|
CInfoWindow::~CInfoWindow()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
SComponent::SComponent(Etype Type, int Subtype, int Val)
|
||||||
|
{
|
||||||
|
std::ostringstream oss;
|
||||||
|
switch (Type)
|
||||||
|
{
|
||||||
|
case primskill:
|
||||||
|
description = CGI->generaltexth->arraytxt[2+Subtype];
|
||||||
|
oss << ((Val>0)?("+"):("-")) << Val << " " << CGI->heroh->pskillsn[Subtype];
|
||||||
|
subtitle = oss.str();
|
||||||
|
break;
|
||||||
|
case resource:
|
||||||
|
//description = CGI->generaltexth->arraytxt[2+Subtype];
|
||||||
|
std::ostringstream oss;
|
||||||
|
oss << Val;
|
||||||
|
subtitle = oss.str();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
type = Type;
|
||||||
|
subtype = Subtype;
|
||||||
|
val = Val;
|
||||||
|
SDL_Surface * temp = getImg();
|
||||||
|
pos.w = temp->w;
|
||||||
|
pos.h = temp->h;
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_Surface * SComponent::getImg()
|
||||||
|
{
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case primskill:
|
||||||
|
return CGI->heroh->pskillsb->ourImages[subtype].bitmap;
|
||||||
|
break;
|
||||||
|
case resource:
|
||||||
|
return CGI->heroh->resources->ourImages[subtype].bitmap;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SComponent::clickRight (tribool down)
|
||||||
|
{
|
||||||
|
LOCPLINT->adventureInt->handleRightClick(description,down,this);
|
||||||
|
}
|
||||||
|
void SComponent::activate()
|
||||||
|
{
|
||||||
|
ClickableR::activate();
|
||||||
|
}
|
||||||
|
void SComponent::deactivate()
|
||||||
|
{
|
||||||
|
ClickableR::deactivate();
|
||||||
|
}
|
||||||
CSimpleWindow::~CSimpleWindow()
|
CSimpleWindow::~CSimpleWindow()
|
||||||
{
|
{
|
||||||
if (bitmap)
|
if (bitmap)
|
||||||
|
{
|
||||||
SDL_FreeSurface(bitmap);
|
SDL_FreeSurface(bitmap);
|
||||||
bitmap=NULL;
|
bitmap=NULL;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T>CSCButton<T>::CSCButton(CDefHandler * img, CIntObject * obj, void(T::*poin)(tribool), T* Delg)
|
||||||
|
{
|
||||||
|
ourObj = obj;
|
||||||
|
delg = Delg;
|
||||||
|
func = poin;
|
||||||
|
imgs.resize(1);
|
||||||
|
for (int i =0; i<img->ourImages.size();i++)
|
||||||
|
{
|
||||||
|
imgs[0].push_back(img->ourImages[i].bitmap);
|
||||||
|
}
|
||||||
|
pos.w = imgs[0][0]->w;
|
||||||
|
pos.h = imgs[0][0]->h;
|
||||||
|
state = 0;
|
||||||
|
}
|
||||||
|
template <typename T> void CSCButton<T>::clickLeft (tribool down)
|
||||||
|
{
|
||||||
|
if (down)
|
||||||
|
{
|
||||||
|
state=1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
state=0;
|
||||||
|
}
|
||||||
|
show();
|
||||||
|
if (delg)
|
||||||
|
(delg->*func)(down);
|
||||||
|
pressedL=state;
|
||||||
|
}
|
||||||
|
template <typename T> void CSCButton<typename T>::activate()
|
||||||
|
{
|
||||||
|
ClickableL::activate();
|
||||||
|
}
|
||||||
|
template <typename T> void CSCButton<typename T>::deactivate()
|
||||||
|
{
|
||||||
|
ClickableL::deactivate();
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T> void CSCButton<typename T>::show()
|
||||||
|
{
|
||||||
|
if (delg)
|
||||||
|
{
|
||||||
|
blitAt(imgs[curimg][state],posr.x,posr.y,delg->bitmap);
|
||||||
|
updateRect(&genRect(pos.h,pos.w,posr.x,posr.y),delg->bitmap);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CButtonBase::show();
|
||||||
|
}
|
||||||
|
}
|
||||||
CButtonBase::CButtonBase()
|
CButtonBase::CButtonBase()
|
||||||
{
|
{
|
||||||
curimg=0;
|
curimg=0;
|
||||||
@ -1061,7 +1193,20 @@ void CPlayerInterface::heroPrimarySkillChanged(const CGHeroInstance * hero, int
|
|||||||
adventureInt->infoBar.draw();
|
adventureInt->infoBar.draw();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
void CPlayerInterface::showInfoDialog(std::string text, std::vector<SComponent*> components)
|
void CPlayerInterface::showInfoDialog(std::string text, std::vector<SComponent*> & components)
|
||||||
{
|
{
|
||||||
;
|
adventureInt->hide();
|
||||||
|
CInfoWindow * temp = CMessage::genIWindow(text,LOCPLINT->playerID,32,components);
|
||||||
|
LOCPLINT->objsToBlit.push_back(temp);
|
||||||
|
temp->pos.x=300-(temp->pos.w/2);
|
||||||
|
temp->pos.y=300-(temp->pos.h/2);
|
||||||
|
temp->okb.pos.x = temp->okb.posr.x + temp->pos.x;
|
||||||
|
temp->okb.pos.y = temp->okb.posr.y + temp->pos.y;
|
||||||
|
temp->okb.activate();
|
||||||
|
}
|
||||||
|
void CPlayerInterface::removeObjToBlit(CSimpleWindow* obj)
|
||||||
|
{
|
||||||
|
objsToBlit.erase
|
||||||
|
(std::find(objsToBlit.begin(),objsToBlit.end(),obj));
|
||||||
|
//delete obj;
|
||||||
}
|
}
|
@ -10,7 +10,7 @@ class CDefHandler;
|
|||||||
struct HeroMoveDetails;
|
struct HeroMoveDetails;
|
||||||
class CDefEssential;
|
class CDefEssential;
|
||||||
class CGHeroInstance;
|
class CGHeroInstance;
|
||||||
struct SComponent;
|
class CAdvMapInt;
|
||||||
class CIntObject //interface object
|
class CIntObject //interface object
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -25,19 +25,13 @@ public:
|
|||||||
CSimpleWindow():bitmap(NULL),owner(NULL){};
|
CSimpleWindow():bitmap(NULL),owner(NULL){};
|
||||||
virtual ~CSimpleWindow();
|
virtual ~CSimpleWindow();
|
||||||
};
|
};
|
||||||
class CInfoWindow : public CSimpleWindow //text + comp. + ok button
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
std::vector<SComponent *> components;
|
|
||||||
CInfoWindow(){};
|
|
||||||
};
|
|
||||||
class CButtonBase : public virtual CIntObject //basic buttton class
|
class CButtonBase : public virtual CIntObject //basic buttton class
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
int type; //advmapbutton=2
|
int type; //advmapbutton=2
|
||||||
bool abs;
|
bool abs;
|
||||||
bool active;
|
bool active;
|
||||||
CIntObject * ourObj;
|
CIntObject * ourObj; // "owner"
|
||||||
int state;
|
int state;
|
||||||
std::vector< std::vector<SDL_Surface*> > imgs;
|
std::vector< std::vector<SDL_Surface*> > imgs;
|
||||||
int curimg;
|
int curimg;
|
||||||
@ -45,6 +39,7 @@ public:
|
|||||||
virtual void activate()=0;
|
virtual void activate()=0;
|
||||||
virtual void deactivate()=0;
|
virtual void deactivate()=0;
|
||||||
CButtonBase();
|
CButtonBase();
|
||||||
|
virtual ~CButtonBase(){};
|
||||||
};
|
};
|
||||||
class ClickableL : public virtual CIntObject //for left-clicks
|
class ClickableL : public virtual CIntObject //for left-clicks
|
||||||
{
|
{
|
||||||
@ -87,6 +82,54 @@ public:
|
|||||||
virtual void activate()=0;
|
virtual void activate()=0;
|
||||||
virtual void deactivate()=0;
|
virtual void deactivate()=0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <typename T> class CSCButton: public CButtonBase, public ClickableL //prosty guzik, ktory tylko zmienia obrazek
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
int3 posr; //position in the bitmap
|
||||||
|
int state;
|
||||||
|
T* delg;
|
||||||
|
void(T::*func)(tribool);
|
||||||
|
CSCButton(CDefHandler * img, CIntObject * obj, void(T::*poin)(tribool), T* Delg=NULL);
|
||||||
|
void clickLeft (tribool down);
|
||||||
|
void activate();
|
||||||
|
void deactivate();
|
||||||
|
void show();
|
||||||
|
};
|
||||||
|
|
||||||
|
class CInfoWindow : public CSimpleWindow //text + comp. + ok button
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CSCButton<CInfoWindow> okb;
|
||||||
|
std::vector<SComponent*> components;
|
||||||
|
void okClicked(tribool down);
|
||||||
|
void close();
|
||||||
|
CInfoWindow();
|
||||||
|
~CInfoWindow();
|
||||||
|
};
|
||||||
|
|
||||||
|
class SComponent : public ClickableR
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
enum Etype
|
||||||
|
{
|
||||||
|
primskill, secskill, resource, creature, artifact
|
||||||
|
} type;
|
||||||
|
int subtype;
|
||||||
|
int val;
|
||||||
|
|
||||||
|
std::string description; //r-click
|
||||||
|
std::string subtitle;
|
||||||
|
|
||||||
|
SComponent(Etype Type, int Subtype, int Val);
|
||||||
|
//SComponent(const & SComponent r);
|
||||||
|
SDL_Surface * getImg();
|
||||||
|
|
||||||
|
void clickRight (tribool down);
|
||||||
|
void activate();
|
||||||
|
void deactivate();
|
||||||
|
};
|
||||||
|
|
||||||
class CPlayerInterface : public CGameInterface
|
class CPlayerInterface : public CGameInterface
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -121,7 +164,8 @@ public:
|
|||||||
void handleEvent(SDL_Event * sEvent);
|
void handleEvent(SDL_Event * sEvent);
|
||||||
void init(CCallback * CB);
|
void init(CCallback * CB);
|
||||||
int3 repairScreenPos(int3 pos);
|
int3 repairScreenPos(int3 pos);
|
||||||
void showInfoDialog(std::string text, std::vector<SComponent*> components);
|
void showInfoDialog(std::string text, std::vector<SComponent*> & components);
|
||||||
|
void removeObjToBlit(CSimpleWindow* obj);
|
||||||
|
|
||||||
CPlayerInterface(int Player, int serial);
|
CPlayerInterface(int Player, int serial);
|
||||||
};
|
};
|
BIN
CPreGame.cpp
BIN
CPreGame.cpp
Binary file not shown.
@ -91,13 +91,13 @@ public:
|
|||||||
: Button(Pos,Fun,Imgs,Sel,gr),key(My){ourPoinGroup=gr;};
|
: Button(Pos,Fun,Imgs,Sel,gr),key(My){ourPoinGroup=gr;};
|
||||||
void select(bool on=true) {(*this).Button::select(on);ourPoinGroup->setYour(this);CPG->printRating();}
|
void select(bool on=true) {(*this).Button::select(on);ourPoinGroup->setYour(this);CPG->printRating();}
|
||||||
};
|
};
|
||||||
template <class T=ttt> class CPoinGroup :public CGroup<T>
|
template <class T> class CPoinGroup :public CGroup<T>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
int * gdzie; //where (po polsku, bo by by�o s�owo kluczowe :/)
|
int * gdzie; //where (po polsku, bo by by�o s�owo kluczowe :/)
|
||||||
void setYour(IntSelBut<T> * your){*gdzie=your->key;};
|
void setYour(IntSelBut<T> * your){*gdzie=your->key;};
|
||||||
};
|
};
|
||||||
template <class T=ttt> class CGroup
|
template <class T> class CGroup
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Button<T> * selected;
|
Button<T> * selected;
|
||||||
|
@ -40,6 +40,7 @@ void CHeroHandler::loadPortraits()
|
|||||||
}
|
}
|
||||||
of.close();
|
of.close();
|
||||||
pskillsb = CGI->spriteh->giveDef("PSKILL.DEF");
|
pskillsb = CGI->spriteh->giveDef("PSKILL.DEF");
|
||||||
|
resources = CGI->spriteh->giveDef("RESOUR82.DEF");
|
||||||
|
|
||||||
std::string strs = CGI->bitmaph->getTextFile("PRISKILL.TXT");
|
std::string strs = CGI->bitmaph->getTextFile("PRISKILL.TXT");
|
||||||
int itr=0;
|
int itr=0;
|
||||||
|
@ -69,7 +69,7 @@ public:
|
|||||||
unsigned int getTileCost(EterrainType & ttype, Eroad & rdtype, Eriver & rvtype);
|
unsigned int getTileCost(EterrainType & ttype, Eroad & rdtype, Eriver & rvtype);
|
||||||
unsigned int getLowestCreatureSpeed();
|
unsigned int getLowestCreatureSpeed();
|
||||||
unsigned int getAdditiveMoveBonus();
|
unsigned int getAdditiveMoveBonus();
|
||||||
unsigned float getMultiplicativeMoveBonus();
|
float getMultiplicativeMoveBonus();
|
||||||
static int3 convertPosition(int3 src, bool toh3m); //toh3m=true: manifest->h3m; toh3m=false: h3m->manifest
|
static int3 convertPosition(int3 src, bool toh3m); //toh3m=true: manifest->h3m; toh3m=false: h3m->manifest
|
||||||
int3 getPosition(bool h3m) const; //h3m=true - returns position of hero object; h3m=false - returns position of hero 'manifestation'
|
int3 getPosition(bool h3m) const; //h3m=true - returns position of hero object; h3m=false - returns position of hero 'manifestation'
|
||||||
int getSightDistance() const; //returns sight distance of this hero
|
int getSightDistance() const; //returns sight distance of this hero
|
||||||
@ -89,7 +89,7 @@ public:
|
|||||||
std::vector<CHero*> heroes; //by�o nodrze
|
std::vector<CHero*> heroes; //by�o nodrze
|
||||||
std::vector<CHeroClass *> heroClasses;
|
std::vector<CHeroClass *> heroClasses;
|
||||||
std::vector<CDefHandler *> flags1, flags2, flags3, flags4; //flags blitted on heroes when ,
|
std::vector<CDefHandler *> flags1, flags2, flags3, flags4; //flags blitted on heroes when ,
|
||||||
CDefHandler * pskillsb; //82x93
|
CDefHandler * pskillsb, *resources; //82x93
|
||||||
std::vector<std::string> pskillsn;
|
std::vector<std::string> pskillsn;
|
||||||
unsigned int level(unsigned int experience);
|
unsigned int level(unsigned int experience);
|
||||||
void loadHeroes();
|
void loadHeroes();
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
#include <cctype>
|
#include <cctype>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include "boost/filesystem.hpp" // includes all needed Boost.Filesystem declarations
|
#include "boost/filesystem.hpp" // includes all needed Boost.Filesystem declarations
|
||||||
|
|
||||||
int readNormalNr (int pos, int bytCon, unsigned char * str)
|
int readNormalNr (int pos, int bytCon, unsigned char * str)
|
||||||
{
|
{
|
||||||
int ret=0;
|
int ret=0;
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
#include "CDefObjInfoHandler.h"
|
#include "CDefObjInfoHandler.h"
|
||||||
#include "../CLua.h"
|
#include "../CLua.h"
|
||||||
#include "CHeroHandler.h"
|
#include "CHeroHandler.h"
|
||||||
|
#include <boost/algorithm/string/replace.hpp>
|
||||||
void CObjectHandler::loadObjects()
|
void CObjectHandler::loadObjects()
|
||||||
{
|
{
|
||||||
int ID=0;
|
int ID=0;
|
||||||
@ -28,6 +29,8 @@ void CObjectHandler::loadObjects()
|
|||||||
while (it<buf.length()-1)
|
while (it<buf.length()-1)
|
||||||
{
|
{
|
||||||
CGeneralTextHandler::loadToIt(temp,buf,it,3);
|
CGeneralTextHandler::loadToIt(temp,buf,it,3);
|
||||||
|
temp = temp.substr(1,temp.length()-2);
|
||||||
|
boost::algorithm::replace_all(temp,"\"\"","\"");
|
||||||
advobtxt.push_back(temp);
|
advobtxt.push_back(temp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -122,9 +125,9 @@ bool CGObjectInstance::visitableAt(int x, int y) const //returns true if ibject
|
|||||||
}
|
}
|
||||||
bool CGObjectInstance::operator<(const CGObjectInstance & cmp) const //screen printing priority comparing
|
bool CGObjectInstance::operator<(const CGObjectInstance & cmp) const //screen printing priority comparing
|
||||||
{
|
{
|
||||||
if(defInfo->printPriority==1 && defInfo->printPriority==0)
|
if(defInfo->printPriority==1 && cmp.defInfo->printPriority==0)
|
||||||
return true;
|
return true;
|
||||||
if(defInfo->printPriority==1 && defInfo->printPriority==0)
|
if(cmp.defInfo->printPriority==1 && defInfo->printPriority==0)
|
||||||
return false;
|
return false;
|
||||||
if(this->pos.y<cmp.pos.y)
|
if(this->pos.y<cmp.pos.y)
|
||||||
return true;
|
return true;
|
||||||
@ -277,6 +280,7 @@ CGObjectInstance::CGObjectInstance(const CGObjectInstance & right)
|
|||||||
defInfo = right.defInfo;
|
defInfo = right.defInfo;
|
||||||
info = right.info;
|
info = right.info;
|
||||||
defObjInfoNumber = right.defObjInfoNumber;
|
defObjInfoNumber = right.defObjInfoNumber;
|
||||||
|
blockVisit = false;
|
||||||
//state = new CLuaObjectScript(right.state->);
|
//state = new CLuaObjectScript(right.state->);
|
||||||
//*state = *right.state;
|
//*state = *right.state;
|
||||||
//state = right.state;
|
//state = right.state;
|
||||||
@ -291,6 +295,7 @@ CGObjectInstance& CGObjectInstance::operator=(const CGObjectInstance & right)
|
|||||||
defInfo = right.defInfo;
|
defInfo = right.defInfo;
|
||||||
info = right.info;
|
info = right.info;
|
||||||
defObjInfoNumber = right.defObjInfoNumber;
|
defObjInfoNumber = right.defObjInfoNumber;
|
||||||
|
blockVisit = right.blockVisit;
|
||||||
//state = new CLuaObjectScript();
|
//state = new CLuaObjectScript();
|
||||||
//*state = *right.state;
|
//*state = *right.state;
|
||||||
tempOwner = right.tempOwner;
|
tempOwner = right.tempOwner;
|
||||||
|
@ -367,6 +367,7 @@ public:
|
|||||||
int defObjInfoNumber;
|
int defObjInfoNumber;
|
||||||
|
|
||||||
int tempOwner; //uzywane dla szybkosci, skrypt ma obowiazek aktualizowac te zmienna
|
int tempOwner; //uzywane dla szybkosci, skrypt ma obowiazek aktualizowac te zmienna
|
||||||
|
bool blockVisit;
|
||||||
|
|
||||||
virtual bool isHero() const;
|
virtual bool isHero() const;
|
||||||
int getOwner() const;
|
int getOwner() const;
|
||||||
@ -405,7 +406,7 @@ public:
|
|||||||
unsigned int getTileCost(EterrainType & ttype, Eroad & rdtype, Eriver & rvtype);
|
unsigned int getTileCost(EterrainType & ttype, Eroad & rdtype, Eriver & rvtype);
|
||||||
unsigned int getLowestCreatureSpeed();
|
unsigned int getLowestCreatureSpeed();
|
||||||
unsigned int getAdditiveMoveBonus();
|
unsigned int getAdditiveMoveBonus();
|
||||||
unsigned float getMultiplicativeMoveBonus();
|
float getMultiplicativeMoveBonus();
|
||||||
static int3 convertPosition(int3 src, bool toh3m); //toh3m=true: manifest->h3m; toh3m=false: h3m->manifest
|
static int3 convertPosition(int3 src, bool toh3m); //toh3m=true: manifest->h3m; toh3m=false: h3m->manifest
|
||||||
int3 getPosition(bool h3m) const; //h3m=true - returns position of hero object; h3m=false - returns position of hero 'manifestation'
|
int3 getPosition(bool h3m) const; //h3m=true - returns position of hero object; h3m=false - returns position of hero 'manifestation'
|
||||||
int getSightDistance() const; //returns sight distance of this hero
|
int getSightDistance() const; //returns sight distance of this hero
|
||||||
|
4
map.h
4
map.h
@ -1,6 +1,6 @@
|
|||||||
#ifndef MAPD_H
|
#ifndef MAPD_H
|
||||||
#define MAPD_H
|
#define MAPD_H
|
||||||
|
#pragma warning (disable : 4482)
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
@ -174,7 +174,7 @@ public:
|
|||||||
struct Mapa
|
struct Mapa
|
||||||
{
|
{
|
||||||
Eformat version; // version of map Eformat
|
Eformat version; // version of map Eformat
|
||||||
bool twoLevel; // if map has underground level
|
int twoLevel; // if map has underground level
|
||||||
int difficulty; // 0 easy - 4 impossible
|
int difficulty; // 0 easy - 4 impossible
|
||||||
int levelLimit;
|
int levelLimit;
|
||||||
bool areAnyPLayers; // if there are any playable players on map
|
bool areAnyPLayers; // if there are any playable players on map
|
||||||
|
@ -1524,6 +1524,7 @@ std::string CMapHandler::getDefName(int id, int subid)
|
|||||||
if(CGI->dobjinfo->objs[i].type==id && CGI->dobjinfo->objs[i].subtype==subid)
|
if(CGI->dobjinfo->objs[i].type==id && CGI->dobjinfo->objs[i].subtype==subid)
|
||||||
return CGI->dobjinfo->objs[i].defName;
|
return CGI->dobjinfo->objs[i].defName;
|
||||||
}
|
}
|
||||||
|
throw new std::exception("Def not found.");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CMapHandler::printObject(CGObjectInstance *obj)
|
bool CMapHandler::printObject(CGObjectInstance *obj)
|
||||||
|
Reference in New Issue
Block a user