mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-01-21 10:53:51 +00:00
Add Class::onHit for creatures
This commit is contained in:
parent
dd6edd21f8
commit
bec420c69b
2 changed files with 22 additions and 8 deletions
|
@ -11,6 +11,7 @@
|
||||||
#include "../mwbase/mechanicsmanager.hpp"
|
#include "../mwbase/mechanicsmanager.hpp"
|
||||||
#include "../mwbase/windowmanager.hpp"
|
#include "../mwbase/windowmanager.hpp"
|
||||||
#include "../mwbase/world.hpp"
|
#include "../mwbase/world.hpp"
|
||||||
|
#include "../mwbase/soundmanager.hpp"
|
||||||
|
|
||||||
#include "../mwworld/ptr.hpp"
|
#include "../mwworld/ptr.hpp"
|
||||||
#include "../mwworld/actiontalk.hpp"
|
#include "../mwworld/actiontalk.hpp"
|
||||||
|
@ -153,17 +154,28 @@ namespace MWClass
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Creature::onHit(const MWWorld::Ptr &ptr, float damage, const MWWorld::Ptr &object, const MWWorld::Ptr &attacker, bool successful) const
|
||||||
|
{
|
||||||
|
// NOTE: 'object' and/or 'attacker' may be empty.
|
||||||
|
|
||||||
|
if(!successful)
|
||||||
|
{
|
||||||
|
// TODO: Handle HitAttemptOnMe script function
|
||||||
|
|
||||||
|
// Missed
|
||||||
|
MWBase::Environment::get().getSoundManager()->playSound3D(ptr, "miss", 1.0f, 1.0f);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Handle HitOnMe script function and OnPCHitMe script variable.
|
||||||
|
|
||||||
|
float health = getCreatureStats(ptr).getHealth().getCurrent() - damage;
|
||||||
|
setActorHealth(ptr, health, attacker);
|
||||||
|
}
|
||||||
|
|
||||||
void Creature::setActorHealth(const MWWorld::Ptr& ptr, float health, const MWWorld::Ptr& attacker) const
|
void Creature::setActorHealth(const MWWorld::Ptr& ptr, float health, const MWWorld::Ptr& attacker) const
|
||||||
{
|
{
|
||||||
MWMechanics::CreatureStats &crstats = getCreatureStats(ptr);
|
MWMechanics::CreatureStats &crstats = getCreatureStats(ptr);
|
||||||
float diff = health - crstats.getHealth().getCurrent();
|
|
||||||
|
|
||||||
if(diff < 0.0f)
|
|
||||||
{
|
|
||||||
// actor is losing health. Alert the character controller, scripts, etc.
|
|
||||||
// NOTE: 'attacker' may be empty.
|
|
||||||
}
|
|
||||||
|
|
||||||
bool wasDead = crstats.isDead();
|
bool wasDead = crstats.isDead();
|
||||||
|
|
||||||
MWMechanics::DynamicStat<float> stat(crstats.getHealth());
|
MWMechanics::DynamicStat<float> stat(crstats.getHealth());
|
||||||
|
|
|
@ -44,6 +44,8 @@ namespace MWClass
|
||||||
|
|
||||||
virtual void hit(const MWWorld::Ptr& ptr, int type) const;
|
virtual void hit(const MWWorld::Ptr& ptr, int type) const;
|
||||||
|
|
||||||
|
virtual void onHit(const MWWorld::Ptr &ptr, float damage, const MWWorld::Ptr &object, const MWWorld::Ptr &attacker, bool successful) const;
|
||||||
|
|
||||||
virtual void setActorHealth(const MWWorld::Ptr& ptr, float health, const MWWorld::Ptr& attacker) const;
|
virtual void setActorHealth(const MWWorld::Ptr& ptr, float health, const MWWorld::Ptr& attacker) const;
|
||||||
|
|
||||||
virtual boost::shared_ptr<MWWorld::Action> activate (const MWWorld::Ptr& ptr,
|
virtual boost::shared_ptr<MWWorld::Action> activate (const MWWorld::Ptr& ptr,
|
||||||
|
|
Loading…
Reference in a new issue