00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef BOX_H_INCLUDED
00020 #define BOX_H_INCLUDED
00021
00022 namespace Pentagram {
00023
00024 struct Box {
00025 sint32 x, y, z;
00026 sint32 xd, yd, zd;
00027
00028 Box() : x(0), y(0), z(0), xd(0), yd(0), zd(0) {}
00029 Box(int nx, int ny, int nz, int nxd, int nyd, int nzd)
00030 : x(nx), y(ny), z(nz), xd(nxd), yd(nyd), zd(nzd) {}
00031 Box(const Box& o) : x(o.x), y(o.y), z(o.z), xd(o.xd), yd(o.yd), zd(o.zd) {}
00032
00033 void Set(int nx, int ny, int nz, int nxd, int nyd, int nzd)
00034 { x=nx; y=ny; z=nz; xd=nxd; yd=nyd; zd=nzd; }
00035 void Set(Box &o) { *this = o; }
00036
00037
00038 bool IsValid() const
00039 { return xd > 0 && yd > 0 && zd > 0; }
00040
00041
00042 bool InBox(int px, int py, int pz) const
00043 { return (px >= (x-xd) && py >= (y-yd) && pz >= z &&
00044 px < x && py < y && pz < (z+zd)); }
00045
00046
00047 void MoveRel(sint32 dx, sint32 dy, sint32 dz) { x+=dx; y+=dy; z+=dz; }
00048
00049
00050 void MoveAbs(sint32 nx, sint32 ny, sint32 nz) { x=nx; y=ny; z=nz; }
00051
00052
00053 void ResizeRel(sint32 dxd, sint32 dyd, sint32 dzd)
00054 { xd+=dxd; yd+=dyd; zd+=dzd; }
00055
00056
00057 void ResizeAbs(sint32 nxd, sint32 nyd, sint32 nzd)
00058 { xd=nxd; yd=nyd; zd=nzd; }
00059
00060 bool Overlaps(const Box& o) const
00061 {
00062 if (x <= o.x-o.xd || o.x <= x-xd) return false;
00063 if (y <= o.y-o.yd || o.y <= y-yd) return false;
00064 if (z+zd <= o.z || o.z+o.zd <= z) return false;
00065 return true;
00066 }
00067
00068 bool operator == (const Box& o) const
00069 {
00070 return (x == o.x && y == o.y && z == o.z &&
00071 xd == o.xd && yd == o.yd && zd == o.zd);
00072 }
00073
00074 };
00075
00076 }
00077
00078 #endif