mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-24 22:14:36 +02:00
Minor fixes.
- Removed unnecessary keywords. - Inlined some functions. - Minor coding style fixes. - Minor fixes.
This commit is contained in:
parent
37bd4790f7
commit
3f720901ec
@ -44,18 +44,6 @@ BattleHex& BattleHex::moveInDir(EDir dir, bool hasToBeValid)
|
||||
return *this;
|
||||
}
|
||||
|
||||
void BattleHex::operator+=(EDir dir)
|
||||
{
|
||||
moveInDir(dir);
|
||||
}
|
||||
|
||||
BattleHex BattleHex::operator+(EDir dir) const
|
||||
{
|
||||
BattleHex ret(*this);
|
||||
ret += dir;
|
||||
return ret;
|
||||
}
|
||||
|
||||
std::vector<BattleHex> BattleHex::neighbouringTiles() const
|
||||
{
|
||||
std::vector<BattleHex> ret;
|
||||
@ -93,17 +81,18 @@ char BattleHex::getDistance(BattleHex hex1, BattleHex hex2)
|
||||
{
|
||||
int y1 = hex1.getY(),
|
||||
y2 = hex2.getY();
|
||||
|
||||
int x1 = hex1.getX() + y1 / 2.0,
|
||||
x2 = hex2.getX() + y2 / 2.0;
|
||||
|
||||
// FIXME: Omit floating point arithmetics
|
||||
int x1 = (int)(hex1.getX() + y1 * 0.5),
|
||||
x2 = (int)(hex2.getX() + y2 * 0.5);
|
||||
|
||||
int xDst = x2 - x1,
|
||||
yDst = y2 - y1;
|
||||
|
||||
if ((xDst >= 0 && yDst >= 0) || (xDst < 0 && yDst < 0))
|
||||
return std::max(std::abs(xDst), std::abs(yDst));
|
||||
else
|
||||
return std::abs(xDst) + std::abs(yDst);
|
||||
|
||||
return std::abs(xDst) + std::abs(yDst);
|
||||
}
|
||||
|
||||
void BattleHex::checkAndPush(BattleHex tile, std::vector<BattleHex> & ret)
|
||||
|
@ -17,22 +17,16 @@
|
||||
struct DLL_LINKAGE BattleHex
|
||||
{
|
||||
static const si16 INVALID = -1;
|
||||
enum EDir{RIGHT, BOTTOM_RIGHT, BOTTOM_LEFT, LEFT, TOP_LEFT, TOP_RIGHT};
|
||||
enum EDir { RIGHT, BOTTOM_RIGHT, BOTTOM_LEFT, LEFT, TOP_LEFT, TOP_RIGHT };
|
||||
|
||||
si16 hex;
|
||||
|
||||
BattleHex() : hex(INVALID) {}
|
||||
BattleHex(si16 _hex) : hex(_hex) {}
|
||||
|
||||
operator si16() const
|
||||
{
|
||||
return hex;
|
||||
}
|
||||
operator si16() const { return hex; }
|
||||
|
||||
bool isValid() const
|
||||
{
|
||||
return hex >= 0 && hex < GameConstants::BFIELD_SIZE;
|
||||
}
|
||||
bool isValid() const { return hex >= 0 && hex < GameConstants::BFIELD_SIZE; }
|
||||
|
||||
template<typename inttype>
|
||||
BattleHex(inttype x, inttype y)
|
||||
@ -61,9 +55,7 @@ struct DLL_LINKAGE BattleHex
|
||||
void setXY(si16 x, si16 y, bool hasToBeValid = true)
|
||||
{
|
||||
if(hasToBeValid)
|
||||
{
|
||||
assert(x >= 0 && x < GameConstants::BFIELD_WIDTH && y >= 0 && y < GameConstants::BFIELD_HEIGHT);
|
||||
}
|
||||
assert(x >= 0 && x < GameConstants::BFIELD_WIDTH && y >= 0 && y < GameConstants::BFIELD_HEIGHT);
|
||||
hex = x + y * GameConstants::BFIELD_WIDTH;
|
||||
}
|
||||
|
||||
@ -73,28 +65,23 @@ struct DLL_LINKAGE BattleHex
|
||||
setXY(xy.first, xy.second);
|
||||
}
|
||||
|
||||
si16 getY() const
|
||||
{
|
||||
return hex / GameConstants::BFIELD_WIDTH;
|
||||
}
|
||||
si16 getY() const { return hex / GameConstants::BFIELD_WIDTH; }
|
||||
si16 getX() const { return hex % GameConstants::BFIELD_WIDTH; }
|
||||
|
||||
si16 getX() const
|
||||
{
|
||||
int pos = hex - getY() * GameConstants::BFIELD_WIDTH;
|
||||
return pos;
|
||||
}
|
||||
|
||||
std::pair<si16, si16> getXY() const
|
||||
{
|
||||
return std::make_pair(getX(), getY());
|
||||
}
|
||||
std::pair<si16, si16> getXY() const { return std::make_pair(getX(), getY()); }
|
||||
|
||||
//moving to direction
|
||||
BattleHex& moveInDir(EDir dir, bool hasToBeValid = true);
|
||||
void operator+=(EDir dir); //sugar for above
|
||||
BattleHex& operator+=(EDir dir) { return moveInDir(dir); } //sugar for above
|
||||
|
||||
//generates new BattleHex moved by given dir
|
||||
BattleHex operator+(EDir dir) const;
|
||||
BattleHex movedInDir(EDir dir, bool hasToBeValid = true) const
|
||||
{
|
||||
BattleHex result(*this);
|
||||
result.moveInDir(dir, hasToBeValid);
|
||||
return result;
|
||||
}
|
||||
BattleHex operator+(EDir dir) const { return movedInDir(dir); }
|
||||
|
||||
std::vector<BattleHex> neighbouringTiles() const;
|
||||
|
||||
|
32
lib/CondSh.h
32
lib/CondSh.h
@ -17,50 +17,48 @@ template <typename T> struct CondSh
|
||||
boost::condition_variable cond;
|
||||
boost::mutex mx;
|
||||
|
||||
CondSh()
|
||||
{}
|
||||
|
||||
CondSh(T t)
|
||||
{
|
||||
data = t;
|
||||
}
|
||||
CondSh() {}
|
||||
CondSh(T t) : data(t) {}
|
||||
|
||||
// set data
|
||||
void set(T t)
|
||||
{
|
||||
boost::unique_lock<boost::mutex> lock(mx);
|
||||
data=t;
|
||||
data = t;
|
||||
}
|
||||
|
||||
void setn(T t) //set data and notify
|
||||
// set data and notify
|
||||
void setn(T t)
|
||||
{
|
||||
{
|
||||
boost::unique_lock<boost::mutex> lock(mx);
|
||||
data=t;
|
||||
}
|
||||
set(t);
|
||||
cond.notify_all();
|
||||
};
|
||||
|
||||
T get() //get stored value
|
||||
// get stored value
|
||||
T get()
|
||||
{
|
||||
boost::unique_lock<boost::mutex> lock(mx);
|
||||
return data;
|
||||
}
|
||||
|
||||
void waitWhileTrue() //waits until data is set to false
|
||||
// waits until data is set to false
|
||||
void waitWhileTrue()
|
||||
{
|
||||
boost::unique_lock<boost::mutex> un(mx);
|
||||
while(data)
|
||||
cond.wait(un);
|
||||
}
|
||||
|
||||
void waitWhile(const T &t) //waits while data is set to arg
|
||||
// waits while data is set to arg
|
||||
void waitWhile(const T & t)
|
||||
{
|
||||
boost::unique_lock<boost::mutex> un(mx);
|
||||
while(data == t)
|
||||
cond.wait(un);
|
||||
}
|
||||
|
||||
void waitUntil(const T &t) //waits until data is set to arg
|
||||
// waits until data is set to arg
|
||||
void waitUntil(const T & t)
|
||||
{
|
||||
boost::unique_lock<boost::mutex> un(mx);
|
||||
while(data != t)
|
||||
|
14
lib/int3.h
14
lib/int3.h
@ -94,11 +94,11 @@ public:
|
||||
}
|
||||
|
||||
//returns squared distance on Oxy plane (z coord is not used)
|
||||
si32 dist2dSQ(const int3 & o) const
|
||||
ui32 dist2dSQ(const int3 & o) const
|
||||
{
|
||||
const si32 dx = (x - o.x);
|
||||
const si32 dy = (y - o.y);
|
||||
return dx*dx + dy*dy;
|
||||
return (ui32)(dx*dx) + (ui32)(dy*dy);
|
||||
}
|
||||
//returns distance on Oxy plane (z coord is not used)
|
||||
double dist2d(const int3 & o) const
|
||||
@ -157,15 +157,17 @@ struct ShashInt3
|
||||
static const int3 dirs[] = { int3(0,1,0),int3(0,-1,0),int3(-1,0,0),int3(+1,0,0),
|
||||
int3(1,1,0),int3(-1,1,0),int3(1,-1,0),int3(-1,-1,0) };
|
||||
|
||||
//FIXME: make sure it's <int3> container and not just any
|
||||
template<typename Container>
|
||||
int3 findClosestTile (Container & container, int3 dest)
|
||||
{
|
||||
int3 result(-1,-1,-1);
|
||||
static_assert(std::is_same<Container::value_type, int3>::value,
|
||||
"findClosestTile requires <int3> container.");
|
||||
|
||||
int3 result(-1, -1, -1);
|
||||
ui32 distance = std::numeric_limits<ui32>::max();
|
||||
for (int3 tile : container)
|
||||
for (const int3& tile : container)
|
||||
{
|
||||
ui32 currentDistance = dest.dist2dSQ(tile);
|
||||
const ui32 currentDistance = dest.dist2dSQ(tile);
|
||||
if (currentDistance < distance)
|
||||
{
|
||||
result = tile;
|
||||
|
147
lib/rmg/float3.h
147
lib/rmg/float3.h
@ -10,75 +10,103 @@
|
||||
*
|
||||
*/
|
||||
|
||||
// FIXME: Class doesn't contain three float values. Update name and description.
|
||||
/// Class which consists of three float values. Represents position virtual RMG (0;1) area.
|
||||
class float3
|
||||
{
|
||||
public:
|
||||
float x, y;
|
||||
si32 z;
|
||||
inline float3():x(0),y(0),z(0){}; //c-tor, x/y/z initialized to 0
|
||||
inline float3(const float X, const float Y, const si32 Z):x(X),y(Y),z(Z){}; //c-tor
|
||||
inline float3(const float3 & val) : x(val.x), y(val.y), z(val.z){} //copy c-tor
|
||||
inline float3 & operator=(const float3 & val) {x = val.x; y = val.y; z = val.z; return *this;} //assignemt operator
|
||||
~float3() {} // d-tor - does nothing
|
||||
inline float3 operator+(const float3 & i) const //returns float3 with coordinates increased by corresponding coordinate of given float3
|
||||
{return float3(x+i.x,y+i.y,z+i.z);}
|
||||
inline float3 operator+(const float i) const //returns float3 with coordinates increased by given numer
|
||||
{return float3(x+i,y+i,z+i);}
|
||||
inline float3 operator-(const float3 & i) const //returns float3 with coordinates decreased by corresponding coordinate of given float3
|
||||
{return float3(x-i.x,y-i.y,z-i.z);}
|
||||
inline float3 operator-(const float i) const //returns float3 with coordinates decreased by given numer
|
||||
{return float3(x-i,y-i,z-i);}
|
||||
inline float3 operator*(const float i) const //returns float3 with plane coordinates decreased by given numer
|
||||
{return float3(x*i, y*i, z);}
|
||||
inline float3 operator/(const float i) const //returns float3 with plane coordinates decreased by given numer
|
||||
{return float3(x/i, y/i, z);}
|
||||
inline float3 operator-() const //returns opposite position
|
||||
{return float3(-x,-y,-z);}
|
||||
inline double dist2d(const float3 &other) const //distance (z coord is not used)
|
||||
{return std::sqrt((double)(x-other.x)*(x-other.x) + (y-other.y)*(y-other.y));}
|
||||
inline bool areNeighbours(const float3 &other) const
|
||||
{return dist2d(other) < 2. && z == other.z;}
|
||||
inline void operator+=(const float3 & i)
|
||||
|
||||
float3() : x(0), y(0), z(0) {}
|
||||
float3(const float X, const float Y, const si32 Z): x(X), y(Y), z(Z) {}
|
||||
float3(const float3 & copy) : x(copy.x), y(copy.y), z(copy.z) {}
|
||||
float3 & operator=(const float3 & copy) { x = copy.x; y = copy.y; z = copy.z; return *this; }
|
||||
|
||||
// returns float3 with coordinates increased by corresponding coordinate of given float3
|
||||
float3 operator+(const float3 & i) const { return float3(x + i.x, y + i.y, z + i.z); }
|
||||
// returns float3 with coordinates increased by given numer
|
||||
float3 operator+(const float i) const { return float3(x + i, y + i, z + (si32)i); }
|
||||
// returns float3 with coordinates decreased by corresponding coordinate of given float3
|
||||
float3 operator-(const float3 & i) const { return float3(x - i.x, y - i.y, z - i.z); }
|
||||
// returns float3 with coordinates decreased by given numer
|
||||
float3 operator-(const float i) const { return float3(x - i, y - i, z - (si32)i); }
|
||||
|
||||
// returns float3 with plane coordinates decreased by given numer
|
||||
float3 operator*(const float i) const {return float3(x * i, y * i, z);}
|
||||
// returns float3 with plane coordinates decreased by given numer
|
||||
float3 operator/(const float i) const {return float3(x / i, y / i, z);}
|
||||
|
||||
// returns opposite position
|
||||
float3 operator-() const { return float3(-x, -y, -z); }
|
||||
|
||||
// returns squared distance on Oxy plane (z coord is not used)
|
||||
double dist2dSQ(const float3 & o) const
|
||||
{
|
||||
x+=i.x;
|
||||
y+=i.y;
|
||||
z+=i.z;
|
||||
const double dx = (x - o.x);
|
||||
const double dy = (y - o.y);
|
||||
return dx*dx + dy*dy;
|
||||
}
|
||||
inline void operator+=(const float & i)
|
||||
// returns distance on Oxy plane (z coord is not used)
|
||||
double dist2d(const float3 &other) const { return std::sqrt(dist2dSQ(other)); }
|
||||
|
||||
bool areNeighbours(const float3 &other) const { return (dist2dSQ(other) < 4.0) && z == other.z; }
|
||||
|
||||
float3& operator+=(const float3 & i)
|
||||
{
|
||||
x+=i;
|
||||
y+=i;
|
||||
z+=i;
|
||||
x += i.x;
|
||||
y += i.y;
|
||||
z += i.z;
|
||||
|
||||
return *this;
|
||||
}
|
||||
inline void operator-=(const float3 & i)
|
||||
float3& operator+=(const float & i)
|
||||
{
|
||||
x-=i.x;
|
||||
y-=i.y;
|
||||
z-=i.z;
|
||||
x += i;
|
||||
y += i;
|
||||
z += (si32)i;
|
||||
|
||||
return *this;
|
||||
}
|
||||
inline void operator-=(const float & i)
|
||||
|
||||
float3& operator-=(const float3 & i)
|
||||
{
|
||||
x+=i;
|
||||
y+=i;
|
||||
z+=i;
|
||||
x -= i.x;
|
||||
y -= i.y;
|
||||
z -= i.z;
|
||||
|
||||
return *this;
|
||||
}
|
||||
inline void operator*=(const float & i) //scale on plane
|
||||
float3& operator-=(const float & i)
|
||||
{
|
||||
x*=i;
|
||||
y*=i;
|
||||
}
|
||||
inline void operator/=(const float & i) //scale on plane
|
||||
{
|
||||
x/=i;
|
||||
y/=i;
|
||||
x += i;
|
||||
y += i;
|
||||
z += (si32)i;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline bool operator==(const float3 & i) const
|
||||
{return (x==i.x) && (y==i.y) && (z==i.z);}
|
||||
inline bool operator!=(const float3 & i) const
|
||||
{return !(*this==i);}
|
||||
inline bool operator<(const float3 & i) const
|
||||
// scale on plane
|
||||
float3& operator*=(const float & i)
|
||||
{
|
||||
x *= i;
|
||||
y *= i;
|
||||
|
||||
return *this;
|
||||
}
|
||||
// scale on plane
|
||||
float3& operator/=(const float & i)
|
||||
{
|
||||
x /= i;
|
||||
y /= i;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool operator==(const float3 & i) const { return (x == i.x) && (y == i.y) && (z == i.z); }
|
||||
bool operator!=(const float3 & i) const { return (x != i.x) || (y != i.y) || (z != i.z); }
|
||||
|
||||
bool operator<(const float3 & i) const
|
||||
{
|
||||
if (z<i.z)
|
||||
return true;
|
||||
@ -92,32 +120,35 @@ public:
|
||||
return true;
|
||||
if (x>i.x)
|
||||
return false;
|
||||
|
||||
return false;
|
||||
}
|
||||
inline std::string operator ()() const
|
||||
|
||||
std::string operator ()() const
|
||||
{
|
||||
return "(" + boost::lexical_cast<std::string>(x) +
|
||||
" " + boost::lexical_cast<std::string>(y) +
|
||||
" " + boost::lexical_cast<std::string>(z) + ")";
|
||||
}
|
||||
inline bool valid() const
|
||||
|
||||
bool valid() const
|
||||
{
|
||||
return z >= 0; //minimal condition that needs to be fulfilled for tiles in the map
|
||||
}
|
||||
|
||||
template <typename Handler> void serialize(Handler &h, const float version)
|
||||
{
|
||||
h & x & y & z;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
inline std::istream & operator>>(std::istream & str, float3 & dest)
|
||||
{
|
||||
str>>dest.x>>dest.y>>dest.z;
|
||||
return str;
|
||||
return str >> dest.x >> dest.y >> dest.z;
|
||||
}
|
||||
inline std::ostream & operator<<(std::ostream & str, const float3 & sth)
|
||||
{
|
||||
return str<<sth.x<<' '<<sth.y<<' '<<sth.z;
|
||||
return str << sth.x << ' ' << sth.y << ' ' << sth.z;
|
||||
}
|
||||
|
||||
struct Shashfloat3
|
||||
|
Loading…
Reference in New Issue
Block a user