class CWidgetComponent: public CWidgetWindow;
- 여태까지는 게임오브젝트를 따라다녀야 하는 위젯들은 손수 주소를 받아서 위치를 구했었다.
- 그런데 위젯은 종종 게임오브젝트를 따라다닌다 -> 아예 이걸 미리 설정해놓은 '위젯 컴포넌트'를 만들면 편할 것이다.
- CWidgetWindow 클래스를 상속받아 조금 개조해서,
CGameObject에서도 생성 가능하게 해주고,
CGameObject에서 생성 시 지속적으로 CGameObject를 따라다니도록 만든다.
-- 그런 다음 CGameObject에서 필요한 위젯을 CWidgetWindow에서 만들게 시킨 뒤
Offset값만 정해 주면,
해당 CGameObject에서 일정 거리만큼 떨어진 채로 따라다니게 만들 수 있을 것이다.
- 기존의 CWidgetWindow는 이런 방식으로 사용했었다. 박스 내부의 양수 좌표값에서만 사용 가능했지만
- 하지만, 상속받아 개조하는 CWidgetComponent:public CWidgetWindow는
이렇게 사용한다. Offset 값을 통해 마이너스 좌표값까지 끌어다 쓰는것이다.
{ class CGameObject* m_OwnerGameObj }
- 상속해서 새로 만들어붜야 할 변수는 이게 전부이다.
.
< CollisionMouse() >
- 재정의해서 그냥 무조건 false를 반환하도록 만들자. 마이너스 좌표까지 사용하므로 충돌처리를 하면 안된다.
< Update, PostUpdate, Render >
- 일단 전부 재정의를 해주고 코드 똑같이 긁어와서 없앨 부분만 없애준다.
-- 가장 먼저 해야할 일은, 주인 오브젝트의 위치를 따라가는 것이다. 주인 오브젝트와 카메라의 위치정보를 받아와서 이 UI가 화면의 어디에서 렌더링되어야 하는지를 m_Pos에 저장해 놓는다.
< Render() >
class CGameObject
{ CSharedPtr<class CWidgetComponent> m_WidgetComponent; }
- 일단은 nullptr로 설정해놓고,
< void CreateWidgetComponent(); >
- 이 메소드를 호출하면 동적할당하여 하나 만들어준다.
- 공유 포인터를 사용하므로 따로 제거는 안 해줘도 된다.
- 이렇게 설정해주면 이제 게임오브젝트를 따라다니는 UI의 설정이 매우 간단해진다.
- 몬스터의 초기화 과정에서 CWidgetComponent를 생성하고, Offset을 포함한 기초 설정을 해준 뒤,
- Update 과정에서 위에서 CWidget을 생성하면서 포인터 변수를 만들어 저장해 두었다면 해당 포인터 변수를 통해 숫자를 변경하면 되고,
그렇지 않다면
m_WidgetComponent->FindWidget<CProgressBar>("MonsterHPBar")->SetValue(m_HP / m_HPMax);
m_WidgetComponent->FindWidget<CWidgetNumber>("MonsterHPNum")->SetNumber((int)m_HP);
- 이런 식으로 아예 생성해둔 위젯컴포넌트를 통해 접근해서 위젯에 정보를 전달해 주면 되기 때문이다.
- 기존에 쓰던, CMonster의 체력바와 남은 체력을 숫자로 표시해주던 CWindowMonsterHP 클래스를 생성하는 대신 CWidgetComponent를 통해 몬스터의 체력바와 남은 체력을 출력해 보았다.
'WIN32API FrameWork > 한단계씩 직접 구현' 카테고리의 다른 글
64. 텍스트 출력 (0) | 2022.06.09 |
---|---|
멤버함수와 전역함수의 이름이 겹칠 때 (0) | 2022.06.09 |
62. 숫자 이미지 위젯 (0) | 2022.06.08 |
61. 폰트 (0) | 2022.06.08 |
60. 프로그레스 바 (0) | 2022.06.07 |