From 389d27973fb66e345edd3b5bfc169da7d6cfb4b7 Mon Sep 17 00:00:00 2001 From: viktorljung Date: Sun, 13 Mar 2016 18:55:45 +0100 Subject: [PATCH 1/4] Assault boost check --- .../Schema/Entities/FriendlyBoostBlueHUD.xml | 145 ++++++++++++++++++ .../Schema/Entities/WeaponAssaultBlueView.xml | 2 +- src/Game/Systems/BoostSystem.cpp | 13 +- .../Systems/Weapon/AssaultWeaponBehaviour.cpp | 99 +++++++++--- 4 files changed, 228 insertions(+), 31 deletions(-) create mode 100644 resources/Schema/Entities/FriendlyBoostBlueHUD.xml diff --git a/resources/Schema/Entities/FriendlyBoostBlueHUD.xml b/resources/Schema/Entities/FriendlyBoostBlueHUD.xml new file mode 100644 index 00000000..296560fa --- /dev/null +++ b/resources/Schema/Entities/FriendlyBoostBlueHUD.xml @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + Models/Core/UnitQuad.mesh + + Textures/Core/UnitHexagon.png + + + + + + + + + + + + + + + + + + + + + + + + + + + + \1 + Fonts/Hind-Edited.otf,64 + + + + + + + + + + + + \1 + Fonts/Hind-Edited.otf,64 + + + + + + + + + + + + + + + + + + + + + + \2 + Fonts/Hind-Edited.otf,64 + + + + + + + + + + + + \2 + Fonts/Hind-Edited.otf,64 + + + + + + + + + + + + + + + + + + + + + + \3 + Fonts/Hind-Edited.otf,64 + + + + + + + + + + + + \3 + Fonts/Hind-Edited.otf,64 + + + + + + + + + + + + + + + diff --git a/resources/Schema/Entities/WeaponAssaultBlueView.xml b/resources/Schema/Entities/WeaponAssaultBlueView.xml index c85d4c2d..36fbfc03 100644 --- a/resources/Schema/Entities/WeaponAssaultBlueView.xml +++ b/resources/Schema/Entities/WeaponAssaultBlueView.xml @@ -216,7 +216,7 @@ - Schema/Entities/FriendlyAmmoHUD.xml + Schema/Entities/FriendlyBoostBlueHUD.xml diff --git a/src/Game/Systems/BoostSystem.cpp b/src/Game/Systems/BoostSystem.cpp index ede147c3..0aab545f 100644 --- a/src/Game/Systems/BoostSystem.cpp +++ b/src/Game/Systems/BoostSystem.cpp @@ -8,21 +8,18 @@ BoostSystem::BoostSystem(SystemParams params) bool BoostSystem::OnPlayerDamage(Events::PlayerDamage& e) { - if (e.Victim.ID == e.Inflictor.ID) { + if (!IsServer) { return false; } - if (!e.Victim.Valid() || !LocalPlayer.Valid()) { + if (e.Victim == e.Inflictor) { return false; } - if (e.Victim != LocalPlayer && !e.Victim.IsChildOf(LocalPlayer)) { + if (!e.Victim.Valid() || !e.Inflictor.Valid()) { return false; } - if (!e.Inflictor.Valid()) { - return false; - } //if its not friendly fire, return if ((int)m_World->GetComponent(e.Inflictor.ID, "Team")["Team"] != (int)m_World->GetComponent(e.Victim.ID, "Team")["Team"]) { @@ -86,7 +83,7 @@ void BoostSystem::giveAmmo(EntityWrapper giver, EntityWrapper receiver) int maxAmmo = receiver["AssaultWeapon"]["MaxAmmo"]; Field ammo = receiver["AssaultWeapon"]["Ammo"]; - int givenAmmo = 3; + int givenAmmo = 20; magazineAmmo = glm::clamp(magazineAmmo + givenAmmo, 0, magazineSize); if (magazineAmmo > prevMagazineAmmo) { @@ -102,7 +99,7 @@ void BoostSystem::giveAmmo(EntityWrapper giver, EntityWrapper receiver) int maxAmmo = receiver["DefenderWeapon"]["MaxAmmo"]; Field ammo = receiver["DefenderWeapon"]["Ammo"]; - int givenAmmo = 1; + int givenAmmo = 3; magazineAmmo = glm::clamp(magazineAmmo + givenAmmo, 0, magazineSize); if (magazineAmmo > prevMagazineAmmo) { diff --git a/src/Game/Systems/Weapon/AssaultWeaponBehaviour.cpp b/src/Game/Systems/Weapon/AssaultWeaponBehaviour.cpp index ad9caae4..5a4af4f6 100644 --- a/src/Game/Systems/Weapon/AssaultWeaponBehaviour.cpp +++ b/src/Game/Systems/Weapon/AssaultWeaponBehaviour.cpp @@ -10,6 +10,7 @@ void AssaultWeaponBehaviour::UpdateComponent(EntityWrapper& entity, ComponentWra void AssaultWeaponBehaviour::UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo& wi, double dt) { + CheckBoost(cWeapon, wi); // Start reloading automatically if at 0 mag ammo Field magAmmo = cWeapon["MagazineAmmo"]; if (m_ConfigAutoReload && magAmmo <= 0) { @@ -407,52 +408,106 @@ void AssaultWeaponBehaviour::CheckBoost(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"]) { - + EntityWrapper friendlyBoostHudSpawner = wi.FirstPersonPlayerModel.FirstChildByName("FriendlyBoostAttachment"); if (friendlyBoostHudSpawner.Valid()) { + EntityWrapper assaultBoost = victim.FirstChildByName("BoostAssault"); + EntityWrapper defenderBoost = victim.FirstChildByName("BoostDefender"); + EntityWrapper sniperBoost = victim.FirstChildByName("BoostSniper"); + auto children = m_World->GetDirectChildren(friendlyBoostHudSpawner.ID); if (children.first == children.second) { if (friendlyBoostHudSpawner.HasComponent("Spawner")) { - EntityWrapper friendlyAmmoHud = SpawnerSystem::Spawn(friendlyBoostHudSpawner, friendlyBoostHudSpawner); - if (friendlyAmmoHud.Valid()) { - EntityWrapper textEntity = friendlyAmmoHud.FirstChildByName("MagazineAmmo"); - if (textEntity.Valid()) { - if (textEntity.HasComponent("Text")) { - // (std::string&)textEntity["Text"]["Content"] = std::to_string(magazineAmmo); + + EntityWrapper friendlyBoostHud = SpawnerSystem::Spawn(friendlyBoostHudSpawner, friendlyBoostHudSpawner); + if (friendlyBoostHud.Valid()) { + EntityWrapper assaultBoostEntity = friendlyBoostHud.FirstChildByName("AssaultBoost"); + if (assaultBoostEntity.Valid()) { + EntityWrapper active = assaultBoostEntity.FirstChildByName("Active"); + if (active.HasComponent("Text")) { + if (assaultBoost.Valid()) { + (Field)active["Text"]["Visible"] = true; + } else { + (Field)active["Text"]["Visible"] = false; + } } } - EntityWrapper ammoTextEntity = friendlyAmmoHud.FirstChildByName("Ammo"); - if (ammoTextEntity.Valid()) { - if (ammoTextEntity.HasComponent("Text")) { - // (std::string&)ammoTextEntity["Text"]["Content"] = std::to_string(ammo); + EntityWrapper defenderBoostEntity = friendlyBoostHud.FirstChildByName("DefenderBoost"); + if (defenderBoostEntity.Valid()) { + EntityWrapper active = defenderBoostEntity.FirstChildByName("Active"); + if (active.HasComponent("Text")) { + if (defenderBoost.Valid()) { + (Field)active["Text"]["Visible"] = true; + } else { + (Field)active["Text"]["Visible"] = false; + } + } + } + + EntityWrapper sniperBoostEntity = friendlyBoostHud.FirstChildByName("SniperBoost"); + if (sniperBoostEntity.Valid()) { + EntityWrapper active = sniperBoostEntity.FirstChildByName("Active"); + if (active.HasComponent("Text")) { + if (sniperBoost.Valid()) { + (Field)active["Text"]["Visible"] = true; + } else { + (Field)active["Text"]["Visible"] = false; + } } } } } } else { - EntityWrapper textEntity = friendlyBoostHudSpawner.FirstChildByName("MagazineAmmo"); - if (textEntity.Valid()) { - if (textEntity.HasComponent("Text")) { - // (std::string&)textEntity["Text"]["Content"] = std::to_string(magazineAmmo); + EntityWrapper friendlyBoostHud = friendlyBoostHudSpawner.FirstChildByName("FriendlyBoostHUD"); + if (friendlyBoostHud.Valid()) { + EntityWrapper assaultBoostEntity = friendlyBoostHud.FirstChildByName("AssaultBoost"); + if (assaultBoostEntity.Valid()) { + EntityWrapper active = assaultBoostEntity.FirstChildByName("Active"); + if (active.HasComponent("Text")) { + if (assaultBoost.Valid()) { + (Field)active["Text"]["Visible"] = true; + } else { + (Field)active["Text"]["Visible"] = false; + } + } } - } - EntityWrapper ammoTextEntity = friendlyBoostHudSpawner.FirstChildByName("Ammo"); - if (ammoTextEntity.Valid()) { - if (ammoTextEntity.HasComponent("Text")) { - // (std::string&)ammoTextEntity["Text"]["Content"] = std::to_string(ammo); + EntityWrapper defenderBoostEntity = friendlyBoostHud.FirstChildByName("DefenderBoost"); + if (defenderBoostEntity.Valid()) { + EntityWrapper active = defenderBoostEntity.FirstChildByName("Active"); + if (active.HasComponent("Text")) { + if (defenderBoost.Valid()) { + (Field)active["Text"]["Visible"] = true; + } else { + (Field)active["Text"]["Visible"] = false; + } + } + } + + EntityWrapper sniperBoostEntity = friendlyBoostHud.FirstChildByName("SniperBoost"); + if (sniperBoostEntity.Valid()) { + EntityWrapper active = sniperBoostEntity.FirstChildByName("Active"); + if (active.HasComponent("Text")) { + if (sniperBoost.Valid()) { + (Field)active["Text"]["Visible"] = true; + } else { + (Field)active["Text"]["Visible"] = false; + } + } } } } } } - } void AssaultWeaponBehaviour::RemoveBoostCheckHUD(WeaponInfo& wi) { - + EntityWrapper friendlyBoostHudSpawner = wi.FirstPersonPlayerModel.FirstChildByName("FriendlyBoostAttachment"); + if (friendlyBoostHudSpawner.Valid()) { + friendlyBoostHudSpawner.DeleteChildren(); + } } From 1da3ec3c74dfb9d884b5abb1d28a07f152e0a93f Mon Sep 17 00:00:00 2001 From: viktorljung Date: Sun, 13 Mar 2016 20:32:08 +0100 Subject: [PATCH 2/4] ammo share fix? --- .../Game/Systems/Weapon/AssaultWeaponBehaviour.h | 1 - .../Schema/Entities/FriendlyBoostBlueHUD.xml | 12 +++++++++--- src/Game/Systems/BoostSystem.cpp | 7 ++++--- src/Game/Systems/PlayerMovementSystem.cpp | 2 +- .../Systems/Weapon/AssaultWeaponBehaviour.cpp | 16 ++++++---------- 5 files changed, 20 insertions(+), 18 deletions(-) diff --git a/include/Game/Systems/Weapon/AssaultWeaponBehaviour.h b/include/Game/Systems/Weapon/AssaultWeaponBehaviour.h index 231cc020..5783cf31 100644 --- a/include/Game/Systems/Weapon/AssaultWeaponBehaviour.h +++ b/include/Game/Systems/Weapon/AssaultWeaponBehaviour.h @@ -38,7 +38,6 @@ private: //Camera cameraFromEntity(EntityWrapper camera); void CheckBoost(ComponentWrapper cWeapon, WeaponInfo& wi); - void RemoveBoostCheckHUD(WeaponInfo& wi); }; diff --git a/resources/Schema/Entities/FriendlyBoostBlueHUD.xml b/resources/Schema/Entities/FriendlyBoostBlueHUD.xml index 296560fa..c181392e 100644 --- a/resources/Schema/Entities/FriendlyBoostBlueHUD.xml +++ b/resources/Schema/Entities/FriendlyBoostBlueHUD.xml @@ -2,6 +2,9 @@ + + 0.5 + @@ -44,6 +47,7 @@ \1 Fonts/Hind-Edited.otf,64 + false @@ -56,7 +60,7 @@ \1 Fonts/Hind-Edited.otf,64 - + @@ -80,6 +84,7 @@ \2 Fonts/Hind-Edited.otf,64 + false @@ -92,7 +97,7 @@ \2 Fonts/Hind-Edited.otf,64 - + @@ -116,6 +121,7 @@ \3 Fonts/Hind-Edited.otf,64 + false @@ -128,7 +134,7 @@ \3 Fonts/Hind-Edited.otf,64 - + diff --git a/src/Game/Systems/BoostSystem.cpp b/src/Game/Systems/BoostSystem.cpp index 0aab545f..5a04e3f8 100644 --- a/src/Game/Systems/BoostSystem.cpp +++ b/src/Game/Systems/BoostSystem.cpp @@ -8,9 +8,7 @@ BoostSystem::BoostSystem(SystemParams params) bool BoostSystem::OnPlayerDamage(Events::PlayerDamage& e) { - if (!IsServer) { - return false; - } + if (e.Victim == e.Inflictor) { return false; @@ -35,6 +33,9 @@ bool BoostSystem::OnPlayerDamage(Events::PlayerDamage& e) if (className == "SidearmWeapon") { // give ammo giveAmmo(e.Inflictor, e.Victim); } else { //give boost + if (!IsServer) { + return false; + } //get the XML file, example: "Schema/Entities/BoostclassName.xml" std::string classXML = "Schema/Entities/" + className + ".xml"; diff --git a/src/Game/Systems/PlayerMovementSystem.cpp b/src/Game/Systems/PlayerMovementSystem.cpp index 35a7d3cf..d093ee21 100644 --- a/src/Game/Systems/PlayerMovementSystem.cpp +++ b/src/Game/Systems/PlayerMovementSystem.cpp @@ -393,7 +393,7 @@ void PlayerMovementSystem::spawnHexagon(EntityWrapper target) bool PlayerMovementSystem::OnDashAbility(Events::DashAbility & e) { EntityWrapper player(m_World, e.Player); - if (!player.Valid()){// || !IsClient || player.ID == LocalPlayer.ID) { + if (!player.Valid() || !IsClient || player.ID == LocalPlayer.ID) { return false; } diff --git a/src/Game/Systems/Weapon/AssaultWeaponBehaviour.cpp b/src/Game/Systems/Weapon/AssaultWeaponBehaviour.cpp index 5a4af4f6..b58cf158 100644 --- a/src/Game/Systems/Weapon/AssaultWeaponBehaviour.cpp +++ b/src/Game/Systems/Weapon/AssaultWeaponBehaviour.cpp @@ -386,13 +386,11 @@ void AssaultWeaponBehaviour::CheckBoost(ComponentWrapper cWeapon, WeaponInfo& wi PickData pickData = m_Renderer->Pick(centerScreen); EntityWrapper victim(m_World, pickData.Entity); if (!victim.Valid()) { - RemoveBoostCheckHUD(wi); return; } // Don't let us somehow shoot ourselves in the foot if (victim == LocalPlayer) { - RemoveBoostCheckHUD(wi); return; } @@ -401,7 +399,6 @@ void AssaultWeaponBehaviour::CheckBoost(ComponentWrapper cWeapon, WeaponInfo& wi victim = victim.FirstParentWithComponent("Player"); } if (!victim.Valid()) { - RemoveBoostCheckHUD(wi); return; } @@ -463,6 +460,12 @@ void AssaultWeaponBehaviour::CheckBoost(ComponentWrapper cWeapon, WeaponInfo& wi } else { EntityWrapper friendlyBoostHud = friendlyBoostHudSpawner.FirstChildByName("FriendlyBoostHUD"); if (friendlyBoostHud.Valid()) { + if(friendlyBoostHud.HasComponent("Lifetime")) { + (Field)friendlyBoostHud["Lifetime"]["Lifetime"] = 0.5; + } + + + EntityWrapper assaultBoostEntity = friendlyBoostHud.FirstChildByName("AssaultBoost"); if (assaultBoostEntity.Valid()) { EntityWrapper active = assaultBoostEntity.FirstChildByName("Active"); @@ -504,10 +507,3 @@ void AssaultWeaponBehaviour::CheckBoost(ComponentWrapper cWeapon, WeaponInfo& wi } } -void AssaultWeaponBehaviour::RemoveBoostCheckHUD(WeaponInfo& wi) -{ - EntityWrapper friendlyBoostHudSpawner = wi.FirstPersonPlayerModel.FirstChildByName("FriendlyBoostAttachment"); - if (friendlyBoostHudSpawner.Valid()) { - friendlyBoostHudSpawner.DeleteChildren(); - } -} From ee8d7574b25296a535d4248f27c4967cc404ba44 Mon Sep 17 00:00:00 2001 From: viktorljung Date: Sun, 13 Mar 2016 20:46:59 +0100 Subject: [PATCH 3/4] dash fix? --- src/Game/Systems/PlayerMovementSystem.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/Game/Systems/PlayerMovementSystem.cpp b/src/Game/Systems/PlayerMovementSystem.cpp index d093ee21..d6b8ad56 100644 --- a/src/Game/Systems/PlayerMovementSystem.cpp +++ b/src/Game/Systems/PlayerMovementSystem.cpp @@ -392,17 +392,22 @@ void PlayerMovementSystem::spawnHexagon(EntityWrapper target) bool PlayerMovementSystem::OnDashAbility(Events::DashAbility & e) { - EntityWrapper player(m_World, e.Player); - if (!player.Valid() || !IsClient || player.ID == LocalPlayer.ID) { + EntityWrapper eventPlayer(m_World, e.Player); + if (!eventPlayer.Valid() || IsServer || eventPlayer.ID == LocalPlayer.ID) { return false; } // auto entityFile = ResourceManager::Load("Schema/Entities/DashEffect.xml"); // EntityWrapper dashEffect = entityFile->MergeInto(m_World); - EntityWrapper playerModel = player.FirstChildByName("PlayerModel"); + EntityWrapper playerModel = eventPlayer.FirstChildByName("PlayerModel"); for (auto& kv : m_PlayerInputControllers) { EntityWrapper player = kv.first; + if(player != eventPlayer) { + continue; + } + + auto& controller = kv.second; if (!player.Valid()) { From e929ecab502058a476190923e3d46cf77f2986fe Mon Sep 17 00:00:00 2001 From: viktorljung Date: Sun, 13 Mar 2016 20:58:53 +0100 Subject: [PATCH 4/4] fix??? --- src/Game/Systems/PlayerMovementSystem.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Game/Systems/PlayerMovementSystem.cpp b/src/Game/Systems/PlayerMovementSystem.cpp index d6b8ad56..3cf1068d 100644 --- a/src/Game/Systems/PlayerMovementSystem.cpp +++ b/src/Game/Systems/PlayerMovementSystem.cpp @@ -393,7 +393,7 @@ void PlayerMovementSystem::spawnHexagon(EntityWrapper target) bool PlayerMovementSystem::OnDashAbility(Events::DashAbility & e) { EntityWrapper eventPlayer(m_World, e.Player); - if (!eventPlayer.Valid() || IsServer || eventPlayer.ID == LocalPlayer.ID) { + if (!eventPlayer.Valid()){// || IsServer || eventPlayer.ID == LocalPlayer.ID) { return false; }