diff --git a/resources/Schema/Components/DefenderWeapon.xml b/resources/Schema/Components/DefenderWeapon.xml
index 9c3861cd..f2e7b3d9 100755
--- a/resources/Schema/Components/DefenderWeapon.xml
+++ b/resources/Schema/Components/DefenderWeapon.xml
@@ -10,8 +10,8 @@
0.174533
9
120
- 0.03
- 0.2
+ 0.15
+ 0.3
0.5
false
0
diff --git a/resources/Schema/Components/SidearmWeapon.xml b/resources/Schema/Components/SidearmWeapon.xml
index a41bc201..6f505d0c 100644
--- a/resources/Schema/Components/SidearmWeapon.xml
+++ b/resources/Schema/Components/SidearmWeapon.xml
@@ -6,7 +6,9 @@
20
500
false
- 0.01
+ 0.05
+ 0.174533
+ 0.2
1.0
0.5
false
@@ -14,4 +16,5 @@
false
false
0
+ 0
\ No newline at end of file
diff --git a/resources/Schema/Components/SidearmWeapon.xsd b/resources/Schema/Components/SidearmWeapon.xsd
index 2c1df4a1..fcb40c8f 100644
--- a/resources/Schema/Components/SidearmWeapon.xsd
+++ b/resources/Schema/Components/SidearmWeapon.xsd
@@ -36,6 +36,12 @@
View punch in radians for each shell fired
+
+ Maximum vertical aim travel angle in radians
+
+
+ The speed in radians per second the view returns to its original position after being punched
+
Time it takes to load ONE SHELL into the weapon in seconds
@@ -47,6 +53,7 @@
+
diff --git a/src/Game/Systems/Weapon/DefenderWeaponBehaviour.cpp b/src/Game/Systems/Weapon/DefenderWeaponBehaviour.cpp
index 603f6991..945c6071 100644
--- a/src/Game/Systems/Weapon/DefenderWeaponBehaviour.cpp
+++ b/src/Game/Systems/Weapon/DefenderWeaponBehaviour.cpp
@@ -324,23 +324,23 @@ void DefenderWeaponBehaviour::fireShell(ComponentWrapper cWeapon, WeaponInfo& wi
spawnTracers(cWeapon, wi, pattern);
// View punch
- //if (IsClient) {
- // EntityWrapper camera = wi.Player.FirstChildByName("Camera");
- // if (camera.Valid()) {
- // glm::vec3& cameraOrientation = camera["Transform"]["Orientation"];
- // float viewPunch = cWeapon["ViewPunch"];
- // float maxTravelAngle = cWeapon["MaxTravelAngle"];
- // float& currentTravel = cWeapon["CurrentTravel"];
- // if (currentTravel < maxTravelAngle) {
- // float change = viewPunch;
- // if (currentTravel + change > maxTravelAngle) {
- // change = maxTravelAngle - currentTravel;
- // }
- // cameraOrientation.x += change;
- // currentTravel += change;
- // }
- // }
- //}
+ if (IsClient) {
+ EntityWrapper camera = wi.Player.FirstChildByName("Camera");
+ if (camera.Valid()) {
+ Field cameraOrientation = camera["Transform"]["Orientation"];
+ float viewPunch = cWeapon["ViewPunch"];
+ float maxTravelAngle = (const float&)cWeapon["MaxTravelAngle"];
+ Field currentTravel = cWeapon["CurrentTravel"];
+ if (currentTravel < maxTravelAngle) {
+ float change = viewPunch;
+ if (currentTravel + change > maxTravelAngle) {
+ change = maxTravelAngle - currentTravel;
+ }
+ cameraOrientation.x(cameraOrientation.x() + change);
+ currentTravel += change;
+ }
+ }
+ }
// Play animation
playAnimationAndReturn(wi.FirstPersonEntity, "FinalBlend", "Fire");
diff --git a/src/Game/Systems/Weapon/SidearmWeaponBehaviour.cpp b/src/Game/Systems/Weapon/SidearmWeaponBehaviour.cpp
index 97144b60..57534786 100644
--- a/src/Game/Systems/Weapon/SidearmWeaponBehaviour.cpp
+++ b/src/Game/Systems/Weapon/SidearmWeaponBehaviour.cpp
@@ -69,6 +69,21 @@ void SidearmWeaponBehaviour::UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo&
}
}
+ // Restore view angle
+ if (IsClient) {
+ Field currentTravel = cWeapon["CurrentTravel"];
+ Field returnSpeed = cWeapon["ViewReturnSpeed"];
+ if (currentTravel > 0) {
+ float change = returnSpeed * dt;
+ currentTravel = glm::max(0.f, currentTravel - change);
+ EntityWrapper camera = wi.Player.FirstChildByName("Camera");
+ if (camera.Valid()) {
+ Field cameraOrientation = camera["Transform"]["Orientation"];
+ cameraOrientation.x(cameraOrientation.x() - change);
+ }
+ }
+ }
+
if ((bool)cWeapon["Automatic"] && canFire(cWeapon)) {
fireBullet(cWeapon, wi);
}
@@ -183,6 +198,25 @@ void SidearmWeaponBehaviour::fireBullet(ComponentWrapper cWeapon, WeaponInfo& wi
magAmmo -= 1;
}
+ // View punch
+ if (IsClient) {
+ EntityWrapper camera = wi.Player.FirstChildByName("Camera");
+ if (camera.Valid()) {
+ Field cameraOrientation = camera["Transform"]["Orientation"];
+ float viewPunch = cWeapon["ViewPunch"];
+ float maxTravelAngle = cWeapon["MaxTravelAngle"];
+ Field currentTravel = cWeapon["CurrentTravel"];
+ if (currentTravel < maxTravelAngle) {
+ float change = viewPunch;
+ if (currentTravel + change > maxTravelAngle) {
+ change = maxTravelAngle - currentTravel;
+ }
+ cameraOrientation.x(cameraOrientation.x() + change);
+ currentTravel += change;
+ }
+ }
+ }
+
// Get weapon model based on current person
EntityWrapper weaponModelEntity = getRelevantWeaponEntity(wi);
if (!weaponModelEntity.Valid()) {