00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "ExManagerCamera.h"
00024
00025 bool ExManagerCamera::m_flag = false;
00026 ExManagerCamera* ExManagerCamera::m_instance = NULL;
00027
00028 ExManagerCamera* ExManagerCamera::CreateSingleton(void){
00029 Guard(ExManagerCamera* ExManagerCamera::CreateSingleton(void))
00030 if(!m_flag)
00031 {
00032 m_flag = true;
00033 m_instance = new ExManagerCamera;
00034 }else
00035 {
00036 std::cout<<"Error singleton already created"<<std::endl;
00037 }
00038 return m_instance;
00039 UnGuard
00040 }
00041
00042 ExManagerCamera::ExManagerCamera(void)
00043 {
00044
00045 }
00046
00047 ExManagerCamera::~ExManagerCamera(void)
00048 {
00049 }
00050
00051 void ExManagerCamera::Reset(void)
00052 {
00053 Guard(void ExManagerCamera::Reset(void))
00054 ExManagerObject<ExCCamera *>::Reset();
00055 Init();
00056 UnGuard
00057 }
00058
00059 void ExManagerCamera::Init(void)
00060 {
00061 Guard(void ExManagerCamera::Init(void))
00062 ExManagerObject<ExCCamera *>::Init();
00063 AddCamera("Camera",CAMERA_DEFAULT);
00064 AddCamera("Camera2",CAMERA_DEFAULT);
00065 AddCamera("Camera3",CAMERA_DEFAULT);
00066 AddCamera("CameraChase",CAMERA_CHASE);
00067 AddCamera("CameraFirst",CAMERA_FIRST);
00068 AddCamera("CameraFlight",CAMERA_FLIGHT);
00069 SetCurrentObject("Camera");
00070 UnGuard
00071 }
00072 void ExManagerCamera::AddCamera(std::string CameraName,CameraType Type)
00073 {
00074 Guard(void ExManagerCamera::AddCamera(std::string CameraName,CameraType Type))
00075 ExCCamera *Camera;
00076 switch(Type)
00077 {
00078 case CAMERA_DEFAULT:
00079 Camera = new ExCCamera;
00080 break;
00081 case CAMERA_FREE:
00082 Camera = new ExCCameraFree;
00083 break;
00084 case CAMERA_CHASE:
00085 Camera = new ExCCameraChase;
00086 ((ExCCameraChase *)Camera)->SetManagerModel(ManagerModel);
00087 break;
00088 case CAMERA_FIRST:
00089 Camera= new ExCCameraFirst;
00090 ((ExCCameraFirst *)Camera)->SetManagerModel(ManagerModel);
00091 break;
00092 case CAMERA_FLIGHT:
00093 Camera= new ExCCameraFlight;
00094 break;
00095 }
00096 Camera->SetName(CameraName);
00097 ExManagerObject<ExCCamera *>::Add(Camera);
00098 UnGuard
00099 }
00100 void ExManagerCamera::Draw(void)
00101 {
00102 Guard(void ExManagerCamera::Draw(void))
00103 glMatrixMode(GL_PROJECTION);
00104 glLoadIdentity();
00105 glViewport(0,0,glutGet(GLUT_WINDOW_WIDTH),glutGet(GLUT_WINDOW_HEIGHT));
00106 gluPerspective(GetCurrentObject()->GetZoom(),
00107 (1.0f *glutGet(GLUT_WINDOW_WIDTH)/glutGet(GLUT_WINDOW_HEIGHT)),
00108 GetCurrentObject()->GetClipNear(),
00109 GetCurrentObject()->GetClipFar());
00110 glMatrixMode(GL_MODELVIEW);
00111 glLoadIdentity();
00112
00113 for(m_ItMap=m_Map->begin();m_ItMap!=m_Map->end();m_ItMap++)
00114 {
00115 m_ItMap->second->DrawCameraGizmo();
00116 }
00117 GetCurrentObject()->Draw();
00118 UnGuard
00119 }
00120
00121 ExCCamera* ExManagerCamera::GetCurrentObject(void)
00122 {
00123 Guard(ExCCamera* ExManagerCamera::GetCurrentObject(void))
00124 return GetObject(m_CurrentObjectId);
00125 UnGuard
00126 }
00127
00128 ExCCamera * ExManagerCamera::GetObject(ExNihilo::ExId id)
00129 {
00130 Guard(ExCCamera *ExManagerCamera::GetObject(ExNihilo::ExId id))
00131 for(m_ItMap=m_Map->begin();m_ItMap!=m_Map->end();m_ItMap++)
00132 {
00133 if(m_ItMap->second->GetId()==id)return m_ItMap->second;
00134 }
00135 return NULL;
00136 UnGuard
00137 }
00138
00139 ExCAction ExManagerCamera::InputCommand(ExCCommand Command)
00140 {
00141 Guard(ExManagerCamera::InputCommand(ExCCommand Command))
00142 if(GetCurrentObject()==NULL)return NOTHING;
00143 return NOTHING;
00144 UnGuard
00145 }
00146
00147 ExCAction ExManagerCamera::InputAction(ExCAction Action)
00148 {
00149 Guard(ExManagerCamera::InputAction(ExCAction Action))
00150 switch(Action.m_Action)
00151 {
00152 case CAMERA_CURRENT_INCREASE_SPEED:
00153 GetCurrentObject()->m_speed++;
00154 break;
00155
00156 case CAMERA_CURRENT_DECREASE_SPEED:
00157 GetCurrentObject()->m_speed--;
00158 break;
00159
00160 case CAMERA_CURRENT_FULL_STOP:
00161 GetCurrentObject()->m_speed=0;
00162 break;
00163
00164 case CAMERA_CURRENT_START_ROTATEX_UP:
00165 GetCurrentObject()->StartAction(ROTATE_X_UP );
00166 break;
00167
00168 case CAMERA_CURRENT_STOP_ROTATEX_UP:
00169 GetCurrentObject()->StopAction(ROTATE_X_UP);
00170 break;
00171
00172 case CAMERA_CURRENT_ROTATEX_UP:
00173 GetCurrentObject()->m_Angle.IncX(2);
00174 break;
00175
00176 case CAMERA_CURRENT_START_ROTATEX_DOWN:
00177 GetCurrentObject()->StartAction(ROTATE_X_DOWN);
00178 break;
00179
00180 case CAMERA_CURRENT_STOP_ROTATEX_DOWN:
00181 GetCurrentObject()->StopAction(ROTATE_X_DOWN);
00182 break;
00183
00184 case CAMERA_CURRENT_ROTATEX_DOWN:
00185 GetCurrentObject()->m_Angle.DecX(2);
00186 break;
00187
00188 case CAMERA_CURRENT_START_ROTATEZ_UP:
00189 GetCurrentObject()->StartAction(ROTATE_Z_UP);
00190 break;
00191
00192 case CAMERA_CURRENT_STOP_ROTATEZ_UP:
00193 GetCurrentObject()->StopAction(ROTATE_Z_UP);
00194 break;
00195
00196 case CAMERA_CURRENT_ROTATEZ_UP:
00197 GetCurrentObject()->m_Angle.IncZ(2);
00198 break;
00199
00200 case CAMERA_CURRENT_START_ROTATEZ_DOWN:
00201 GetCurrentObject()->StartAction(ROTATE_Z_DOWN);
00202 break;
00203
00204 case CAMERA_CURRENT_STOP_ROTATEZ_DOWN:
00205 GetCurrentObject()->StopAction(ROTATE_Z_DOWN);
00206 break;
00207
00208 case CAMERA_CURRENT_ROTATEZ_DOWN:
00209 GetCurrentObject()->m_Angle.DecZ(2);
00210 break;
00211
00212 case CAMERA_CURRENT_START_ROTATEY_UP:
00213 GetCurrentObject()->StartAction(ROTATE_Y_UP);
00214 break;
00215
00216 case CAMERA_CURRENT_STOP_ROTATEY_UP:
00217 GetCurrentObject()->StopAction(ROTATE_Y_UP);
00218 break;
00219
00220 case CAMERA_CURRENT_ROTATEY_UP:
00221 GetCurrentObject()->m_Angle.IncY(2);
00222 break;
00223
00224 case CAMERA_CURRENT_START_ROTATEY_DOWN:
00225 GetCurrentObject()->StartAction(ROTATE_Y_DOWN);
00226 break;
00227
00228 case CAMERA_CURRENT_STOP_ROTATEY_DOWN:
00229 GetCurrentObject()->StopAction(ROTATE_Y_DOWN);
00230 break;
00231
00232 case CAMERA_CURRENT_ROTATEY_DOWN:
00233 GetCurrentObject()->m_Angle.DecY(2);
00234 break;
00235
00236 case CAMERA_NEXT_CAM:
00237 NextObject();
00238 break;
00239 case CAMERA_PREV_CAM:
00240 PreviousObject();
00241 break;
00242
00243 case CAMERA_CURRENT_INCREASE_ZOOM:
00244 GetCurrentObject()->ZoomOut();
00245 break;
00246 case CAMERA_CURRENT_START_INCREASE_ZOOM:
00247 GetCurrentObject()->StartAction(ZOOM_UP);
00248 break;
00249 case CAMERA_CURRENT_STOP_INCREASE_ZOOM:
00250 GetCurrentObject()->StopAction(ZOOM_UP);
00251 break;
00252
00253 case CAMERA_CURRENT_DECREASE_ZOOM:
00254 GetCurrentObject()->ZoomIn();
00255 break;
00256 case CAMERA_CURRENT_START_DECREASE_ZOOM:
00257 GetCurrentObject()->StartAction(ZOOM_DOWN);
00258 break;
00259 case CAMERA_CURRENT_STOP_DECREASE_ZOOM:
00260 GetCurrentObject()->StopAction(ZOOM_DOWN);
00261 break;
00262 case CAMERA_SET_POS_X:
00263 GetCurrentObject()->m_Position.SetX(atof(Action.m_Param.data()));
00264 break;
00265 case CAMERA_SET_POS_Y:
00266 GetCurrentObject()->m_Position.SetY(atof(Action.m_Param.data()));
00267 break;
00268 case CAMERA_SET_POS_Z:
00269 GetCurrentObject()->m_Position.SetZ(atof(Action.m_Param.data()));
00270 break;
00271 case CAMERA_SET_TARGET_POS_X:
00272 GetCurrentObject()->m_Target.SetX(atof(Action.m_Param.data()));
00273 break;
00274 case CAMERA_SET_TARGET_POS_Y:
00275 GetCurrentObject()->m_Target.SetY(atof(Action.m_Param.data()));
00276 break;
00277 case CAMERA_SET_TARGET_POS_Z:
00278 GetCurrentObject()->m_Target.SetZ(atof(Action.m_Param.data()));
00279 break;
00280 case CAMERA_SET_ANGLE_X:
00281 GetCurrentObject()->m_Angle.SetX(atof(Action.m_Param.data()));
00282 break;
00283 case CAMERA_SET_ANGLE_Y:
00284 GetCurrentObject()->m_Angle.SetY(atof(Action.m_Param.data()));
00285 break;
00286 case CAMERA_SET_ANGLE_Z:
00287 GetCurrentObject()->m_Angle.SetZ(atof(Action.m_Param.data()));
00288 break;
00289 case CAMERA_CURRENT_SHOW_INFO:
00290 GetCurrentObject()->SetShowInfoState(true);
00291 break;
00292 case CAMERA_CURRENT_HIDE_INFO:
00293 GetCurrentObject()->SetShowInfoState(false);
00294 break;
00295
00296
00297
00298 case CAMERA_CURRENT_START_INCREASE_AROUND:
00299 if(strcmp("class ExCCameraChase",GetCurrentObject()->GetType().data())==0)
00300 {
00301 GetCurrentObject()->StartAction(ANGLE_AROUND_TARGET_UP);
00302 }
00303 break;
00304 case CAMERA_CURRENT_STOP_INCREASE_AROUND:
00305 if(strcmp("class ExCCameraChase",GetCurrentObject()->GetType().data())==0)
00306 {
00307 GetCurrentObject()->StopAction(ANGLE_AROUND_TARGET_UP);
00308 }
00309 break;
00310 case CAMERA_CURRENT_START_DECREASE_AROUND:
00311 if(strcmp("class ExCCameraChase",GetCurrentObject()->GetType().data())==0)
00312 {
00313 GetCurrentObject()->StartAction(ANGLE_AROUND_TARGET_DOWN);
00314 }
00315 break;
00316 case CAMERA_CURRENT_STOP_DECREASE_AROUND:
00317 if(strcmp("class ExCCameraChase",GetCurrentObject()->GetType().data())==0)
00318 {
00319 GetCurrentObject()->StopAction(ANGLE_AROUND_TARGET_DOWN);
00320 }
00321 break;
00322
00323 case CAMERA_CURRENT_START_INCREASE_DISTANCE:
00324 if(strcmp("class ExCCameraChase",GetCurrentObject()->GetType().data())==0)
00325 {
00326 GetCurrentObject()->StartAction(DISTANCE_FROM_TARGET_UP);
00327 }
00328 break;
00329 case CAMERA_CURRENT_STOP_INCREASE_DISTANCE:
00330 if(strcmp("class ExCCameraChase",GetCurrentObject()->GetType().data())==0)
00331 {
00332 GetCurrentObject()->StopAction(DISTANCE_FROM_TARGET_UP);
00333 }
00334 break;
00335 case CAMERA_CURRENT_START_DECREASE_DISTANCE:
00336 if(strcmp("class ExCCameraChase",GetCurrentObject()->GetType().data())==0)
00337 {
00338 GetCurrentObject()->StartAction(DISTANCE_FROM_TARGET_DOWN);
00339 }
00340 break;
00341 case CAMERA_CURRENT_STOP_DECREASE_DISTANCE:
00342 if(strcmp("class ExCCameraChase",GetCurrentObject()->GetType().data())==0)
00343 {
00344 GetCurrentObject()->StopAction(DISTANCE_FROM_TARGET_DOWN);
00345 }
00346 break;
00347
00348 case CAMERA_CURRENT_START_INCREASE_HEIGHT:
00349 if(strcmp("class ExCCameraChase",GetCurrentObject()->GetType().data())==0)
00350 {
00351 GetCurrentObject()->StartAction(HEIGHT_FROM_TARGET_UP);
00352 }
00353 break;
00354 case CAMERA_CURRENT_STOP_INCREASE_HEIGHT:
00355 if(strcmp("class ExCCameraChase",GetCurrentObject()->GetType().data())==0)
00356 {
00357 GetCurrentObject()->StopAction(HEIGHT_FROM_TARGET_UP);
00358 }
00359 break;
00360 case CAMERA_CURRENT_START_DECREASE_HEIGHT:
00361 if(strcmp("class ExCCameraChase",GetCurrentObject()->GetType().data())==0)
00362 {
00363 GetCurrentObject()->StartAction(HEIGHT_FROM_TARGET_DOWN);
00364 }
00365 break;
00366 case CAMERA_CURRENT_STOP_DECREASE_HEIGHT:
00367 if(strcmp("class ExCCameraChase",GetCurrentObject()->GetType().data())==0)
00368 {
00369 GetCurrentObject()->StopAction(HEIGHT_FROM_TARGET_DOWN);
00370 }
00371 break;
00372 default:
00373 *Consol<<"Can not file action in CAMERA_ACTION_MAP"<<std::endl;
00374 break;
00375 }
00376 return NOTHING;
00377 UnGuard
00378 }