diff --git a/server/gameserver/glmhelper.cc b/server/gameserver/glmhelper.cc index 7b2968a7..77a726bc 100644 --- a/server/gameserver/glmhelper.cc +++ b/server/gameserver/glmhelper.cc @@ -53,6 +53,14 @@ bool GlmHelper::IsZero(const glm::vec3& v) float GlmHelper::CalcAngle(const glm::vec3& v1, const glm::vec3& v2) { + #if 1 + glm::vec3 v3 = v1; + glm::vec3 v4 = v2; + v3.y = 0.0f; + v4.y = 0.0f; + float angle = acos(glm::dot(v3, v4) / Norm(v3) / Norm(v4)); + #else float angle = acos(glm::dot(v1, v2) / Norm(v1) / Norm(v2)); + #endif return angle / 3.1415926f; } diff --git a/server/gameserver/shot.cc b/server/gameserver/shot.cc index e2771d62..20999e3a 100644 --- a/server/gameserver/shot.cc +++ b/server/gameserver/shot.cc @@ -423,7 +423,7 @@ void InternalShot(Creature* c, bool is_player = c->IsPlayer(); bool is_car = c->IsCar(); float bullet_born_angle = GlmHelper::CalcAngle(c->GetAttackDir(), GlmHelper::RIGHT); - if (c->GetAttackDir().y > 0.00001f) { + if (c->GetAttackDir().z > 0.00001f) { bullet_born_angle = -bullet_born_angle; } float old_bullet_born_angle = bullet_born_angle; @@ -435,7 +435,7 @@ void InternalShot(Creature* c, glm::vec4 gun_muzzle_position(0.0, 0.0, 0.0, 0.0); CalcGunMuzzlePosition(c, weapon_meta, shot_animi, gun_muzzle_position, bulletIdx, bulletNum); glm::vec4 v = transform * gun_muzzle_position; - bullet_born_offset = glm::vec3(v.z *10*1, 0.0f, v.x*10*-1); + bullet_born_offset = glm::vec3(v.z *10*1, v.y, v.x*10*-1); bullet_born_pos = c->GetPos().ToGlmVec3() + bullet_born_offset; if (c->IsPlayer() || c->IsCar()) { #ifdef DEBUG