This commit is contained in:
aozhiwei 2019-03-20 20:48:01 +08:00
parent c87691e5bc
commit a36c071f88
5 changed files with 31 additions and 6 deletions

View File

@ -19,6 +19,7 @@ include_directories(
/usr/include/jsoncpp
/usr/include/hiredis
/usr/include/eigen3
/usr/include/glm
../../third_party
.
)

View File

@ -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

View File

@ -1,7 +1,21 @@
#include "precompile.h"
#include <algorithm>
#include<cfloat>
#include <cfloat>
#include <glm/gtx/intersect.hpp>
#include <glm/vec3.hpp>
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)
{

View File

@ -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();

View File

@ -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::vector<E
if (sender->entity_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);
}