KisaragiLibrary
 
読み取り中…
検索中…
一致する文字列を見つけられません
Kisaragi_Lib::BoxCollisionProcessor クラス

#include <Coliision_s.hpp>

静的公開メンバ関数

static void ProcessCollision (IBoxCollision *a, IBoxCollision *b)
 
static void Render (IBoxCollision *box, ViewComponentBase *_view)
 

静的非公開メンバ関数

static void HandleCollision (bool isHit, IBoxCollision *a, IBoxCollision *b)
 

関数詳解

◆ ProcessCollision()

void Kisaragi_Lib::BoxCollisionProcessor::ProcessCollision ( IBoxCollision * a,
IBoxCollision * b )
static
8 {
9 auto aMin = a->aabb.LeftTopPoint() + a->GameObj()->transform.position;
10 auto aMax = a->aabb.RightBottomPoint() + a->GameObj()->transform.position;
11 auto bMin = b->aabb.LeftTopPoint() + b->GameObj()->transform.position;
12 auto bMax = b->aabb.RightBottomPoint() + b->GameObj()->transform.position;
13
14 if (aMax.x < bMin.x || aMin.x > bMax.x || aMax.y < bMin.y || aMin.y > bMax.y)
15 {
16 HandleCollision(false, a, b);
17 HandleCollision(false, b, a);
18 return;
19 }
20
21 HandleCollision(true, a, b);
22 HandleCollision(true, b, a);
23 }
static void HandleCollision(bool isHit, IBoxCollision *a, IBoxCollision *b)
Definition Coliision_s.cpp:65

参照元 Kisaragi_Lib::BoxCollisionFacade::Collision().

◆ Render()

void Kisaragi_Lib::BoxCollisionProcessor::Render ( IBoxCollision * box,
ViewComponentBase * _view )
static
26 {
27 if (!box->isRender) return;
28
29 auto cam = _view->GetInput();
30
31 //TODO 逆行列を使う都合上回転を扱って移動すると逆回転の平行移動をしてしまうため修正求む.
32 Matrix2D camMat = cam->GetCamMatrix();
33 Matrix2D objMat = box->GameObj()->transform;
34 Matrix2D viewMat = _view->GameObj()->transform;
35
36 // 新版
37
38 Matrix2D drawMat{ IDENTITY_MATRIX };
39
40
41 //view * cma * obj だと、実行順序でバグるため省略不可能.
42 //左 : 子 <- <- 右 : 親
43 drawMat *=
44 viewMat.CreateScaleMatrix() * viewMat.CreateRotaMatrix() * viewMat.CreateMoveMatrix()
45 * camMat.CreateScaleMatrix() * camMat.CreateRotaMatrix() * camMat.CreateMoveMatrix()
46 * objMat;
47
48 //描画処理.
49
50 auto leftTop = drawMat * Matrix2D::CreateMoveMatrix(box->aabb.LeftTopPoint().x, box->aabb.LeftTopPoint().y);
51 auto rightBottom = drawMat * Matrix2D::CreateMoveMatrix(box->aabb.RightBottomPoint().x, box->aabb.RightBottomPoint().y);
52
53
54 leftTop *= leftTop.CreateInverseRotaMatrix();
55 rightBottom *= rightBottom.CreateInverseRotaMatrix();
56
57 DxLib::DrawBox(
58 leftTop.Position().x, leftTop.Position().y,
59 rightBottom.Position().x, rightBottom.Position().y,
60 GetColor(0, 255, 177),
61 false
62 );
63 }
Matrix2D CreateMoveMatrix()
Definition Matrix2D.hpp:197
@ IDENTITY_MATRIX
Definition Matrix2D.hpp:19

参照元 Kisaragi_Lib::BoxCollisionFacade::Render().

◆ HandleCollision()

void Kisaragi_Lib::BoxCollisionProcessor::HandleCollision ( bool isHit,
IBoxCollision * a,
IBoxCollision * b )
staticprivate
66 {
67 std::string bID = b->ID();
68 if (isHit)
69 {
70 if (a->hitList.count(bID) == 0)
71 {
72 a->GameObj()->OnCollisionEnter(b->GameObj());
73 a->hitList.emplace(bID);
74 }
75 a->GameObj()->OnCollisionStay(b->GameObj());
76 }
77 else if (a->hitList.count(bID))
78 {
79 a->GameObj()->OnCollisionExit(b->GameObj());
80 a->hitList.erase(bID);
81 }
82 }

参照元 ProcessCollision().


このクラス詳解は次のファイルから抽出されました: