서울게임아카데미 교육과정 6개월 C++ ~ DirectX2D
63일차. 포트폴리오 제작 2일
WDmil
2023. 8. 7. 18:27
728x90
OBB처리를 위해서 객체간 상속을 다시 재구성 하였다.
목표로 하는 게임이 오토체스 같은 게임 임으로 각 객체는 카드에서 생성되어야 하며, 객체는 케릭터를 상속받아 데이터를 사용하게 된다.
카드는 케릭터 객체를 가지게 되는데, 케릭터 객체는 각 업스케일을 사용하여 자식객체를 가리키게 된다.
즉, 캐릭터 -> 고블린, 캐릭터 -> 기사
이런식으로 구성되고,
객체를 생성하는것은 Card 라는 하나의 객체이고,
각 Card는 전장이나 상점칸에 위치하게 된다.
여기서 객체관계를 명확히 하기 위해서. Character Master을 하나 생성하고,
Character Master에 각 객체가 가지고 있는 칼과 캐릭터 객체를 가리키는 Vector을 각각 생성하고,
캐릭터와 객체간 OBB충돌을 연산한다.
#pragma once
#include "Utilities/SingletonBase.h"
#include "Game/Character.h"
#include "Game/Item.h"
#include "math.h"
class Character_Master
{
public:
Character_Master();
~Character_Master();
void Update();
void Render();
void Chack_Collision();
BoundingBox& Getcollision() { return *collision; }
protected:
SingletonBase<std::vector<Character*>>* Character_list;
SingletonBase<std::vector<Item*>>* Item_list;
BoundingBox* collision = nullptr;
};
#include "stdafx.h"
#include "Character_Master.h"
#include "stdafx.h"
Character_Master::Character_Master()
{
Character_list->Create();
Item_list->Create();
}
Character_Master::~Character_Master()
{
}
void Character_Master::Update()
{
}
void Character_Master::Render()
{
}
void Character_Master::Chack_Collision()
{
if(Character_list != nullptr && Item_list != nullptr)
{
for (auto def_C : *Character_list->Get())
{
bool Chack_duplication = false;
for (auto def_Item : *Item_list->Get())
{
// 현재 객체의 데미지 판정이 데미지 피해적용이 발생하기 전에 발생했는가?
if(def_C->Get_hit_calculation() != nullptr) {
for (auto def_C_damage_list : *def_C->Get_hit_calculation())
{
if(def_C_damage_list == def_Item) {
Chack_duplication = true;
break;
}
}
}
// 충돌 판정부
if (BoundingBox::OBB(&def_C->Getcollision(), &def_Item->Getcollision())
&& !(def_C->GetItem() == def_Item) // 내 소유의 아이템이 아닐 경우,
&& !Chack_duplication) // 피해가 공격시 한번만 들어가도록.
{
def_C->Get_hit_calculation()->push_back(def_Item);
}
}
}
}
}
그리고, 메인 게임의 업데이트 시 각 케릭터의 Collision을 검사하게 한다.
728x90