forked from teamnwah/openmw-tes3coop
update camera code, add idle time
This commit is contained in:
parent
14f293882c
commit
b8e56d61d3
4 changed files with 63 additions and 20 deletions
|
@ -46,6 +46,7 @@ namespace MWInput
|
||||||
, mCameraYMultiplier (Settings::Manager::getFloat("camera y multiplier", "Input"))
|
, mCameraYMultiplier (Settings::Manager::getFloat("camera y multiplier", "Input"))
|
||||||
, mUIYMultiplier (Settings::Manager::getFloat("ui y multiplier", "Input"))
|
, mUIYMultiplier (Settings::Manager::getFloat("ui y multiplier", "Input"))
|
||||||
, mPreviewPOVDelay(0.f)
|
, mPreviewPOVDelay(0.f)
|
||||||
|
, mTimeIdle(0.f)
|
||||||
{
|
{
|
||||||
Ogre::RenderWindow* window = ogre.getWindow ();
|
Ogre::RenderWindow* window = ogre.getWindow ();
|
||||||
size_t windowHnd;
|
size_t windowHnd;
|
||||||
|
@ -164,24 +165,30 @@ namespace MWInput
|
||||||
toggleConsole ();
|
toggleConsole ();
|
||||||
break;
|
break;
|
||||||
case A_Activate:
|
case A_Activate:
|
||||||
|
resetIdleTime();
|
||||||
activate();
|
activate();
|
||||||
break;
|
break;
|
||||||
case A_Journal:
|
case A_Journal:
|
||||||
toggleJournal ();
|
toggleJournal ();
|
||||||
break;
|
break;
|
||||||
case A_AutoMove:
|
case A_AutoMove:
|
||||||
|
resetIdleTime();
|
||||||
toggleAutoMove ();
|
toggleAutoMove ();
|
||||||
break;
|
break;
|
||||||
case A_ToggleSneak:
|
case A_ToggleSneak:
|
||||||
/// \todo implement
|
/// \todo implement
|
||||||
|
resetIdleTime();
|
||||||
break;
|
break;
|
||||||
case A_ToggleWalk:
|
case A_ToggleWalk:
|
||||||
|
resetIdleTime();
|
||||||
toggleWalking ();
|
toggleWalking ();
|
||||||
break;
|
break;
|
||||||
case A_ToggleWeapon:
|
case A_ToggleWeapon:
|
||||||
|
resetIdleTime();
|
||||||
toggleWeapon ();
|
toggleWeapon ();
|
||||||
break;
|
break;
|
||||||
case A_ToggleSpell:
|
case A_ToggleSpell:
|
||||||
|
resetIdleTime();
|
||||||
toggleSpell ();
|
toggleSpell ();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -265,6 +272,18 @@ namespace MWInput
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (actionIsActive(A_MoveForward) ||
|
||||||
|
actionIsActive(A_MoveBackward) ||
|
||||||
|
actionIsActive(A_MoveLeft) ||
|
||||||
|
actionIsActive(A_MoveRight) ||
|
||||||
|
actionIsActive(A_Jump) ||
|
||||||
|
actionIsActive(A_Crouch) ||
|
||||||
|
actionIsActive(A_TogglePOV))
|
||||||
|
{
|
||||||
|
resetIdleTime();
|
||||||
|
} else {
|
||||||
|
updateIdleTime(dt);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void InputManager::setDragDrop(bool dragDrop)
|
void InputManager::setDragDrop(bool dragDrop)
|
||||||
|
@ -402,6 +421,8 @@ namespace MWInput
|
||||||
|
|
||||||
if (mMouseLookEnabled)
|
if (mMouseLookEnabled)
|
||||||
{
|
{
|
||||||
|
resetIdleTime();
|
||||||
|
|
||||||
float x = arg.state.X.rel * mCameraSensitivity * 0.2;
|
float x = arg.state.X.rel * mCameraSensitivity * 0.2;
|
||||||
float y = arg.state.Y.rel * mCameraSensitivity * 0.2 * (mInvertY ? -1 : 1) * mUIYMultiplier;
|
float y = arg.state.Y.rel * mCameraSensitivity * 0.2 * (mInvertY ? -1 : 1) * mUIYMultiplier;
|
||||||
|
|
||||||
|
@ -528,6 +549,25 @@ namespace MWInput
|
||||||
Ogre::Root::getSingleton().queueEndRendering ();
|
Ogre::Root::getSingleton().queueEndRendering ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void InputManager::resetIdleTime()
|
||||||
|
{
|
||||||
|
if (mTimeIdle < 0) {
|
||||||
|
MWBase::Environment::get().getWorld()->toggleVanityMode(false, false);
|
||||||
|
}
|
||||||
|
mTimeIdle = 0.f;
|
||||||
|
}
|
||||||
|
|
||||||
|
void InputManager::updateIdleTime(float dt)
|
||||||
|
{
|
||||||
|
if (mTimeIdle >= 0.f) {
|
||||||
|
mTimeIdle += dt;
|
||||||
|
}
|
||||||
|
if (mTimeIdle > 30.f) {
|
||||||
|
MWBase::Environment::get().getWorld()->toggleVanityMode(true, false);
|
||||||
|
mTimeIdle = -1.f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool InputManager::actionIsActive (int id)
|
bool InputManager::actionIsActive (int id)
|
||||||
{
|
{
|
||||||
return mInputCtrl->getChannel (id)->getValue () == 1;
|
return mInputCtrl->getChannel (id)->getValue () == 1;
|
||||||
|
|
|
@ -83,7 +83,6 @@ namespace MWInput
|
||||||
virtual void enableDetectingBindingMode (int action);
|
virtual void enableDetectingBindingMode (int action);
|
||||||
virtual void resetToDefaultBindings();
|
virtual void resetToDefaultBindings();
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual bool keyPressed( const OIS::KeyEvent &arg );
|
virtual bool keyPressed( const OIS::KeyEvent &arg );
|
||||||
virtual bool keyReleased( const OIS::KeyEvent &arg );
|
virtual bool keyReleased( const OIS::KeyEvent &arg );
|
||||||
|
@ -140,6 +139,7 @@ namespace MWInput
|
||||||
float mCameraYMultiplier;
|
float mCameraYMultiplier;
|
||||||
float mUIYMultiplier;
|
float mUIYMultiplier;
|
||||||
float mPreviewPOVDelay;
|
float mPreviewPOVDelay;
|
||||||
|
float mTimeIdle;
|
||||||
|
|
||||||
bool mMouseLookEnabled;
|
bool mMouseLookEnabled;
|
||||||
bool mGuiCursorEnabled;
|
bool mGuiCursorEnabled;
|
||||||
|
@ -149,10 +149,12 @@ namespace MWInput
|
||||||
|
|
||||||
std::map<std::string, bool> mControlSwitch;
|
std::map<std::string, bool> mControlSwitch;
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void adjustMouseRegion(int width, int height);
|
void adjustMouseRegion(int width, int height);
|
||||||
|
|
||||||
|
void resetIdleTime();
|
||||||
|
void updateIdleTime(float dt);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void toggleMainMenu();
|
void toggleMainMenu();
|
||||||
void toggleSpell();
|
void toggleSpell();
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
|
|
||||||
#include <OgreSceneNode.h>
|
#include <OgreSceneNode.h>
|
||||||
#include <OgreCamera.h>
|
#include <OgreCamera.h>
|
||||||
#include <OgreRay.h>
|
|
||||||
|
|
||||||
#include "../mwbase/environment.hpp"
|
#include "../mwbase/environment.hpp"
|
||||||
#include "../mwbase/soundmanager.hpp"
|
#include "../mwbase/soundmanager.hpp"
|
||||||
|
@ -38,9 +37,6 @@ namespace MWRender
|
||||||
|
|
||||||
bool Player::rotate(const Ogre::Vector3 &rot, bool adjust)
|
bool Player::rotate(const Ogre::Vector3 &rot, bool adjust)
|
||||||
{
|
{
|
||||||
mUpdates = 0;
|
|
||||||
mTimeIdle = 0.f;
|
|
||||||
|
|
||||||
if (mVanity.enabled) {
|
if (mVanity.enabled) {
|
||||||
toggleVanityMode(false);
|
toggleVanityMode(false);
|
||||||
}
|
}
|
||||||
|
@ -120,13 +116,6 @@ namespace MWRender
|
||||||
void Player::update(float duration)
|
void Player::update(float duration)
|
||||||
{
|
{
|
||||||
Ogre::Vector3 pos = mPlayerNode->getPosition();
|
Ogre::Vector3 pos = mPlayerNode->getPosition();
|
||||||
if (!mVanity.enabled) {
|
|
||||||
++mUpdates;
|
|
||||||
mTimeIdle += duration;
|
|
||||||
if (mTimeIdle > 30.f) {
|
|
||||||
toggleVanityMode(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (mAnimation) {
|
if (mAnimation) {
|
||||||
mAnimation->runAnimation(duration);
|
mAnimation->runAnimation(duration);
|
||||||
}
|
}
|
||||||
|
@ -145,10 +134,10 @@ namespace MWRender
|
||||||
mFirstPersonView = !mFirstPersonView;
|
mFirstPersonView = !mFirstPersonView;
|
||||||
if (mFirstPersonView) {
|
if (mFirstPersonView) {
|
||||||
mCamera->setPosition(0.f, 0.f, 0.f);
|
mCamera->setPosition(0.f, 0.f, 0.f);
|
||||||
mCameraNode->setPosition(0.f, 0.f, 128.f);
|
setLowHeight(false);
|
||||||
} else {
|
} else {
|
||||||
mCamera->setPosition(0.f, 0.f, mCameraDistance);
|
mCamera->setPosition(0.f, 0.f, mCameraDistance);
|
||||||
mCameraNode->setPosition(0.f, 0.f, 104.f);
|
setLowHeight(true);
|
||||||
}
|
}
|
||||||
mPlayerNode->setVisible(!mFirstPersonView, false);
|
mPlayerNode->setVisible(!mFirstPersonView, false);
|
||||||
}
|
}
|
||||||
|
@ -176,15 +165,17 @@ namespace MWRender
|
||||||
float offset = mPreviewCam.offset;
|
float offset = mPreviewCam.offset;
|
||||||
Ogre::Vector3 rot(0.f, 0.f, 0.f);
|
Ogre::Vector3 rot(0.f, 0.f, 0.f);
|
||||||
if (mVanity.enabled) {
|
if (mVanity.enabled) {
|
||||||
mPlayerNode->setVisible(true, false);
|
|
||||||
rot.x = Ogre::Degree(-30.f).valueRadians();
|
rot.x = Ogre::Degree(-30.f).valueRadians();
|
||||||
mMainCam.offset = mCamera->getPosition().z;
|
mMainCam.offset = mCamera->getPosition().z;
|
||||||
|
|
||||||
|
mPlayerNode->setVisible(true, false);
|
||||||
|
setLowHeight(true);
|
||||||
} else {
|
} else {
|
||||||
rot.x = getPitch();
|
rot.x = getPitch();
|
||||||
offset = mMainCam.offset;
|
offset = mMainCam.offset;
|
||||||
|
|
||||||
mPlayerNode->setVisible(!mFirstPersonView, false);
|
mPlayerNode->setVisible(!mFirstPersonView, false);
|
||||||
|
setLowHeight(!mFirstPersonView);
|
||||||
}
|
}
|
||||||
rot.z = getYaw();
|
rot.z = getYaw();
|
||||||
mCamera->setPosition(0.f, 0.f, offset);
|
mCamera->setPosition(0.f, 0.f, offset);
|
||||||
|
@ -201,15 +192,17 @@ namespace MWRender
|
||||||
mPreviewMode = enable;
|
mPreviewMode = enable;
|
||||||
float offset = mCamera->getPosition().z;
|
float offset = mCamera->getPosition().z;
|
||||||
if (mPreviewMode) {
|
if (mPreviewMode) {
|
||||||
mPlayerNode->setVisible(true, false);
|
|
||||||
mMainCam.offset = offset;
|
mMainCam.offset = offset;
|
||||||
offset = mPreviewCam.offset;
|
offset = mPreviewCam.offset;
|
||||||
|
|
||||||
|
mPlayerNode->setVisible(true, false);
|
||||||
|
setLowHeight(true);
|
||||||
} else {
|
} else {
|
||||||
mPreviewCam.offset = offset;
|
mPreviewCam.offset = offset;
|
||||||
offset = mMainCam.offset;
|
offset = mMainCam.offset;
|
||||||
|
|
||||||
mPlayerNode->setVisible(!mFirstPersonView, false);
|
mPlayerNode->setVisible(!mFirstPersonView, false);
|
||||||
|
setLowHeight(!mFirstPersonView);
|
||||||
}
|
}
|
||||||
mCamera->setPosition(0.f, 0.f, offset);
|
mCamera->setPosition(0.f, 0.f, offset);
|
||||||
rotateCamera(Ogre::Vector3(getPitch(), 0.f, getYaw()), false);
|
rotateCamera(Ogre::Vector3(getPitch(), 0.f, getYaw()), false);
|
||||||
|
@ -357,4 +350,13 @@ namespace MWRender
|
||||||
{
|
{
|
||||||
mFreeLook = enable;
|
mFreeLook = enable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Player::setLowHeight(bool low)
|
||||||
|
{
|
||||||
|
if (low) {
|
||||||
|
mCameraNode->setPosition(0.f, 0.f, mHeight * 0.85);
|
||||||
|
} else {
|
||||||
|
mCameraNode->setPosition(0.f, 0.f, mHeight);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,9 +45,6 @@ namespace MWRender
|
||||||
|
|
||||||
bool mDistanceAdjusted;
|
bool mDistanceAdjusted;
|
||||||
|
|
||||||
float mTimeIdle;
|
|
||||||
int mUpdates;
|
|
||||||
|
|
||||||
/// Updates sound manager listener data
|
/// Updates sound manager listener data
|
||||||
void updateListener();
|
void updateListener();
|
||||||
|
|
||||||
|
@ -61,6 +58,8 @@ namespace MWRender
|
||||||
|
|
||||||
void compensateYaw(float diff);
|
void compensateYaw(float diff);
|
||||||
|
|
||||||
|
void setLowHeight(bool low = true);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
Player (Ogre::Camera *camera, Ogre::SceneNode* mNode);
|
Player (Ogre::Camera *camera, Ogre::SceneNode* mNode);
|
||||||
|
|
Loading…
Reference in a new issue