forked from teamnwah/openmw-tes3coop
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.rot[0] = pos.rot[1] = pos.rot[2] = 0;
|
||||||
pos.pos[2] = 0;
|
pos.pos[2] = 0;
|
||||||
|
|
||||||
|
mEnvironment.getWorld()->renderPlayer();
|
||||||
|
|
||||||
if (const ESM::Cell *exterior = MWBase::Environment::get().getWorld()->getExterior (mCellName))
|
if (const ESM::Cell *exterior = MWBase::Environment::get().getWorld()->getExterior (mCellName))
|
||||||
{
|
{
|
||||||
MWBase::Environment::get().getWorld()->indexToPosition (exterior->data.gridX, exterior->data.gridY,
|
MWBase::Environment::get().getWorld()->indexToPosition (exterior->data.gridX, exterior->data.gridY,
|
||||||
|
|
|
@ -253,6 +253,8 @@ namespace MWBase
|
||||||
virtual void togglePreviewMode(bool enable) = 0;
|
virtual void togglePreviewMode(bool enable) = 0;
|
||||||
virtual bool toggleVanityMode(bool enable, bool force) = 0;
|
virtual bool toggleVanityMode(bool enable, bool force) = 0;
|
||||||
virtual void allowVanityMode(bool allow) = 0;
|
virtual void allowVanityMode(bool allow) = 0;
|
||||||
|
|
||||||
|
virtual void renderPlayer() = 0;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -411,6 +411,7 @@ private:
|
||||||
if (mPreviewPOVDelay <= 0.5 &&
|
if (mPreviewPOVDelay <= 0.5 &&
|
||||||
(mPreviewPOVDelay += duration) > 0.5)
|
(mPreviewPOVDelay += duration) > 0.5)
|
||||||
{
|
{
|
||||||
|
mPreviewPOVDelay = 1.f;
|
||||||
MWBase::Environment::get().getWorld()->togglePreviewMode(true);
|
MWBase::Environment::get().getWorld()->togglePreviewMode(true);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -10,6 +10,8 @@
|
||||||
#include "../mwworld/ptr.hpp"
|
#include "../mwworld/ptr.hpp"
|
||||||
#include "../mwworld/refdata.hpp"
|
#include "../mwworld/refdata.hpp"
|
||||||
|
|
||||||
|
#include "npcanimation.hpp"
|
||||||
|
|
||||||
namespace MWRender
|
namespace MWRender
|
||||||
{
|
{
|
||||||
Player::Player (Ogre::Camera *camera, Ogre::SceneNode* node)
|
Player::Player (Ogre::Camera *camera, Ogre::SceneNode* node)
|
||||||
|
@ -19,7 +21,7 @@ namespace MWRender
|
||||||
mVanityNode(mPlayerNode->createChildSceneNode()),
|
mVanityNode(mPlayerNode->createChildSceneNode()),
|
||||||
mFirstPersonView(true),
|
mFirstPersonView(true),
|
||||||
mPreviewMode(false),
|
mPreviewMode(false),
|
||||||
mHeight(40.f),
|
mHeight(128.f),
|
||||||
mCameraDistance(400.f)
|
mCameraDistance(400.f)
|
||||||
{
|
{
|
||||||
mVanity.enabled = false;
|
mVanity.enabled = false;
|
||||||
|
@ -111,6 +113,7 @@ namespace MWRender
|
||||||
|
|
||||||
void Player::update(float duration)
|
void Player::update(float duration)
|
||||||
{
|
{
|
||||||
|
Ogre::Vector3 pos = mPlayerNode->getPosition();
|
||||||
if (!mVanity.enabled) {
|
if (!mVanity.enabled) {
|
||||||
++mUpdates;
|
++mUpdates;
|
||||||
mTimeIdle += duration;
|
mTimeIdle += duration;
|
||||||
|
@ -118,6 +121,9 @@ namespace MWRender
|
||||||
toggleVanityMode(true);
|
toggleVanityMode(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (mAnimation) {
|
||||||
|
mAnimation->runAnimation(duration);
|
||||||
|
}
|
||||||
if (mFirstPersonView && !mVanity.enabled) {
|
if (mFirstPersonView && !mVanity.enabled) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -133,8 +139,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);
|
||||||
} else {
|
} else {
|
||||||
mCamera->setPosition(0.f, 0.f, mCameraDistance);
|
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
|
namespace MWRender
|
||||||
{
|
{
|
||||||
|
class NpcAnimation;
|
||||||
/// \brief Player character rendering and camera control
|
/// \brief Player character rendering and camera control
|
||||||
class Player
|
class Player
|
||||||
{
|
{
|
||||||
|
@ -30,6 +31,8 @@ namespace MWRender
|
||||||
Ogre::SceneNode *mCameraNode;
|
Ogre::SceneNode *mCameraNode;
|
||||||
Ogre::SceneNode *mVanityNode;
|
Ogre::SceneNode *mVanityNode;
|
||||||
|
|
||||||
|
NpcAnimation *mAnimation;
|
||||||
|
|
||||||
bool mFirstPersonView;
|
bool mFirstPersonView;
|
||||||
bool mPreviewMode;
|
bool mPreviewMode;
|
||||||
|
|
||||||
|
@ -82,6 +85,13 @@ namespace MWRender
|
||||||
void update(float duration);
|
void update(float duration);
|
||||||
|
|
||||||
void setCameraDistance(float dist, bool adjust = false);
|
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 "localmap.hpp"
|
||||||
#include "water.hpp"
|
#include "water.hpp"
|
||||||
#include "compositors.hpp"
|
#include "compositors.hpp"
|
||||||
|
#include "npcanimation.hpp"
|
||||||
|
|
||||||
using namespace MWRender;
|
using namespace MWRender;
|
||||||
using namespace Ogre;
|
using namespace Ogre;
|
||||||
|
@ -830,4 +831,15 @@ void RenderingManager::attachCameraTo(const MWWorld::Ptr &ptr)
|
||||||
mPlayer->attachTo(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
|
} // namespace
|
||||||
|
|
|
@ -73,6 +73,7 @@ class RenderingManager: private RenderingInterface, public Ogre::WindowEventList
|
||||||
}
|
}
|
||||||
|
|
||||||
void attachCameraTo(const MWWorld::Ptr &ptr);
|
void attachCameraTo(const MWWorld::Ptr &ptr);
|
||||||
|
void renderPlayer(const MWWorld::Ptr &ptr);
|
||||||
|
|
||||||
SkyManager* getSkyManager();
|
SkyManager* getSkyManager();
|
||||||
Compositors* getCompositors();
|
Compositors* getCompositors();
|
||||||
|
|
|
@ -1151,4 +1151,9 @@ namespace MWWorld
|
||||||
}
|
}
|
||||||
return pos.z < cell.water;
|
return pos.z < cell.water;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void World::renderPlayer()
|
||||||
|
{
|
||||||
|
mRendering->renderPlayer(mPlayer->getPlayer());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -292,6 +292,8 @@ namespace MWWorld
|
||||||
virtual void allowVanityMode(bool allow) {
|
virtual void allowVanityMode(bool allow) {
|
||||||
mRendering->allowVanityMode(allow);
|
mRendering->allowVanityMode(allow);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual void renderPlayer();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue