MCPcopy Create free account
hub / github.com/9chu/LuaSTGPlus / CollisionCheck

Function CollisionCheck

LuaSTGPlus/GameObjectPool.cpp:78–137  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

76}
77
78static inline bool CollisionCheck(GameObject* p1, GameObject* p2)LNOEXCEPT
79{
80 if (!p1->colli || !p2->colli) // ���Բ���ײ����
81 return false;
82
83 // ���ټ��
84 if ((p1->x - p1->col_r >= p2->x + p2->col_r) ||
85 (p1->x + p1->col_r <= p2->x - p2->col_r) ||
86 (p1->y - p1->col_r >= p2->y + p2->col_r) ||
87 (p1->y + p1->col_r <= p2->y - p2->col_r))
88 {
89 return false;
90 }
91
92 fcyVec2 pos1((float)p1->x, (float)p1->y), pos2((float)p2->x, (float)p2->y);
93 fcyVec2 size1((float)p1->a, (float)p1->b), size2((float)p2->a, (float)p2->b); // half size
94 float r1((float)p1->col_r), r2((float)p2->col_r);
95
96 // ���Բ���
97 if (!CircleHitTest(pos1, r1, pos2, r2))
98 return false;
99
100 // ��ȷ��ײ���
101 if (p1->rect)
102 {
103 if (p2->rect)
104 return OBBHitTest(pos1, size1, (float)p1->rot, pos2, size2, (float)p2->rot);
105 else
106 return OBBCircleHitTest(pos1, size1, (float)p1->rot, pos2, r2);
107 }
108 else
109 {
110 if (p2->rect)
111 return OBBCircleHitTest(pos2, size2, (float)p2->rot, pos1, r1);
112 else
113 return true; // ���Բ���ͨ����
114 }
115
116 /*
117 // ! ����luastg�Ĵ��� ԭ��������
118 double a = p2->a;
119 double b = p2->b;
120 double r = p1->a;
121 double l = a + b + r;
122 double dx = p2->x - p1->x;
123 double dy = p2->y - p1->y;
124 if (fabs(dx) > l || fabs(dy) > l)
125 return false;
126 double x = dx*cos(p1->rot) + dy*sin(p1->rot);
127 double y = -dx*sin(p1->rot) + dy*cos(p1->rot);
128 a += r;
129 b += r;
130 a = a*a; b = b*b;
131 x = x*x; y = y*y;
132 if (p2->rect)
133 return x < a && y < b;
134 else
135 return (x * b + y * a) < a * b;

Callers 1

CollisionCheckMethod · 0.85

Calls 1

CircleHitTestFunction · 0.85

Tested by

no test coverage detected