diff options
Diffstat (limited to '')
-rw-r--r-- | ClientHamr/extantz/CDemo.cpp | 2 | ||||
-rw-r--r-- | ClientHamr/extantz/extantzCamera.cpp | 88 | ||||
-rw-r--r-- | ClientHamr/extantz/extantzCamera.h | 44 |
3 files changed, 32 insertions, 102 deletions
diff --git a/ClientHamr/extantz/CDemo.cpp b/ClientHamr/extantz/CDemo.cpp index 72e23e5..642adc3 100644 --- a/ClientHamr/extantz/CDemo.cpp +++ b/ClientHamr/extantz/CDemo.cpp | |||
@@ -191,7 +191,7 @@ void CDemo::switchToNextScene(GLData *gld) | |||
191 | } | 191 | } |
192 | timeForThisScene = -1; | 192 | timeForThisScene = -1; |
193 | 193 | ||
194 | gld->camera = addExtantzCamera(sm, 0, 100.0f, .4f, -1, false, 3.f, false, true); | 194 | gld->camera = addExtantzCamera(sm, NULL, -1); |
195 | camera = gld->camera; | 195 | camera = gld->camera; |
196 | camera->setPosition(core::vector3df(108, 140, -140)); | 196 | camera->setPosition(core::vector3df(108, 140, -140)); |
197 | camera->setFarValue(5000.0f); | 197 | camera->setFarValue(5000.0f); |
diff --git a/ClientHamr/extantz/extantzCamera.cpp b/ClientHamr/extantz/extantzCamera.cpp index cafc80b..f4554be 100644 --- a/ClientHamr/extantz/extantzCamera.cpp +++ b/ClientHamr/extantz/extantzCamera.cpp | |||
@@ -27,13 +27,13 @@ namespace scene | |||
27 | 27 | ||
28 | // Irrlicht hard codes a reference to the original FPS camera code inside it's scene manager. This is that code extracted so we can be more flexible. | 28 | // Irrlicht hard codes a reference to the original FPS camera code inside it's scene manager. This is that code extracted so we can be more flexible. |
29 | // TODO - Hmmm, Where's CursorControl come from? Ah, passed to the scene manager constructor, it's a GUI thing that we need to replace with an EFL thing. | 29 | // TODO - Hmmm, Where's CursorControl come from? Ah, passed to the scene manager constructor, it's a GUI thing that we need to replace with an EFL thing. |
30 | ICameraSceneNode *addExtantzCamera(ISceneManager* sm, ISceneNode* parent, f32 rotateSpeed, f32 moveSpeed, s32 id, bool noVerticalMovement, f32 jumpSpeed, bool invertMouseY, bool makeActive) | 30 | ICameraSceneNode *addExtantzCamera(ISceneManager* sm, ISceneNode* parent, s32 id) |
31 | { | 31 | { |
32 | ICameraSceneNode* node = sm->addCameraSceneNode(parent, core::vector3df(), core::vector3df(0, 0, 100), id, makeActive); | 32 | ICameraSceneNode* node = sm->addCameraSceneNode(parent, core::vector3df(), core::vector3df(0, 0, 100), id, true); |
33 | if (node) | 33 | if (node) |
34 | { | 34 | { |
35 | // ISceneNodeAnimator* anm = new extantzCamera(CursorControl, rotateSpeed, moveSpeed, jumpSpeed, noVerticalMovement, invertMouseY); | 35 | // ISceneNodeAnimator* anm = new extantzCamera(CursorControl); |
36 | ISceneNodeAnimator* anm = new extantzCamera(rotateSpeed, moveSpeed, jumpSpeed, noVerticalMovement, invertMouseY); | 36 | ISceneNodeAnimator* anm = new extantzCamera(); |
37 | 37 | ||
38 | // Bind the node's rotation to its target. This is consistent with 1.4.2 and below. | 38 | // Bind the node's rotation to its target. This is consistent with 1.4.2 and below. |
39 | node->bindTargetAndRotation(true); | 39 | node->bindTargetAndRotation(true); |
@@ -46,16 +46,19 @@ ICameraSceneNode *addExtantzCamera(ISceneManager* sm, ISceneNode* parent, f32 ro | |||
46 | 46 | ||
47 | 47 | ||
48 | //! constructor | 48 | //! constructor |
49 | //extantzCamera::extantzCamera(gui::ICursorControl* cursorControl, f32 rotateSpeed, f32 moveSpeed, f32 jumpSpeed, bool noVerticalMovement, bool invertY) | 49 | //extantzCamera::extantzCamera(gui::ICursorControl* cursorControl) |
50 | // : CursorControl(cursorControl), MaxVerticalAngle(88.0f), MoveSpeed(moveSpeed), RotateSpeed(rotateSpeed), JumpSpeed(jumpSpeed), | 50 | // : CursorControl(cursorControl), MaxVerticalAngle(88.0f), MoveSpeed(0.4f), RotateSpeed(100.0f), JumpSpeed(3.0f), |
51 | extantzCamera::extantzCamera(f32 rotateSpeed, f32 moveSpeed, f32 jumpSpeed, bool noVerticalMovement, bool invertY) | 51 | extantzCamera::extantzCamera() |
52 | : MaxVerticalAngle(88.0f), MoveSpeed(moveSpeed), RotateSpeed(rotateSpeed), JumpSpeed(jumpSpeed), | 52 | : MaxVerticalAngle(88.0f), MouseYDirection(1.0f), LastAnimationTime(0), NoVerticalMovement(false) |
53 | MouseYDirection(invertY ? -1.0f : 1.0f), LastAnimationTime(0), firstUpdate(true), NoVerticalMovement(noVerticalMovement) | ||
54 | { | 53 | { |
55 | #ifdef _DEBUG | 54 | #ifdef _DEBUG |
56 | setDebugName("extantzCamera"); | 55 | setDebugName("extantzCamera"); |
57 | #endif | 56 | #endif |
58 | 57 | ||
58 | move.MoveSpeed = 0.1f; | ||
59 | move.RotateSpeed = 1.0f; | ||
60 | move.JumpSpeed = 3.0f; | ||
61 | |||
59 | // if (CursorControl) | 62 | // if (CursorControl) |
60 | // CursorControl->grab(); | 63 | // CursorControl->grab(); |
61 | } | 64 | } |
@@ -87,7 +90,7 @@ void extantzCamera::animateNode(ISceneNode* node, u32 timeMs) | |||
87 | 90 | ||
88 | ICameraSceneNode* camera = static_cast<ICameraSceneNode*>(node); | 91 | ICameraSceneNode* camera = static_cast<ICameraSceneNode*>(node); |
89 | 92 | ||
90 | if (firstUpdate) | 93 | if (0 == LastAnimationTime) |
91 | { | 94 | { |
92 | camera->updateAbsolutePosition(); | 95 | camera->updateAbsolutePosition(); |
93 | // if (CursorControl ) | 96 | // if (CursorControl ) |
@@ -97,11 +100,10 @@ void extantzCamera::animateNode(ISceneNode* node, u32 timeMs) | |||
97 | // } | 100 | // } |
98 | 101 | ||
99 | LastAnimationTime = timeMs; | 102 | LastAnimationTime = timeMs; |
100 | |||
101 | firstUpdate = false; | ||
102 | } | 103 | } |
103 | 104 | ||
104 | // If the camera isn't the active camera, and receiving input, then don't process it. | 105 | // If the camera isn't the active camera, and receiving input, then don't process it. |
106 | // TODO - it never is, coz we are bypassing that, but can we replace this with something else? | ||
105 | if(!camera->isInputReceiverEnabled()) | 107 | if(!camera->isInputReceiverEnabled()) |
106 | { | 108 | { |
107 | // return; | 109 | // return; |
@@ -112,7 +114,7 @@ void extantzCamera::animateNode(ISceneNode* node, u32 timeMs) | |||
112 | return; | 114 | return; |
113 | 115 | ||
114 | // get time | 116 | // get time |
115 | f32 timeDiff = (f32) ( timeMs - LastAnimationTime ); | 117 | f32 timeDiff = (f32) (timeMs - LastAnimationTime); |
116 | LastAnimationTime = timeMs; | 118 | LastAnimationTime = timeMs; |
117 | 119 | ||
118 | // update position | 120 | // update position |
@@ -127,8 +129,8 @@ void extantzCamera::animateNode(ISceneNode* node, u32 timeMs) | |||
127 | { | 129 | { |
128 | if (CursorPos != CenterCursor) | 130 | if (CursorPos != CenterCursor) |
129 | { | 131 | { |
130 | relativeRotation.Y -= (0.5f - CursorPos.X) * RotateSpeed; | 132 | relativeRotation.Y -= (0.5f - CursorPos.X) * move.RotateSpeed; |
131 | relativeRotation.X -= (0.5f - CursorPos.Y) * RotateSpeed * MouseYDirection; | 133 | relativeRotation.X -= (0.5f - CursorPos.Y) * move.RotateSpeed * MouseYDirection; |
132 | 134 | ||
133 | // X < MaxVerticalAngle or X > 360-MaxVerticalAngle | 135 | // X < MaxVerticalAngle or X > 360-MaxVerticalAngle |
134 | 136 | ||
@@ -192,8 +194,7 @@ void extantzCamera::animateNode(ISceneNode* node, u32 timeMs) | |||
192 | 194 | ||
193 | movedir.normalize(); | 195 | movedir.normalize(); |
194 | 196 | ||
195 | // TODO - There is no turning left or right, flying, or the other things I'll need. So might as well create my own thing to replace the original FPS camera. | 197 | pos += movedir * timeDiff * move.MoveSpeed * move.x; |
196 | pos += movedir * timeDiff * MoveSpeed * move.x; | ||
197 | 198 | ||
198 | // strafing | 199 | // strafing |
199 | core::vector3df strafevect = target; | 200 | core::vector3df strafevect = target; |
@@ -204,7 +205,7 @@ void extantzCamera::animateNode(ISceneNode* node, u32 timeMs) | |||
204 | 205 | ||
205 | strafevect.normalize(); | 206 | strafevect.normalize(); |
206 | 207 | ||
207 | pos += strafevect * timeDiff * MoveSpeed * move.y; | 208 | pos += strafevect * timeDiff * move.MoveSpeed * move.y; |
208 | 209 | ||
209 | // For jumping, we find the collision response animator attached to our camera | 210 | // For jumping, we find the collision response animator attached to our camera |
210 | // and if it's not falling, we tell it to jump. | 211 | // and if it's not falling, we tell it to jump. |
@@ -220,7 +221,7 @@ void extantzCamera::animateNode(ISceneNode* node, u32 timeMs) | |||
220 | static_cast<ISceneNodeAnimatorCollisionResponse *>(*it); | 221 | static_cast<ISceneNodeAnimatorCollisionResponse *>(*it); |
221 | 222 | ||
222 | if(!collisionResponse->isFalling()) | 223 | if(!collisionResponse->isFalling()) |
223 | collisionResponse->jump(JumpSpeed); | 224 | collisionResponse->jump(move.JumpSpeed); |
224 | } | 225 | } |
225 | 226 | ||
226 | it++; | 227 | it++; |
@@ -236,55 +237,10 @@ void extantzCamera::animateNode(ISceneNode* node, u32 timeMs) | |||
236 | } | 237 | } |
237 | 238 | ||
238 | 239 | ||
239 | //! Sets the rotation speed | ||
240 | void extantzCamera::setRotateSpeed(f32 speed) | ||
241 | { | ||
242 | RotateSpeed = speed; | ||
243 | } | ||
244 | |||
245 | |||
246 | //! Sets the movement speed | ||
247 | void extantzCamera::setMoveSpeed(f32 speed) | ||
248 | { | ||
249 | MoveSpeed = speed; | ||
250 | } | ||
251 | |||
252 | |||
253 | //! Gets the rotation speed | ||
254 | f32 extantzCamera::getRotateSpeed() const | ||
255 | { | ||
256 | return RotateSpeed; | ||
257 | } | ||
258 | |||
259 | |||
260 | // Gets the movement speed | ||
261 | f32 extantzCamera::getMoveSpeed() const | ||
262 | { | ||
263 | return MoveSpeed; | ||
264 | } | ||
265 | |||
266 | |||
267 | //! Sets whether vertical movement should be allowed. | ||
268 | void extantzCamera::setVerticalMovement(bool allow) | ||
269 | { | ||
270 | NoVerticalMovement = !allow; | ||
271 | } | ||
272 | |||
273 | |||
274 | //! Sets whether the Y axis of the mouse should be inverted. | ||
275 | void extantzCamera::setInvertMouse(bool invert) | ||
276 | { | ||
277 | if (invert) | ||
278 | MouseYDirection = -1.0f; | ||
279 | else | ||
280 | MouseYDirection = 1.0f; | ||
281 | } | ||
282 | |||
283 | |||
284 | ISceneNodeAnimator* extantzCamera::createClone(ISceneNode* node, ISceneManager* newManager) | 240 | ISceneNodeAnimator* extantzCamera::createClone(ISceneNode* node, ISceneManager* newManager) |
285 | { | 241 | { |
286 | // extantzCamera *newAnimator = new extantzCamera(CursorControl, RotateSpeed, MoveSpeed, JumpSpeed, NoVerticalMovement); | 242 | // extantzCamera *newAnimator = new extantzCamera(CursorControl); |
287 | extantzCamera *newAnimator = new extantzCamera(RotateSpeed, MoveSpeed, JumpSpeed, NoVerticalMovement); | 243 | extantzCamera *newAnimator = new extantzCamera(); |
288 | return newAnimator; | 244 | return newAnimator; |
289 | } | 245 | } |
290 | 246 | ||
diff --git a/ClientHamr/extantz/extantzCamera.h b/ClientHamr/extantz/extantzCamera.h index fe548d9..9d74236 100644 --- a/ClientHamr/extantz/extantzCamera.h +++ b/ClientHamr/extantz/extantzCamera.h | |||
@@ -28,6 +28,7 @@ typedef struct | |||
28 | float x, y, z; | 28 | float x, y, z; |
29 | float r, s, t; | 29 | float r, s, t; |
30 | float jump; | 30 | float jump; |
31 | float JumpSpeed, RotateSpeed, MoveSpeed; | ||
31 | } cameraMove; | 32 | } cameraMove; |
32 | 33 | ||
33 | cameraMove *getCameraMove(ICameraSceneNode *camera); | 34 | cameraMove *getCameraMove(ICameraSceneNode *camera); |
@@ -46,15 +47,15 @@ namespace irr | |||
46 | { | 47 | { |
47 | namespace scene | 48 | namespace scene |
48 | { | 49 | { |
49 | ICameraSceneNode *addExtantzCamera(ISceneManager* sm, ISceneNode* parent, f32 rotateSpeed, f32 moveSpeed, s32 id, bool noVerticalMovement, f32 jumpSpeed, bool invertMouseY, bool makeActive); | 50 | ICameraSceneNode *addExtantzCamera(ISceneManager* sm, ISceneNode* parent, s32 id); |
50 | 51 | ||
51 | class extantzCamera : public ISceneNodeAnimator | 52 | class extantzCamera : public ISceneNodeAnimator |
52 | { | 53 | { |
53 | public: | 54 | public: |
54 | 55 | ||
55 | //! Constructor | 56 | //! Constructor |
56 | // extantzCamera(gui::ICursorControl* cursorControl, f32 rotateSpeed = 100.0f, f32 moveSpeed = .5f, f32 jumpSpeed=0.f, bool noVerticalMovement=false, bool invertY=false); | 57 | // extantzCamera(gui::ICursorControl* cursorControl); |
57 | extantzCamera(f32 rotateSpeed = 100.0f, f32 moveSpeed = .5f, f32 jumpSpeed=0.f, bool noVerticalMovement=false, bool invertY=false); | 58 | extantzCamera(); |
58 | 59 | ||
59 | //! Destructor | 60 | //! Destructor |
60 | virtual ~extantzCamera(); | 61 | virtual ~extantzCamera(); |
@@ -62,26 +63,6 @@ namespace scene | |||
62 | //! Animates the scene node, currently only works on cameras | 63 | //! Animates the scene node, currently only works on cameras |
63 | virtual void animateNode(ISceneNode* node, u32 timeMs); | 64 | virtual void animateNode(ISceneNode* node, u32 timeMs); |
64 | 65 | ||
65 | //! Returns the speed of movement in units per second | ||
66 | virtual f32 getMoveSpeed() const; | ||
67 | |||
68 | //! Sets the speed of movement in units per second | ||
69 | virtual void setMoveSpeed(f32 moveSpeed); | ||
70 | |||
71 | //! Returns the rotation speed | ||
72 | virtual f32 getRotateSpeed() const; | ||
73 | |||
74 | //! Set the rotation speed | ||
75 | virtual void setRotateSpeed(f32 rotateSpeed); | ||
76 | |||
77 | //! Sets whether vertical movement should be allowed. | ||
78 | virtual void setVerticalMovement(bool allow); | ||
79 | |||
80 | //! Sets whether the Y axis of the mouse should be inverted. | ||
81 | /** If enabled then moving the mouse down will cause | ||
82 | the camera to look up. It is disabled by default. */ | ||
83 | virtual void setInvertMouse(bool invert); | ||
84 | |||
85 | //! This animator will receive events when attached to the active camera | 66 | //! This animator will receive events when attached to the active camera |
86 | virtual bool isEventReceiverEnabled() const | 67 | virtual bool isEventReceiverEnabled() const |
87 | { | 68 | { |
@@ -100,23 +81,16 @@ namespace scene | |||
100 | done with it. */ | 81 | done with it. */ |
101 | virtual ISceneNodeAnimator* createClone(ISceneNode* node, ISceneManager* newManager=0); | 82 | virtual ISceneNodeAnimator* createClone(ISceneNode* node, ISceneManager* newManager=0); |
102 | 83 | ||
84 | bool NoVerticalMovement; | ||
85 | // -1.0f for inverted mouse, defaults to 1.0f | ||
86 | f32 MouseYDirection; | ||
87 | |||
103 | cameraMove move; | 88 | cameraMove move; |
104 | 89 | ||
105 | private: | 90 | private: |
106 | f32 MaxVerticalAngle; | 91 | f32 MaxVerticalAngle; |
107 | |||
108 | f32 MoveSpeed; | ||
109 | f32 RotateSpeed; | ||
110 | f32 JumpSpeed; | ||
111 | // -1.0f for inverted mouse, defaults to 1.0f | ||
112 | f32 MouseYDirection; | ||
113 | |||
114 | s32 LastAnimationTime; | 92 | s32 LastAnimationTime; |
115 | 93 | // core::position2d<f32> CenterCursor, CursorPos; | |
116 | core::position2d<f32> CenterCursor, CursorPos; | ||
117 | |||
118 | bool firstUpdate; | ||
119 | bool NoVerticalMovement; | ||
120 | }; | 94 | }; |
121 | }; | 95 | }; |
122 | }; | 96 | }; |