00001 #pragma once
00002
00009 #include "Base.h"
00010
00011 namespace UQ{
00012
00017 class Color{
00018 public:
00019 Color() : color32bit_(0){}
00020
00025 Color(unsigned long color32bit) : color32bit_(color32bit){}
00026
00034 Color(unsigned char a, unsigned char r, unsigned char g, unsigned char b) : a_(a), r_(r), g_(g), b_(b){}
00035
00043 void setARGB(unsigned char a, unsigned char r, unsigned char g, unsigned char b){a_ = a; r_ = r; g_ = g; b_ = b;}
00044
00048 operator unsigned long() const{return color32bit_;}
00049
00050 union{
00051 struct{
00052 unsigned char b_;
00053 unsigned char g_;
00054 unsigned char r_;
00055 unsigned char a_;
00056 };
00057 unsigned long color32bit_;
00058 };
00059 };
00060
00065 template<typename T>
00066 class Vector2DTemplate{
00067 public:
00068 Vector2DTemplate() : x_(0), y_(0){}
00069
00075 Vector2DTemplate(T x, T y) : x_(x), y_(y){}
00076
00082 void set(T x, T y){x_ = x; y_ = y;}
00083
00084 Vector2DTemplate operator +() const{return *this;}
00085 Vector2DTemplate operator +(const Vector2DTemplate& v) const{return Vector2DTemplate(x_ + v.x_, y_ + v.y_);}
00086 Vector2DTemplate& operator +=(const Vector2DTemplate& v){x_ += v.x_; y_ += v.y_; return *this;}
00087
00088 Vector2DTemplate operator -() const{return Vector2DTemplate(-x_, -y_);}
00089 Vector2DTemplate operator -(const Vector2DTemplate& v) const{return Vector2DTemplate(x_ - v.x_, y_ - v.y_);}
00090 Vector2DTemplate& operator -=(const Vector2DTemplate& v){x_ -= v.x_; y_ -= v.y_; return *this;}
00091
00092 Vector2DTemplate operator *(const T t) const{return Vector2DTemplate(x_ * t, y_ * t);}
00093 Vector2DTemplate& operator *=(const T t){x_ *= t; y_ *= t; return *this;}
00094
00095 Vector2DTemplate operator /(const T t) const{return Vector2DTemplate(x_ / t, y_ / t);}
00096 Vector2DTemplate& operator /=(const T t){x_ /= t; y_ /= t; return *this;}
00097
00098 T x_;
00099 T y_;
00100 };
00101
00102 typedef Vector2DTemplate<float> Vector2D;
00103
00108 class Vertex{
00109 private:
00110 typedef Vector2DTemplate<int> TextureCoordinate;
00111
00112 public:
00113 Vertex() : vector_(), color_(0xFFFFFFFF), textureCoordinate_(){}
00114
00115 Vector2D vector_;
00116 Color color_;
00117 TextureCoordinate textureCoordinate_;
00118 };
00119
00126 class DLL_EXPORT Polygon{
00127 public:
00128 Polygon() : vertexCount_(0){}
00129
00138 void setRectangle(int x, int y, int width, int height);
00139 void setRectangle(float x, float y, int width, int height);
00140
00150 void setRectangleTexture(int x, int y, int width, int height);
00151
00160 void setRegularPolygon(int n, Vector2D center, float radius);
00161
00167 void setColor(Color color);
00168
00174 void translate(Vector2D vector);
00175
00182 void rotate(Vector2D center, float angle);
00183
00191 void scale(Vector2D center, float scaleX, float scaleY);
00192
00193 static const int VERTEX_COUNT_MAX_ = 128;
00194 #pragma warning(disable:4251)
00195 Vertex vertex_[VERTEX_COUNT_MAX_];
00196 #pragma warning(default:4251)
00197 int vertexCount_;
00198 };
00199
00204 class GraphicMgr{
00205 public:
00206 virtual ~GraphicMgr(){}
00207
00213 virtual void setBackgroundColor(Color color) = 0;
00214
00220 virtual void drawPolygon(Polygon polygon) const = 0;
00221
00230 virtual bool loadTexture(int id, const char* fileName) = 0;
00231
00237 virtual void unloadTexture(int id) = 0;
00238
00244 virtual void setTexture(int id) = 0;
00245
00250 virtual void unsetTexture(void) = 0;
00251
00258 virtual int getTextureWidth(int id) const = 0;
00259
00266 virtual int getTextureHeight(int id) const = 0;
00267
00276 virtual void outputString(int x, int y, const char* str, Color color = 0xFFFFFFFF) = 0;
00277 };
00278
00279 }