213 lines
4.5 KiB
C++
213 lines
4.5 KiB
C++
/*
|
|
Overlay.h
|
|
|
|
--Overview--
|
|
|
|
Class representing 2D screen overlays; includes functionality for overlay
|
|
position, color, texture and borders.
|
|
*/
|
|
|
|
#ifndef INCLUDED_OVERLAY
|
|
#define INCLUDED_OVERLAY
|
|
|
|
class CStr8;
|
|
|
|
struct CColor
|
|
{
|
|
CColor() : r(-1.f), g(-1.f), b(-1.f), a(1.f) {}
|
|
CColor(float cr,float cg,float cb,float ca) : r(cr), g(cg), b(cb), a(ca) {}
|
|
|
|
bool ParseString(const CStr8& Value, float DefaultAlpha);
|
|
|
|
bool operator == (const CColor &color) const;
|
|
|
|
bool operator != (const CColor &color) const
|
|
{
|
|
return !(*this==color);
|
|
}
|
|
|
|
// For passing to glColor[34]fv:
|
|
const float* FloatArray() const { return &r; }
|
|
|
|
// For passing to CRenderer:
|
|
u32 Int() const
|
|
{
|
|
return (((int)(a*255.0) & 0xff) << 24)
|
|
+ (((int)(b*255.0) & 0xff) << 16)
|
|
+ (((int)(g*255.0) & 0xff) << 8)
|
|
+ (((int)(r*255.0) & 0xff));
|
|
}
|
|
|
|
float r, g, b, a;
|
|
};
|
|
|
|
class CPos;
|
|
class CSize;
|
|
|
|
|
|
/**
|
|
* Rectangle class used for screen rectangles. It's very similar to the MS
|
|
* CRect, but with FLOATS because it's meant to be used with OpenGL which
|
|
* takes float values.
|
|
*
|
|
* Changed to floats 2004-08-31 /GL
|
|
*/
|
|
class CRect
|
|
{
|
|
public:
|
|
CRect();
|
|
CRect(const CPos &pos);
|
|
CRect(const CSize &size);
|
|
CRect(const CPos &upperleft, const CPos &bottomright);
|
|
CRect(const CPos &pos, const CSize &size);
|
|
CRect(const float &_l, const float &_t, const float &_r, const float &_b);
|
|
|
|
// Operators
|
|
void operator = (const CRect& a);
|
|
bool operator == (const CRect& a) const;
|
|
bool operator != (const CRect& a) const;
|
|
CRect operator - (void) const;
|
|
CRect operator + (void) const;
|
|
|
|
CRect operator + (const CRect& a) const;
|
|
CRect operator + (const CPos& a) const;
|
|
CRect operator + (const CSize& a) const;
|
|
CRect operator - (const CRect& a) const;
|
|
CRect operator - (const CPos& a) const;
|
|
CRect operator - (const CSize& a) const;
|
|
|
|
void operator += (const CRect& a);
|
|
void operator += (const CPos& a);
|
|
void operator += (const CSize& a);
|
|
void operator -= (const CRect& a);
|
|
void operator -= (const CPos& a);
|
|
void operator -= (const CSize& a);
|
|
|
|
/**
|
|
* @return Width of Rectangle
|
|
*/
|
|
float GetWidth() const;
|
|
|
|
/**
|
|
* @return Height of Rectangle
|
|
*/
|
|
float GetHeight() const;
|
|
|
|
/**
|
|
* Get Size
|
|
*/
|
|
CSize GetSize() const;
|
|
|
|
/**
|
|
* Get Position equivalent to top/left corner
|
|
*/
|
|
CPos TopLeft() const;
|
|
|
|
/**
|
|
* Get Position equivalent to bottom/right corner
|
|
*/
|
|
CPos BottomRight() const;
|
|
|
|
/**
|
|
* Get Position equivalent to the center of the rectangle
|
|
*/
|
|
CPos CenterPoint() const;
|
|
|
|
/**
|
|
* Evalutates if point is within the rectangle
|
|
* @param point CPos representing point
|
|
* @return true if inside.
|
|
*/
|
|
bool PointInside(const CPos &point) const;
|
|
|
|
CRect Scale(float x, float y) const;
|
|
|
|
/**
|
|
* Returning CPos representing each corner.
|
|
*/
|
|
|
|
public:
|
|
/**
|
|
* Dimensions
|
|
*/
|
|
float left, top, right, bottom;
|
|
};
|
|
|
|
/**
|
|
* Made to represent screen positions and delta values.
|
|
* @see CRect
|
|
* @see CSize
|
|
*/
|
|
class CPos
|
|
{
|
|
public:
|
|
CPos();
|
|
CPos(const CSize &pos);
|
|
CPos(const float &_x, const float &_y);
|
|
|
|
// Operators
|
|
void operator = (const CPos& a);
|
|
bool operator == (const CPos& a) const;
|
|
bool operator != (const CPos& a) const;
|
|
CPos operator - (void) const;
|
|
CPos operator + (void) const;
|
|
|
|
CPos operator + (const CPos& a) const;
|
|
CPos operator + (const CSize& a) const;
|
|
CPos operator - (const CPos& a) const;
|
|
CPos operator - (const CSize& a) const;
|
|
|
|
void operator += (const CPos& a);
|
|
void operator += (const CSize& a);
|
|
void operator -= (const CPos& a);
|
|
void operator -= (const CSize& a);
|
|
|
|
public:
|
|
/**
|
|
* Position
|
|
*/
|
|
float x, y;
|
|
};
|
|
|
|
/**
|
|
* Made to represent a screen size, should in philosophy
|
|
* be made of unsigned ints, but for the sake of compatibility
|
|
* with CRect and CPos it's not.
|
|
* @see CRect
|
|
* @see CPos
|
|
*/
|
|
class CSize
|
|
{
|
|
public:
|
|
CSize();
|
|
CSize(const CRect &rect);
|
|
CSize(const CPos &pos);
|
|
CSize(const float &_cx, const float &_cy);
|
|
|
|
// Operators
|
|
void operator = (const CSize& a);
|
|
bool operator == (const CSize& a) const;
|
|
bool operator != (const CSize& a) const;
|
|
CSize operator - (void) const;
|
|
CSize operator + (void) const;
|
|
|
|
CSize operator + (const CSize& a) const;
|
|
CSize operator - (const CSize& a) const;
|
|
CSize operator / (const float &a) const;
|
|
CSize operator * (const float &a) const;
|
|
|
|
void operator += (const CSize& a);
|
|
void operator -= (const CSize& a);
|
|
void operator /= (const float& a);
|
|
void operator *= (const float& a);
|
|
|
|
public:
|
|
/**
|
|
* Size
|
|
*/
|
|
float cx, cy;
|
|
};
|
|
|
|
|
|
#endif
|