Sprite.cpp
Go to the documentation of this file.00001 //*** Sprite.cpp ** 00002 00003 #include "Sprite.h" 00004 #include "Bitmap.h" 00005 #include "BitmapStrip.h" 00006 #include "SpriteManager.h" 00007 #include "SpriteControllerManager.h" 00008 #include "Resource_BitmapStrip.h" 00009 #include "SpriteSystem.h" 00010 00011 //*** Constructor *** 00012 00013 Sprite::Sprite(): 00014 spriteManager_(0), 00015 x_(0), 00016 y_(0), 00017 originX_(0), 00018 originY_(0), 00019 visible_(true), 00020 color_(0xffff), 00021 alpha_(0xff), 00022 priority_(0), 00023 cel_(0) 00024 { 00025 if (SpriteSystem::IsInstanceCreated()) 00026 { 00027 spriteManager_=siSpriteSystem->GetDefaultSpriteManager(); 00028 spriteManager_->AddSprite(this); 00029 } 00030 } 00031 00032 00033 //*** Constructor *** 00034 00035 Sprite::Sprite(SpriteManager* spriteManager): 00036 spriteManager_(spriteManager), 00037 x_(0), 00038 y_(0), 00039 originX_(0), 00040 originY_(0), 00041 visible_(true), 00042 color_(0xffff), 00043 alpha_(0xff), 00044 priority_(0), 00045 cel_(0) 00046 { 00047 Assert(spriteManager_,"Sprite manager not valid"); 00048 if (spriteManager_) 00049 { 00050 spriteManager_->AddSprite(this); 00051 } 00052 } 00053 00054 00055 //*** Destructor *** 00056 00057 Sprite::~Sprite() 00058 { 00059 00060 if (spriteManager_) 00061 { 00062 spriteManager_->RemoveSprite(this); 00063 } 00064 00065 if (SpriteControllerManager::IsInstanceCreated()) 00066 { 00067 siSpriteControllerManager->SpriteDeleted(this); 00068 } 00069 } 00070 00071 00072 //*** GetSpriteManager *** 00073 00074 SpriteManager* Sprite::GetSpriteManager() const 00075 { 00076 return spriteManager_; 00077 } 00078 00079 00080 //*** SetSpriteManager *** 00081 00082 void Sprite::SetSpriteManager(SpriteManager* spriteManager) 00083 { 00084 if (spriteManager==spriteManager_) 00085 { 00086 return; 00087 } 00088 00089 if (spriteManager_) 00090 { 00091 spriteManager_->RemoveSprite(this); 00092 } 00093 00094 spriteManager_=spriteManager; 00095 00096 if (spriteManager_) 00097 { 00098 spriteManager_->AddSprite(this); 00099 } 00100 } 00101 00102 00103 //*** GetX *** 00104 00105 float Sprite::GetX() const 00106 { 00107 return x_; 00108 } 00109 00110 00111 //*** GetY *** 00112 00113 float Sprite::GetY() const 00114 { 00115 return y_; 00116 } 00117 00118 00119 //*** SetPosition *** 00120 00121 void Sprite::SetPosition(float x, float y) 00122 { 00123 x_=x; 00124 y_=y; 00125 } 00126 00127 00128 //*** SetX *** 00129 00130 void Sprite::SetX(float x) 00131 { 00132 x_=x; 00133 } 00134 00135 00136 //*** SetY *** 00137 00138 void Sprite::SetY(float y) 00139 { 00140 y_=y; 00141 } 00142 00143 00144 //*** GetOriginX *** 00145 00146 float Sprite::GetOriginX() const 00147 { 00148 return originX_; 00149 } 00150 00151 00152 //*** GetOriginY *** 00153 00154 float Sprite::GetOriginY() const 00155 { 00156 return originY_; 00157 } 00158 00159 00160 //*** SetOrigin *** 00161 00162 void Sprite::SetOrigin(float x, float y) 00163 { 00164 originX_=x; 00165 originY_=y; 00166 } 00167 00168 00169 //*** SetOriginX *** 00170 00171 void Sprite::SetOriginX(float x) 00172 { 00173 originX_=x; 00174 } 00175 00176 00177 //*** SetOriginY *** 00178 00179 void Sprite::SetOriginY(float y) 00180 { 00181 originY_=y; 00182 } 00183 00184 00185 //*** IsVisible *** 00186 00187 bool Sprite::IsVisible() const 00188 { 00189 return visible_; 00190 } 00191 00192 00193 //*** SetVisible *** 00194 00195 void Sprite::SetVisible(bool visible) 00196 { 00197 visible_=visible; 00198 } 00199 00200 00201 //*** GetColor *** 00202 00203 unsigned short Sprite::GetColor() const 00204 { 00205 return color_; 00206 } 00207 00208 00209 //*** SetColor *** 00210 00211 void Sprite::SetColor(unsigned short color) 00212 { 00213 color_=color; 00214 } 00215 00216 00217 //*** GetAlpha *** 00218 00219 unsigned char Sprite::GetAlpha() const 00220 { 00221 return alpha_; 00222 } 00223 00224 00225 //*** SetAlpha *** 00226 00227 void Sprite::SetAlpha(unsigned char alpha) 00228 { 00229 alpha_=alpha; 00230 } 00231 00232 00233 //*** GetPriority *** 00234 00235 float Sprite::GetPriority() const 00236 { 00237 return priority_; 00238 } 00239 00240 00241 //*** SetPriority*** 00242 00243 void Sprite::SetPriority(float priority) 00244 { 00245 if (priority==priority_) 00246 { 00247 return; 00248 } 00249 00250 if (spriteManager_) 00251 { 00252 spriteManager_->RemoveSprite(this); 00253 } 00254 00255 priority_=priority; 00256 00257 if (spriteManager_) 00258 { 00259 spriteManager_->AddSprite(this); 00260 } 00261 } 00262 00263 00264 //*** GetCel *** 00265 00266 float Sprite::GetCel() const 00267 { 00268 return cel_; 00269 } 00270 00271 00272 //*** SetCel *** 00273 00274 void Sprite::SetCel(float cel) 00275 { 00276 cel_=cel; 00277 } 00278 00279 00280 //*** GetBitmap *** 00281 00282 const Resource_BitmapStrip& Sprite::GetBitmap() const 00283 { 00284 return bitmapStrip_; 00285 } 00286 00287 00288 //*** SetBitmap *** 00289 00290 void Sprite::SetBitmap(const Resource_BitmapStrip& bitmapStrip) 00291 { 00292 bitmapStrip_=bitmapStrip; 00293 } 00294 00295 00296 //*** PickPixel *** 00297 00298 bool Sprite::PickPixel(int x, int y) const 00299 { 00300 if (GetBitmap().GetCelCount()!=0) 00301 { 00302 const Bitmap& bitmap=GetBitmap().GetCel((int)GetCel()); 00303 if (bitmap.GetPixelAlpha(x-(int)(GetX()-GetOriginX()),y-(int)(GetY()-GetOriginY()))>128) 00304 { 00305 return true; 00306 } 00307 } 00308 00309 return false; 00310 } 00311 00312 00313 //*** Render *** 00314 00315 void Sprite::Render(Bitmap& bitmap) 00316 { 00317 if (!visible_) 00318 { 00319 return; 00320 } 00321 00322 GetBitmap().Blit((int)GetCel(),bitmap,(int)(GetX()-GetOriginX()),(int)(GetY()-GetOriginY()),GetColor(),GetAlpha()); 00323 } 00324 00325 00326 //*** OnMouseOver *** 00327 00328 bool Sprite::OnMouseOver(int x, int y, bool button, StringId& eventId, void*& userData) 00329 { 00330 return false; 00331 }
Reproduction/republishing of any material on this site without permission is strictly prohibited.
