diff --git a/include/Game/Systems/BoostSystem.h b/include/Game/Systems/BoostSystem.h index f02e9472..925ef438 100644 --- a/include/Game/Systems/BoostSystem.h +++ b/include/Game/Systems/BoostSystem.h @@ -6,6 +6,7 @@ #include "Core/EntityFile.h" #include "Core/EPlayerDamage.h" #include "Common.h" +#include "SpawnerSystem.h" class BoostSystem : public System { @@ -17,5 +18,7 @@ private: bool OnPlayerDamage(Events::PlayerDamage& e); std::string DetermineClass(EntityWrapper player); + + void giveAmmo(EntityWrapper giver, EntityWrapper receiver); }; #endif \ No newline at end of file diff --git a/include/Game/Systems/Weapon/SidearmWeaponBehaviour.h b/include/Game/Systems/Weapon/SidearmWeaponBehaviour.h index 7aa20025..3123b460 100644 --- a/include/Game/Systems/Weapon/SidearmWeaponBehaviour.h +++ b/include/Game/Systems/Weapon/SidearmWeaponBehaviour.h @@ -37,7 +37,7 @@ private: bool playerInFirstPerson(EntityWrapper player); bool dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi); - void giveAmmo(ComponentWrapper cWeapon, WeaponInfo& wi, EntityWrapper receiver); + // void giveAmmo(ComponentWrapper cWeapon, WeaponInfo& wi, EntityWrapper receiver); void CheckAmmo(ComponentWrapper cWeapon, WeaponInfo& wi); diff --git a/include/Game/Systems/Weapon/WeaponBehaviour.h b/include/Game/Systems/Weapon/WeaponBehaviour.h index cd067f36..6d13e741 100644 --- a/include/Game/Systems/Weapon/WeaponBehaviour.h +++ b/include/Game/Systems/Weapon/WeaponBehaviour.h @@ -305,6 +305,8 @@ private: wi.ThirdPersonEntity = thirdPersonWeapon; wi.ThirdPersonPlayerModel = thirdPersonWeapon.FirstParentWithComponent("Model"); + player["Player"]["CurrentWeapon"] = cWeapon.Info.Name; + OnEquip(cWeapon, wi); } diff --git a/resources/Schema/Entities/PlayerAssaultBlue.xml b/resources/Schema/Entities/PlayerAssaultBlue.xml index 4797ec09..c73a4c46 100644 --- a/resources/Schema/Entities/PlayerAssaultBlue.xml +++ b/resources/Schema/Entities/PlayerAssaultBlue.xml @@ -59,447 +59,466 @@ - - - + + Schema/Entities/PlayerHUD.xml + + - - - - false - Models/Core/UnitQuad.mesh - - Textures/Weapons/Crosshair/SmallThickHoleDot.png - - - - - - - - - - - - Schema/Entities/HitMarker.xml - - - - - - + - - + - + - - Models/Core/UnitQuad.mesh - - Textures/Core/UnitHexagon.png - - - - - - - - - - - - - - 2 - - - Models/Core/UnitQuad.mesh - - Textures/Core/UnitHexagon_Rotated.png - - - - - - - - - - - - - - - Models/Core/UnitQuad.mesh - - Textures/Core/UnitHexagon.png - - - - - - - - - - - - - - 3 - - - Models/Core/UnitQuad.mesh - - Textures/Core/UnitHexagon_Rotated.png - - - - - - - - - - - - - - - Models/Core/UnitQuad.mesh - - Textures/Core/UnitHexagon.png - - - - - - - - - - - 1 - - - - 4 - - - Models/Core/UnitQuad.mesh - - Textures/Core/UnitHexagon_Rotated.png - - - - - - - - - - - - - - - Models/Core/UnitQuad.mesh - - Textures/Core/UnitHexagon.png - - - - - - - - - - - - - - 1 - - - Models/Core/UnitQuad.mesh - - Textures/Core/UnitHexagon_Rotated.png - - - - - - - - - - - - - - - Models/Core/UnitQuad.mesh - - Textures/Core/UnitHexagon.png - - - - - - - - - - - 1 - - - - - Models/Core/UnitQuad.mesh - - Textures/Core/UnitHexagon_Rotated.png - - - - - - - - - - - - - - - - - - - - - - - - - - - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - - - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - - - - - - - - - - Models/Widgets/Arrows/Arrow5.mesh - - - - - - - - - - - - - - - - - - - - - 1 - - - - 100/100 - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - - - 1 - - - - - Models/Core/UnitQuad.mesh - - Textures/HealthHUD3.png - - - - - - - - - - - - - - - - - - - - - - - false - Models/Core/UnitQuad.mesh - - Textures/Icons/Boosts/Assault-01.png - - - - - - - - - - - - - - - - - false - Models/Core/UnitQuad.mesh - - Textures/Icons/Boosts/Defender-01.png - - - - - - - - - - - - - - - - - false - Models/Core/UnitQuad.mesh - - Textures/Icons/Boosts/Sniper-01.png - - - - - - - - - - - - - - - - - - false Models/Core/UnitQuad.mesh - Textures\Icons\Abilities\Superman-01.png - + Textures/Weapons/Crosshair/SmallThickHoleDot.png - - - + + + + + + + + + + Schema/Entities/HitMarker.xml + + + + + + + + + + - + + + + false + Models/Core/UnitQuad.mesh + + Textures/Core/UnitHexagon.png + + true + + + + + + + + + + 1 + + + + 4 + + + false + Models/Core/UnitQuad.mesh + + Textures/Core/UnitHexagon_Rotated.png + true + + + + + + + + + + + + + + + false + Models/Core/UnitQuad.mesh + + Textures/Core/UnitHexagon.png + + true + + + + + + + + + + + + + 2 + + + false + Models/Core/UnitQuad.mesh + + Textures/Core/UnitHexagon_Rotated.png + true + + + + + + + + + + + + + + + false + Models/Core/UnitQuad.mesh + + Textures/Core/UnitHexagon.png + + true + + + + + + + + + + + + + 3 + + + false + Models/Core/UnitQuad.mesh + + Textures/Core/UnitHexagon_Rotated.png + true + + + + + + + + + + + + + + + false + Models/Core/UnitQuad.mesh + + Textures/Core/UnitHexagon.png + + true + + + + + + + + + + + + + 1 + + + false + Models/Core/UnitQuad.mesh + + Textures/Core/UnitHexagon_Rotated.png + true + + + + + + + + + + + + + + + false + Models/Core/UnitQuad.mesh + + Textures/Core/UnitHexagon.png + + true + + + + + + + + + + 1 + + + + + false + Models/Core/UnitQuad.mesh + + Textures/Core/UnitHexagon_Rotated.png + true + + + + + + + + + + + + + + + + + + + + + + + - 0.0 + Fonts/DroidSans.ttf,64 - - false + + + + + + + + + + + + + Fonts/DroidSans.ttf,64 + + + - - - + + + + + + + + + + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + + + + + + + + + Models/Widgets/Arrows/ArrowBlue.mesh + + + + + + + + + + + + + + + + + + + + + 1 + + + + 100/100 + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + + 1 + + + + + Models/Core/UnitQuad.mesh + + Textures/HealthHUD3.png + + true + + + + + + + + + + + + + + + + + + + + + + false + Models/Core/UnitQuad.mesh + + Textures/Icons/Boosts/Assault-01.png + + true + + + + + + + + + + + + + + + + false + Models/Core/UnitQuad.mesh + + Textures/Icons/Boosts/Defender-01.png + + true + + + + + + + + + + + + + + + + false + Models/Core/UnitQuad.mesh + + Textures/Icons/Boosts/Sniper-01.png + + false + true + + + + + + + + + + + + + + + + + + + false + Models/Core/UnitQuad.mesh + + Textures/Icons/Abilities/Long/Superman-01.png + + true + + + + + @@ -904,10 +923,10 @@ - + - DashRightF + DashLeftF 1.7999999523162842 false @@ -916,10 +935,10 @@ - + - DashLeftF + DashRightF 1.7999999523162842 false diff --git a/resources/Schema/Entities/PlayerDefenderBlue.xml b/resources/Schema/Entities/PlayerDefenderBlue.xml index 84324379..c75f50fd 100644 --- a/resources/Schema/Entities/PlayerDefenderBlue.xml +++ b/resources/Schema/Entities/PlayerDefenderBlue.xml @@ -92,446 +92,473 @@ - - - + + Schema/Entities/PlayerHUD.xml + + - - - - false - Models/Core/UnitQuad.mesh - - Textures/Weapons/Crosshair/SmallThickHoleDot.png - - - - - - - - - - - - Schema/Entities/HitMarker.xml - - - - - - + - - + - + false Models/Core/UnitQuad.mesh - Textures/Core/UnitHexagon.png - + Textures/Weapons/Crosshair/SmallThickHoleDot.png - + + - - - - - - - - 2 - - - false - Models/Core/UnitQuad.mesh - - Textures/Core/UnitHexagon_Rotated.png - - - - - - - - - - + - + - - false - Models/Core/UnitQuad.mesh - - Textures/Core/UnitHexagon.png - - - - - - - - - - - - - - 3 - - - false - Models/Core/UnitQuad.mesh - - Textures/Core/UnitHexagon_Rotated.png - - - - - - - - - - - - - - - false - Models/Core/UnitQuad.mesh - - Textures/Core/UnitHexagon.png - - - - - - - - - - - 1 - - - - 4 - - - false - Models/Core/UnitQuad.mesh - - Textures/Core/UnitHexagon_Rotated.png - - - - - - - - - - - - - - - false - Models/Core/UnitQuad.mesh - - Textures/Core/UnitHexagon.png - - - - - - - - - - - - - - 1 - - - false - Models/Core/UnitQuad.mesh - - Textures/Core/UnitHexagon_Rotated.png - - - - - - - - - - - - - - - false - Models/Core/UnitQuad.mesh - - Textures/Core/UnitHexagon.png - - - - - - - - - - - 1 - - - - - false - Models/Core/UnitQuad.mesh - - Textures/Core/UnitHexagon_Rotated.png - - - - - - - - - - - - - - - - - - - - - - - - - - - Fonts/DroidSans.ttf,64 - - - - + + Schema/Entities/HitMarker.xml + - + - - - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - - - - - - - - - - Models/Widgets/Arrows/Arrow5.mesh - - - - - - - - - - - - - - - - - - - - 1 - - - - 150/150 - Fonts/DroidSans.ttf,64 - - - - - - - - - - - - - - - 1 - - - - - Models/Core/UnitQuad.mesh - - Textures/HealthHUD3.png - - - - - - - - - - - - - + + - + - - - false Models/Core/UnitQuad.mesh - Textures/Icons/Boosts/Assault-01.png - + Textures/Core/UnitHexagon.png + + true - - - + + + + + + + + 1 + + + + 4 + + + false + Models/Core/UnitQuad.mesh + + Textures/Core/UnitHexagon_Rotated.png + true + + + + + + + + + + + + + + + false + Models/Core/UnitQuad.mesh + + Textures/Core/UnitHexagon.png + + true + + + + + + + + + + + + + 2 + + + false + Models/Core/UnitQuad.mesh + + Textures/Core/UnitHexagon_Rotated.png + true + + + + + + + + + + + + + + + false + Models/Core/UnitQuad.mesh + + Textures/Core/UnitHexagon.png + + true + + + + + + + + + + + + + 3 + + + false + Models/Core/UnitQuad.mesh + + Textures/Core/UnitHexagon_Rotated.png + true + + + + + + + + + + + + + + + false + Models/Core/UnitQuad.mesh + + Textures/Core/UnitHexagon.png + + true + + + + + + + + + + + + + 1 + + + false + Models/Core/UnitQuad.mesh + + Textures/Core/UnitHexagon_Rotated.png + true + + + + + + + + + + + + + + + false + Models/Core/UnitQuad.mesh + + Textures/Core/UnitHexagon.png + + true + + + + + + + + + + 1 + + + + + false + Models/Core/UnitQuad.mesh + + Textures/Core/UnitHexagon_Rotated.png + true + + + + + + + + + + + + + + + + + + + + + + + + + + + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + Fonts/DroidSans.ttf,64 + + + + + + - + - - - - - false - Models/Core/UnitQuad.mesh - - Textures/Icons/Boosts/Defender-01.png - - + + + Fonts/DroidSans.ttf,64 + + + + - - - - - - - - - - - - - - false - Models/Core/UnitQuad.mesh - - Textures/Icons/Boosts/Sniper-01.png - - - - - - + - + - - - inf - - - - false - Models/Core/UnitQuad.mesh - - Textures\Icons\Abilities\SheildDots-01.png - - + + + + + + + + Models/Widgets/Arrows/ArrowBlue.mesh + - - - + + + + + + + + + + + + + + + 1 + + + + 150/150 + Fonts/DroidSans.ttf,64 + + + + + + + + + + + + + + + 1 + + + + + Models/Core/UnitQuad.mesh + + Textures/HealthHUD3.png + + true + + + + + + + + + + + + + + + + + + + + + + false + Models/Core/UnitQuad.mesh + + Textures/Icons/Boosts/Assault-01.png + + true + + + + + + + + + + + + + + + + false + Models/Core/UnitQuad.mesh + + Textures/Icons/Boosts/Defender-01.png + + true + + + + + + + + + + + + + + + + false + Models/Core/UnitQuad.mesh + + Textures/Icons/Boosts/Sniper-01.png + + false + true + + + + + + + + + + + + + + + + 1 + + + + false + Models/Core/UnitQuad.mesh + + Textures/Icons/Abilities/Long/SheildDots-01.png + + true + + + + + + + + + + + diff --git a/src/Game/Systems/BoostSystem.cpp b/src/Game/Systems/BoostSystem.cpp index c3dc1f2b..2ebfff73 100644 --- a/src/Game/Systems/BoostSystem.cpp +++ b/src/Game/Systems/BoostSystem.cpp @@ -35,19 +35,25 @@ bool BoostSystem::OnPlayerDamage(Events::PlayerDamage& e) return false; } - //get the XML file, example: "Schema/Entities/BoostclassName.xml" - std::string classXML = "Schema/Entities/" + className + ".xml"; - //check if player already has a child with the component, if so delete that child - auto playerBoostAssaultEntity = e.Victim.FirstChildByName(className); - if (playerBoostAssaultEntity.Valid()) { - m_World->DeleteEntity(playerBoostAssaultEntity.ID); + LOG_INFO("intflictor: %s, vicitm: %s", e.Inflictor.Name().c_str(), e.Victim.Name().c_str()); + if(className == "SidearmWeapon") { // give ammo + giveAmmo(e.Inflictor, e.Victim); + } else { //give boost + //get the XML file, example: "Schema/Entities/BoostclassName.xml" + std::string classXML = "Schema/Entities/" + className + ".xml"; + + //check if player already has a child with the component, if so delete that child + auto playerBoostAssaultEntity = e.Victim.FirstChildByName(className); + if (playerBoostAssaultEntity.Valid()) { + m_World->DeleteEntity(playerBoostAssaultEntity.ID); + } + //load boost XML file, set it entity parented with the victim player + auto entityFile = ResourceManager::Load(classXML); + EntityWrapper boostAssaultEntity = entityFile->MergeInto(m_World); + m_World->SetName(boostAssaultEntity.ID, className); + m_World->SetParent(boostAssaultEntity.ID, e.Victim.ID); } - //load boost XML file, set it entity parented with the victim player - auto entityFile = ResourceManager::Load(classXML); - EntityWrapper boostAssaultEntity = entityFile->MergeInto(m_World); - m_World->SetName(boostAssaultEntity.ID, className); - m_World->SetParent(boostAssaultEntity.ID, e.Victim.ID); return true; } @@ -55,14 +61,64 @@ bool BoostSystem::OnPlayerDamage(Events::PlayerDamage& e) std::string BoostSystem::DetermineClass(EntityWrapper inflictorPlayer) { //determine the class based on what component the inflictor-player has - if (m_World->HasComponent(inflictorPlayer.ID, "DashAbility")) { - return "BoostAssault"; - } - if (m_World->HasComponent(inflictorPlayer.ID, "ShieldAbility")) { - return "BoostDefender"; - } - if (m_World->HasComponent(inflictorPlayer.ID, "SprintAbility")) { - return "BoostSniper"; + if (inflictorPlayer.HasComponent("Player")) { + if ((std::string)inflictorPlayer["Player"]["CurrentWeapon"] == "AssaultWeapon") { + return "BoostAssault"; + } + if ((std::string)inflictorPlayer["Player"]["CurrentWeapon"] == "DefenderWeapon") { + return "BoostDefender"; + } + if ((std::string)inflictorPlayer["Player"]["CurrentWeapon"] == "SniperWeapon") { + return "BoostSniper"; + } + if ((std::string)inflictorPlayer["Player"]["CurrentWeapon"] == "SidearmWeapon") { + return "SidearmWeapon"; + } } return ""; } + +void BoostSystem::giveAmmo(EntityWrapper giver, EntityWrapper receiver) +{ + bool gaveAmmo = false; + + if (receiver.HasComponent("AssaultWeapon")) { + int magazineSize = receiver["AssaultWeapon"]["MagazineSize"]; + int& magazineAmmo = receiver["AssaultWeapon"]["MagazineAmmo"]; + + int maxAmmo = receiver["AssaultWeapon"]["MaxAmmo"]; + int& ammo = receiver["AssaultWeapon"]["Ammo"]; + + if (magazineAmmo < magazineSize) { + magazineAmmo += 1; + gaveAmmo = true; + } else if (ammo < maxAmmo) { + ammo += 1; + gaveAmmo = true; + } + } else if (receiver.HasComponent("DefenderWeapon")) { + int magazineSize = receiver["DefenderWeapon"]["MagazineSize"]; + int& magazineAmmo = receiver["DefenderWeapon"]["MagazineAmmo"]; + + int maxAmmo = receiver["DefenderWeapon"]["MaxAmmo"]; + int& ammo = receiver["DefenderWeapon"]["Ammo"]; + + if (magazineAmmo < magazineSize) { + magazineAmmo += 1; + gaveAmmo = true; + } else if (ammo < maxAmmo) { + ammo += 1; + gaveAmmo = true; + } + } + + + if (gaveAmmo) { + EntityWrapper effectSpawner = giver.FirstChildByName("AmmoShareEffectSpawner"); + if (effectSpawner.Valid()) { + if (effectSpawner.HasComponent("Spawner")) { + SpawnerSystem::Spawn(effectSpawner, effectSpawner); + } + } + } +} diff --git a/src/Game/Systems/Weapon/SidearmWeaponBehaviour.cpp b/src/Game/Systems/Weapon/SidearmWeaponBehaviour.cpp index f87f1f81..517d17fb 100644 --- a/src/Game/Systems/Weapon/SidearmWeaponBehaviour.cpp +++ b/src/Game/Systems/Weapon/SidearmWeaponBehaviour.cpp @@ -281,7 +281,7 @@ bool SidearmWeaponBehaviour::dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi // If friendly fire, reduce damage to 0 (needed to make Boosts, Ammosharing work) if ((ComponentInfo::EnumType)victim["Team"]["Team"] == (ComponentInfo::EnumType)wi.Player["Team"]["Team"]) { damage = 0; - giveAmmo(cWeapon, wi, victim); + //giveAmmo(cWeapon, wi, victim); } // Deal damage! @@ -293,6 +293,7 @@ bool SidearmWeaponBehaviour::dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi return damage > 0; } +/* void SidearmWeaponBehaviour::giveAmmo(ComponentWrapper cWeapon, WeaponInfo& wi, EntityWrapper receiver) { @@ -337,7 +338,7 @@ void SidearmWeaponBehaviour::giveAmmo(ComponentWrapper cWeapon, WeaponInfo& wi, } } } -} +}*/ void SidearmWeaponBehaviour::CheckAmmo(ComponentWrapper cWeapon, WeaponInfo& wi) {