Get_Name() << "이(가) 피해를 입음.\n";
break;
case EVENTTYPE::UnitDeath:
{
cout << "[LOG] " << unit->Get_Name() << "이(가) 사망!\n";
if (auto monster = dynamic_cast Subject = EventSubject Observer = BattleLogger 이벤트 유발자 = Unit 전투 중, 데미지를 받거나 사망하는 등의 이벤트가 발생하면, EventSubject 가 BattleLogger 에게 전파하고, BattleLogger 가 출력. BattleManager 에서 Unit 들과, Subject 연결. 모든 유닛들이 같은 EventSubject 를 보게 됨.#pragma once
#include "IObserver.h"
#include "Unit.h"
#include "Item.h"
#include "Monster.h"
#include "MonsterFactory.h"
class BattleLogger : public IObserver
{
public:
void OnNotify(EVENTTYPE event, const Unit* unit) override
{
switch (event)
{
case EVENTTYPE::Damaged:
cout << "[LOG] " << unit->Get_Name() << "이(가) 피해를 입음.\\n";
break;
case EVENTTYPE::UnitDeath:
{
cout << "[LOG] " << unit->Get_Name() << "이(가) 사망!\\n";
if (auto monster = dynamic_cast<const Monster*>(unit))
{
shared_ptr<Item> dropItem = MonsterFactory::DropItem(monster->Get_MonsterType());
if (dropItem)
{
cout << "[DROP] " << dropItem->Get_ItemName() << " 획득!\\n";
GameManager::GetInstance().Get_Player()->Add_Item(dropItem);
}
}
}
break;
case EVENTTYPE::TurnStart:
cout << "[LOG] === 턴 시작 ===\\n";
break;
case EVENTTYPE::TurnEnd:
cout << "[LOG] === 턴 종료 ===\\n";
break;
}
}
};


