00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "ExManagerId.h"
00025
00026 bool ExManagerId::m_flag = false;
00027 ExManagerId* ExManagerId::m_instance = NULL;
00028
00029 ExManagerId* ExManagerId::CreateSingleton(void){
00030 Guard(ExManagerId* ExManagerId::CreateSingleton(void))
00031 if(!m_flag)
00032 {
00033 m_flag = true;
00034 m_instance = new ExManagerId;
00035 }else
00036 {
00037 std::cout<<"Error singleton already created"<<std::endl;
00038 }
00039 return m_instance;
00040 UnGuard
00041 }
00042
00043 ExManagerId::ExManagerId()
00044 {
00045 Guard(ExManagerId::ExManagerId())
00046 m_ExIdCounter=0;
00047 UnGuard
00048 }
00049
00050 ExManagerId::~ExManagerId()
00051 {
00052 Guard(ExManagerId::~ExManagerId())
00053 UnGuard
00054 }
00055
00057
00058 void ExManagerId::Reset(void)
00059 {
00060 Guard(ExManagerId::Reset(void))
00061 m_MapObjectInfo->clear();
00062 delete m_MapObjectInfo;
00063 m_ExIdCounter=0;
00064 Init();
00065 UnGuard
00066 }
00067
00068 void ExManagerId::Init(void)
00069 {
00070 Guard(ExManagerId::Init(void))
00071 m_MapObjectInfo=new std::map< ExNihilo::ExId , ExNihilo::ExObjectInfo , std::less <ExNihilo::ExId > >;
00072 UnGuard
00073 }
00074
00075 std::string ExManagerId::GetAviableName(std::string Name,std::string Type,int occu)
00076 {
00077 Guard(std::string ExManagerId::GetAviableName(std::string Name,std::string Type,int occu))
00078 if(GetObjectId(Name,Type)==-1)
00079 {
00080 return Name;
00081 }
00082
00083
00084 if(occu>0)
00085 {
00086 Name.erase(Name.end()-1,Name.end());
00087 }
00088 if(occu>10)
00089 {
00090 Name.erase(Name.end()-1,Name.end());
00091 }
00092 if(occu>100)
00093 {
00094 Name.erase(Name.end()-1,Name.end());
00095 }
00096 if(occu>1000)
00097 {
00098 Name.erase(Name.end()-1,Name.end());
00099 }
00100 if(occu>10000)
00101 {
00102 Name.erase(Name.end()-1,Name.end());
00103 }
00104 char buffer[255];
00105 memset(buffer,0,255);
00106 sprintf(buffer,"%s%d",Name.data(),occu);
00107
00108 return GetAviableName(buffer,Type,occu+1);
00109
00110 UnGuard
00111 }
00112
00113 ExNihilo::ExId ExManagerId::RecordObject(ExCObject &object)
00114 {
00115 Guard(ExNihilo::ExId ExManagerId::RecordObject(ExCObject &object))
00116 try
00117 {
00118 object.SetId(m_ExIdCounter);m_ExIdCounter++;
00119 std::string name(object.GetType());
00120 if(name.find(" *")<name.length())
00121 {
00122 name.erase(name.find(" *"),name.length()-name.find(" *"));
00123 }
00124 object.SetName(GetAviableName(object.GetName(),object.GetType(),0));
00125 object.SetType(name);
00126 object.SetFlux(Consol,FluxAction);
00127
00128
00129 ExNihilo::ExObjectInfo Info;
00130 Info.m_Id = object.GetId();
00131 Info.m_Name = object.GetName();
00132 Info.m_Type = object.GetType();
00133
00134 std::pair<ExNihilo::ExId,ExNihilo::ExObjectInfo> obj;
00135 obj.first=object.GetId();
00136 obj.second=Info;
00137 m_MapObjectInfo->insert(obj);
00138
00139
00140
00141 *Consol<<"ExManagerId:: New Id :"<<Info.m_Id<<" For name:"<<Info.m_Name<<" Type:"<<Info.m_Type<<std::endl;
00142 return Info.m_Id;
00143 }catch(...)
00144 {
00145 throw ExCExpRecordObject();
00146 }
00147 UnGuard
00148 }
00149
00150 ExNihilo::ExId ExManagerId::RecordObject(ExCObject *object)
00151 {
00152 Guard(ExNihilo::ExId ExManagerId::RecordObject(ExCObject *object))
00153 object->SetId(m_ExIdCounter);m_ExIdCounter++;
00154 std::string name(object->GetType());
00155 if(name.find(" *")<name.length())
00156 {
00157 name.erase(name.find(" *"),name.length()-name.find(" *"));
00158 }
00159 object->SetName(GetAviableName(object->GetName(),object->GetType(),0));
00160 object->SetType(name);
00161
00162 ExNihilo::ExObjectInfo Info;
00163 Info.m_Id = object->GetId();
00164 Info.m_Name = object->GetName();
00165 Info.m_Type = object->GetType();
00166
00167 std::pair<ExNihilo::ExId,ExNihilo::ExObjectInfo> obj;
00168 obj.first=object->GetId();
00169 obj.second=Info;
00170 m_MapObjectInfo->insert(obj);
00171
00172 *Consol<<"ExManagerId:: New Id :"<<Info.m_Id<<" For name:"<<Info.m_Name<<" Type:"<<Info.m_Type<<std::endl;
00173 return Info.m_Id;
00174 UnGuard
00175 }
00176
00177 ExNihilo::ExId ExManagerId::GetObjectId(std::string Name,std::string Type)
00178 {
00179 Guard(ExNihilo::ExId ExManagerId::GetObjectId(std::string Name,std::string Type))
00180 for(m_ItMapObjectInfo=m_MapObjectInfo->begin();m_ItMapObjectInfo!=m_MapObjectInfo->end();m_ItMapObjectInfo++)
00181 {
00182 if(Name==m_ItMapObjectInfo->second.m_Name)
00183 return m_ItMapObjectInfo->second.m_Id;
00184 }
00185 return -1;
00186 UnGuard
00187 }
00188
00189 std::string ExManagerId::GetObjectName(ExNihilo::ExId id)
00190 {
00191 Guard(std::string ExManagerId::GetObjectName(ExNihilo::ExId id))
00192 try
00193 {
00194 return m_MapObjectInfo->find(id)->second.m_Name;
00195 }
00196 catch(...)
00197 {
00198 return "NoName";
00199 }
00200 UnGuard
00201 }
00202
00203 std::string ExManagerId::GetObjectType(ExNihilo::ExId id)
00204 {
00205 Guard(std::string ExManagerId::GetObjectType(ExNihilo::ExId id))
00206 try
00207 {
00208 return m_MapObjectInfo->find(id)->second.m_Type;
00209 }
00210 catch(...)
00211 {
00212 return "NoName";
00213 }
00214 UnGuard
00215 }
00216
00217 void ExManagerId::List(void)
00218 {
00219 Guard(void ExManagerId::List(void))
00220 for(m_ItMapObjectInfo=m_MapObjectInfo->begin();m_ItMapObjectInfo!=m_MapObjectInfo->end();m_ItMapObjectInfo++)
00221 {
00222 *Consol<<"Id :"<<m_ItMapObjectInfo->second.m_Id<<" For name:"<<m_ItMapObjectInfo->second.m_Name<<" Type:"<<m_ItMapObjectInfo->second.m_Type<<std::endl;
00223 }
00224 UnGuard
00225 }
00226
00227 ExCAction ExManagerId::InputAction(ExCAction Action)
00228 {
00229 Guard(ExCAction ExManagerId::InputAction(ExCAction Action))
00230 switch(Action.m_Action)
00231 {
00232 case ID_LIST:
00233 List();
00234 break;
00235 }
00236 if(Action.m_NextAction){return *Action.m_NextAction;}
00237 else{return NOTHING;}
00238 UnGuard
00239 }
00240
00241 std::string ExManagerId::GetObjectManagerType(std::string ObjectType)
00242 {
00243 Guard(std::string ExManagerId::GetObjectManagerType(std::string ObjectType))
00244
00245 try
00246 {
00247
00248 if(strcmpi(ObjectType.data(),"ExCEntity")==0)return "ExManagerEntity";
00249
00250 if(strcmpi(ObjectType.data(),"ExCCamera")==0)return "ExManagerCamera";
00251 if(strcmpi(ObjectType.data(),"ExCCameraFree")==0)return "ExManagerCamera";
00252 if(strcmpi(ObjectType.data(),"ExCCameraChase")==0)return "ExManagerCamera";
00253 if(strcmpi(ObjectType.data(),"ExCCameraFirst")==0)return "ExManagerCamera";
00254 if(strcmpi(ObjectType.data(),"ExCCameraFlight")==0)return "ExManagerCamera";
00255
00256 if(strcmpi(ObjectType.data(),"ExCModel")==0)return "ExManagerModel";
00257 if(strcmpi(ObjectType.data(),"ExCModelASC")==0)return "ExManagerModel";
00258 if(strcmpi(ObjectType.data(),"ExCModelASE")==0)return "ExManagerModel";
00259 if(strcmpi(ObjectType.data(),"ExCModelEXM")==0)return "ExManagerModel";
00260 if(strcmpi(ObjectType.data(),"ExCModelMD")==0)return "ExManagerModel";
00261 if(strcmpi(ObjectType.data(),"ExCModelMD2")==0)return "ExManagerModel";
00262 if(strcmpi(ObjectType.data(),"ExCModelMD3")==0)return "ExManagerModel";
00263 if(strcmpi(ObjectType.data(),"ExCModel3DS")==0)return "ExManagerModel";
00264 if(strcmpi(ObjectType.data(),"ExCModelOBJ")==0)return "ExManagerModel";
00265
00266 if(strcmpi(ObjectType.data(),"ExCMesh")==0)return "ExManagerMesh";
00267 if(strcmpi(ObjectType.data(),"ExCMeshFireEffect")==0)return "ExManagerMesh";
00268 if(strcmpi(ObjectType.data(),"ExCMeshWaterEffect")==0)return "ExManagerMesh";
00269 if(strcmpi(ObjectType.data(),"ExCMeshSummonCylenderEffect")==0)return "ExManagerMesh";
00270 if(strcmpi(ObjectType.data(),"ExCMeshSmogEffect")==0)return "ExManagerMesh";
00271 if(strcmpi(ObjectType.data(),"ExCMeshWaterDisqueEffect")==0)return "ExManagerMesh";
00272 if(strcmpi(ObjectType.data(),"ExCMeshLOD3ds")==0)return "ExManagerMesh";
00273 if(strcmpi(ObjectType.data(),"ExCMeshSauronEffect")==0)return "ExManagerMesh";
00274 if(strcmpi(ObjectType.data(),"ExCMesh3ds")==0)return "ExManagerMesh";
00275 }
00276 catch(...)
00277 {
00278 return "Unknow manager";
00279 }
00280 UnGuard
00281 }
00282
00283