1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-26 22:57:00 +02:00

Moved objecthandler / minor

This commit is contained in:
Michał W. Urbańczyk 2008-06-17 17:48:32 +00:00
parent 3988767329
commit d251597617
17 changed files with 175 additions and 209 deletions

13
CMT.cpp
View File

@ -48,17 +48,6 @@
#include "CAdvmapInterface.h" #include "CAdvmapInterface.h"
#include "CCastleInterface.h" #include "CCastleInterface.h"
#include "client\Graphics.h" #include "client\Graphics.h"
#include <boost/lambda/lambda.hpp>
#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__)
# include <fcntl.h>
# include <io.h>
# define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY)
#else
# define SET_BINARY_MODE(file)
#endif
#ifdef _DEBUG
#endif
#define CHUNK 16384
const char * NAME = "VCMI \"Altanatse\" 0.7"; const char * NAME = "VCMI \"Altanatse\" 0.7";
DLL_EXPORT void initDLL(CLodHandler *b); DLL_EXPORT void initDLL(CLodHandler *b);
SDL_Color playerColorPalette[256]; //palette to make interface colors good SDL_Color playerColorPalette[256]; //palette to make interface colors good
@ -214,6 +203,8 @@ void initGameState(Mapa * map, CGameInfo * cgi)
for (int i=0;i<map->towns.size();i++) for (int i=0;i<map->towns.size();i++)
{ {
CGTownInstance * vti =(map->towns[i]); CGTownInstance * vti =(map->towns[i]);
if(!vti->town)
vti->town = &CGI->townh->towns[vti->subID];
if (vti->name.length()==0) // if town hasn't name we draw it if (vti->name.length()==0) // if town hasn't name we draw it
vti->name=vti->town->names[rand()%vti->town->names.size()]; vti->name=vti->town->names[rand()%vti->town->names.size()];
if(vti->builtBuildings.find(-50)!=vti->builtBuildings.end()) //give standard set of buildings if(vti->builtBuildings.find(-50)!=vti->builtBuildings.end()) //give standard set of buildings

View File

@ -171,6 +171,9 @@ void Graphics::loadHeroPortraits()
} }
void Graphics::loadHeroAnim(std::vector<CDefHandler **> & anims) void Graphics::loadHeroAnim(std::vector<CDefHandler **> & anims)
{ {
std::vector<std::pair<int,int> > rotations; //first - group number to be rotated1, second - group number after rotation1
rotations += std::make_pair(6,10), std::make_pair(7,11), std::make_pair(8,12), std::make_pair(1,13),
std::make_pair(2,14), std::make_pair(3,15);
for(int i=0; i<anims.size();i++) for(int i=0; i<anims.size();i++)
{ {
std::stringstream nm; std::stringstream nm;
@ -181,77 +184,33 @@ void Graphics::loadHeroAnim(std::vector<CDefHandler **> & anims)
nm<<"_.DEF"; nm<<"_.DEF";
std::string name = nm.str(); std::string name = nm.str();
(*anims[i]) = CDefHandler::giveDef(name); (*anims[i]) = CDefHandler::giveDef(name);
//(CDefHandler*)(((void*)hc)+((void*)moveAnim)) = CDefHandler::giveDef(name); int pom = 0; //how many groups has been rotated
for(int o=0; o<(*anims[i])->ourImages.size(); ++o) for(int o=7; pom<6; ++o)
{ {
if((*anims[i])->ourImages[o].groupNumber==6) for(int p=0;p<6;p++)
{
if((*anims[i])->ourImages[o].groupNumber==rotations[p].first)
{ {
for(int e=0; e<8; ++e) for(int e=0; e<8; ++e)
{ {
Cimage nci; Cimage nci;
nci.bitmap = CSDL_Ext::rotate01((*anims[i])->ourImages[o+e].bitmap); nci.bitmap = CSDL_Ext::rotate01((*anims[i])->ourImages[o+e].bitmap);
nci.groupNumber = 10; nci.groupNumber = rotations[p].second;
nci.imName = std::string();
(*anims[i])->ourImages.push_back(nci);
}
o+=8;
}
if((*anims[i])->ourImages[o].groupNumber==7)
{
for(int e=0; e<8; ++e)
{
Cimage nci;
nci.bitmap = CSDL_Ext::rotate01((*anims[i])->ourImages[o+e].bitmap);
nci.groupNumber = 11;
nci.imName = std::string();
(*anims[i])->ourImages.push_back(nci);
}
o+=8;
}
if((*anims[i])->ourImages[o].groupNumber==8)
{
for(int e=0; e<8; ++e)
{
Cimage nci;
nci.bitmap = CSDL_Ext::rotate01((*anims[i])->ourImages[o+e].bitmap);
nci.groupNumber = 12;
nci.imName = std::string(); nci.imName = std::string();
(*anims[i])->ourImages.push_back(nci); (*anims[i])->ourImages.push_back(nci);
if(pom>2) //we need only one frame for groups 13/14/15
break;
} }
if(pom<3) //there are eight frames of animtion of groups 6/7/8 so for speed we'll skip them
o+=8; o+=8;
else //there is only one frame of 1/2/3
o+=1;
++pom;
if(p==2 && pom<4) //group1 starts at index 1
o = 1;
} }
} }
for(int o=0; o<(*anims[i])->ourImages.size(); ++o)
{
if((*anims[i])->ourImages[o].groupNumber==1)
{
Cimage nci;
nci.bitmap = CSDL_Ext::rotate01((*anims[i])->ourImages[o].bitmap);
nci.groupNumber = 13;
nci.imName = std::string();
(*anims[i])->ourImages.push_back(nci);
//o+=1;
} }
if((*anims[i])->ourImages[o].groupNumber==2)
{
Cimage nci;
nci.bitmap = CSDL_Ext::rotate01((*anims[i])->ourImages[o].bitmap);
nci.groupNumber = 14;
nci.imName = std::string();
(*anims[i])->ourImages.push_back(nci);
//o+=1;
}
if((*anims[i])->ourImages[o].groupNumber==3)
{
Cimage nci;
nci.bitmap = CSDL_Ext::rotate01((*anims[i])->ourImages[o].bitmap);
nci.groupNumber = 15;
nci.imName = std::string();
(*anims[i])->ourImages.push_back(nci);
//o+=1;
}
}
for(int ff=0; ff<(*anims[i])->ourImages.size(); ++ff) for(int ff=0; ff<(*anims[i])->ourImages.size(); ++ff)
{ {
CSDL_Ext::alphaTransform((*anims[i])->ourImages[ff].bitmap); CSDL_Ext::alphaTransform((*anims[i])->ourImages[ff].bitmap);
@ -264,46 +223,26 @@ void Graphics::loadHeroFlags(std::pair<std::vector<CDefHandler *> Graphics::*, s
{ {
for(int i=0;i<8;i++) for(int i=0;i<8;i++)
(this->*pr.first).push_back(CDefHandler::giveDef(pr.second[i])); (this->*pr.first).push_back(CDefHandler::giveDef(pr.second[i]));
std::vector<std::pair<int,int> > rotations; //first - group number to be rotated1, second - group number after rotation1
rotations += std::make_pair(6,10), std::make_pair(7,11), std::make_pair(8,12);
for(int q=0; q<8; ++q) for(int q=0; q<8; ++q)
{ {
for(int o=0; o<(this->*pr.first)[q]->ourImages.size(); ++o) for(int o=0; o<(this->*pr.first)[q]->ourImages.size(); ++o)
{ {
if((this->*pr.first)[q]->ourImages[o].groupNumber==6) for(int p=0;p<rotations.size();p++)
{
if((this->*pr.first)[q]->ourImages[o].groupNumber==rotations[p].first)
{ {
for(int e=0; e<8; ++e) for(int e=0; e<8; ++e)
{ {
Cimage nci; Cimage nci;
nci.bitmap = CSDL_Ext::rotate01((this->*pr.first)[q]->ourImages[o+e].bitmap); nci.bitmap = CSDL_Ext::rotate01((this->*pr.first)[q]->ourImages[o+e].bitmap);
nci.groupNumber = 10; nci.groupNumber = rotations[p].second;
nci.imName = std::string(); nci.imName = std::string();
(this->*pr.first)[q]->ourImages.push_back(nci); (this->*pr.first)[q]->ourImages.push_back(nci);
} }
o+=8; o+=8;
} }
if((this->*pr.first)[q]->ourImages[o].groupNumber==7)
{
for(int e=0; e<8; ++e)
{
Cimage nci;
nci.bitmap = CSDL_Ext::rotate01((this->*pr.first)[q]->ourImages[o+e].bitmap);
nci.groupNumber = 11;
nci.imName = std::string();
(this->*pr.first)[q]->ourImages.push_back(nci);
}
o+=8;
}
if((this->*pr.first)[q]->ourImages[o].groupNumber==8)
{
for(int e=0; e<8; ++e)
{
Cimage nci;
nci.bitmap = CSDL_Ext::rotate01((this->*pr.first)[q]->ourImages[o+e].bitmap);
nci.groupNumber = 12;
nci.imName = std::string();
(this->*pr.first)[q]->ourImages.push_back(nci);
}
o+=8;
} }
} }
if (mode) if (mode)

View File

@ -344,10 +344,6 @@
RelativePath="..\hch\CMusicHandler.cpp" RelativePath="..\hch\CMusicHandler.cpp"
> >
</File> </File>
<File
RelativePath="..\hch\CObjectHandler.cpp"
>
</File>
<File <File
RelativePath="..\CPathfinder.cpp" RelativePath="..\CPathfinder.cpp"
> >

View File

@ -3,9 +3,6 @@
#include "../CGameInfo.h" #include "../CGameInfo.h"
#include "CObjectHandler.h" #include "CObjectHandler.h"
#include "CDefObjInfoHandler.h" #include "CDefObjInfoHandler.h"
#include "../CGameState.h"
#include "SDL.h"
#include "CCreatureHandler.h"
#include <set> #include <set>
#include <iomanip> #include <iomanip>
#include <sstream> #include <sstream>

View File

@ -4,9 +4,14 @@
#include "CLodHandler.h" #include "CLodHandler.h"
#include <boost/assign/std/vector.hpp> #include <boost/assign/std/vector.hpp>
#include <boost/assign/list_of.hpp> #include <boost/assign/list_of.hpp>
#include "../lib/VCMI_Lib.h"
void loadToIt(std::string &dest, std::string &src, int &iter, int mode); void loadToIt(std::string &dest, std::string &src, int &iter, int mode);
extern CLodHandler *bitmaph; extern CLodHandler *bitmaph;
using namespace boost::assign; using namespace boost::assign;
CArtHandler::CArtHandler()
{
VLC->arth = this;
}
void CArtHandler::loadArtifacts() void CArtHandler::loadArtifacts()
{ {
std::vector<bool CArtifact::*> slots; std::vector<bool CArtifact::*> slots;

View File

@ -28,6 +28,7 @@ public:
std::vector<CArtifact> artifacts; std::vector<CArtifact> artifacts;
void loadArtifacts(); void loadArtifacts();
bool loadArtEvents(); bool loadArtEvents();
CArtHandler();
}; };
#endif // CARTHANDLER_H #endif // CARTHANDLER_H

View File

@ -7,7 +7,12 @@
#include <boost/algorithm/string.hpp> #include <boost/algorithm/string.hpp>
#include <boost/algorithm/string/find.hpp> #include <boost/algorithm/string/find.hpp>
#include <boost/algorithm/string/replace.hpp> #include <boost/algorithm/string/replace.hpp>
#include "../lib/VCMI_Lib.h"
extern CLodHandler * bitmaph; extern CLodHandler * bitmaph;
CCreatureHandler::CCreatureHandler()
{
VLC->creh = this;
}
int CCreature::getQuantityID(int quantity) int CCreature::getQuantityID(int quantity)
{ {
if (quantity<5) if (quantity<5)

View File

@ -61,6 +61,6 @@ public:
void loadCreatures(); void loadCreatures();
void loadAnimationInfo(); void loadAnimationInfo();
void loadUnitAnimInfo(CCreature & unit, std::string & src, int & i); void loadUnitAnimInfo(CCreature & unit, std::string & src, int & i);
CCreatureHandler(){}; CCreatureHandler();
}; };
#endif //CCREATUREHANDLER_H #endif //CCREATUREHANDLER_H

View File

@ -16,6 +16,7 @@ public:
int id, subid; //of object described by this defInfo int id, subid; //of object described by this defInfo
int terrainAllowed, //on which terrain it is possible to place object int terrainAllowed, //on which terrain it is possible to place object
terrainMenu; //in which menus in map editor object will be showed terrainMenu; //in which menus in map editor object will be showed
int width, height; //tiles
int type; //(0- ground, 1- towns, 2-creatures, 3- heroes, 4-artifacts, 5- resources) int type; //(0- ground, 1- towns, 2-creatures, 3- heroes, 4-artifacts, 5- resources)
CDefHandler * handler; CDefHandler * handler;
int printPriority; int printPriority;

View File

@ -8,7 +8,7 @@ class CHeroClass;
class CDefHandler; class CDefHandler;
class CGameInfo; class CGameInfo;
class CGHeroInstance; class CGHeroInstance;
class CHero class DLL_EXPORT CHero
{ {
public: public:
std::string name; std::string name;
@ -23,7 +23,7 @@ public:
//bool operator<(CHero& drugi){if (ID < drugi.ID) return true; else return false;} //bool operator<(CHero& drugi){if (ID < drugi.ID) return true; else return false;}
}; };
class CHeroClass class DLL_EXPORT CHeroClass
{ {
public: public:
std::string name; std::string name;

View File

@ -12,48 +12,48 @@ void CMusicHandler::initMusics()
} }
atexit(Mix_CloseAudio); atexit(Mix_CloseAudio);
AITheme0 = Mix_LoadMUS("MP3\\AITheme0.mp3"); //AITheme0 = Mix_LoadMUS("MP3\\AITheme0.mp3");
AITheme1 = Mix_LoadMUS("MP3\\AITHEME1.mp3"); //AITheme1 = Mix_LoadMUS("MP3\\AITHEME1.mp3");
AITheme2 = Mix_LoadMUS("MP3\\AITHEME2.mp3"); //AITheme2 = Mix_LoadMUS("MP3\\AITHEME2.mp3");
buildTown = Mix_LoadWAV("MP3\\BUILDTWN.wav"); //buildTown = Mix_LoadWAV("MP3\\BUILDTWN.wav");
combat1 = Mix_LoadMUS("MP3\\COMBAT01.mp3"); //combat1 = Mix_LoadMUS("MP3\\COMBAT01.mp3");
combat2 = Mix_LoadMUS("MP3\\COMBAT02.mp3"); //combat2 = Mix_LoadMUS("MP3\\COMBAT02.mp3");
combat3 = Mix_LoadMUS("MP3\\COMBAT03.mp3"); //combat3 = Mix_LoadMUS("MP3\\COMBAT03.mp3");
combat4 = Mix_LoadMUS("MP3\\COMBAT04.mp3"); //combat4 = Mix_LoadMUS("MP3\\COMBAT04.mp3");
castleTown = Mix_LoadMUS("MP3\\CstleTown.mp3"); //castleTown = Mix_LoadMUS("MP3\\CstleTown.mp3");
defendCastle = Mix_LoadMUS("MP3\\Defend Castle.mp3"); //defendCastle = Mix_LoadMUS("MP3\\Defend Castle.mp3");
dirt = Mix_LoadMUS("MP3\\DIRT.mp3"); //dirt = Mix_LoadMUS("MP3\\DIRT.mp3");
dungeon = Mix_LoadMUS("MP3\\DUNGEON.mp3"); //dungeon = Mix_LoadMUS("MP3\\DUNGEON.mp3");
elemTown = Mix_LoadMUS("MP3\\ElemTown.mp3"); //elemTown = Mix_LoadMUS("MP3\\ElemTown.mp3");
evilTheme = Mix_LoadMUS("MP3\\EvilTheme.mp3"); //evilTheme = Mix_LoadMUS("MP3\\EvilTheme.mp3");
fortressTown = Mix_LoadMUS("MP3\\FortressTown.mp3"); //fortressTown = Mix_LoadMUS("MP3\\FortressTown.mp3");
goodTheme = Mix_LoadMUS("MP3\\GoodTheme.mp3"); //goodTheme = Mix_LoadMUS("MP3\\GoodTheme.mp3");
grass = Mix_LoadMUS("MP3\\GRASS.mp3"); //grass = Mix_LoadMUS("MP3\\GRASS.mp3");
infernoTown = Mix_LoadMUS("MP3\\InfernoTown.mp3"); //infernoTown = Mix_LoadMUS("MP3\\InfernoTown.mp3");
lava = Mix_LoadMUS("MP3\\LAVA.mp3"); //lava = Mix_LoadMUS("MP3\\LAVA.mp3");
loopLepr = Mix_LoadMUS("MP3\\LoopLepr.mp3"); //loopLepr = Mix_LoadMUS("MP3\\LoopLepr.mp3");
loseCampain = Mix_LoadMUS("MP3\\Lose Campain.mp3"); //loseCampain = Mix_LoadMUS("MP3\\Lose Campain.mp3");
loseCastle = Mix_LoadMUS("MP3\\LoseCastle.mp3"); //loseCastle = Mix_LoadMUS("MP3\\LoseCastle.mp3");
loseCombat = Mix_LoadMUS("MP3\\LoseCombat.mp3"); //loseCombat = Mix_LoadMUS("MP3\\LoseCombat.mp3");
mainMenu = Mix_LoadMUS("MP3\\MAINMENU.mp3"); //mainMenu = Mix_LoadMUS("MP3\\MAINMENU.mp3");
mainMenuWoG = Mix_LoadMUS("MP3\\MainMenuWoG.mp3"); //mainMenuWoG = Mix_LoadMUS("MP3\\MainMenuWoG.mp3");
necroTown = Mix_LoadMUS("MP3\\necroTown.mp3"); //necroTown = Mix_LoadMUS("MP3\\necroTown.mp3");
neutralTheme = Mix_LoadMUS("MP3\\NeutralTheme.mp3"); //neutralTheme = Mix_LoadMUS("MP3\\NeutralTheme.mp3");
rampart = Mix_LoadMUS("MP3\\RAMPART.mp3"); //rampart = Mix_LoadMUS("MP3\\RAMPART.mp3");
retreatBattle = Mix_LoadMUS("MP3\\Retreat Battle.mp3"); //retreatBattle = Mix_LoadMUS("MP3\\Retreat Battle.mp3");
rough = Mix_LoadMUS("MP3\\ROUGH.mp3"); //rough = Mix_LoadMUS("MP3\\ROUGH.mp3");
sand = Mix_LoadMUS("MP3\\SAND.mp3"); //sand = Mix_LoadMUS("MP3\\SAND.mp3");
secretTheme = Mix_LoadMUS("MP3\\SecretTheme.mp3"); //secretTheme = Mix_LoadMUS("MP3\\SecretTheme.mp3");
snow = Mix_LoadMUS("MP3\\SNOW.mp3"); //snow = Mix_LoadMUS("MP3\\SNOW.mp3");
stronghold = Mix_LoadMUS("MP3\\StrongHold.mp3"); //stronghold = Mix_LoadMUS("MP3\\StrongHold.mp3");
surrenderBattle = Mix_LoadMUS("MP3\\Surrender Battle.mp3"); //surrenderBattle = Mix_LoadMUS("MP3\\Surrender Battle.mp3");
swamp = Mix_LoadMUS("MP3\\SWAMP.mp3"); //swamp = Mix_LoadMUS("MP3\\SWAMP.mp3");
towerTown = Mix_LoadMUS("MP3\\TowerTown.mp3"); //towerTown = Mix_LoadMUS("MP3\\TowerTown.mp3");
ultimateLose = Mix_LoadMUS("MP3\\UltimateLose.mp3"); //ultimateLose = Mix_LoadMUS("MP3\\UltimateLose.mp3");
underground = Mix_LoadMUS("MP3\\Underground.mp3"); //underground = Mix_LoadMUS("MP3\\Underground.mp3");
water = Mix_LoadMUS("MP3\\WATER.mp3"); //water = Mix_LoadMUS("MP3\\WATER.mp3");
winBattle = Mix_LoadMUS("MP3\\Win Battle.mp3"); //winBattle = Mix_LoadMUS("MP3\\Win Battle.mp3");
winScenario = Mix_LoadMUS("MP3\\Win Scenario.mp3"); //winScenario = Mix_LoadMUS("MP3\\Win Scenario.mp3");
click = Mix_LoadWAV("MP3\\snd1.wav"); click = Mix_LoadWAV("MP3\\snd1.wav");
click->volume = 30; click->volume = 30;

View File

@ -1,19 +1,20 @@
#define VCMI_DLL
#include "../stdafx.h" #include "../stdafx.h"
#include "CObjectHandler.h" #include "CObjectHandler.h"
#include "CDefObjInfoHandler.h" #include "CDefObjInfoHandler.h"
#include "CDefHandler.h"
#include "../CGameInfo.h"
#include "CLodHandler.h" #include "CLodHandler.h"
#include "CDefObjInfoHandler.h" #include "CDefObjInfoHandler.h"
#include "CHeroHandler.h" #include "CHeroHandler.h"
#include <boost/algorithm/string/replace.hpp> #include <boost/algorithm/string/replace.hpp>
#include "CTownHandler.h" #include "CTownHandler.h"
#include "CArtHandler.h" #include "CArtHandler.h"
#include "../lib/VCMI_Lib.h"
DLL_EXPORT void loadToIt(std::string &dest, std::string &src, int &iter, int mode); DLL_EXPORT void loadToIt(std::string &dest, std::string &src, int &iter, int mode);
extern CLodHandler * bitmaph;
void CObjectHandler::loadObjects() void CObjectHandler::loadObjects()
{ {
int ID=0; int ID=0;
std::string buf = CGI->bitmaph->getTextFile("OBJNAMES.TXT"); std::string buf = bitmaph->getTextFile("OBJNAMES.TXT");
int it=0; int it=0;
while (it<buf.length()-1) while (it<buf.length()-1)
{ {
@ -24,7 +25,7 @@ void CObjectHandler::loadObjects()
objects.push_back(nobj); objects.push_back(nobj);
} }
buf = CGI->bitmaph->getTextFile("ADVEVENT.TXT"); buf = bitmaph->getTextFile("ADVEVENT.TXT");
it=0; it=0;
std::string temp; std::string temp;
while (it<buf.length()-1) while (it<buf.length()-1)
@ -36,7 +37,7 @@ void CObjectHandler::loadObjects()
advobtxt.push_back(temp); advobtxt.push_back(temp);
} }
buf = CGI->bitmaph->getTextFile("XTRAINFO.TXT"); buf = bitmaph->getTextFile("XTRAINFO.TXT");
it=0; it=0;
while (it<buf.length()-1) while (it<buf.length()-1)
{ {
@ -44,7 +45,7 @@ void CObjectHandler::loadObjects()
xtrainfo.push_back(temp); xtrainfo.push_back(temp);
} }
buf = CGI->bitmaph->getTextFile("MINENAME.TXT"); buf = bitmaph->getTextFile("MINENAME.TXT");
it=0; it=0;
while (it<buf.length()-1) while (it<buf.length()-1)
{ {
@ -52,7 +53,7 @@ void CObjectHandler::loadObjects()
mines.push_back(std::pair<std::string,std::string>(temp,"")); mines.push_back(std::pair<std::string,std::string>(temp,""));
} }
buf = CGI->bitmaph->getTextFile("MINEEVNT.TXT"); buf = bitmaph->getTextFile("MINEEVNT.TXT");
it=0; it=0;
int i=0; int i=0;
while (it<buf.length()-1) while (it<buf.length()-1)
@ -62,7 +63,7 @@ void CObjectHandler::loadObjects()
mines[i++].second = temp; mines[i++].second = temp;
} }
buf = CGI->bitmaph->getTextFile("RESTYPES.TXT"); buf = bitmaph->getTextFile("RESTYPES.TXT");
it=0; it=0;
while (it<buf.length()-1) while (it<buf.length()-1)
{ {
@ -82,7 +83,7 @@ void CObjectHandler::loadObjects()
} }
ifs.close(); ifs.close();
ifs.clear(); ifs.clear();
buf = CGI->bitmaph->getTextFile("ZCRGN1.TXT"); buf = bitmaph->getTextFile("ZCRGN1.TXT");
it=0; it=0;
while (it<buf.length()-1) while (it<buf.length()-1)
{ {
@ -113,11 +114,11 @@ void CGObjectInstance::setOwner(int ow)
} }
int CGObjectInstance::getWidth() const//returns width of object graphic in tiles int CGObjectInstance::getWidth() const//returns width of object graphic in tiles
{ {
return defInfo->handler->ourImages[0].bitmap->w/32; return defInfo->width;
} }
int CGObjectInstance::getHeight() const //returns height of object graphic in tiles int CGObjectInstance::getHeight() const //returns height of object graphic in tiles
{ {
return defInfo->handler->ourImages[0].bitmap->h/32; return defInfo->width;
} }
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) 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)
{ {
@ -238,7 +239,7 @@ int CGHeroInstance::getSecSkillLevel(const int & ID) const
const CArtifact * CGHeroInstance::getArt(int pos) const CArtifact * CGHeroInstance::getArt(int pos)
{ {
if(artifWorn.find(pos)!=artifWorn.end()) if(artifWorn.find(pos)!=artifWorn.end())
return &CGI->arth->artifacts[artifWorn[pos]]; return &VLC->arth->artifacts[artifWorn[pos]];
else else
return NULL; return NULL;
} }
@ -279,7 +280,7 @@ int CGTownInstance::getHordeLevel(const int & HID) const//HID - 0 or 1; returns
} }
int CGTownInstance::creatureGrowth(const int & level) const int CGTownInstance::creatureGrowth(const int & level) const
{ {
int ret = CGI->creh->creatures[town->basicCreatures[level]].growth; int ret = VLC->creh->creatures[town->basicCreatures[level]].growth;
switch(fortLevel()) switch(fortLevel())
{ {
case 3: case 3:
@ -288,13 +289,13 @@ int CGTownInstance::creatureGrowth(const int & level) const
ret*=(1.5); break; ret*=(1.5); break;
} }
if(builtBuildings.find(26)!=builtBuildings.end()) //grail if(builtBuildings.find(26)!=builtBuildings.end()) //grail
ret+=CGI->creh->creatures[town->basicCreatures[level]].growth; ret+=VLC->creh->creatures[town->basicCreatures[level]].growth;
if(getHordeLevel(0)==level) if(getHordeLevel(0)==level)
if((builtBuildings.find(18)!=builtBuildings.end()) || (builtBuildings.find(19)!=builtBuildings.end())) if((builtBuildings.find(18)!=builtBuildings.end()) || (builtBuildings.find(19)!=builtBuildings.end()))
ret+=CGI->creh->creatures[town->basicCreatures[level]].hordeGrowth; ret+=VLC->creh->creatures[town->basicCreatures[level]].hordeGrowth;
if(getHordeLevel(1)==level) if(getHordeLevel(1)==level)
if((builtBuildings.find(24)!=builtBuildings.end()) || (builtBuildings.find(25)!=builtBuildings.end())) if((builtBuildings.find(24)!=builtBuildings.end()) || (builtBuildings.find(25)!=builtBuildings.end()))
ret+=CGI->creh->creatures[town->basicCreatures[level]].hordeGrowth; ret+=VLC->creh->creatures[town->basicCreatures[level]].hordeGrowth;
return ret; return ret;
} }
int CGTownInstance::dailyIncome() const int CGTownInstance::dailyIncome() const

View File

@ -1,11 +1,12 @@
#ifndef COBJECTHANDLER_H #ifndef COBJECTHANDLER_H
#define COBJECTHANDLER_H #define COBJECTHANDLER_H
#include "../global.h"
#include <string> #include <string>
#include <vector> #include <vector>
#include <set> #include <set>
#include <map> #include <map>
#include "CCreatureHandler.h" #include "CCreatureHandler.h"
//#include "CHeroHandler.h"
using boost::logic::tribool; using boost::logic::tribool;
class CCPPObjectScript; class CCPPObjectScript;
class CGObjectInstance; class CGObjectInstance;
@ -18,11 +19,11 @@ class CBuilding;
class CSpell; class CSpell;
class CGTownInstance; class CGTownInstance;
class CArtifact; class CArtifact;
class CSpecObjInfo //class with object - specific info (eg. different information for creatures and heroes); use inheritance to make object - specific classes class DLL_EXPORT CSpecObjInfo //class with object - specific info (eg. different information for creatures and heroes); use inheritance to make object - specific classes
{ {
}; };
class CEventObjInfo : public CSpecObjInfo class DLL_EXPORT CEventObjInfo : public CSpecObjInfo
{ {
public: public:
bool areGuarders; //true if there are bool areGuarders; //true if there are
@ -48,7 +49,7 @@ public:
bool humanActivate; //true if human player can activate this event bool humanActivate; //true if human player can activate this event
}; };
class CCastleEvent class DLL_EXPORT CCastleEvent
{ {
public: public:
std::string name, message; std::string name, message;
@ -68,7 +69,7 @@ public:
} }
}; };
class CCreatureObjInfo : public CSpecObjInfo class DLL_EXPORT CCreatureObjInfo : public CSpecObjInfo
{ {
public: public:
unsigned char bytes[4]; //mysterious bytes identifying creature unsigned char bytes[4]; //mysterious bytes identifying creature
@ -81,13 +82,13 @@ public:
bool notGrowingTeam; //if true, number of units won't grow bool notGrowingTeam; //if true, number of units won't grow
}; };
class CSignObjInfo : public CSpecObjInfo class DLL_EXPORT CSignObjInfo : public CSpecObjInfo
{ {
public: public:
std::string message; //message std::string message; //message
}; };
class CSeerHutObjInfo : public CSpecObjInfo class DLL_EXPORT CSeerHutObjInfo : public CSpecObjInfo
{ {
public: public:
unsigned char missionType; //type of mission: 0 - no mission; 1 - reach level; 2 - reach main statistics values; 3 - win with a certain hero; 4 - win with a certain creature; 5 - collect some atifacts; 6 - have certain troops in army; 7 - collect resources; 8 - be a certain hero; 9 - be a certain player unsigned char missionType; //type of mission: 0 - no mission; 1 - reach level; 2 - reach main statistics values; 3 - win with a certain hero; 4 - win with a certain creature; 5 - collect some atifacts; 6 - have certain troops in army; 7 - collect resources; 8 - be a certain hero; 9 - be a certain player
@ -133,13 +134,13 @@ public:
int r10amount; int r10amount;
}; };
class CWitchHutObjInfo : public CSpecObjInfo class DLL_EXPORT CWitchHutObjInfo : public CSpecObjInfo
{ {
public: public:
std::vector<int> allowedAbilities; std::vector<int> allowedAbilities;
}; };
class CScholarObjInfo : public CSpecObjInfo class DLL_EXPORT CScholarObjInfo : public CSpecObjInfo
{ {
public: public:
unsigned char bonusType; //255 - random, 0 - primary skill, 1 - secondary skill, 2 - spell unsigned char bonusType; //255 - random, 0 - primary skill, 1 - secondary skill, 2 - spell
@ -149,7 +150,7 @@ public:
int r2; //Spell ID int r2; //Spell ID
}; };
class CGarrisonObjInfo : public CSpecObjInfo class DLL_EXPORT CGarrisonObjInfo : public CSpecObjInfo
{ {
public: public:
unsigned char player; //255 - nobody; 0 - 7 - players unsigned char player; //255 - nobody; 0 - 7 - players
@ -157,7 +158,7 @@ public:
bool movableUnits; //if true, units can be moved bool movableUnits; //if true, units can be moved
}; };
class CArtifactObjInfo : public CSpecObjInfo class DLL_EXPORT CArtifactObjInfo : public CSpecObjInfo
{ {
public: public:
bool areGuards; bool areGuards;
@ -165,7 +166,7 @@ public:
CCreatureSet guards; CCreatureSet guards;
}; };
class CResourceObjInfo : public CSpecObjInfo class DLL_EXPORT CResourceObjInfo : public CSpecObjInfo
{ {
public: public:
bool randomAmount; bool randomAmount;
@ -175,19 +176,19 @@ public:
std::string message; std::string message;
}; };
class CPlayerOnlyObjInfo : public CSpecObjInfo class DLL_EXPORT CPlayerOnlyObjInfo : public CSpecObjInfo
{ {
public: public:
unsigned char player; //FF - nobody, 0 - 7 unsigned char player; //FF - nobody, 0 - 7
}; };
class CShrineObjInfo : public CSpecObjInfo class DLL_EXPORT CShrineObjInfo : public CSpecObjInfo
{ {
public: public:
unsigned char spell; //number of spell or 255 unsigned char spell; //number of spell or 255
}; };
class CSpellScrollObjinfo : public CSpecObjInfo class DLL_EXPORT CSpellScrollObjinfo : public CSpecObjInfo
{ {
public: public:
std::string message; std::string message;
@ -196,7 +197,7 @@ public:
CCreatureSet guarders; CCreatureSet guarders;
}; };
class CPandorasBoxObjInfo : public CSpecObjInfo class DLL_EXPORT CPandorasBoxObjInfo : public CSpecObjInfo
{ {
public: public:
std::string message; std::string message;
@ -217,13 +218,13 @@ public:
CCreatureSet creatures; CCreatureSet creatures;
}; };
class CGrailObjInfo : public CSpecObjInfo class DLL_EXPORT CGrailObjInfo : public CSpecObjInfo
{ {
public: public:
int radius; //place grail at the distance lesser or equal radius from this place int radius; //place grail at the distance lesser or equal radius from this place
}; };
class CCreGenObjInfo : public CSpecObjInfo class DLL_EXPORT CCreGenObjInfo : public CSpecObjInfo
{ {
public: public:
unsigned char player; //owner unsigned char player; //owner
@ -232,7 +233,7 @@ public:
unsigned char castles[2]; //allowed castles unsigned char castles[2]; //allowed castles
}; };
class CCreGen2ObjInfo : public CSpecObjInfo class DLL_EXPORT CCreGen2ObjInfo : public CSpecObjInfo
{ {
public: public:
unsigned char player; //owner unsigned char player; //owner
@ -242,14 +243,14 @@ public:
unsigned char minLevel, maxLevel; //minimal and maximal level of creature in dwelling: <0, 6> unsigned char minLevel, maxLevel; //minimal and maximal level of creature in dwelling: <0, 6>
}; };
class CCreGen3ObjInfo : public CSpecObjInfo class DLL_EXPORT CCreGen3ObjInfo : public CSpecObjInfo
{ {
public: public:
unsigned char player; //owner unsigned char player; //owner
unsigned char minLevel, maxLevel; //minimal and maximal level of creature in dwelling: <0, 6> unsigned char minLevel, maxLevel; //minimal and maximal level of creature in dwelling: <0, 6>
}; };
class CBorderGuardObjInfo : public CSpecObjInfo //copied form seer huts, seems to be similar class DLL_EXPORT CBorderGuardObjInfo : public CSpecObjInfo //copied form seer huts, seems to be similar
{ {
public: public:
char missionType; //type of mission: 0 - no mission; 1 - reach level; 2 - reach main statistics values; 3 - win with a certain hero; 4 - win with a certain creature; 5 - collect some atifacts; 6 - have certain troops in army; 7 - collect resources; 8 - be a certain hero; 9 - be a certain player char missionType; //type of mission: 0 - no mission; 1 - reach level; 2 - reach main statistics values; 3 - win with a certain hero; 4 - win with a certain creature; 5 - collect some atifacts; 6 - have certain troops in army; 7 - collect resources; 8 - be a certain hero; 9 - be a certain player
@ -278,15 +279,15 @@ public:
std::string firstVisitText, nextVisitText, completedText; std::string firstVisitText, nextVisitText, completedText;
}; };
class CObject //typical object that can be encountered on a map class DLL_EXPORT CObject //typical object that can be encountered on a map
{ {
public: public:
std::string name; //object's name std::string name; //object's name
}; };
class CGDefInfo; class DLL_EXPORT CGDefInfo;
class CGObjectInstance class DLL_EXPORT CGObjectInstance
{ {
public: public:
int3 pos; //h3m pos int3 pos; //h3m pos
@ -313,13 +314,13 @@ public:
CGObjectInstance& operator=(const CGObjectInstance & right); CGObjectInstance& operator=(const CGObjectInstance & right);
}; };
class CArmedInstance: public CGObjectInstance class DLL_EXPORT CArmedInstance: public CGObjectInstance
{ {
public: public:
CCreatureSet army; //army CCreatureSet army; //army
}; };
class CGHeroInstance : public CArmedInstance class DLL_EXPORT CGHeroInstance : public CArmedInstance
{ {
public: public:
int moveDir; //format: 123 int moveDir; //format: 123
@ -340,7 +341,7 @@ public:
int identifier; //from the map file int identifier; //from the map file
bool sex; bool sex;
struct Patrol struct DLL_EXPORT Patrol
{ {
Patrol(){patrolling=false;patrolRadious=-1;}; Patrol(){patrolling=false;patrolRadious=-1;};
bool patrolling; bool patrolling;
@ -374,7 +375,7 @@ public:
virtual ~CGHeroInstance(); virtual ~CGHeroInstance();
}; };
class CGTownInstance : public CArmedInstance class DLL_EXPORT CGTownInstance : public CArmedInstance
{ {
public: public:
CTown * town; CTown * town;
@ -408,7 +409,7 @@ public:
virtual ~CGTownInstance(); virtual ~CGTownInstance();
}; };
class CObjectHandler class DLL_EXPORT CObjectHandler
{ {
public: public:
std::vector<CObject> objects; //vector of objects; i-th object in vector has subnumber i std::vector<CObject> objects; //vector of objects; i-th object in vector has subnumber i

View File

@ -6,7 +6,7 @@ class CBuilding;
class CSpell; class CSpell;
class CHero; class CHero;
class CGTownInstance; class CGTownInstance;
class CTown class DLL_EXPORT CTown
{ {
public: public:
std::string name; //name of type std::string name; //name of type

View File

@ -2,7 +2,7 @@
//class CMapHandler; //class CMapHandler;
//class CArtHandler; class CArtHandler;
//class CHeroHandler; //class CHeroHandler;
class CCreatureHandler; class CCreatureHandler;
//class CAbilityHandler; //class CAbilityHandler;
@ -30,7 +30,7 @@ class LibClasses
{ {
public: public:
//CGameState * state; //CGameState * state;
//CArtHandler * arth; CArtHandler * arth;
//CHeroHandler * heroh; //CHeroHandler * heroh;
CCreatureHandler * creh; CCreatureHandler * creh;
//CAbilityHandler * abilh; //CAbilityHandler * abilh;

View File

@ -349,6 +349,10 @@
RelativePath="..\hch\CLodHandler.cpp" RelativePath="..\hch\CLodHandler.cpp"
> >
</File> </File>
<File
RelativePath="..\hch\CObjectHandler.cpp"
>
</File>
<File <File
RelativePath="..\hch\CTownHandler.cpp" RelativePath="..\hch\CTownHandler.cpp"
> >
@ -387,6 +391,10 @@
RelativePath="..\hch\CLodHandler.h" RelativePath="..\hch\CLodHandler.h"
> >
</File> </File>
<File
RelativePath="..\hch\CObjectHandler.h"
>
</File>
<File <File
RelativePath="..\hch\CTownHandler.h" RelativePath="..\hch\CTownHandler.h"
> >

View File

@ -278,6 +278,8 @@ void CMapHandler::randomizeObject(CGObjectInstance *cur)
if(!t->defInfo->handler) if(!t->defInfo->handler)
{ {
t->defInfo->handler = CDefHandler::giveDef(t->defInfo->name); t->defInfo->handler = CDefHandler::giveDef(t->defInfo->name);
t->defInfo->width = t->defInfo->handler->ourImages[0].bitmap->w/32;
t->defInfo->height = t->defInfo->handler->ourImages[0].bitmap->h/32;
alphaTransformDef(t->defInfo); alphaTransformDef(t->defInfo);
} }
} }
@ -310,6 +312,8 @@ void CMapHandler::randomizeObject(CGObjectInstance *cur)
if(!t->defInfo->handler) if(!t->defInfo->handler)
{ {
t->defInfo->handler = CDefHandler::giveDef(t->defInfo->name); t->defInfo->handler = CDefHandler::giveDef(t->defInfo->name);
t->defInfo->width = t->defInfo->handler->ourImages[0].bitmap->w/32;
t->defInfo->height = t->defInfo->handler->ourImages[0].bitmap->h/32;
alphaTransformDef(t->defInfo); alphaTransformDef(t->defInfo);
} }
//CGI->townh->townInstances.push_back(t); //CGI->townh->townInstances.push_back(t);
@ -323,6 +327,8 @@ void CMapHandler::randomizeObject(CGObjectInstance *cur)
if(!cur->defInfo->handler) //if we have to load def if(!cur->defInfo->handler) //if we have to load def
{ {
cur->defInfo->handler = CDefHandler::giveDef(cur->defInfo->name); cur->defInfo->handler = CDefHandler::giveDef(cur->defInfo->name);
cur->defInfo->width = cur->defInfo->handler->ourImages[0].bitmap->w/32;
cur->defInfo->height = cur->defInfo->handler->ourImages[0].bitmap->h/32;
alphaTransformDef(cur->defInfo); alphaTransformDef(cur->defInfo);
} }
@ -810,9 +816,15 @@ void CMapHandler::init()
for (int ir=0;ir<map->defy.size();ir++) for (int ir=0;ir<map->defy.size();ir++)
{ {
map->defy[ir]->handler=CDefHandler::giveDef(map->defy[ir]->name); map->defy[ir]->handler=CDefHandler::giveDef(map->defy[ir]->name);
map->defy[ir]->width = map->defy[ir]->handler->ourImages[0].bitmap->w/32;
map->defy[ir]->height = map->defy[ir]->handler->ourImages[0].bitmap->h/32;
CGDefInfo* pom = CGI->dobjinfo->gobjs[map->defy[ir]->id][map->defy[ir]->subid]; CGDefInfo* pom = CGI->dobjinfo->gobjs[map->defy[ir]->id][map->defy[ir]->subid];
if(pom) if(pom)
{
pom->handler=map->defy[ir]->handler; pom->handler=map->defy[ir]->handler;
pom->width = pom->handler->ourImages[0].bitmap->w/32;
pom->height = pom->handler->ourImages[0].bitmap->h/32;
}
else else
std::cout << "Lacking def info for " << map->defy[ir]->id << " " << map->defy[ir]->subid <<" " << map->defy[ir]->name << std::endl; std::cout << "Lacking def info for " << map->defy[ir]->id << " " << map->defy[ir]->subid <<" " << map->defy[ir]->name << std::endl;
} }
@ -838,6 +850,11 @@ void CMapHandler::init()
ifs >> n->name; ifs >> n->name;
if (!(n->handler = CDefHandler::giveDef(n->name))) if (!(n->handler = CDefHandler::giveDef(n->name)))
std::cout << "Cannot open "<<n->name<<std::endl; std::cout << "Cannot open "<<n->name<<std::endl;
else
{
n->width = n->handler->ourImages[0].bitmap->w/32;
n->height = n->handler->ourImages[0].bitmap->h/32;
}
if(i<ccc) if(i<ccc)
villages[i]=n; villages[i]=n;
else else
@ -1543,7 +1560,11 @@ CGObjectInstance * CMapHandler::createObject(int id, int subid, int3 pos, int ow
return nobj; return nobj;
nobj->defInfo = CGI->dobjinfo->gobjs[id][subid]; nobj->defInfo = CGI->dobjinfo->gobjs[id][subid];
if(!nobj->defInfo->handler) if(!nobj->defInfo->handler)
{
nobj->defInfo->handler = CDefHandler::giveDef(nobj->defInfo->name); nobj->defInfo->handler = CDefHandler::giveDef(nobj->defInfo->name);
nobj->defInfo->width = nobj->defInfo->handler->ourImages[0].bitmap->w/32;
nobj->defInfo->height = nobj->defInfo->handler->ourImages[0].bitmap->h/32;
}
return nobj; return nobj;
} }