#ifndef INT3_H #define INT3_H #include #include #include class CCreature; class CCreatureSet //seven combined creatures { public: std::map > slots; //slots[slot_id]=> pair(creature_id,creature_quantity) bool formation; //false - wide, true - tight si32 getSlotFor(ui32 creature, ui32 slotsAmount=7) //returns -1 if no slot available { for(std::map >::iterator i=slots.begin(); i!=slots.end(); i++) if(i->second.first == creature) return i->first; //if there is already such creature we return its slot id for(si32 i=0; i void serialize(Handler &h, const int version) { h & slots & formation; } }; class int3 { public: si32 x,y,z; inline int3():x(0),y(0),z(0){}; //c-tor, x/y/z initialized to 0 inline int3(const si32 & X, const si32 & Y, const si32 & Z):x(X),y(Y),z(Z){}; //c-tor inline ~int3(){} // d-tor - does nothing inline int3 operator+(const int3 & i) const {return int3(x+i.x,y+i.y,z+i.z);} inline int3 operator+(const si32 i) const //increases all components by si32 {return int3(x+i,y+i,z+i);} inline int3 operator-(const int3 & i) const {return int3(x-i.x,y-i.y,z-i.z);} inline int3 operator-(const si32 i) const {return int3(x-i,y-i,z-i);} inline int3 operator-() const //increases all components by si32 {return int3(-x,-y,-z);} inline double dist2d(const int3 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 void operator+=(const int3 & i) { x+=i.x; y+=i.y; z+=i.z; } inline void operator+=(const si32 & i) { x+=i; y+=i; z+=i; } inline void operator-=(const int3 & i) { x-=i.x; y-=i.y; z-=i.z; } inline void operator-=(const si32 & i) { x+=i; y+=i; z+=i; } inline bool operator==(const int3 & i) const {return (x==i.x) && (y==i.y) && (z==i.z);} inline bool operator!=(const int3 & i) const {return !(*this==i);} inline bool operator<(const int3 & i) const { if (zi.z) return false; if (yi.y) return false; if (xi.x) return false; return false; } template void serialize(Handler &h, const int version) { h & x & y & z; } }; inline std::istream & operator>>(std::istream & str, int3 & dest) { str>>dest.x>>dest.y>>dest.z; return str; } inline std::ostream & operator<<(std::ostream & str, const int3 & sth) { return str<