diff --git a/include/Game/Systems/AbilityCooldownHUDSystem.h b/include/Game/Systems/AbilityCooldownHUDSystem.h
new file mode 100644
index 00000000..610b4dc2
--- /dev/null
+++ b/include/Game/Systems/AbilityCooldownHUDSystem.h
@@ -0,0 +1,17 @@
+#ifndef AbilityCooldownHUDSystem_h__
+#define AbilityCooldownHUDSystem_h__
+
+#include "../../Engine/Core/System.h"
+#include "../../Engine/GLM.h"
+
+class AbilityCooldownHUDSystem : public ImpureSystem
+{
+public:
+ AbilityCooldownHUDSystem(SystemParams params)
+ : System(params)
+ { }
+
+ virtual void Update(double dt) override;
+};
+
+#endif
\ No newline at end of file
diff --git a/resources/Schema/Components.xsd b/resources/Schema/Components.xsd
index 42abed82..b90a445d 100644
--- a/resources/Schema/Components.xsd
+++ b/resources/Schema/Components.xsd
@@ -46,4 +46,5 @@
+
\ No newline at end of file
diff --git a/resources/Schema/Components/AbilityCooldownHUD.xml b/resources/Schema/Components/AbilityCooldownHUD.xml
new file mode 100644
index 00000000..8f91bbc3
--- /dev/null
+++ b/resources/Schema/Components/AbilityCooldownHUD.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/resources/Schema/Components/AbilityCooldownHUD.xsd b/resources/Schema/Components/AbilityCooldownHUD.xsd
new file mode 100644
index 00000000..066a9442
--- /dev/null
+++ b/resources/Schema/Components/AbilityCooldownHUD.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ HUD element for tracking ability cooldown
+
+
+
\ No newline at end of file
diff --git a/resources/Schema/Entities/PlayerRed.xml b/resources/Schema/Entities/PlayerRed.xml
index d56fa3c1..1e419b4d 100644
--- a/resources/Schema/Entities/PlayerRed.xml
+++ b/resources/Schema/Entities/PlayerRed.xml
@@ -23,7 +23,9 @@
-
+
+
+
@@ -111,6 +113,7 @@
Textures/HealthHUD3.png
+ false
@@ -121,7 +124,55 @@
-
+
+
+
+
+
+ 1
+
+
+
+ Textures/Core/White.png
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2.0
+ Fonts/DroidSans.ttf,64
+
+
+
+
+
+
+
+
+
+
+
+
+ Textures/Props/FoliageDiff.png
+ false
+
+
+
+
+
+
+
+
+
@@ -137,6 +188,7 @@
Textures/Core/UnitHexagon.png
+ false
@@ -155,6 +207,7 @@
Textures/Core/UnitHexagon_Rotated.png
+ false
@@ -171,6 +224,7 @@
Textures/Core/UnitHexagon.png
+ false
@@ -185,11 +239,11 @@
3
- 0.80222018197612788
Textures/Core/UnitHexagon_Rotated.png
+ false
@@ -206,6 +260,7 @@
Textures/Core/UnitHexagon.png
+ false
@@ -220,10 +275,12 @@
4
+ 1
Textures/Core/UnitHexagon_Rotated.png
+ false
@@ -240,6 +297,7 @@
Textures/Core/UnitHexagon.png
+ false
@@ -258,6 +316,7 @@
Textures/Core/UnitHexagon_Rotated.png
+ false
@@ -274,8 +333,9 @@
Textures/Core/UnitHexagon.png
+ false
-
+
@@ -286,16 +346,18 @@
-
+ 1
+
Textures/Core/UnitHexagon_Rotated.png
+ false
-
+
@@ -364,7 +426,7 @@
Idle
- 1.2667383999985162
+ 1.2417589624457968
1
@@ -385,8 +447,8 @@
Models/Weapons/Red/AssaultWeaponRed.mesh
-
-
+
+
@@ -492,10 +554,13 @@
- Idle
- 0.26532318661337229
+ Run
+ 0.012377234178668317
1
+ 1
+ 0.5
+ 1.8342275085993549
@@ -519,8 +584,8 @@
Models/Weapons/Red/AssaultWeaponRed.mesh
-
-
+
+
diff --git a/resources/Schema/Entities/QualityAssurance.xml b/resources/Schema/Entities/QualityAssurance.xml
index 0aa2fbe7..3f880c91 100644
--- a/resources/Schema/Entities/QualityAssurance.xml
+++ b/resources/Schema/Entities/QualityAssurance.xml
@@ -40,7 +40,7 @@
-
+
@@ -93,7 +93,7 @@
-
+
@@ -108,7 +108,11 @@
-
+
+
+
+
+
Models/Characters/Assault/AssaultAnimated.mesh
@@ -120,7 +124,11 @@
-
+
+
+
+
+
Models/Characters/Assault/AssaultAnimated.mesh
@@ -168,21 +176,643 @@
-
+
-
+
-
-
- Models/Characters/Assault/AssaultAnimated.mesh
-
+
+
+
+
+
+ 600
+
+
+
+
+
+
+
+
+ 5
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+ Models/Widgets/Camera.mesh
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Textures/Weapons/Crosshair/SmallThickHoleDot.png
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+ Schema/Entities/HitMarker.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+ 100/100
+ Fonts/DroidSans.ttf,64
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+ Textures/HealthHUD3.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Textures/Test/SmallDiff.png
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Textures/Core/UnitHexagon.png
+
+
+
+
+
+
+
+
+
+
+
+ 2
+
+
+
+
+
+ Textures/Core/UnitHexagon_Rotated.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Textures/Core/UnitHexagon.png
+
+
+
+
+
+
+
+
+
+
+
+ 3
+
+
+
+
+
+ Textures/Core/UnitHexagon_Rotated.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Textures/Core/UnitHexagon.png
+
+
+
+
+
+
+
+
+
+
+
+ 4
+
+
+ 1
+
+
+
+ Textures/Core/UnitHexagon_Rotated.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Textures/Core/UnitHexagon.png
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+ Textures/Core/UnitHexagon_Rotated.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Textures/Core/UnitHexagon.png
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+ Textures/Core/UnitHexagon_Rotated.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Fonts/DroidSans.ttf,64
+
+
+
+
+
+
+
+
+
+
+
+
+ Fonts/DroidSans.ttf,64
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Fonts/DroidSans.ttf,64
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Idle
+ 1.0970008697500191
+ 1
+
+
+
+
+ Models/Characters/Assault/FirstPerson.mesh
+
+
+
+
+
+
+
+
+ R_Arm_Weapon_Joint
+
+
+ Models/Weapons/Red/AssaultWeaponRed.mesh
+
+
+
+
+
+
+
+
+
+
+ Schema/Entities/RayRed.xml
+
+
+
+
+
+
+
+
+
+
+ Schema/Entities/ReloadEffectViewRed.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Textures/Core/UnitHexagon.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 32
+ Fonts/DroidSans.ttf,64
+
+
+
+
+
+
+
+
+
+
+
+ 360
+ Fonts/DroidSans.ttf,64
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Models/Widgets/Camera.mesh
+ false
+
+
+
+
+
+
+
+
+
+
+
+ Run
+ 0.86761914148289065
+ 1
+ 1
+
+ 0.5
+ 1.8342275085993549
+
+
+
+ AimRifle
+
+
+
+
+ Models/Characters/Assault/AssaultAnimations.mesh
+
+
+
+
+
+
+
+
+ R_Arm_Weapon_Joint
+
+
+ Models/Weapons/Red/AssaultWeaponRed.mesh
+
+
+
+
+
+
+
+
+
+
+ Schema/Entities/RayRed.xml
+
+
+
+
+
+
+
+
+
+
+ Schema/Entities/ReloadEffectWorldRed.xml
+
+
+
+
+
+
+
+
+
+
+
+
+ Models/Core/UnitCube.mesh
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+ Models/Core/UnitCube.mesh
+
+ false
+
+
+
+
+
+
+
+
+
+
+ Insert name here
+ Fonts/DroidSans.ttf,100
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Textures/Icons/Arrow.png
+ false
+
+
+
+
+
+ 50
+ true
+
+
+
+
+
+
+
+
+
@@ -213,7 +843,7 @@
-
+
@@ -277,7 +907,7 @@
-
+
@@ -309,7 +939,7 @@
-
+
@@ -659,7 +1289,7 @@
-
+
@@ -706,7 +1336,7 @@
-
+
@@ -766,7 +1396,7 @@
-
+
@@ -813,7 +1443,7 @@
-
+
@@ -859,7 +1489,7 @@
-
+
@@ -906,7 +1536,7 @@
-
+
@@ -953,7 +1583,7 @@
-
+
@@ -1367,7 +1997,7 @@
-
+
@@ -1376,7 +2006,7 @@
true
- 0.8256214817261025
+ 2.8360836966480178
3.7999999523162842
true
@@ -1423,7 +2053,7 @@
-
+
@@ -1432,7 +2062,7 @@
- 1.8641349174045843
+ 1.47485045667446
Models/Characters/Assault/AssaultTPose.mesh
@@ -1475,18 +2105,22 @@
-
+
-
+
+
+
+
+
true
- 1.8641349174045843
+ 1.47485045667446
true
@@ -1531,7 +2165,7 @@
-
+
@@ -1541,7 +2175,7 @@
true
- 1.2301962937648341
+ 8.7351898541697892
10
3
@@ -1589,7 +2223,7 @@
-
+
@@ -1599,7 +2233,7 @@
true
- 3.4214855659573402
+ 4.5370673150397351
true
5
true
@@ -1712,6 +2346,7 @@
+
Fonts/DroidSans.ttf,100
@@ -1780,7 +2415,7 @@
true
- 0.8256214817261025
+ 2.8360836966480178
3.7999999523162842
true
@@ -1823,7 +2458,11 @@
-
+
+
+
+
+
@@ -1925,6 +2564,7 @@
Textures/Props/FoliageDiff.png
+
@@ -1934,6 +2574,7 @@
Textures/Props/FoliageDiff.png
+
@@ -1954,6 +2595,7 @@
Textures/Core/UnitHexagon.png
+
@@ -1971,6 +2613,7 @@
Textures/Core/UnitHexagon_Rotated.png
+
@@ -1986,6 +2629,7 @@
Textures/Core/UnitHexagon.png
+
@@ -2003,6 +2647,7 @@
Textures/Core/UnitHexagon_Rotated.png
+
@@ -2018,6 +2663,7 @@
Textures/Core/UnitHexagon.png
+
@@ -2036,6 +2682,7 @@
Textures/Core/UnitHexagon_Rotated.png
+
@@ -2051,6 +2698,7 @@
Textures/Core/UnitHexagon.png
+
@@ -2068,6 +2716,7 @@
Textures/Core/UnitHexagon_Rotated.png
+
@@ -2083,6 +2732,7 @@
Textures/Core/UnitHexagon.png
+
@@ -2099,6 +2749,7 @@
Textures/Core/UnitHexagon_Rotated.png
+
@@ -2167,6 +2818,7 @@
Textures/Core/ErrorTexture.png
+
@@ -2178,6 +2830,7 @@
Textures/Core/White.png
+
@@ -2206,6 +2859,7 @@
Textures/Core/White.png
+
@@ -2234,6 +2888,7 @@
Textures/Core/White.png
+
@@ -2262,6 +2917,7 @@
Textures/Core/White.png
+
@@ -2290,6 +2946,7 @@
Textures/Core/White.png
+
@@ -2331,6 +2988,7 @@
Textures/Core/ErrorTexture.png
+
@@ -2342,6 +3000,7 @@
Textures/Core/White.png
+
@@ -2370,6 +3029,7 @@
Textures/Core/White.png
+
@@ -2398,6 +3058,7 @@
Textures/Core/White.png
+
@@ -2426,6 +3087,7 @@
Textures/Core/White.png
+
diff --git a/resources/Schema/Types/Entity.xsd b/resources/Schema/Types/Entity.xsd
index a9c5f641..d2887e95 100644
--- a/resources/Schema/Types/Entity.xsd
+++ b/resources/Schema/Types/Entity.xsd
@@ -50,6 +50,7 @@
+
diff --git a/src/Game/Game.cpp b/src/Game/Game.cpp
index 24b7cd1e..f98bcb4c 100644
--- a/src/Game/Game.cpp
+++ b/src/Game/Game.cpp
@@ -25,6 +25,7 @@
#include "Rendering/AnimationSystem.h"
#include "Network/MultiplayerSnapshotFilter.h"
#include "Game/Systems/AmmunitionHUDSystem.h"
+#include "Game/Systems/AbilityCooldownHUDSystem.h"
#include "Game/Systems/KillFeedSystem.h"
#include "GUI/ButtonSystem.h"
#include "GUI/MainMenuSystem.h"
@@ -128,6 +129,7 @@ Game::Game(int argc, char* argv[])
m_SystemPipeline->AddSystem(updateOrderLevel);
m_SystemPipeline->AddSystem(updateOrderLevel);
m_SystemPipeline->AddSystem(updateOrderLevel);
+ m_SystemPipeline->AddSystem(updateOrderLevel);
m_SystemPipeline->AddSystem(updateOrderLevel);
m_SystemPipeline->AddSystem(updateOrderLevel, m_Renderer);
m_SystemPipeline->AddSystem(updateOrderLevel, m_Renderer);
diff --git a/src/Game/Systems/AbilityCooldownHUDSystem.cpp b/src/Game/Systems/AbilityCooldownHUDSystem.cpp
new file mode 100644
index 00000000..12d268c7
--- /dev/null
+++ b/src/Game/Systems/AbilityCooldownHUDSystem.cpp
@@ -0,0 +1,28 @@
+#include "Game/Systems/AbilityCooldownHUDSystem.h"
+
+void AbilityCooldownHUDSystem::Update(double dt)
+{
+ //HUD element for tracking cooldown on the parent entity with Dashability TODO: Make sure it support other abilities when they are made.
+
+ auto abilityHUDs = m_World->GetComponents("AbilityCooldownHUD");
+ if (abilityHUDs == nullptr)
+ return;
+
+ for (auto& abilityHUDC : *abilityHUDs) {
+ EntityWrapper entity = EntityWrapper(m_World, abilityHUDC.EntityID);
+ EntityWrapper abilityEntity = entity.FirstParentWithComponent("DashAbility");
+ if (!abilityEntity.Valid())
+ return;
+ EntityWrapper cooldownTextEntity = entity.FirstChildByName("Cooldown");
+ if(cooldownTextEntity.Valid()) {
+ if(cooldownTextEntity.HasComponent("Text"))
+ {
+ double abilityCD = (double)abilityEntity["DashAbility"]["CoolDownMaxTimer"];
+ std::string t = (std::string&)cooldownTextEntity["Text"]["Content"] = std::to_string(abilityCD).substr(0, 3);
+ if(entity.HasComponent("Fill")) {
+ entity["Fill"]["Percentage"] = abilityCD/abilityCD; //TODO: current time needs to be in the component.
+ }
+ }
+ }
+ }
+}