SpriteManager.cpp
Go to the documentation of this file.00001 //*** SpriteManager.cpp *** 00002 00003 #include "SpriteManager.h" 00004 #include "Sprite.h" 00005 #include "ArrayIterator.h" 00006 #include "InputManager.h" 00007 #include "SpriteSystem.h" 00008 #include "SpriteEventListener.h" 00009 00010 00011 //*** Constructor *** 00012 00013 SpriteManager::SpriteManager(): 00014 originX_(0), 00015 originY_(0), 00016 priority_(0) 00017 { 00018 } 00019 00020 00021 //*** Destructor *** 00022 00023 SpriteManager::~SpriteManager() 00024 { 00025 } 00026 00027 00028 //*** AddSprite *** 00029 00030 void SpriteManager::AddSprite(Sprite* sprite) 00031 { 00032 // Need to find the right slot to insert into, to keep the list sorted 00033 for (int i=0; i<sprites_.GetItemCount(); i++) 00034 { 00035 Sprite* existingSprite=sprites_.Get(i); 00036 if (sprite->GetPriority()<existingSprite->GetPriority()) 00037 { 00038 sprites_.InsertBefore(sprite,i); 00039 return; 00040 } 00041 } 00042 00043 sprites_.Add(sprite); 00044 } 00045 00046 00047 //*** RemoveSprite *** 00048 00049 void SpriteManager::RemoveSprite(Sprite* sprite) 00050 { 00051 ArrayIterator<Sprite*> it(sprites_); 00052 if (it.Find(sprite)) 00053 { 00054 sprites_.Remove(it); 00055 } 00056 } 00057 00058 00059 //*** Update *** 00060 00061 void SpriteManager::Update(float deltaTime) 00062 { 00063 float x=siInputManager->GetCursorX(); 00064 float y=siInputManager->GetCursorY(); 00065 bool button=siInputManager->IsKeyDown(KEY_LBUTTON); 00066 bool clicked=siInputManager->WasKeyReleased(KEY_LBUTTON); 00067 00068 for (int i=sprites_.GetItemCount()-1; i>=0; i--) 00069 { 00070 Sprite* sprite=sprites_.Get(i); 00071 StringId eventId; 00072 void* userData=0; 00073 bool mouseOver=sprite->OnMouseOver((int)(x-originX_),(int)(y-originY_),button,eventId,userData); 00074 if (mouseOver && clicked && eventId.GetString()) 00075 { 00076 if (SpriteSystem::IsInstanceCreated() && siSpriteSystem->HasSpriteManager(this)) 00077 { 00078 siSpriteSystem->SendEvent(this,eventId,userData); 00079 } 00080 else 00081 { 00082 SendEvent(eventId,userData); 00083 } 00084 00085 break; 00086 } 00087 } 00088 } 00089 00090 00091 //*** Render *** 00092 00093 void SpriteManager::Render(Bitmap& bitmap) 00094 { 00095 for (int i=0; i<sprites_.GetItemCount(); i++) 00096 { 00097 Sprite* sprite=sprites_.Get(i); 00098 float x=sprite->GetX(); 00099 float y=sprite->GetY(); 00100 sprite->SetX(x+originX_); 00101 sprite->SetY(y+originY_); 00102 sprite->Render(bitmap); 00103 sprite->SetX(x); 00104 sprite->SetY(y); 00105 } 00106 } 00107 00108 00109 //*** AddEventListener *** 00110 00111 void SpriteManager::AddEventListener(SpriteEventListener* listener) 00112 { 00113 eventListeners_.Add(listener); 00114 } 00115 00116 00117 //*** RemoveEventListener *** 00118 00119 void SpriteManager::RemoveEventListener(SpriteEventListener* listener) 00120 { 00121 ArrayIterator<SpriteEventListener*> it(eventListeners_); 00122 if (it.Find(listener)) 00123 { 00124 eventListeners_.Remove(it); 00125 } 00126 } 00127 00128 00129 //*** GetPriority *** 00130 00131 float SpriteManager::GetPriority() const 00132 { 00133 return priority_; 00134 } 00135 00136 00137 //*** SetPriority*** 00138 00139 void SpriteManager::SetPriority(float priority) 00140 { 00141 if (priority==priority_) 00142 { 00143 return; 00144 } 00145 00146 priority_=priority; 00147 00148 if (SpriteSystem::IsInstanceCreated()) 00149 { 00150 siSpriteSystem->UpdatePriority(this); 00151 } 00152 } 00153 00154 00155 //*** GetOriginX *** 00156 00157 float SpriteManager::GetOriginX() const 00158 { 00159 return originX_; 00160 } 00161 00162 00163 //*** GetOriginY *** 00164 00165 float SpriteManager::GetOriginY() const 00166 { 00167 return originY_; 00168 } 00169 00170 00171 //*** SetOrigin *** 00172 00173 void SpriteManager::SetOrigin(float x, float y) 00174 { 00175 originX_=x; 00176 originY_=y; 00177 } 00178 00179 00180 //*** SetOriginX *** 00181 00182 void SpriteManager::SetOriginX(float x) 00183 { 00184 originX_=x; 00185 } 00186 00187 00188 //*** SetOriginY *** 00189 00190 void SpriteManager::SetOriginY(float y) 00191 { 00192 originY_=y; 00193 } 00194 00195 00196 //*** SendEvent *** 00197 00198 void SpriteManager::SendEvent(StringId event, void* userData) 00199 { 00200 for (int i=0; i<eventListeners_.GetItemCount(); i++) 00201 { 00202 SpriteEventListener* listener=eventListeners_.Get(i); 00203 listener->OnSpriteEvent(event,userData); 00204 } 00205 } 00206 00207
Reproduction/republishing of any material on this site without permission is strictly prohibited.
