From 37be70434d2d1ddd6d691863740d64ddbf0b2921 Mon Sep 17 00:00:00 2001 From: David Walter Seikel Date: Sun, 27 Jan 2013 11:18:26 +1000 Subject: Move a bunch of stuff into the new cameraMove structure, and some clean ups. --- ClientHamr/extantz/CDemo.cpp | 2 +- ClientHamr/extantz/extantzCamera.cpp | 88 +++++++++--------------------------- ClientHamr/extantz/extantzCamera.h | 44 ++++-------------- 3 files changed, 32 insertions(+), 102 deletions(-) (limited to 'ClientHamr/extantz') 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) } timeForThisScene = -1; - gld->camera = addExtantzCamera(sm, 0, 100.0f, .4f, -1, false, 3.f, false, true); + gld->camera = addExtantzCamera(sm, NULL, -1); camera = gld->camera; camera->setPosition(core::vector3df(108, 140, -140)); 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 // 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. // 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. -ICameraSceneNode *addExtantzCamera(ISceneManager* sm, ISceneNode* parent, f32 rotateSpeed, f32 moveSpeed, s32 id, bool noVerticalMovement, f32 jumpSpeed, bool invertMouseY, bool makeActive) +ICameraSceneNode *addExtantzCamera(ISceneManager* sm, ISceneNode* parent, s32 id) { - ICameraSceneNode* node = sm->addCameraSceneNode(parent, core::vector3df(), core::vector3df(0, 0, 100), id, makeActive); + ICameraSceneNode* node = sm->addCameraSceneNode(parent, core::vector3df(), core::vector3df(0, 0, 100), id, true); if (node) { -// ISceneNodeAnimator* anm = new extantzCamera(CursorControl, rotateSpeed, moveSpeed, jumpSpeed, noVerticalMovement, invertMouseY); - ISceneNodeAnimator* anm = new extantzCamera(rotateSpeed, moveSpeed, jumpSpeed, noVerticalMovement, invertMouseY); +// ISceneNodeAnimator* anm = new extantzCamera(CursorControl); + ISceneNodeAnimator* anm = new extantzCamera(); // Bind the node's rotation to its target. This is consistent with 1.4.2 and below. node->bindTargetAndRotation(true); @@ -46,16 +46,19 @@ ICameraSceneNode *addExtantzCamera(ISceneManager* sm, ISceneNode* parent, f32 ro //! constructor -//extantzCamera::extantzCamera(gui::ICursorControl* cursorControl, f32 rotateSpeed, f32 moveSpeed, f32 jumpSpeed, bool noVerticalMovement, bool invertY) -// : CursorControl(cursorControl), MaxVerticalAngle(88.0f), MoveSpeed(moveSpeed), RotateSpeed(rotateSpeed), JumpSpeed(jumpSpeed), -extantzCamera::extantzCamera(f32 rotateSpeed, f32 moveSpeed, f32 jumpSpeed, bool noVerticalMovement, bool invertY) - : MaxVerticalAngle(88.0f), MoveSpeed(moveSpeed), RotateSpeed(rotateSpeed), JumpSpeed(jumpSpeed), - MouseYDirection(invertY ? -1.0f : 1.0f), LastAnimationTime(0), firstUpdate(true), NoVerticalMovement(noVerticalMovement) +//extantzCamera::extantzCamera(gui::ICursorControl* cursorControl) +// : CursorControl(cursorControl), MaxVerticalAngle(88.0f), MoveSpeed(0.4f), RotateSpeed(100.0f), JumpSpeed(3.0f), +extantzCamera::extantzCamera() + : MaxVerticalAngle(88.0f), MouseYDirection(1.0f), LastAnimationTime(0), NoVerticalMovement(false) { #ifdef _DEBUG setDebugName("extantzCamera"); #endif + move.MoveSpeed = 0.1f; + move.RotateSpeed = 1.0f; + move.JumpSpeed = 3.0f; + // if (CursorControl) // CursorControl->grab(); } @@ -87,7 +90,7 @@ void extantzCamera::animateNode(ISceneNode* node, u32 timeMs) ICameraSceneNode* camera = static_cast(node); - if (firstUpdate) + if (0 == LastAnimationTime) { camera->updateAbsolutePosition(); // if (CursorControl ) @@ -97,11 +100,10 @@ void extantzCamera::animateNode(ISceneNode* node, u32 timeMs) // } LastAnimationTime = timeMs; - - firstUpdate = false; } // If the camera isn't the active camera, and receiving input, then don't process it. + // TODO - it never is, coz we are bypassing that, but can we replace this with something else? if(!camera->isInputReceiverEnabled()) { // return; @@ -112,7 +114,7 @@ void extantzCamera::animateNode(ISceneNode* node, u32 timeMs) return; // get time - f32 timeDiff = (f32) ( timeMs - LastAnimationTime ); + f32 timeDiff = (f32) (timeMs - LastAnimationTime); LastAnimationTime = timeMs; // update position @@ -127,8 +129,8 @@ void extantzCamera::animateNode(ISceneNode* node, u32 timeMs) { if (CursorPos != CenterCursor) { - relativeRotation.Y -= (0.5f - CursorPos.X) * RotateSpeed; - relativeRotation.X -= (0.5f - CursorPos.Y) * RotateSpeed * MouseYDirection; + relativeRotation.Y -= (0.5f - CursorPos.X) * move.RotateSpeed; + relativeRotation.X -= (0.5f - CursorPos.Y) * move.RotateSpeed * MouseYDirection; // X < MaxVerticalAngle or X > 360-MaxVerticalAngle @@ -192,8 +194,7 @@ void extantzCamera::animateNode(ISceneNode* node, u32 timeMs) movedir.normalize(); - // 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. - pos += movedir * timeDiff * MoveSpeed * move.x; + pos += movedir * timeDiff * move.MoveSpeed * move.x; // strafing core::vector3df strafevect = target; @@ -204,7 +205,7 @@ void extantzCamera::animateNode(ISceneNode* node, u32 timeMs) strafevect.normalize(); - pos += strafevect * timeDiff * MoveSpeed * move.y; + pos += strafevect * timeDiff * move.MoveSpeed * move.y; // For jumping, we find the collision response animator attached to our camera // and if it's not falling, we tell it to jump. @@ -220,7 +221,7 @@ void extantzCamera::animateNode(ISceneNode* node, u32 timeMs) static_cast(*it); if(!collisionResponse->isFalling()) - collisionResponse->jump(JumpSpeed); + collisionResponse->jump(move.JumpSpeed); } it++; @@ -236,55 +237,10 @@ void extantzCamera::animateNode(ISceneNode* node, u32 timeMs) } -//! Sets the rotation speed -void extantzCamera::setRotateSpeed(f32 speed) -{ - RotateSpeed = speed; -} - - -//! Sets the movement speed -void extantzCamera::setMoveSpeed(f32 speed) -{ - MoveSpeed = speed; -} - - -//! Gets the rotation speed -f32 extantzCamera::getRotateSpeed() const -{ - return RotateSpeed; -} - - -// Gets the movement speed -f32 extantzCamera::getMoveSpeed() const -{ - return MoveSpeed; -} - - -//! Sets whether vertical movement should be allowed. -void extantzCamera::setVerticalMovement(bool allow) -{ - NoVerticalMovement = !allow; -} - - -//! Sets whether the Y axis of the mouse should be inverted. -void extantzCamera::setInvertMouse(bool invert) -{ - if (invert) - MouseYDirection = -1.0f; - else - MouseYDirection = 1.0f; -} - - ISceneNodeAnimator* extantzCamera::createClone(ISceneNode* node, ISceneManager* newManager) { -// extantzCamera *newAnimator = new extantzCamera(CursorControl, RotateSpeed, MoveSpeed, JumpSpeed, NoVerticalMovement); - extantzCamera *newAnimator = new extantzCamera(RotateSpeed, MoveSpeed, JumpSpeed, NoVerticalMovement); +// extantzCamera *newAnimator = new extantzCamera(CursorControl); + extantzCamera *newAnimator = new extantzCamera(); return newAnimator; } 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 float x, y, z; float r, s, t; float jump; + float JumpSpeed, RotateSpeed, MoveSpeed; } cameraMove; cameraMove *getCameraMove(ICameraSceneNode *camera); @@ -46,15 +47,15 @@ namespace irr { namespace scene { - ICameraSceneNode *addExtantzCamera(ISceneManager* sm, ISceneNode* parent, f32 rotateSpeed, f32 moveSpeed, s32 id, bool noVerticalMovement, f32 jumpSpeed, bool invertMouseY, bool makeActive); + ICameraSceneNode *addExtantzCamera(ISceneManager* sm, ISceneNode* parent, s32 id); class extantzCamera : public ISceneNodeAnimator { public: //! Constructor -// extantzCamera(gui::ICursorControl* cursorControl, f32 rotateSpeed = 100.0f, f32 moveSpeed = .5f, f32 jumpSpeed=0.f, bool noVerticalMovement=false, bool invertY=false); - extantzCamera(f32 rotateSpeed = 100.0f, f32 moveSpeed = .5f, f32 jumpSpeed=0.f, bool noVerticalMovement=false, bool invertY=false); +// extantzCamera(gui::ICursorControl* cursorControl); + extantzCamera(); //! Destructor virtual ~extantzCamera(); @@ -62,26 +63,6 @@ namespace scene //! Animates the scene node, currently only works on cameras virtual void animateNode(ISceneNode* node, u32 timeMs); - //! Returns the speed of movement in units per second - virtual f32 getMoveSpeed() const; - - //! Sets the speed of movement in units per second - virtual void setMoveSpeed(f32 moveSpeed); - - //! Returns the rotation speed - virtual f32 getRotateSpeed() const; - - //! Set the rotation speed - virtual void setRotateSpeed(f32 rotateSpeed); - - //! Sets whether vertical movement should be allowed. - virtual void setVerticalMovement(bool allow); - - //! Sets whether the Y axis of the mouse should be inverted. - /** If enabled then moving the mouse down will cause - the camera to look up. It is disabled by default. */ - virtual void setInvertMouse(bool invert); - //! This animator will receive events when attached to the active camera virtual bool isEventReceiverEnabled() const { @@ -100,23 +81,16 @@ namespace scene done with it. */ virtual ISceneNodeAnimator* createClone(ISceneNode* node, ISceneManager* newManager=0); + bool NoVerticalMovement; + // -1.0f for inverted mouse, defaults to 1.0f + f32 MouseYDirection; + cameraMove move; private: f32 MaxVerticalAngle; - - f32 MoveSpeed; - f32 RotateSpeed; - f32 JumpSpeed; - // -1.0f for inverted mouse, defaults to 1.0f - f32 MouseYDirection; - s32 LastAnimationTime; - - core::position2d CenterCursor, CursorPos; - - bool firstUpdate; - bool NoVerticalMovement; +// core::position2d CenterCursor, CursorPos; }; }; }; -- cgit v1.1