forked from teamnwah/openmw-tes3coop
This commit is contained in:
parent
b38bfe1f21
commit
fd9f8c34f6
9 changed files with 58 additions and 16 deletions
|
@ -43,6 +43,7 @@ namespace MWRender
|
||||||
{
|
{
|
||||||
class ExternalRendering;
|
class ExternalRendering;
|
||||||
class Animation;
|
class Animation;
|
||||||
|
class Camera;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace MWMechanics
|
namespace MWMechanics
|
||||||
|
@ -112,6 +113,8 @@ namespace MWBase
|
||||||
|
|
||||||
virtual MWWorld::CellStore *getInterior (const std::string& name) = 0;
|
virtual MWWorld::CellStore *getInterior (const std::string& name) = 0;
|
||||||
|
|
||||||
|
virtual MWRender::Camera* getCamera() const = 0;
|
||||||
|
|
||||||
virtual void setWaterHeight(const float height) = 0;
|
virtual void setWaterHeight(const float height) = 0;
|
||||||
|
|
||||||
virtual void toggleWater() = 0;
|
virtual void toggleWater() = 0;
|
||||||
|
|
|
@ -181,7 +181,8 @@ namespace MWInput
|
||||||
switch (action)
|
switch (action)
|
||||||
{
|
{
|
||||||
case A_GameMenu:
|
case A_GameMenu:
|
||||||
toggleMainMenu ();
|
if(MWBase::Environment::get().getStateManager()->getState() == MWBase::StateManager::State_Running)
|
||||||
|
toggleMainMenu ();
|
||||||
break;
|
break;
|
||||||
case A_Screenshot:
|
case A_Screenshot:
|
||||||
screenshot();
|
screenshot();
|
||||||
|
@ -301,7 +302,9 @@ namespace MWInput
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Disable movement in Gui mode
|
// 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
|
// Configure player movement according to keyboard input. Actual movement will
|
||||||
|
|
|
@ -571,19 +571,15 @@ namespace MWMechanics
|
||||||
stats.resurrect();
|
stats.resurrect();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
MWBase::Environment::get().getStateManager()->endGame();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(iter->second->isDead())
|
if (iter->second->kill())
|
||||||
continue;
|
{
|
||||||
|
++mDeathCount[cls.getId(iter->first)];
|
||||||
|
|
||||||
iter->second->kill();
|
if(cls.isEssential(iter->first))
|
||||||
|
MWBase::Environment::get().getWindowManager()->messageBox("#{sKilledEssential}");
|
||||||
++mDeathCount[cls.getId(iter->first)];
|
}
|
||||||
|
|
||||||
if(cls.isEssential(iter->first))
|
|
||||||
MWBase::Environment::get().getWindowManager()->messageBox("#{sKilledEssential}");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,12 +26,14 @@
|
||||||
#include "creaturestats.hpp"
|
#include "creaturestats.hpp"
|
||||||
#include "security.hpp"
|
#include "security.hpp"
|
||||||
|
|
||||||
|
#include "../mwrender/camera.hpp"
|
||||||
#include "../mwrender/animation.hpp"
|
#include "../mwrender/animation.hpp"
|
||||||
|
|
||||||
#include "../mwbase/environment.hpp"
|
#include "../mwbase/environment.hpp"
|
||||||
#include "../mwbase/world.hpp"
|
#include "../mwbase/world.hpp"
|
||||||
#include "../mwbase/soundmanager.hpp"
|
#include "../mwbase/soundmanager.hpp"
|
||||||
#include "../mwbase/windowmanager.hpp"
|
#include "../mwbase/windowmanager.hpp"
|
||||||
|
#include "../mwbase/statemanager.hpp"
|
||||||
|
|
||||||
#include "../mwworld/player.hpp"
|
#include "../mwworld/player.hpp"
|
||||||
#include "../mwworld/class.hpp"
|
#include "../mwworld/class.hpp"
|
||||||
|
@ -1052,10 +1054,20 @@ void CharacterController::forceStateUpdate()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CharacterController::kill()
|
bool CharacterController::kill()
|
||||||
{
|
{
|
||||||
if(mDeathState != CharState_None)
|
if( isDead() )
|
||||||
return;
|
{
|
||||||
|
//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())
|
if(mPtr.getTypeName() == typeid(ESM::NPC).name())
|
||||||
{
|
{
|
||||||
|
@ -1093,6 +1105,18 @@ void CharacterController::kill()
|
||||||
|
|
||||||
if(mAnimation)
|
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,
|
mAnimation->play(mCurrentDeath, Priority_Death, MWRender::Animation::Group_All,
|
||||||
false, 1.0f, "start", "stop", 0.0f, 0);
|
false, 1.0f, "start", "stop", 0.0f, 0);
|
||||||
mAnimation->disable(mCurrentIdle);
|
mAnimation->disable(mCurrentIdle);
|
||||||
|
@ -1100,6 +1124,8 @@ void CharacterController::kill()
|
||||||
|
|
||||||
mIdleState = CharState_None;
|
mIdleState = CharState_None;
|
||||||
mCurrentIdle.clear();
|
mCurrentIdle.clear();
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CharacterController::resurrect()
|
void CharacterController::resurrect()
|
||||||
|
|
|
@ -188,7 +188,7 @@ public:
|
||||||
void skipAnim();
|
void skipAnim();
|
||||||
bool isAnimPlaying(const std::string &groupName);
|
bool isAnimPlaying(const std::string &groupName);
|
||||||
|
|
||||||
void kill();
|
bool kill();
|
||||||
void resurrect();
|
void resurrect();
|
||||||
bool isDead() const
|
bool isDead() const
|
||||||
{ return mDeathState != CharState_None; }
|
{ return mDeathState != CharState_None; }
|
||||||
|
|
|
@ -221,6 +221,11 @@ OEngine::Render::Fader* RenderingManager::getFader()
|
||||||
return mRendering.getFader();
|
return mRendering.getFader();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MWRender::Camera* RenderingManager::getCamera() const
|
||||||
|
{
|
||||||
|
return mCamera;
|
||||||
|
}
|
||||||
|
|
||||||
void RenderingManager::removeCell (MWWorld::CellStore *store)
|
void RenderingManager::removeCell (MWWorld::CellStore *store)
|
||||||
{
|
{
|
||||||
mObjects.removeCell(store);
|
mObjects.removeCell(store);
|
||||||
|
|
|
@ -98,6 +98,8 @@ public:
|
||||||
SkyManager* getSkyManager();
|
SkyManager* getSkyManager();
|
||||||
Compositors* getCompositors();
|
Compositors* getCompositors();
|
||||||
|
|
||||||
|
MWRender::Camera* getCamera() const;
|
||||||
|
|
||||||
void toggleLight();
|
void toggleLight();
|
||||||
bool toggleRenderMode(int mode);
|
bool toggleRenderMode(int mode);
|
||||||
|
|
||||||
|
|
|
@ -400,6 +400,11 @@ namespace MWWorld
|
||||||
return mCells.getInterior (name);
|
return mCells.getInterior (name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MWRender::Camera* World::getCamera() const
|
||||||
|
{
|
||||||
|
return mRendering->getCamera();
|
||||||
|
}
|
||||||
|
|
||||||
MWWorld::Player& World::getPlayer()
|
MWWorld::Player& World::getPlayer()
|
||||||
{
|
{
|
||||||
return *mPlayer;
|
return *mPlayer;
|
||||||
|
|
|
@ -185,6 +185,8 @@ namespace MWWorld
|
||||||
|
|
||||||
virtual CellStore *getInterior (const std::string& name);
|
virtual CellStore *getInterior (const std::string& name);
|
||||||
|
|
||||||
|
virtual MWRender::Camera* getCamera() const;
|
||||||
|
|
||||||
virtual void setWaterHeight(const float height);
|
virtual void setWaterHeight(const float height);
|
||||||
|
|
||||||
virtual void toggleWater();
|
virtual void toggleWater();
|
||||||
|
|
Loading…
Reference in a new issue