diff --git a/include/Game/Systems/Weapon/AssaultWeaponBehaviour.h b/include/Game/Systems/Weapon/AssaultWeaponBehaviour.h
index 7244d443..69bd15e1 100644
--- a/include/Game/Systems/Weapon/AssaultWeaponBehaviour.h
+++ b/include/Game/Systems/Weapon/AssaultWeaponBehaviour.h
@@ -20,6 +20,7 @@ public:
void OnPrimaryFire(ComponentWrapper cWeapon, WeaponInfo& wi) override;
void OnCeasePrimaryFire(ComponentWrapper cWeapon, WeaponInfo& wi) override;
void OnReload(ComponentWrapper cWeapon, WeaponInfo& wi) override;
+ void OnEquip(ComponentWrapper cWeapon, WeaponInfo& wi) override;
void OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi) override;
//bool OnInputCommand(ComponentWrapper cWeapon, WeaponInfo& wi, const Events::InputCommand& e) override;
diff --git a/resources/Schema/Components/AssaultWeapon.xml b/resources/Schema/Components/AssaultWeapon.xml
index ba74fbb7..263a840a 100755
--- a/resources/Schema/Components/AssaultWeapon.xml
+++ b/resources/Schema/Components/AssaultWeapon.xml
@@ -15,6 +15,7 @@
0.5
false
0
+ false
false
0
0
diff --git a/resources/Schema/Components/AssaultWeapon.xsd b/resources/Schema/Components/AssaultWeapon.xsd
index a1e745de..1faf14fa 100755
--- a/resources/Schema/Components/AssaultWeapon.xsd
+++ b/resources/Schema/Components/AssaultWeapon.xsd
@@ -44,6 +44,7 @@
+
diff --git a/src/Game/Systems/Weapon/AssaultWeaponBehaviour.cpp b/src/Game/Systems/Weapon/AssaultWeaponBehaviour.cpp
index c982637b..4d0f2258 100644
--- a/src/Game/Systems/Weapon/AssaultWeaponBehaviour.cpp
+++ b/src/Game/Systems/Weapon/AssaultWeaponBehaviour.cpp
@@ -10,18 +10,28 @@ void AssaultWeaponBehaviour::UpdateComponent(EntityWrapper& entity, ComponentWra
void AssaultWeaponBehaviour::UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo& wi, double dt)
{
- // Decrement reload timer
- double& reloadTimer = cWeapon["ReloadTimer"];
- reloadTimer = glm::max(0.0, reloadTimer - dt);
-
// Start reloading automatically if at 0 mag ammo
int& magAmmo = cWeapon["MagazineAmmo"];
if (m_ConfigAutoReload && magAmmo <= 0) {
OnReload(cWeapon, wi);
}
- // Handle reloading
+ // Only start reloading once we're done firing
+ bool& reloadQueued = cWeapon["ReloadQueued"];
+ double& fireCooldown = cWeapon["FireCooldown"];
bool& isReloading = cWeapon["IsReloading"];
+ if (reloadQueued && fireCooldown <= 0) {
+ reloadQueued = fireCooldown;
+ isReloading = true;
+ }
+
+ // Decrement reload timer
+ double& reloadTimer = cWeapon["ReloadTimer"];
+ if (isReloading) {
+ reloadTimer = glm::max(0.0, reloadTimer - dt);
+ }
+
+ // Handle reloading
if (isReloading && reloadTimer <= 0.0) {
int& magSize = cWeapon["MagazineSize"];
int& ammo = cWeapon["Ammo"];
@@ -67,8 +77,9 @@ void AssaultWeaponBehaviour::OnCeasePrimaryFire(ComponentWrapper cWeapon, Weapon
void AssaultWeaponBehaviour::OnReload(ComponentWrapper cWeapon, WeaponInfo& wi)
{
+ bool& reloadQueued = cWeapon["ReloadQueued"];
bool& isReloading = cWeapon["IsReloading"];
- if (isReloading) {
+ if (reloadQueued || isReloading) {
return;
}
@@ -86,10 +97,15 @@ void AssaultWeaponBehaviour::OnReload(ComponentWrapper cWeapon, WeaponInfo& wi)
double& reloadTimer = cWeapon["ReloadTimer"];
// Start reload
- isReloading = true;
+ reloadQueued = true;
reloadTimer = reloadTime;
}
+void AssaultWeaponBehaviour::OnEquip(ComponentWrapper cWeapon, WeaponInfo& wi)
+{
+ cWeapon["FireCooldown"] = (double)cWeapon["EquipTime"];
+}
+
void AssaultWeaponBehaviour::OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi)
{
// Make sure the trigger is released if weapon is holstered while firing
@@ -167,8 +183,8 @@ bool AssaultWeaponBehaviour::canFire(ComponentWrapper cWeapon, WeaponInfo& wi)
{
bool triggerHeld = cWeapon["TriggerHeld"];
bool cooldownPassed = (double)cWeapon["FireCooldown"] <= 0.0;
- bool isReloading = cWeapon["IsReloading"];
- return triggerHeld && cooldownPassed;
+ bool isNotReloading = !(bool)cWeapon["IsReloading"];
+ return triggerHeld && cooldownPassed && isNotReloading;
}
bool AssaultWeaponBehaviour::dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi)