Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

Last change on this file since 10403 was 10403, checked in by patrick, 17 years ago

fading now works

File size: 5.4 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
25ObjectListDefinition(CameraMan);
26
27
28CREATE_SCRIPTABLE_CLASS(CameraMan,
29                        addMethod("changeCurrTarget", Executor2<CameraMan, lua_State*,const std::string&,const std::string&>(&CameraMan::changeCurrTarget))
30                        ->addMethod("changeTarget", Executor3<CameraMan, lua_State*, const std::string&, const std::string&,const std::string&>(&CameraMan::changeTarget))
31                        ->addMethod("setCam", Executor1<CameraMan, lua_State*, const std::string&>(&CameraMan::setCam))
32                        ->addMethod("togglFade", Executor0<CameraMan, lua_State*>(&CameraMan::togglFade))
33                        ->addMethod("getCurrCameraCoorX", Executor0ret<CameraMan, lua_State*,float>(&CameraMan::getCurrCameraCoorX))
34                        ->addMethod("getCurrCameraCoorY", Executor0ret<CameraMan, lua_State*,float>(&CameraMan::getCurrCameraCoorY))
35                        ->addMethod("getCurrCameraCoorZ", Executor0ret<CameraMan, lua_State*,float>(&CameraMan::getCurrCameraCoorZ))
36                       );
37
38
39CameraMan::CameraMan(const TiXmlElement* root)
40{
41  this->registerObject(this, CameraMan::_objectList);
42
43  this->nearClip = 1.0;
44  this->farClip = 1000.0;
45
46  this->fadeToBlack=new BlackScreen();
47
48  this->setCam( State::getCamera());
49
50  if (root != NULL)
51    this->loadParams(root);
52}
53
54
55void CameraMan::loadParams(const TiXmlElement* root)
56{
57  BaseObject::loadParams(root);
58
59  LOAD_PARAM_START_CYCLE(root, object);
60  {
61    this->createCam(object);
62  }
63  LOAD_PARAM_END_CYCLE(object);
64
65}
66
67
68void CameraMan::createCam(const TiXmlElement* root)
69{
70  //Camera* newCamera=new Camera(root);
71  this->cameras.push_back(new Camera(root));
72  cameras[cameras.size()-1]->target->detach();
73  cameras[cameras.size()-1]->setClipRegion(nearClip, farClip);
74
75}
76
77void CameraMan::setCam(int cameraNo)
78{
79  if (cameraNo<cameras.size())
80  {
81    this->setCam( cameras[cameraNo]);
82  }
83}
84
85void CameraMan::setCam(const std::string& camName)
86{
87  BaseObject* object = ObjectListBase::getBaseObject("Camera", camName);
88
89  if(object != NULL)
90  {
91    Camera* currentCam = dynamic_cast<Camera*>(object) ;
92
93    this->setCam(currentCam);
94    return;
95  }
96  printf("ERROR CAMERAMANAGER: Couldn't set camera : %s \n", camName.c_str());
97}
98
99
100void CameraMan::setCam(Camera* camera)
101{
102  if( camera == NULL)
103  {
104    PRINTF(0)("trying to add a zero camera! uiuiui!\n");
105  }
106  this->currentCam = camera;
107
108  State::setCamera(currentCam, currentCam->getTarget());
109  OrxSound::SoundEngine::getInstance()->setListener(currentCam);
110
111  // check if it is already added
112  if( ! this->cameraIsInVector(currentCam) )
113    this->cameras.push_back(currentCam);
114
115  this->fadeToBlack->setRelCoor(0., 0., 0.);
116  this->fadeToBlack->setParent(this->currentCam);
117}
118
119
120void CameraMan::moveCurrCam(int x, int y, int z)
121{
122  currentCam->target->trans(x,y,z);
123}
124
125
126void CameraMan::moveCam(int x, int y, int z, int camNo)
127{
128  cameras[camNo]->target->trans(x,y,z);
129}
130
131
132void CameraMan::changeTarget(int camNo,const std::string& className, const std::string& objectName)
133{
134  BaseObject* object = ObjectListBase::getBaseObject(className, objectName);
135  if( object != NULL && object->isA(PNode::staticClassID()))
136    cameras[camNo]->lookAt(dynamic_cast<PNode*>(object));
137}
138
139
140void CameraMan::changeTarget(const std::string& camName,const std::string& className, const std::string& objectName)
141{
142  BaseObject* object = ObjectListBase::getBaseObject(className, objectName);
143  BaseObject* newCam = ObjectListBase::getBaseObject("Camera", camName);
144  if( object != NULL && newCam != NULL && object->isA(PNode::staticClassID()))
145    dynamic_cast<Camera*>(newCam)->lookAt(dynamic_cast<PNode*>(object));
146}
147
148void CameraMan::changeCurrTarget(const std::string& className, const std::string& objectName)
149{
150  BaseObject* object = ObjectListBase::getBaseObject(className, objectName);
151  if( object != NULL && object->isA(PNode::staticClassID()))
152    currentCam->lookAt(dynamic_cast<PNode*>(object));
153}
154
155void CameraMan::atachCurrTarget(PNode* target)
156{
157  currentCam->target->atach(target);
158}
159
160void CameraMan::jumpCam(int x, int y, int z, int camNo)
161{
162  cameras[camNo]->target->jump(x, y, z);
163}
164
165
166
167void CameraMan::setClipRegion(float nearCli, float farCli)
168{
169  this->nearClip=nearCli;
170  this->farClip=farCli;
171
172  for(int i = 0; i < this->cameras.size(); i++)
173    cameras[i]->setClipRegion(nearCli, farCli);
174}
175
176
177void CameraMan::jumpCurrCam(int x, int y, int z)
178{
179  currentCam->target->jump(x, y, z);
180}
181
182
183
184
185void CameraMan::togglFade()
186{
187  if( this->fadeToBlack)
188    fadeToBlack->toggleFade();
189}
190
191
192
193bool CameraMan::cameraIsInVector(Camera* camera)
194{
195
196  for(std::vector<Camera*>::const_iterator it = cameras.begin(); it != cameras.end(); it++ )
197  {
198    if( (*it) == camera)
199    {
200      return true;
201    }
202  }
203  return false;
204
205
206}
207
208
209//how to get a class fkt pointer
210
211//BaseObject* object = ObjectListBase::getBaseObject(className, objectName);
212
213
214
215
216
217
218
219
220
221
222
223
224
225
Note: See TracBrowser for help on using the repository browser.