123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296 |
- #include "../stdafx.h"
- #include "CObjectHandler.h"
- #include "../CGameInfo.h"
- #include "CGeneralTextHandler.h"
- #include "CLodHandler.h"
- #include "CAmbarCendamo.h"
- #include "../mapHandler.h"
- #include "CDefObjInfoHandler.h"
- #include "../CLua.h"
- #include "CHeroHandler.h"
- #include <boost/algorithm/string/replace.hpp>
- void CObjectHandler::loadObjects()
- {
- int ID=0;
- std::string buf = CGameInfo::mainObj->bitmaph->getTextFile("OBJNAMES.TXT");
- int it=0;
- while (it<buf.length()-1)
- {
- CObject nobj;
- CGeneralTextHandler::loadToIt(nobj.name,buf,it,3);
- if(nobj.name.size() && (nobj.name[nobj.name.size()-1]==(char)10 || nobj.name[nobj.name.size()-1]==(char)13 || nobj.name[nobj.name.size()-1]==(char)9))
- nobj.name = nobj.name.substr(0, nobj.name.size()-1);
- objects.push_back(nobj);
- }
- buf = CGameInfo::mainObj->bitmaph->getTextFile("ADVEVENT.TXT");
- it=0;
- std::string temp;
- while (it<buf.length()-1)
- {
- CGeneralTextHandler::loadToIt(temp,buf,it,3);
- if (temp[0]=='\"')
- temp = temp.substr(1,temp.length()-2);
- boost::algorithm::replace_all(temp,"\"\"","\"");
- advobtxt.push_back(temp);
- }
- buf = CGameInfo::mainObj->bitmaph->getTextFile("XTRAINFO.TXT");
- it=0;
- while (it<buf.length()-1)
- {
- CGeneralTextHandler::loadToIt(temp,buf,it,3);
- xtrainfo.push_back(temp);
- }
- buf = CGameInfo::mainObj->bitmaph->getTextFile("MINENAME.TXT");
- it=0;
- while (it<buf.length()-1)
- {
- CGeneralTextHandler::loadToIt(temp,buf,it,3);
- mines.push_back(std::pair<std::string,std::string>(temp,""));
- }
- buf = CGameInfo::mainObj->bitmaph->getTextFile("MINEEVNT.TXT");
- it=0;
- int i=0;
- while (it<buf.length()-1)
- {
- CGeneralTextHandler::loadToIt(temp,buf,it,3);
- temp = temp.substr(1,temp.length()-2);
- mines[i++].second = temp;
- }
- buf = CGameInfo::mainObj->bitmaph->getTextFile("RESTYPES.TXT");
- it=0;
- while (it<buf.length()-1)
- {
- CGeneralTextHandler::loadToIt(temp,buf,it,3);
- restypes.push_back(temp);
- }
- cregens.resize(110); //TODO: hardcoded value - change
- for(int i=0; i<cregens.size();i++)
- cregens[i]=-1;
- std::ifstream ifs("config/cregens.txt");
- while(!ifs.eof())
- {
- int dw, cr;
- ifs >> dw >> cr;
- cregens[dw]=cr;
- }
-
- }
- bool CGObjectInstance::isHero() const
- {
- return false;
- }
- int CGObjectInstance::getOwner() const
- {
- //if (state)
- // return state->owner;
- //else
- return tempOwner; //won't have owner
- }
- void CGObjectInstance::setOwner(int ow)
- {
- //if (state)
- // state->owner = ow;
- //else
- tempOwner = ow;
- }
- int CGObjectInstance::getWidth() const//returns width of object graphic in tiles
- {
- return defInfo->handler->ourImages[0].bitmap->w/32;
- }
- int CGObjectInstance::getHeight() const //returns height of object graphic in tiles
- {
- return defInfo->handler->ourImages[0].bitmap->h/32;
- }
- bool CGObjectInstance::visitableAt(int x, int y) const //returns true if ibject is visitable at location (x, y) form left top tile of image (x, y in tiles)
- {
- if(x<0 || y<0 || x>=getWidth() || y>=getHeight() || defInfo==NULL)
- return false;
- if((defInfo->visitMap[y+6-getHeight()] >> (7-(8-getWidth()+x) )) & 1)
- return true;
- return false;
- }
- bool CGObjectInstance::operator<(const CGObjectInstance & cmp) const //screen printing priority comparing
- {
- if(defInfo->printPriority==1 && cmp.defInfo->printPriority==0)
- return true;
- if(cmp.defInfo->printPriority==1 && defInfo->printPriority==0)
- return false;
- if(this->pos.y<cmp.pos.y)
- return true;
- if(this->pos.y>cmp.pos.y)
- return false;
- if(!defInfo->isVisitable() && cmp.defInfo->isVisitable())
- return true;
- if(!cmp.defInfo->isVisitable() && defInfo->isVisitable())
- return false;
- //if(defInfo->isOnDefList && !(cmp.defInfo->isOnDefList))
- // return true;
- //if(cmp.defInfo->isOnDefList && !(defInfo->isOnDefList))
- // return false;
- if(this->pos.x<cmp.pos.x)
- return true;
- return false;
- }
-
- bool CGHeroInstance::isHero() const
- {
- return true;
- }
- unsigned int CGHeroInstance::getTileCost(EterrainType & ttype, Eroad & rdtype, Eriver & rvtype)
- {
- unsigned int ret = type->heroClass->terrCosts[ttype];
- switch(rdtype)
- {
- case Eroad::dirtRoad:
- ret*=0.75;
- break;
- case Eroad::grazvelRoad:
- ret*=0.667;
- break;
- case Eroad::cobblestoneRoad:
- ret*=0.5;
- break;
- }
- return ret;
- }
- unsigned int CGHeroInstance::getLowestCreatureSpeed()
- {
- unsigned int sl = 100;
- for(int h=0; h<army.slots.size(); ++h)
- {
- if(army.slots[h].first->speed<sl)
- sl = army.slots[h].first->speed;
- }
- return sl;
- }
- int3 CGHeroInstance::convertPosition(int3 src, bool toh3m) //toh3m=true: manifest->h3m; toh3m=false: h3m->manifest
- {
- if (toh3m)
- {
- src.x+=1;
- return src;
- }
- else
- {
- src.x-=1;
- return src;
- }
- }
- int3 CGHeroInstance::getPosition(bool h3m) const //h3m=true - returns position of hero object; h3m=false - returns position of hero 'manifestation'
- {
- if (h3m)
- return pos;
- else return convertPosition(pos,false);
- }
- int CGHeroInstance::getSightDistance() const //returns sight distance of this hero
- {
- return 6;
- }
- void CGHeroInstance::setPosition(int3 Pos, bool h3m) //as above, but sets position
- {
- if (h3m)
- pos = Pos;
- else
- pos = convertPosition(Pos,true);
- }
- bool CGHeroInstance::canWalkOnSea() const
- {
- //TODO: write it - it should check if hero is flying, or something similiar
- return false;
- }
- int CGHeroInstance::getCurrentLuck() const
- {
- //TODO: write it
- return 0;
- }
- int CGHeroInstance::getCurrentMorale() const
- {
- //TODO: write it
- return 0;
- }
- int CGTownInstance::getSightDistance() const //returns sight distance
- {
- return 10;
- }
- bool CGTownInstance::hasFort() const
- {
- return (builtBuildings.find(7))!=builtBuildings.end();
- }
- bool CGTownInstance::hasCapitol() const
- {
- return (builtBuildings.find(13))!=builtBuildings.end();
- }
- CGTownInstance::CGTownInstance()
- {
- pos = int3(-1,-1,-1);
- builded=-1;
- destroyed=-1;
- garrisonHero=NULL;
- //state->owner=-1;
- town=NULL;
- income = 500;
- visitingHero = NULL;
- }
- CGObjectInstance::CGObjectInstance()
- {
- //std::cout << "Tworze obiekt "<<this<<std::endl;
- //state = new CLuaObjectScript();
- //state = NULL;
- tempOwner = 254;
- blockVisit = false;
- }
- CGObjectInstance::~CGObjectInstance()
- {
- //std::cout << "Usuwam obiekt "<<this<<std::endl;
- //if (state)
- // delete state;
- //state=NULL;
- }
- CGHeroInstance::~CGHeroInstance()
- {
- }
- CGTownInstance::~CGTownInstance()
- {}
- CGObjectInstance::CGObjectInstance(const CGObjectInstance & right)
- {
- pos = right.pos;
- ID = right.ID;
- subID = right.subID;
- id = right.id;
- defInfo = right.defInfo;
- info = right.info;
- blockVisit = right.blockVisit;
- //state = new CLuaObjectScript(right.state->);
- //*state = *right.state;
- //state = right.state;
- tempOwner = right.tempOwner;
- }
- CGObjectInstance& CGObjectInstance::operator=(const CGObjectInstance & right)
- {
- pos = right.pos;
- ID = right.ID;
- subID = right.subID;
- id = right.id;
- defInfo = right.defInfo;
- info = right.info;
- blockVisit = right.blockVisit;
- //state = new CLuaObjectScript();
- //*state = *right.state;
- tempOwner = right.tempOwner;
- return *this;
- }
|