2004-05-22 01:46:16 +02:00
|
|
|
/*
|
|
|
|
COverlay
|
|
|
|
by Rich Cross, rich@0ad.wildfiregames.com
|
|
|
|
|
|
|
|
|
|
|
|
--Overview--
|
|
|
|
|
|
|
|
Class representing 2D screen overlays; includes functionality for overlay
|
|
|
|
position, color, texture and borders.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef COVERLAY_H
|
|
|
|
#define COVERLAY_H
|
|
|
|
|
2004-06-01 19:34:12 +02:00
|
|
|
#include "lib.h"
|
2004-05-29 05:53:12 +02:00
|
|
|
|
2004-05-22 01:46:16 +02:00
|
|
|
struct CColor
|
|
|
|
{
|
2004-05-29 05:53:12 +02:00
|
|
|
CColor() : r(-1.f), g(-1.f), b(-1.f), a(1.f) {}
|
2004-05-22 01:46:16 +02:00
|
|
|
CColor(float cr,float cg,float cb,float ca) : r(cr), g(cg), b(cb), a(ca) {}
|
|
|
|
|
2004-05-29 05:53:12 +02:00
|
|
|
bool operator == (const CColor &color) const
|
|
|
|
{
|
|
|
|
return r==color.r &&
|
|
|
|
g==color.g &&
|
|
|
|
b==color.b &&
|
|
|
|
a==color.a;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool operator != (const CColor &color) const
|
|
|
|
{
|
|
|
|
return !(*this==color);
|
|
|
|
}
|
|
|
|
|
2004-05-22 01:46:16 +02:00
|
|
|
float r, g, b, a;
|
|
|
|
};
|
|
|
|
|
2004-05-30 02:46:58 +02:00
|
|
|
// yuck - MFC already defines CRect/CSize classes ...
|
|
|
|
#define CRect PS_CRect
|
|
|
|
#define CSize PS_CSize
|
|
|
|
|
2004-05-29 05:53:12 +02:00
|
|
|
class CPos;
|
|
|
|
class CSize;
|
|
|
|
|
2004-05-22 01:46:16 +02:00
|
|
|
|
2004-05-29 05:53:12 +02:00
|
|
|
/**
|
|
|
|
* @author Gustav Larsson
|
|
|
|
*
|
|
|
|
* Rectangle class used for screen rectangles. It's very similiar to the MS
|
|
|
|
* CRect, but be aware it is not identical.
|
|
|
|
* Works with CPos.
|
|
|
|
* @see CSize
|
|
|
|
* @see CPos
|
|
|
|
*/
|
|
|
|
class CRect
|
2004-05-22 01:46:16 +02:00
|
|
|
{
|
2004-05-29 05:53:12 +02:00
|
|
|
public:
|
|
|
|
CRect();
|
|
|
|
CRect(const CPos &pos);
|
|
|
|
CRect(const CSize &size);
|
|
|
|
CRect(const CPos &upperleft, const CPos &bottomright);
|
|
|
|
CRect(const CPos &pos, const CSize &size);
|
2004-06-01 19:34:12 +02:00
|
|
|
CRect(const int32_t &_l, const int32_t &_t, const int32_t &_r, const int32_t &_b);
|
2004-05-22 01:46:16 +02:00
|
|
|
|
2004-05-29 05:53:12 +02:00
|
|
|
// 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
|
|
|
|
*/
|
2004-06-01 19:34:12 +02:00
|
|
|
int32_t GetWidth() const;
|
2004-05-29 05:53:12 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @return Height of Rectangle
|
|
|
|
*/
|
2004-06-01 19:34:12 +02:00
|
|
|
int32_t GetHeight() const;
|
2004-05-29 05:53:12 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* 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;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returning CPos representing each corner.
|
|
|
|
*/
|
|
|
|
|
|
|
|
public:
|
|
|
|
/**
|
|
|
|
* Dimensions
|
|
|
|
*/
|
2004-06-01 19:34:12 +02:00
|
|
|
int32_t left, top, right, bottom;
|
2004-05-29 05:53:12 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @author Gustav Larsson
|
|
|
|
*
|
|
|
|
* Made to represent screen positions and delta values.
|
|
|
|
* @see CRect
|
|
|
|
* @see CSize
|
|
|
|
*/
|
|
|
|
class CPos
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
CPos();
|
2004-06-01 19:34:12 +02:00
|
|
|
CPos(const int32_t &_x, const int32_t &_y);
|
2004-05-29 05:53:12 +02:00
|
|
|
|
|
|
|
// 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
|
|
|
|
*/
|
2004-06-01 19:34:12 +02:00
|
|
|
int32_t x, y;
|
2004-05-29 05:53:12 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @author Gustav Larsson
|
|
|
|
*
|
|
|
|
* 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);
|
2004-06-01 19:34:12 +02:00
|
|
|
CSize(const int32_t &_cx, const int32_t &_cy);
|
2004-05-29 05:53:12 +02:00
|
|
|
|
|
|
|
// 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 int &a) const;
|
|
|
|
CSize operator * (const int &a) const;
|
|
|
|
|
|
|
|
void operator += (const CSize& a);
|
|
|
|
void operator -= (const CSize& a);
|
|
|
|
void operator /= (const int& a);
|
|
|
|
void operator *= (const int& a);
|
|
|
|
|
|
|
|
public:
|
|
|
|
/**
|
|
|
|
* Size
|
|
|
|
*/
|
2004-06-01 19:34:12 +02:00
|
|
|
int32_t cx, cy;
|
2004-05-22 01:46:16 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
//--------------------------------------------------------
|
|
|
|
// Includes / Compiler directives
|
|
|
|
//--------------------------------------------------------
|
2004-05-29 22:50:03 +02:00
|
|
|
#include "Texture.h"
|
2004-05-22 01:46:16 +02:00
|
|
|
|
|
|
|
|
|
|
|
//--------------------------------------------------------
|
|
|
|
// Macros
|
|
|
|
//--------------------------------------------------------
|
|
|
|
|
|
|
|
//--------------------------------------------------------
|
|
|
|
// Types
|
|
|
|
//--------------------------------------------------------
|
|
|
|
|
|
|
|
//--------------------------------------------------------
|
|
|
|
// Error declarations
|
|
|
|
//--------------------------------------------------------
|
|
|
|
|
|
|
|
//--------------------------------------------------------
|
|
|
|
// Declarations
|
|
|
|
//--------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @author Rich Cross
|
|
|
|
*
|
|
|
|
* Overlay class definition.
|
|
|
|
*/
|
|
|
|
class COverlay
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
/**
|
|
|
|
* Default constructor; creates an overlay that won't actually be renderable
|
|
|
|
*/
|
|
|
|
COverlay();
|
|
|
|
/**
|
|
|
|
* Constructor with setup for more common parameters
|
|
|
|
*/
|
|
|
|
COverlay(const CRect& rect,int z,const CColor& color,const char* texturename="",bool hasBorder=false,
|
|
|
|
const CColor& bordercolor=CColor(0,0,0,0));
|
|
|
|
/**
|
|
|
|
* Destructor
|
|
|
|
*/
|
|
|
|
~COverlay();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get coordinates
|
|
|
|
*/
|
|
|
|
const CRect& GetRect() const { return m_Rect; }
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get depth
|
|
|
|
*/
|
|
|
|
int GetZ() const { return m_Z; }
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get texture (not const as Renderer need to modify texture to store handle)
|
|
|
|
*/
|
|
|
|
CTexture& GetTexture() { return m_Texture; }
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get color
|
|
|
|
*/
|
|
|
|
const CColor& GetColor() const { return m_Color; }
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get border flag
|
|
|
|
*/
|
|
|
|
bool HasBorder() const { return m_HasBorder; }
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get border color
|
|
|
|
*/
|
|
|
|
const CColor& GetBorderColor() const { return m_BorderColor; }
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
/// screen space coordinates of overlay
|
|
|
|
CRect m_Rect;
|
|
|
|
/// depth of overlay, for correctly overlapping overlays; higher z implies in-front-of behaviour
|
|
|
|
int m_Z;
|
|
|
|
/// texture to use in rendering overlay; can be a null texture
|
|
|
|
CTexture m_Texture;
|
|
|
|
/// overlay color
|
|
|
|
CColor m_Color;
|
|
|
|
// flag indicating whether to render overlay using a border
|
|
|
|
bool m_HasBorder;
|
|
|
|
/// border color
|
|
|
|
CColor m_BorderColor;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2004-06-11 04:14:18 +02:00
|
|
|
#endif
|