00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef SPRITE_H_
00026 #define SPRITE_H_
00027
00028 #include <Graphics2D/Renderer/SpriteRequest.h>
00029
00030 namespace Lamp{
00031
00032 class SpritePicture;
00033
00034
00035
00036
00037
00038 class Sprite : public SpriteRequest{
00039 public:
00040
00041
00042
00043
00044
00045
00046 Sprite();
00047
00048
00049
00050
00051
00052 explicit Sprite(const Sprite& copy);
00053
00054
00055
00056
00057
00058 Sprite& operator =(const Sprite& copy);
00059
00060
00061
00062
00063 virtual ~Sprite();
00064
00065
00066
00067
00068
00069
00070
00071
00072 virtual void render(SpriteRenderState* renderState);
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082 virtual bool loadPicture(const String& fileName);
00083
00084
00085
00086
00087
00088 virtual void setPicture(SpritePicture* picture);
00089
00090
00091
00092
00093
00094 virtual SpritePicture* getPicture(){ return picture_; }
00095
00096
00097
00098
00099
00100
00101
00102
00103 virtual void setRectangle(const RectangleF& rectangle){
00104 rectangle_ = rectangle;
00105 }
00106
00107
00108
00109
00110
00111
00112 virtual void setRectangle(const Point2f& position, const DimensionF& size){
00113 rectangle_.set(position.x, position.y, size.width, size.height);
00114 }
00115
00116
00117
00118
00119
00120
00121
00122
00123 virtual void setRectangle(float x, float y, float width, float height){
00124 rectangle_.set(x, y, width, height);
00125 }
00126
00127
00128
00129
00130
00131 virtual const RectangleF& getRectangle() const{ return rectangle_; }
00132
00133
00134
00135
00136
00137
00138 virtual void setPosition(const Point2f& position){
00139 rectangle_.x = position.x;
00140 rectangle_.y = position.y;
00141 }
00142
00143
00144
00145
00146
00147
00148 virtual void setPosition(float x, float y){
00149 rectangle_.x = x;
00150 rectangle_.y = y;
00151 }
00152
00153
00154
00155
00156
00157 virtual Point2f getPosition() const{
00158 return Point2f(rectangle_.x, rectangle_.y);
00159 }
00160
00161
00162
00163
00164
00165
00166 virtual void setSize(const DimensionF& size){
00167 rectangle_.width = size.width;
00168 rectangle_.height = size.height;
00169 }
00170
00171
00172
00173
00174
00175
00176 virtual void setSize(float width, float height){
00177 rectangle_.width = width;
00178 rectangle_.height = height;
00179 }
00180
00181
00182
00183
00184
00185 virtual DimensionF getSize() const{
00186 return DimensionF(rectangle_.width, rectangle_.height);
00187 }
00188
00189
00190
00191
00192
00193
00194
00195
00196 virtual void setImageRectangle(const RectangleF& imageRectangle){
00197 imageRectangle_ = imageRectangle;
00198 }
00199
00200
00201
00202
00203
00204
00205 virtual void setImageRectangle(
00206 const Point2f& position, const DimensionF& size){
00207 imageRectangle_.set(position.x, position.y, size.width, size.height);
00208 }
00209
00210
00211
00212
00213
00214
00215
00216
00217 virtual void setImageRectangle(
00218 float x, float y, float width, float height){
00219 imageRectangle_.set(x, y, width, height);
00220 }
00221
00222
00223
00224
00225
00226 virtual const RectangleF& getImageRectangle() const{
00227 return imageRectangle_;
00228 }
00229
00230
00231
00232
00233
00234
00235 virtual void setImagePosition(const Point2f& position){
00236 imageRectangle_.x = position.x;
00237 imageRectangle_.y = position.y;
00238 }
00239
00240
00241
00242
00243
00244
00245 virtual void setImagePosition(float x, float y){
00246 imageRectangle_.x = x;
00247 imageRectangle_.y = y;
00248 }
00249
00250
00251
00252
00253
00254 virtual Point2f getImagePosition() const{
00255 return Point2f(imageRectangle_.x, imageRectangle_.y);
00256 }
00257
00258
00259
00260
00261
00262
00263 virtual void setImageSize(const DimensionF& size){
00264 imageRectangle_.width = size.width;
00265 imageRectangle_.height = size.height;
00266 }
00267
00268
00269
00270
00271
00272
00273 virtual void setImageSize(float width, float height){
00274 imageRectangle_.width = width;
00275 imageRectangle_.height = height;
00276 }
00277
00278
00279
00280
00281
00282 virtual DimensionF getImageSize() const{
00283 return DimensionF(imageRectangle_.width, imageRectangle_.height);
00284 }
00285
00286
00287
00288
00289
00290
00291
00292
00293 virtual void setAnimation(const DimensionI& animationDivision,
00294 int animation, const RectangleF& imageRectangle = RectangleF::unit);
00295
00296
00297
00298
00299
00300 enum Align{
00301 alignNone = 0,
00302 alignTopLeft,
00303 alignTop,
00304 alignTopRight,
00305 alignLeft,
00306 alignCenter,
00307 alignRight,
00308 alignBottomLeft,
00309 alignBottom,
00310 alignBottomRight,
00311 alignMax,
00312 };
00313
00314
00315
00316
00317
00318 virtual void setAlign(Align align){
00319 Assert((align >= 0) && (align < alignMax));
00320 align_ = align;
00321 }
00322
00323
00324
00325
00326
00327 virtual Align getAlign() const{ return align_; }
00328
00329
00330
00331
00332
00333 enum Fit{
00334 fitNone = 0,
00335 fitScreen,
00336 fitScreenWidth,
00337 fitScreenHeight,
00338 fitMax,
00339 };
00340
00341
00342
00343
00344
00345 virtual void setFit(Fit fit){
00346 Assert((fit >= 0) && (fit < fitMax));
00347 fit_ = fit;
00348 }
00349
00350
00351
00352
00353
00354 virtual Fit getFit() const{ return fit_; }
00355
00356
00357
00358
00359
00360
00361
00362
00363 virtual void setEnabled(bool enabled){ enabled_ = enabled; }
00364
00365
00366
00367
00368
00369 virtual bool isEnabled() const{ return enabled_; }
00370
00371
00372
00373
00374
00375
00376
00377
00378 virtual bool isSprite() const{ return true; }
00379
00380 protected:
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390 virtual RectangleF applyFit(const RectangleF& rectangle,
00391 const DimensionF& renderTargetSize);
00392
00393
00394
00395
00396
00397
00398
00399 virtual RectangleF applyAlign(const RectangleF& rectangle,
00400 const DimensionF& renderTargetSize);
00401
00402 private:
00403
00404
00405 SpritePicture* picture_;
00406
00407 RectangleF rectangle_;
00408
00409 RectangleF imageRectangle_;
00410
00411 Align align_;
00412
00413 Fit fit_;
00414
00415 bool enabled_;
00416
00417 };
00418
00419
00420 }
00421 #endif // End of SPRITE_H_
00422