프로그래밍 공부
작성일
2023. 8. 7. 18:27
작성자
WDmil
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