mirror of
https://github.com/vcmi/vcmi.git
synced 2024-11-24 08:32:34 +02:00
* small improvements
* probably working getting visitable objects at certain position (to be tested)
This commit is contained in:
parent
b07b1ec7dc
commit
c18e4573f1
@ -107,9 +107,27 @@ bool CCallback::moveHero(int ID, CPath * path, int idtype, int pathType)
|
||||
{ //performing move
|
||||
hero->movement-=CGI->mh->getCost(stpos, endpos, hero);
|
||||
|
||||
for(int xd=0; xd<CGI->ac->map.width; ++xd) //revealing part of map around heroes
|
||||
int heroSight = hero->getSightDistance();
|
||||
|
||||
int xbeg = stpos.x - heroSight - 2;
|
||||
if(xbeg < 0)
|
||||
xbeg = 0;
|
||||
|
||||
int xend = stpos.x + heroSight + 2;
|
||||
if(xend >= CGI->ac->map.width)
|
||||
xend = CGI->ac->map.width - 1;
|
||||
|
||||
int ybeg = stpos.y - heroSight - 2;
|
||||
if(ybeg < 0)
|
||||
ybeg = 0;
|
||||
|
||||
int yend = stpos.y + heroSight + 2;
|
||||
if(yend >= CGI->ac->map.height)
|
||||
yend = CGI->ac->map.height - 1;
|
||||
|
||||
for(int xd=xbeg; xd<xend; ++xd) //revealing part of map around heroes
|
||||
{
|
||||
for(int yd=0; yd<CGI->ac->map.height; ++yd)
|
||||
for(int yd=ybeg; yd<yend; ++yd)
|
||||
{
|
||||
int deltaX = (hero->getPosition(false).x-xd)*(hero->getPosition(false).x-xd);
|
||||
int deltaY = (hero->getPosition(false).y-yd)*(hero->getPosition(false).y-yd);
|
||||
|
@ -4,6 +4,8 @@
|
||||
#include "CGeneralTextHandler.h"
|
||||
#include "CLodHandler.h"
|
||||
#include "CAmbarCendamo.h"
|
||||
#include "mapHandler.h"
|
||||
#include "CDefObjInfoHandler.h"
|
||||
|
||||
void CObjectHandler::loadObjects()
|
||||
{
|
||||
@ -42,3 +44,22 @@ bool CObjectInstance::operator <(const CObjectInstance &cmp) const
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
int CObjectInstance::getWidth() const
|
||||
{
|
||||
return CGI->mh->reader->map.defy[defNumber].handler->ourImages[0].bitmap->w/32;
|
||||
}
|
||||
|
||||
int CObjectInstance::getHeight() const
|
||||
{
|
||||
return CGI->mh->reader->map.defy[defNumber].handler->ourImages[0].bitmap->h/32;
|
||||
}
|
||||
|
||||
bool CObjectInstance::visitableAt(int x, int y) const
|
||||
{
|
||||
if(x<0 || y<0 || x>=getWidth() || y>=getHeight())
|
||||
return false;
|
||||
if((CGI->dobjinfo->objs[defObjInfoNumber].visitMap[y] >> (7-x)) & 1)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
@ -301,6 +301,9 @@ public:
|
||||
bool isStanding; //true if is standing, flase if is moving
|
||||
unsigned char flagPrinted; //true if flag has been printed //number of print hits
|
||||
unsigned char owner; //if 254, object cannot have owner; if it has, it equal to owner's ID (or 255, when no owner)
|
||||
int getWidth() const; //returns width of object graphic in tiles
|
||||
int getHeight() const; //returns height of object graphic in tiles
|
||||
bool 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 operator<(const CObjectInstance & cmp) const; //screen printing priority comparing
|
||||
};
|
||||
|
||||
|
@ -1367,3 +1367,15 @@ std::vector < std::string > CMapHandler::getObjDescriptions(int3 pos)
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
std::vector < CObjectInstance * > CMapHandler::getVisitableObjs(int3 pos)
|
||||
{
|
||||
std::vector < CObjectInstance * > ret;
|
||||
for(int h=0; h<ttiles[pos.x][pos.y][pos.z].objects.size(); ++h)
|
||||
{
|
||||
CObjectInstance * curi = ttiles[pos.x][pos.y][pos.z].objects[h].first;
|
||||
if(curi->visitableAt(curi->pos.x - pos.x, curi->pos.y - pos.y))
|
||||
ret.push_back(curi);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
@ -79,6 +79,7 @@ public:
|
||||
|
||||
int getCost(int3 & a, int3 & b, const CHeroInstance * hero);
|
||||
std::vector< std::string > getObjDescriptions(int3 pos); //returns desriptions of objects blocking given position
|
||||
std::vector< CObjectInstance * > getVisitableObjs(int3 pos); //returns vector of visitable objects at certain position
|
||||
void init();
|
||||
SDL_Surface * terrainRect(int x, int y, int dx, int dy, int level=0, unsigned char anim=0, PseudoV< PseudoV< PseudoV<unsigned char> > > & visibilityMap = CGI->mh->visibility);
|
||||
SDL_Surface * terrBitmap(int x, int y);
|
||||
|
Loading…
Reference in New Issue
Block a user