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)