mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-02-02 22:45:33 +00:00
initial player rendering
This commit is contained in:
parent
6f87c0c36d
commit
392e6efcb5
9 changed files with 55 additions and 1 deletions
|
@ -352,6 +352,8 @@ void OMW::Engine::go()
|
|||
pos.rot[0] = pos.rot[1] = pos.rot[2] = 0;
|
||||
pos.pos[2] = 0;
|
||||
|
||||
mEnvironment.getWorld()->renderPlayer();
|
||||
|
||||
if (const ESM::Cell *exterior = MWBase::Environment::get().getWorld()->getExterior (mCellName))
|
||||
{
|
||||
MWBase::Environment::get().getWorld()->indexToPosition (exterior->data.gridX, exterior->data.gridY,
|
||||
|
|
|
@ -253,6 +253,8 @@ namespace MWBase
|
|||
virtual void togglePreviewMode(bool enable) = 0;
|
||||
virtual bool toggleVanityMode(bool enable, bool force) = 0;
|
||||
virtual void allowVanityMode(bool allow) = 0;
|
||||
|
||||
virtual void renderPlayer() = 0;
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -411,6 +411,7 @@ private:
|
|||
if (mPreviewPOVDelay <= 0.5 &&
|
||||
(mPreviewPOVDelay += duration) > 0.5)
|
||||
{
|
||||
mPreviewPOVDelay = 1.f;
|
||||
MWBase::Environment::get().getWorld()->togglePreviewMode(true);
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
#include "../mwworld/ptr.hpp"
|
||||
#include "../mwworld/refdata.hpp"
|
||||
|
||||
#include "npcanimation.hpp"
|
||||
|
||||
namespace MWRender
|
||||
{
|
||||
Player::Player (Ogre::Camera *camera, Ogre::SceneNode* node)
|
||||
|
@ -19,7 +21,7 @@ namespace MWRender
|
|||
mVanityNode(mPlayerNode->createChildSceneNode()),
|
||||
mFirstPersonView(true),
|
||||
mPreviewMode(false),
|
||||
mHeight(40.f),
|
||||
mHeight(128.f),
|
||||
mCameraDistance(400.f)
|
||||
{
|
||||
mVanity.enabled = false;
|
||||
|
@ -111,6 +113,7 @@ namespace MWRender
|
|||
|
||||
void Player::update(float duration)
|
||||
{
|
||||
Ogre::Vector3 pos = mPlayerNode->getPosition();
|
||||
if (!mVanity.enabled) {
|
||||
++mUpdates;
|
||||
mTimeIdle += duration;
|
||||
|
@ -118,6 +121,9 @@ namespace MWRender
|
|||
toggleVanityMode(true);
|
||||
}
|
||||
}
|
||||
if (mAnimation) {
|
||||
mAnimation->runAnimation(duration);
|
||||
}
|
||||
if (mFirstPersonView && !mVanity.enabled) {
|
||||
return;
|
||||
}
|
||||
|
@ -133,8 +139,10 @@ namespace MWRender
|
|||
mFirstPersonView = !mFirstPersonView;
|
||||
if (mFirstPersonView) {
|
||||
mCamera->setPosition(0.f, 0.f, 0.f);
|
||||
mCameraNode->setPosition(0.f, 0.f, 128.f);
|
||||
} else {
|
||||
mCamera->setPosition(0.f, 0.f, mCameraDistance);
|
||||
mCameraNode->setPosition(0.f, 0.f, 104.f);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -279,4 +287,15 @@ namespace MWRender
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Player::setHeight(float height)
|
||||
{
|
||||
mHeight = height;
|
||||
mCameraNode->setPosition(0.f, 0.f, mHeight);
|
||||
}
|
||||
|
||||
float Player::getHeight()
|
||||
{
|
||||
return mHeight;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,6 +17,7 @@ namespace MWWorld
|
|||
|
||||
namespace MWRender
|
||||
{
|
||||
class NpcAnimation;
|
||||
/// \brief Player character rendering and camera control
|
||||
class Player
|
||||
{
|
||||
|
@ -30,6 +31,8 @@ namespace MWRender
|
|||
Ogre::SceneNode *mCameraNode;
|
||||
Ogre::SceneNode *mVanityNode;
|
||||
|
||||
NpcAnimation *mAnimation;
|
||||
|
||||
bool mFirstPersonView;
|
||||
bool mPreviewMode;
|
||||
|
||||
|
@ -82,6 +85,13 @@ namespace MWRender
|
|||
void update(float duration);
|
||||
|
||||
void setCameraDistance(float dist, bool adjust = false);
|
||||
|
||||
void setAnimation(MWRender::NpcAnimation *anim) {
|
||||
mAnimation = anim;
|
||||
}
|
||||
|
||||
void setHeight(float height);
|
||||
float getHeight();
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
#include "localmap.hpp"
|
||||
#include "water.hpp"
|
||||
#include "compositors.hpp"
|
||||
#include "npcanimation.hpp"
|
||||
|
||||
using namespace MWRender;
|
||||
using namespace Ogre;
|
||||
|
@ -830,4 +831,15 @@ void RenderingManager::attachCameraTo(const MWWorld::Ptr &ptr)
|
|||
mPlayer->attachTo(ptr);
|
||||
}
|
||||
|
||||
void RenderingManager::renderPlayer(const MWWorld::Ptr &ptr)
|
||||
{
|
||||
MWRender::NpcAnimation *anim =
|
||||
new MWRender::NpcAnimation(
|
||||
ptr,
|
||||
mRendering,
|
||||
MWWorld::Class::get(ptr).getInventoryStore(ptr)
|
||||
);
|
||||
mPlayer->setAnimation(anim);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
|
|
@ -73,6 +73,7 @@ class RenderingManager: private RenderingInterface, public Ogre::WindowEventList
|
|||
}
|
||||
|
||||
void attachCameraTo(const MWWorld::Ptr &ptr);
|
||||
void renderPlayer(const MWWorld::Ptr &ptr);
|
||||
|
||||
SkyManager* getSkyManager();
|
||||
Compositors* getCompositors();
|
||||
|
|
|
@ -1151,4 +1151,9 @@ namespace MWWorld
|
|||
}
|
||||
return pos.z < cell.water;
|
||||
}
|
||||
|
||||
void World::renderPlayer()
|
||||
{
|
||||
mRendering->renderPlayer(mPlayer->getPlayer());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -292,6 +292,8 @@ namespace MWWorld
|
|||
virtual void allowVanityMode(bool allow) {
|
||||
mRendering->allowVanityMode(allow);
|
||||
}
|
||||
|
||||
virtual void renderPlayer();
|
||||
};
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue