diff --git a/server/gameserver/CMakeLists.txt b/server/gameserver/CMakeLists.txt index fbf3ce5..5571651 100644 --- a/server/gameserver/CMakeLists.txt +++ b/server/gameserver/CMakeLists.txt @@ -19,6 +19,7 @@ include_directories( /usr/include/jsoncpp /usr/include/hiredis /usr/include/eigen3 + /usr/include/glm ../../third_party . ) diff --git a/server/gameserver/app.cc b/server/gameserver/app.cc index e6c27ee..a8ed472 100755 --- a/server/gameserver/app.cc +++ b/server/gameserver/app.cc @@ -19,6 +19,7 @@ #include "roommgr.h" #include "player.h" #include "playermgr.h" +#include "collision.h" #include "ss_msgid.pb.h" #include "ss_proto.pb.h" @@ -59,10 +60,11 @@ static void SavePerfLog() void App::Init(int argc, char* argv[]) { - #if 0 + #if 1 { Vector2D v1(1, 1); Vector2D v2 = v1.Rotate(-0.25); + TestGlm(); int i = 0; } #endif diff --git a/server/gameserver/collision.cc b/server/gameserver/collision.cc index 5263f93..d89436e 100644 --- a/server/gameserver/collision.cc +++ b/server/gameserver/collision.cc @@ -1,7 +1,21 @@ #include "precompile.h" #include -#include +#include +#include +#include + +void TestGlm() +{ + glm::vec3 orig(0.0, 0.0, 0.0); + glm::vec3 dir(1.0, 1.0, 0); + glm::vec3 v0(0.0, 1.0, 0); + glm::vec3 v1(1.3, 1.0, 0); + glm::vec3 v2(0.0, 2.0, 0); + glm::vec3 baryPosition; + bool ret = glm::intersectRayTriangle(orig, dir, v0, v1, v2, baryPosition); + int i = 0; +} bool IntersectSegmentCircle(Vector2D p0, Vector2D p1, Vector2D pos, float rad) { diff --git a/server/gameserver/collision.h b/server/gameserver/collision.h index dd543dc..9833694 100644 --- a/server/gameserver/collision.h +++ b/server/gameserver/collision.h @@ -5,3 +5,4 @@ bool IntersectSegmentAabb(Vector2D p0, Vector2D p1, Vector2D _min, Vector2D _max bool IntersectAabbCircle(Vector2D a_min, Vector2D a_max, Vector2D b_pos, float b_rad); bool IntersectAabbAabb(Vector2D a_min, Vector2D a_max, Vector2D b_min, Vector2D b_max); bool IntersectCircleCircle(Vector2D a_pos, float a_rad, Vector2D b_pos, float b_rad); +void TestGlm(); diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 00e11a0..144c3dc 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -138,9 +138,15 @@ bool Room::RandomPos(Human* hum, float distance, Vector2D& out_pos) collider.rad = hum->meta->i->radius(); for (auto& pair : uniid_hash_) { - for (auto& itr : pair.second->colliders) { - if (collider.Intersect(itr)) { - return false; + if (pair.second->entity_type == ET_Player || + pair.second->entity_type == ET_Bullet + ) { + continue; + } else { + for (auto& itr : pair.second->colliders) { + if (collider.Intersect(itr)) { + return false; + } } } } @@ -180,7 +186,8 @@ void Room::CollisionDetection(Entity* sender, int detection_flags, std::vectorentity_type == ET_Bullet) { Bullet* bullet = (Bullet*)sender; Human* hum = (Human*)pair.second; - if (hum->team_id == 0 || bullet->player->team_id != hum->team_id) { + if (hum != bullet->player && + (hum->team_id == 0 || bullet->player->team_id != hum->team_id)) { if (bullet->TestCollision(hum)) { objects.push_back(hum); }