diff --git a/include/Game/Systems/Weapon/AssaultWeaponBehaviour.h b/include/Game/Systems/Weapon/AssaultWeaponBehaviour.h
index d577e22f..3e019268 100644
--- a/include/Game/Systems/Weapon/AssaultWeaponBehaviour.h
+++ b/include/Game/Systems/Weapon/AssaultWeaponBehaviour.h
@@ -31,7 +31,6 @@ private:
// Weapon functions
void fireBullet(ComponentWrapper cWeapon, WeaponInfo& wi);
- //void dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi, glm::vec3 direction, double damage);
bool canFire(ComponentWrapper cWeapon, WeaponInfo& wi);
bool dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi);
diff --git a/include/Game/Systems/Weapon/SidearmWeaponBehaviour.h b/include/Game/Systems/Weapon/SidearmWeaponBehaviour.h
index 3123b460..7eaca082 100644
--- a/include/Game/Systems/Weapon/SidearmWeaponBehaviour.h
+++ b/include/Game/Systems/Weapon/SidearmWeaponBehaviour.h
@@ -39,6 +39,7 @@ private:
bool dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi);
// void giveAmmo(ComponentWrapper cWeapon, WeaponInfo& wi, EntityWrapper receiver);
+ void spawnTracer(ComponentWrapper cWeapon, WeaponInfo& wi);
void CheckAmmo(ComponentWrapper cWeapon, WeaponInfo& wi);
void RemoveFrindlyAmmoHUD(WeaponInfo& wi);
diff --git a/resources/Schema/Entities/DefenderRayBlue.xml b/resources/Schema/Entities/DefenderRayBlue.xml
new file mode 100644
index 00000000..7680f1da
--- /dev/null
+++ b/resources/Schema/Entities/DefenderRayBlue.xml
@@ -0,0 +1,50 @@
+
+
+
+
+
+ 0.5
+
+
+
+
+
+
+
+
+
+
+ Models/Core/UnitQuad.mesh
+
+ Textures/Effects/NewRay3.png
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+ Models/Core/UnitQuad.mesh
+
+ Textures/Effects/NewRay3.png
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/resources/Schema/Entities/PlayerDefenderBlue.xml b/resources/Schema/Entities/PlayerDefenderBlue.xml
index c75f50fd..25fc54d2 100644
--- a/resources/Schema/Entities/PlayerDefenderBlue.xml
+++ b/resources/Schema/Entities/PlayerDefenderBlue.xml
@@ -13,9 +13,13 @@
+ 120
8
+ 5
-
+
+ 10
+
150
150
diff --git a/resources/Schema/Entities/WeaponDefenderBlueView.xml b/resources/Schema/Entities/WeaponDefenderBlueView.xml
index 2bcdbcb7..8c8da6a3 100644
--- a/resources/Schema/Entities/WeaponDefenderBlueView.xml
+++ b/resources/Schema/Entities/WeaponDefenderBlueView.xml
@@ -163,7 +163,7 @@
- Schema/Entities/RayBlue.xml
+ Schema/Entities/DefenderRayBlue.xml
diff --git a/resources/Schema/Entities/WeaponDefenderBlueWorld.xml b/resources/Schema/Entities/WeaponDefenderBlueWorld.xml
index 6c750964..bf87a789 100644
--- a/resources/Schema/Entities/WeaponDefenderBlueWorld.xml
+++ b/resources/Schema/Entities/WeaponDefenderBlueWorld.xml
@@ -12,7 +12,7 @@
- Schema/Entities/RayBlue.xml
+ Schema/Entities/DefenderRayBlue.xml
diff --git a/resources/Schema/Entities/WeaponSidearmAssaultBlueView.xml b/resources/Schema/Entities/WeaponSidearmAssaultBlueView.xml
index 620d9416..0d7e2172 100644
--- a/resources/Schema/Entities/WeaponSidearmAssaultBlueView.xml
+++ b/resources/Schema/Entities/WeaponSidearmAssaultBlueView.xml
@@ -97,7 +97,7 @@
- Schema/Entities/Ray2Red.xml
+ Schema/Entities/RayBlue.xml
diff --git a/src/Game/Systems/Weapon/DefenderWeaponBehaviour.cpp b/src/Game/Systems/Weapon/DefenderWeaponBehaviour.cpp
index 442be142..0686aebf 100644
--- a/src/Game/Systems/Weapon/DefenderWeaponBehaviour.cpp
+++ b/src/Game/Systems/Weapon/DefenderWeaponBehaviour.cpp
@@ -373,27 +373,28 @@ void DefenderWeaponBehaviour::spawnTracers(ComponentWrapper cWeapon, WeaponInfo&
float distance;
glm::vec3 hitPosition;
- Collision::EntityFirstHitByRay(Ray(cameraPosition, direction), m_CollisionOctree, distance, hitPosition);
+ if (Collision::EntityFirstHitByRay(Ray(cameraPosition, direction), m_CollisionOctree, distance, hitPosition) != boost::none) { // don't spawn ray if you "miss the world"
- EntityWrapper ray = SpawnerSystem::Spawn(muzzle);
- if (ray.Valid()) {
- ComponentWrapper cTransform = ray["Transform"];
- glm::vec3& rayOrigin = cTransform["Position"];
- glm::vec3& rayOrientation = cTransform["Orientation"];
- glm::vec3& rayScale = cTransform["Scale"];
+ EntityWrapper ray = SpawnerSystem::Spawn(muzzle);
+ if (ray.Valid()) {
+ ComponentWrapper cTransform = ray["Transform"];
+ glm::vec3& rayOrigin = cTransform["Position"];
+ glm::vec3& rayOrientation = cTransform["Orientation"];
+ glm::vec3& rayScale = cTransform["Scale"];
- glm::vec3 muzzlePosition = Transform::AbsolutePosition(muzzle);
- glm::quat muzzleOrientation = Transform::AbsoluteOrientation(muzzle);
-
- rayOrigin = muzzlePosition;
+ glm::vec3 muzzlePosition = Transform::AbsolutePosition(muzzle);
+ glm::quat muzzleOrientation = Transform::AbsoluteOrientation(muzzle);
- glm::vec3 muzzleToHit = hitPosition - muzzlePosition;
- glm::vec3 lookVector = glm::normalize(-muzzleToHit);
- float pitch = std::asin(-lookVector.y);
- float yaw = std::atan2(lookVector.x, lookVector.z);
- glm::quat orientation = glm::quat(glm::vec3(pitch, yaw, 0));
- rayOrientation = glm::eulerAngles(orientation);
- rayScale.z = glm::length(muzzleToHit);
+ rayOrigin = muzzlePosition;
+
+ glm::vec3 muzzleToHit = hitPosition - muzzlePosition;
+ glm::vec3 lookVector = glm::normalize(-muzzleToHit);
+ float pitch = std::asin(-lookVector.y);
+ float yaw = std::atan2(lookVector.x, lookVector.z);
+ glm::quat orientation = glm::quat(glm::vec3(pitch, yaw, 0));
+ rayOrientation = glm::eulerAngles(orientation);
+ rayScale.z = glm::length(muzzleToHit);
+ }
}
}
}
@@ -448,8 +449,8 @@ void DefenderWeaponBehaviour::dealDamage(ComponentWrapper cWeapon, WeaponInfo& w
}
// Temp hit decal
- EntityWrapper hit = ResourceManager::Load("Schema/Entities/HitTest.xml")->MergeInto(m_World);
- hit["Transform"]["Position"] = pick.Position;
+ // EntityWrapper hit = ResourceManager::Load("Schema/Entities/HitTest.xml")->MergeInto(m_World);
+ // hit["Transform"]["Position"] = pick.Position;
// Don't let us shoot ourselves in the foot somehow
if (victim == LocalPlayer) {
@@ -471,7 +472,7 @@ void DefenderWeaponBehaviour::dealDamage(ComponentWrapper cWeapon, WeaponInfo& w
}
damageSum[victim] += pelletDamage;
- ((glm::vec3&)hit["Model"]["Color"]).b = 1.f;
+ // ((glm::vec3&)hit["Model"]["Color"]).b = 1.f;
}
// Deal damage!
diff --git a/src/Game/Systems/Weapon/SidearmWeaponBehaviour.cpp b/src/Game/Systems/Weapon/SidearmWeaponBehaviour.cpp
index 1364894d..c9272127 100644
--- a/src/Game/Systems/Weapon/SidearmWeaponBehaviour.cpp
+++ b/src/Game/Systems/Weapon/SidearmWeaponBehaviour.cpp
@@ -321,6 +321,8 @@ bool SidearmWeaponBehaviour::dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi
}
}
+ spawnTracer(cWeapon, wi);
+
// Deal damage!
Events::PlayerDamage ePlayerDamage;
ePlayerDamage.Inflictor = wi.Player;
@@ -330,6 +332,49 @@ bool SidearmWeaponBehaviour::dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi
return damage > 0;
}
+
+void SidearmWeaponBehaviour::spawnTracer(ComponentWrapper cWeapon, WeaponInfo& wi)
+{
+ EntityWrapper muzzle = getRelevantWeaponEntity(wi).FirstChildByName("WeaponMuzzle");
+ if (!muzzle.Valid()) {
+ return;
+ }
+
+ EntityWrapper camera = wi.Player.FirstChildByName("Camera");
+ if (!camera.Valid()) {
+ return;
+ }
+
+ glm::vec3 cameraPosition = Transform::AbsolutePosition(camera);
+ glm::vec3 direction = glm::vec3(0, 0, -1);
+
+ float distance;
+ glm::vec3 hitPosition;
+ Collision::EntityFirstHitByRay(Ray(cameraPosition, direction), m_CollisionOctree, distance, hitPosition);
+
+ EntityWrapper ray = SpawnerSystem::Spawn(muzzle);
+ if (ray.Valid()) {
+ ComponentWrapper cTransform = ray["Transform"];
+ glm::vec3& rayOrigin = cTransform["Position"];
+ glm::vec3& rayOrientation = cTransform["Orientation"];
+ glm::vec3& rayScale = cTransform["Scale"];
+
+ glm::vec3 muzzlePosition = Transform::AbsolutePosition(muzzle);
+ glm::quat muzzleOrientation = Transform::AbsoluteOrientation(muzzle);
+
+ rayOrigin = muzzlePosition;
+
+ glm::vec3 muzzleToHit = hitPosition - muzzlePosition;
+ glm::vec3 lookVector = glm::normalize(-muzzleToHit);
+ float pitch = std::asin(-lookVector.y);
+ float yaw = std::atan2(lookVector.x, lookVector.z);
+ glm::quat orientation = glm::quat(glm::vec3(pitch, yaw, 0));
+ rayOrientation = glm::eulerAngles(orientation);
+ rayScale.z = glm::length(muzzleToHit);
+ }
+
+}
+
/*
void SidearmWeaponBehaviour::giveAmmo(ComponentWrapper cWeapon, WeaponInfo& wi, EntityWrapper receiver)