Weapon system now searches parents for health component (stops at first health component).

This commit is contained in:
Jocke
2016-01-24 11:56:46 +01:00
parent 97d70f8e32
commit 7567f47a68
+18 -18
View File
@@ -11,25 +11,23 @@ WeaponSystem::WeaponSystem(World* world, EventBroker* eventBroker, IRenderer* re
void WeaponSystem::Update(double dt) void WeaponSystem::Update(double dt)
{ {
for (int i = m_EShootVector.size(); i > 0; i--) for (int i = m_EShootVector.size(); i > 0; i--) {
{
//TODO: check if player has enough ammo and if weapon has a cooldown or not
//pick the object //pick the object
PickData pickDataFromShot = m_Renderer->Pick(std::get<1>(m_EShootVector[i - 1])); PickData pickDataFromShot = m_Renderer->Pick(std::get<1>(m_EShootVector[i - 1]));
if (pickDataFromShot.Entity == EntityID_Invalid) { EntityID entityID = pickDataFromShot.Entity;
m_EShootVector.erase(m_EShootVector.begin() + i - 1); while (entityID != EntityID_Invalid) {
continue; // If has health
} if (m_World->HasComponent(entityID, "Health")) {
//if its a player, do PlayerDamage event Events::PlayerDamage ePlayerDamage;
const bool hasHealthComponent = m_World->HasComponent(pickDataFromShot.Entity, "Health"); //TODO: damage based on weapontype/class?
if (hasHealthComponent) { //TODO: multiple shots at the same time? (shotgunner)
Events::PlayerDamage ePlayerDamage; ePlayerDamage.DamageAmount = 25;
//TODO: damage based on weapontype/class? ePlayerDamage.PlayerDamagedID = entityID;
//TODO: multiple shots at the same time? (shotgunner) m_EventBroker->Publish(ePlayerDamage);
ePlayerDamage.DamageAmount = 25; break;
ePlayerDamage.PlayerDamagedID = pickDataFromShot.Entity; } else {
m_EventBroker->Publish(ePlayerDamage); entityID = m_World->GetParent(entityID);
}
} }
m_EShootVector.erase(m_EShootVector.begin() + i - 1); m_EShootVector.erase(m_EShootVector.begin() + i - 1);
} }
@@ -44,8 +42,10 @@ bool WeaponSystem::OnInputCommand(const Events::InputCommand& e)
} }
return true; return true;
} }
bool WeaponSystem::OnShoot(const Events::Shoot& e) { bool WeaponSystem::OnShoot(const Events::Shoot& e)
{
//screen center, based on current resolution! //screen center, based on current resolution!
//TODO: check if player has enough ammo and if weapon has a cooldown or not
Rectangle screenResolution = m_Renderer->Resolution(); Rectangle screenResolution = m_Renderer->Resolution();
glm::vec2 centerScreen = glm::vec2(screenResolution.Width / 2, screenResolution.Height / 2); glm::vec2 centerScreen = glm::vec2(screenResolution.Width / 2, screenResolution.Height / 2);
m_EShootVector.push_back(std::make_pair(e.shooter, centerScreen)); m_EShootVector.push_back(std::make_pair(e.shooter, centerScreen));