SpriteControllerManager.cpp
Go to the documentation of this file.00001 //*** SpriteControllerManager.cpp *** 00002 00003 #include "SpriteControllerManager.h" 00004 #include "Debug.h" 00005 #include "SpriteController.h" 00006 #include "ArrayIterator.h" 00007 00008 //*** Constructor *** 00009 00010 SpriteControllerManager::SpriteControllerManager() 00011 { 00012 } 00013 00014 00015 //*** Destructor *** 00016 00017 SpriteControllerManager::~SpriteControllerManager() 00018 { 00019 // Delete all controllers 00020 for (int i=0; i<spriteControllers_.GetItemCount(); i++) 00021 { 00022 SpriteController* spriteController=spriteControllers_.Get(i); 00023 delete spriteController; 00024 } 00025 } 00026 00027 00028 //*** Update *** 00029 00030 void SpriteControllerManager::Update(float deltaTime) 00031 { 00032 // Update all controllers 00033 for (int i=0; i<spriteControllers_.GetItemCount(); i++) 00034 { 00035 SpriteController* spriteController=spriteControllers_.Get(i); 00036 spriteController->Update(deltaTime); 00037 } 00038 00039 // Find controllers to delete 00040 for (int i=spriteControllers_.GetItemCount()-1; i>=0; i--) 00041 { 00042 SpriteController* spriteController=spriteControllers_.Get(i); 00043 if (spriteController->GetReferenceCount()==0) 00044 { 00045 ArrayIterator<SpriteController*> it(spriteControllers_); 00046 if (it.Find(spriteController)) 00047 { 00048 spriteControllers_.Remove(it); 00049 } 00050 delete spriteController; 00051 } 00052 } 00053 } 00054 00055 00056 //*** AcquireSpriteController *** 00057 00058 SpriteController* SpriteControllerManager::AcquireSpriteController(Sprite* sprite) 00059 { 00060 for (int i=0; i<spriteControllers_.GetItemCount(); i++) 00061 { 00062 SpriteController* spriteController=spriteControllers_.Get(i); 00063 if (spriteController->GetSprite()==sprite) 00064 { 00065 spriteController->IncreaseReferenceCount(); 00066 return spriteController; 00067 } 00068 } 00069 00070 SpriteController* spriteController=new SpriteController(sprite); 00071 spriteController->IncreaseReferenceCount(); 00072 spriteControllers_.Add(spriteController); 00073 00074 return spriteController; 00075 } 00076 00077 00078 //*** ReleaseSpriteController *** 00079 00080 void SpriteControllerManager::ReleaseSpriteController(SpriteController* spriteController) 00081 { 00082 spriteController->DecreaseReferenceCount(); 00083 if (spriteController->GetReferenceCount()==0) 00084 { 00085 ArrayIterator<SpriteController*> it(spriteControllers_); 00086 if (it.Find(spriteController)) 00087 { 00088 spriteControllers_.Remove(it); 00089 } 00090 delete spriteController; 00091 } 00092 } 00093 00094 00095 //*** GetActionCount *** 00096 00097 int SpriteControllerManager::GetActionCount(Sprite* sprite) const 00098 { 00099 for (int i=0; i<spriteControllers_.GetItemCount(); i++) 00100 { 00101 SpriteController* spriteController=spriteControllers_.Get(i); 00102 if (spriteController->GetSprite()==sprite) 00103 { 00104 return spriteController->GetActionCount(); 00105 } 00106 } 00107 00108 return 0; 00109 } 00110 00111 00112 //*** SpriteDeleted *** 00113 00114 void SpriteControllerManager::SpriteDeleted(Sprite* sprite) 00115 { 00116 for (int i=0; i<spriteControllers_.GetItemCount(); i++) 00117 { 00118 SpriteController* spriteController=spriteControllers_.Get(i); 00119 if (spriteController->GetSprite()==sprite) 00120 { 00121 spriteControllers_.Remove(i); 00122 delete spriteController; 00123 return; 00124 } 00125 } 00126 }
Reproduction/republishing of any material on this site without permission is strictly prohibited.
