Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/trunk/src/world_entities/cameraman.cc @ 10481

Last change on this file since 10481 was 10481, checked in by snellen, 19 years ago

setRelCoor(0,0,0) messed up the viewmode, fixed this by setting the viewmode again when ataching the camera to a WorldEntity

File size: 8.9 KB
Line 
1  /*
2   orxonox - the future of 3D-vertical-scrollers
3
4   Copyright (C) 2004 orx
5
6   This program is free software; you can redistribute it and/or modify
7   it under the terms of the GNU General Public License as published by
8   the Free Software Foundation; either version 2, or (at your option)
9   any later version.
10
11### File Specific:
12   main-programmer: Filip Gospodinov
13   co-programmer: Silvan Nellen
14*/
15
16#include "shell_command.h"
17#include "cameraman.h"
18#include "game_world_data.h"
19#include "state.h"
20#include "sound_engine.h"
21#include <string>
22#include "script_class.h"
23#include "loading/load_param_xml.h"
24#include "blackscreen.h"
25#include "p_node.h"
26#include "camera.h"
27
28ObjectListDefinition(CameraMan);
29
30SHELL_COMMAND(camerainfo, CameraMan, cameraInfo);
31
32
33CREATE_SCRIPTABLE_CLASS(CameraMan,
34                        addMethod("changeCurrTarget", Executor2<CameraMan, lua_State*,const std::string&,const std::string&>(&CameraMan::changeCurrTarget))
35                        ->addMethod("atachCurrCameraToWorldEntity", Executor2<CameraMan, lua_State*,const std::string&,const std::string&>(&CameraMan::atachCurrCameraToWorldEntity))
36                        ->addMethod("changeTarget", Executor3<CameraMan, lua_State*, const std::string&, const std::string&,const std::string&>(&CameraMan::changeTarget))
37                        ->addMethod("atachCameraToWorldEntity", Executor3<CameraMan, lua_State*,const std::string&,const std::string&,const std::string&>(&CameraMan::atachCameraToWorldEntity))
38                        ->addMethod("detachCurrCamera", Executor0<CameraMan, lua_State*>(&CameraMan::detachCurrCamera))
39                        ->addMethod("setCam", Executor1<CameraMan, lua_State*, const std::string&>(&CameraMan::setCam))
40                        ->addMethod("toggleFade", Executor0<CameraMan, lua_State*>(&CameraMan::togglFade))
41                        ->addMethod("initFadeBlack", Executor0<CameraMan, lua_State*>(&CameraMan::initFadeBlack))
42                        ->addMethod("getCurrCameraCoorX", Executor0ret<CameraMan, lua_State*,float>(&CameraMan::getCurrCameraCoorX))
43                        ->addMethod("getCurrCameraCoorY", Executor0ret<CameraMan, lua_State*,float>(&CameraMan::getCurrCameraCoorY))
44                        ->addMethod("getCurrCameraCoorZ", Executor0ret<CameraMan, lua_State*,float>(&CameraMan::getCurrCameraCoorZ))
45                        ->addMethod("jumpCurrCam", Executor3<CameraMan, lua_State*,float,float,float>(&CameraMan::jumpCurrCam))
46                       );
47
48
49CameraMan::CameraMan(const TiXmlElement* root)
50{
51  this->registerObject(this, CameraMan::_objectList);
52
53  this->nearClip = 1.0;
54  this->farClip = 1000.0;
55
56  this->fadeToBlack=new BlackScreen();
57
58  this->setCam( State::getCamera());
59
60  if (root != NULL)
61    this->loadParams(root);
62}
63
64
65void CameraMan::loadParams(const TiXmlElement* root)
66{
67  BaseObject::loadParams(root);
68  LoadParamXML(root, "Cameras", this, CameraMan, createCameras);
69}
70
71
72void CameraMan::createCameras(const TiXmlElement* camerasTag)
73{
74
75    LOAD_PARAM_START_CYCLE(camerasTag, object);
76    {
77      this->createCam(object);
78    }
79    LOAD_PARAM_END_CYCLE(object);
80
81}
82
83
84void CameraMan::createCam(const TiXmlElement* root)
85{
86  this->cameras.push_back(new Camera(root));
87  cameras[cameras.size()-1]->setClipRegion(nearClip, farClip);
88}
89
90
91
92
93void CameraMan::setCam(unsigned int cameraNo)
94{
95  if (cameraNo<cameras.size())
96  {
97    this->setCam( cameras[cameraNo]);
98  }
99}
100
101void CameraMan::setCam(const std::string& camName)
102{
103  BaseObject* object = ObjectListBase::getBaseObject("Camera", camName);
104
105  if(object != NULL)
106  {
107    this->setCam(dynamic_cast<Camera*>(object));
108    return;
109  }
110  printf("ERROR CAMERAMANAGER: Couldn't set camera : %s \n", camName.c_str());
111}
112
113
114void CameraMan::setCam(Camera* camera)
115{
116  if( camera == NULL)
117  {
118    PRINTF(0)("trying to add a zero camera! uiuiui!\n");
119    return;
120  }
121 
122  this->currentCam = camera;
123
124  State::setCamera(currentCam, currentCam->getTarget());
125  OrxSound::SoundEngine::getInstance()->setListener(currentCam);
126
127  // check if it is already added
128  if( ! this->cameraIsInVector(currentCam) )
129    this->cameras.push_back(currentCam);
130
131  this->fadeToBlack->setRelCoor(0., 0., 0.);
132  this->fadeToBlack->setParent(this->currentCam);
133}
134
135
136void CameraMan::moveCurrCam(int x, int y, int z)
137{
138  currentCam->target->trans(x,y,z);
139}
140
141
142void CameraMan::changeCurrTarget(const std::string& className, const std::string& objectName)
143{
144  BaseObject* object = ObjectListBase::getBaseObject(className, objectName);
145  if( object != NULL && object->isA(PNode::staticClassID()))
146  {
147    currentCam->lookAt(dynamic_cast<PNode*>(object));
148    State::setCamera(this->currentCam,  dynamic_cast<CameraTarget*>(object));
149  }
150}
151
152void CameraMan::atachCurrTarget(PNode* target)
153{
154  currentCam->target->atach(target);
155  currentCam->setViewMode(Camera::ViewNormal);
156  State::setCamera(this->currentCam,  dynamic_cast<CameraTarget*>(target));
157
158}
159
160void CameraMan::atachCurrCameraToWorldEntity(const std::string& className, const std::string& targetEntity)
161{
162  BaseObject* object = ObjectListBase::getBaseObject(className, targetEntity);
163
164  if(object != NULL && object->isA(PNode::staticClassID()))
165  {
166   this->atachCurrTarget(dynamic_cast<PNode*>(object));
167   return;
168  }
169
170printf("ERROR CAMERAMANAGER: Couldn't set camera to: %s %s \n", className.c_str(),targetEntity.c_str() );
171}
172
173
174
175void CameraMan::detachCurrCamera()
176{
177  currentCam->target->detach();
178}
179
180
181
182void CameraMan::jumpCurrCam(float x, float y, float z)
183{
184  currentCam->target->jump(x, y, z);
185}
186
187void CameraMan::togglFade()
188{
189  if( this->fadeToBlack)
190    fadeToBlack->toggleFade();
191}
192
193void CameraMan::initFadeBlack()
194{
195  if( this->fadeToBlack)
196    fadeToBlack->initFadeBlack();
197}
198
199
200void CameraMan::moveCam(int x, int y, int z, int camNo)
201{
202  cameras[camNo]->target->trans(x,y,z);
203}
204
205
206void CameraMan::changeTarget(int camNo,const std::string& className, const std::string& objectName)
207{
208  BaseObject* object = ObjectListBase::getBaseObject(className, objectName);
209  if( object != NULL && object->isA(PNode::staticClassID()))
210  {
211    cameras[camNo]->lookAt(dynamic_cast<PNode*>(object));
212  }
213}
214
215
216void CameraMan::changeTarget(const std::string& camName,const std::string& className, const std::string& objectName)
217{
218  BaseObject* object = ObjectListBase::getBaseObject(className, objectName);
219  BaseObject* newCam = ObjectListBase::getBaseObject("Camera", camName);
220  if( object != NULL && newCam != NULL && object->isA(PNode::staticClassID()))
221  {
222    dynamic_cast<Camera*>(newCam)->lookAt(dynamic_cast<PNode*>(object));
223    State::setCamera( dynamic_cast<Camera*>(newCam),  dynamic_cast<CameraTarget*>(object));
224  }
225}
226
227
228void CameraMan::atachCameraToWorldEntity(const std::string& cameraName, const std::string& className, const std::string& targetEntity)
229{
230  BaseObject* object = ObjectListBase::getBaseObject(className, targetEntity);
231  BaseObject* targetCam = ObjectListBase::getBaseObject("Camera", cameraName);
232
233  if( object != NULL && targetCam != NULL && object->isA(PNode::staticClassID()) )
234  {
235    dynamic_cast<Camera*>(targetCam)->target->atach(dynamic_cast<PNode*>(object));
236    dynamic_cast<Camera*>(targetCam)->setViewMode(Camera::ViewNormal);
237    State::setCamera(dynamic_cast<Camera*>(targetCam),  dynamic_cast<CameraTarget*>(object));
238    return;
239  }
240
241  printf("ERROR CAMERAMANAGER: Couldn't set camera %s to: %s %s \n", cameraName.c_str(), className.c_str(),targetEntity.c_str() );
242}
243
244
245
246void CameraMan::jumpCam(int x, int y, int z, int camNo)
247{
248  cameras[camNo]->target->jump(x, y, z);
249}
250
251
252
253void CameraMan::setClipRegion(float nearCli, float farCli)
254{
255  this->nearClip=nearCli;
256  this->farClip=farCli;
257
258  for(unsigned int i = 0; i < this->cameras.size(); i++)
259    cameras[i]->setClipRegion(nearCli, farCli);
260}
261
262
263
264bool CameraMan::cameraIsInVector(Camera* camera)
265{
266
267  for(std::vector<Camera*>::const_iterator it = cameras.begin(); it != cameras.end(); it++ )
268  {
269    if( (*it) == camera)
270    {
271      return true;
272    }
273  }
274  return false;
275
276
277}
278
279
280void CameraMan::cameraInfo()
281{
282  bool sameCam = (this->currentCam == State::getCamera());
283
284
285  PRINT(0)("==== CameraMan::cameraInfo ===\n");
286  PRINT(0)("=  Camera Name: %s\n", this->currentCam->getName().c_str());
287  PRINT(0)("=  Tests:\n");
288  PRINT(0)("==  State::Cam == this::Cam  %i\n", sameCam);
289  PRINT(0)("==  Parenting Informations:\n");
290  this->currentCam->debugNode(10);
291  PRINT(0)("==============================\n");
292}
293
294
295float CameraMan::getCurrCameraCoorX()
296{ return this->currentCam->getAbsCoorX(); }
297
298float CameraMan::getCurrCameraCoorY()
299{ return this->currentCam->getAbsCoorY(); }
300
301float CameraMan::getCurrCameraCoorZ()
302{ return this->currentCam->getAbsCoorZ(); }
303
304
305
306//how to get a class fkt pointer
307
308//BaseObject* object = ObjectListBase::getBaseObject(className, objectName);
309
310
311
312
313
314
315
316
317
318
319
320
321
322
Note: See TracBrowser for help on using the repository browser.