1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-02-02 08:15:54 +00:00
This commit is contained in:
mrcheko 2013-12-15 18:50:25 +02:00
parent b38bfe1f21
commit fd9f8c34f6
9 changed files with 58 additions and 16 deletions

View file

@ -43,6 +43,7 @@ namespace MWRender
{
class ExternalRendering;
class Animation;
class Camera;
}
namespace MWMechanics
@ -112,6 +113,8 @@ namespace MWBase
virtual MWWorld::CellStore *getInterior (const std::string& name) = 0;
virtual MWRender::Camera* getCamera() const = 0;
virtual void setWaterHeight(const float height) = 0;
virtual void toggleWater() = 0;

View file

@ -181,7 +181,8 @@ namespace MWInput
switch (action)
{
case A_GameMenu:
toggleMainMenu ();
if(MWBase::Environment::get().getStateManager()->getState() == MWBase::StateManager::State_Running)
toggleMainMenu ();
break;
case A_Screenshot:
screenshot();
@ -301,7 +302,9 @@ namespace MWInput
return;
// Disable movement in Gui mode
if (MWBase::Environment::get().getWindowManager()->isGuiMode()) return;
if (MWBase::Environment::get().getWindowManager()->isGuiMode()
|| MWWorld::Class::get(mPlayer->getPlayer()).getCreatureStats(mPlayer->getPlayer()).isDead() )
return;
// Configure player movement according to keyboard input. Actual movement will

View file

@ -571,19 +571,15 @@ namespace MWMechanics
stats.resurrect();
continue;
}
MWBase::Environment::get().getStateManager()->endGame();
}
if(iter->second->isDead())
continue;
if (iter->second->kill())
{
++mDeathCount[cls.getId(iter->first)];
iter->second->kill();
++mDeathCount[cls.getId(iter->first)];
if(cls.isEssential(iter->first))
MWBase::Environment::get().getWindowManager()->messageBox("#{sKilledEssential}");
if(cls.isEssential(iter->first))
MWBase::Environment::get().getWindowManager()->messageBox("#{sKilledEssential}");
}
}
}

View file

@ -26,12 +26,14 @@
#include "creaturestats.hpp"
#include "security.hpp"
#include "../mwrender/camera.hpp"
#include "../mwrender/animation.hpp"
#include "../mwbase/environment.hpp"
#include "../mwbase/world.hpp"
#include "../mwbase/soundmanager.hpp"
#include "../mwbase/windowmanager.hpp"
#include "../mwbase/statemanager.hpp"
#include "../mwworld/player.hpp"
#include "../mwworld/class.hpp"
@ -1052,10 +1054,20 @@ void CharacterController::forceStateUpdate()
}
}
void CharacterController::kill()
bool CharacterController::kill()
{
if(mDeathState != CharState_None)
return;
if( isDead() )
{
//state=end game only when player's death animation is over
if( mPtr.getRefData().getHandle()=="player" && !isAnimPlaying(mCurrentDeath)
&& MWBase::Environment::get().getWindowManager()->getMode () != MWGui::GM_MainMenu )
{
MWBase::Environment::get().getStateManager()->endGame();
MWWorld::Class::get(mPtr).getCreatureStats(mPtr).setHealth(0);
MWBase::Environment::get().getWindowManager()->pushGuiMode (MWGui::GM_MainMenu);
}
return false;
}
if(mPtr.getTypeName() == typeid(ESM::NPC).name())
{
@ -1093,6 +1105,18 @@ void CharacterController::kill()
if(mAnimation)
{
//switch to 3rd person before player's death animation
if (mPtr.getRefData().getHandle()=="player")
{
if(MWBase::Environment::get().getWorld()->getCamera()->isVanityOrPreviewModeEnabled() )
{
MWBase::Environment::get().getWorld()->getCamera()->togglePreviewMode(false);
MWBase::Environment::get().getWorld()->getCamera()->toggleVanityMode(false);
}
if(MWBase::Environment::get().getWorld()->getCamera()->isFirstPerson())
MWBase::Environment::get().getWorld()->togglePOV();
}
mAnimation->play(mCurrentDeath, Priority_Death, MWRender::Animation::Group_All,
false, 1.0f, "start", "stop", 0.0f, 0);
mAnimation->disable(mCurrentIdle);
@ -1100,6 +1124,8 @@ void CharacterController::kill()
mIdleState = CharState_None;
mCurrentIdle.clear();
return true;
}
void CharacterController::resurrect()

View file

@ -188,7 +188,7 @@ public:
void skipAnim();
bool isAnimPlaying(const std::string &groupName);
void kill();
bool kill();
void resurrect();
bool isDead() const
{ return mDeathState != CharState_None; }

View file

@ -221,6 +221,11 @@ OEngine::Render::Fader* RenderingManager::getFader()
return mRendering.getFader();
}
MWRender::Camera* RenderingManager::getCamera() const
{
return mCamera;
}
void RenderingManager::removeCell (MWWorld::CellStore *store)
{
mObjects.removeCell(store);

View file

@ -98,6 +98,8 @@ public:
SkyManager* getSkyManager();
Compositors* getCompositors();
MWRender::Camera* getCamera() const;
void toggleLight();
bool toggleRenderMode(int mode);

View file

@ -400,6 +400,11 @@ namespace MWWorld
return mCells.getInterior (name);
}
MWRender::Camera* World::getCamera() const
{
return mRendering->getCamera();
}
MWWorld::Player& World::getPlayer()
{
return *mPlayer;

View file

@ -185,6 +185,8 @@ namespace MWWorld
virtual CellStore *getInterior (const std::string& name);
virtual MWRender::Camera* getCamera() const;
virtual void setWaterHeight(const float height);
virtual void toggleWater();