mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-11-03 23:26:40 +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.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