-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcollision.cpp
85 lines (63 loc) · 2.34 KB
/
collision.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
//=============================================================================
//
// 当たり判定処理 [collision.cpp]
// Author : GP11A132 21 DAYA MAHAPUTRA
//
//=============================================================================
#include "main.h"
#include "collision.h"
//*****************************************************************************
// マクロ定義
//*****************************************************************************
//*****************************************************************************
// 構造体定義
//*****************************************************************************
//*****************************************************************************
// プロトタイプ宣言
//*****************************************************************************
//*****************************************************************************
// グローバル変数
//*****************************************************************************
//=============================================================================
// BBによる当たり判定処理
// 回転は考慮しない
// 戻り値:当たってたらTRUE
//=============================================================================
BOOL CollisionBB(D3DXVECTOR3 mpos, float mw, float mh,
D3DXVECTOR3 ypos, float yw, float yh)
{
BOOL ans = FALSE; // 外れをセットしておく
// 座標が中心点なので計算しやすく半分にしている
mw /= 2;
mh /= 2;
yw /= 2;
yh /= 2;
// バウンディングボックス(BB)の処理
if ((mpos.x + mw > ypos.x - yw) &&
(mpos.x - mw < ypos.x + yw) &&
(mpos.y + mh > ypos.y - yh) &&
(mpos.y - mh < ypos.y + yh))
{
// 当たった時の処理
ans = TRUE;
}
return ans;
}
//=============================================================================
// BCによる当たり判定処理
// サイズは半径
// 戻り値:当たってたらTRUE
//=============================================================================
BOOL CollisionBC(D3DXVECTOR3 pos1, D3DXVECTOR3 pos2, float r1, float r2)
{
BOOL ans = FALSE; // 外れをセットしておく
float len = (r1 + r2) * (r1 + r2); // 半径を2乗した物
D3DXVECTOR3 temp = pos1 - pos2;
float lenSq = D3DXVec3LengthSq(&temp); // 2点間の距離(2乗した物)
// 半径を2乗した物より距離が短い?
if (len > lenSq)
{
ans = TRUE; // 当たっている
}
return ans;
}