Weapon system now searches parents for health component (stops at first health component).
This commit is contained in:
@@ -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));
|
||||||
|
|||||||
Reference in New Issue
Block a user