Files
axyz/src/Game/Systems/HealthSystem.cpp
T
Jace 2c0f66d9c7 Merge remote-tracking branch 'origin/master' into WeaponSystem
# Conflicts:
#	include/Engine/Collision/FillFrustumOctreeSystem.h
#	include/Engine/Core/Octree.h
#	include/Engine/Rendering/RenderSystem.h
#	include/Game/Game.h
#	resources/DefaultInput.ini
#	resources/Schema/Components.xsd
#	resources/Schema/Entities/Player.xml
#	resources/Schema/Types/Entity.xsd
#	src/Engine/Rendering/RenderSystem.cpp
#	src/Game/Game.cpp
#	src/Game/Systems/PlayerMovementSystem.cpp
2016-02-10 17:02:00 +01:00

42 lines
1.2 KiB
C++

#include "Systems/HealthSystem.h"
HealthSystem::HealthSystem(SystemParams params)
: System(params)
, PureSystem("Health")
{
//subscribe/listenTo playerdamage,healthpickup events (using the eventBroker)
EVENT_SUBSCRIBE_MEMBER(m_EPlayerDamage, &HealthSystem::OnPlayerDamaged);
EVENT_SUBSCRIBE_MEMBER(m_EPlayerHealthPickup, &HealthSystem::OnPlayerHealthPickup);
}
void HealthSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt)
{
}
bool HealthSystem::OnPlayerDamaged(Events::PlayerDamage& e)
{
ComponentWrapper cHealth = e.Player["Health"];
double& health = cHealth["Health"];
health -= e.Damage;
if (health <= 0.0) {
Events::PlayerDeath ePlayerDeath;
ePlayerDeath.Player = e.Player;
m_EventBroker->Publish(ePlayerDeath);
//Note: we will delete the entity in PlayerDeathSystem
}
return true;
}
bool HealthSystem::OnPlayerHealthPickup(Events::PlayerHealthPickup& e)
{
ComponentWrapper cHealth = e.Player["Health"];
double& health = cHealth["Health"];
health += e.HealthAmount;
health = std::min(health, (double)cHealth["MaxHealth"]);
return true;
}