WinAPI 63 FSM (3)

CJB_ny·2022년 10월 7일
0

WinAPI

목록 보기
66/79
post-thumbnail

오늘 배운거 👍👍👍

  • Factory Pattern

몬스터의 AI 구성 셋팅을 미리미리 만들어 놓는 작업을 먼저 하도록 하자.

자주 사용할 것들을 미리 정의 해놓는 이런 느낌, 패턴을 "Factory Pattern"이라고 한다.

몬스터를 생성하는 정형화 된 패턴을 -> 하나의 함수화

헤더 참조

모든 씬들이 MonsterFactory의 존재를 알게하기 위해 최상위 부모 Scene에서 해당 헤더 파일을 참조함.

이러면 Scene상속받는 모든 애들이 다 알게 된다.

StartScene에서 만들기

이제 우리가 팩토리 패턴을 사용하여 이런식으로 몬스터를 만들 것이다.

지금은 Enter에서는 이렇게 만들어 주었지만

나중에는 Event를 통해서 추가를 해주어야한다.

EventManager 했던 부분 기억나나?

CreateObjectEvent와 같은 함수로 다음 프레임에 이벤트가 처리가되도록 만들었었다.

이렇게 지금 할 것인지 아니면 지금은 AddObject를 할 것인지..

이런 부분들 반복되면 힘들텐데 이렇게 한번만 적어 주도록 하면 좋다.

메뉴바 설정

현재 init에서 true로 나두어서 윈도우의 메뉴바가 있는 상태로 진행을 하였다.

근데 이부분 false로 바꾸고

main에서 이부분도 일단 nullptr로 밀어버리자.

이렇게 해주면은 나중에 종료할 때 메뉴도 삭제해아한다.

이런식으로 없애준다.

그러면은 ToolScene에 진입을 할 때는 메뉴바를 부착을 해주어야한다.

ToolScene 작업

현재 ToolScene의 Exit함수에서는 윈도우의 SEtMenu 함수를 사용을 하고

Enter부분에서는 부착을 시켜주어야한다.

메인윈도우의 메뉴를 빼버리겠다라는 의미이다.

그래서 툴씬에서 메뉴바 생기게 하고 스타트 씬에서는 메뉴바를 빼버리는것 까지는 되는데

우리 해상도를 다시 신경 써주어야한다. 메뉴바 빼고 넣을 때마다의 해상도를.

메뉴바 도킹 해제 구현

도킹하고 해제 하는 부분을

Scene에서 구현을 하였다. DockMenu, ReleaseMenu 이런식으로

각각 Enter, Exit 에다가 구현을 해놓음.

Scene에다가 플레이어 등록

현재 State를 상속받는 Idle과 같은 클래스는 update에서 뭔가를 알아야 뭘 할 것인지말것인지 할텐데 플레이어를 찾을려면 플레이어를 알아야하기 때문에

해당 부분의 작업을 그냥

Scene에서 Player의 포인터를 가지고 있는 방식으로 구현을 해주도록 하자.

그러면 Idle에서 이런식으로 빠르게 찾아 올 수 있기는 하다.

이런 부분들은 다 컨턴츠 영역인거 같다.

Get

구조체의 크기가 크니까 const ref방식으로 전달해준다.

거리 ❗❗❗

Idle의 update에서 이딴식으로 차이값을 먼저 구하는데

해당 차이값은 player 에서 monster를 향하는 벡터이다.

이것의 길이 =>

-> 이런 벡터의 x제곱 더하기 y제곱이 좌표 평면상의 '거리'이다.


https://kukuta.tistory.com/152

여기 잠깐 참고해도 좋다.


상태 전환

이러이러한 작업이 끝나고 이제 상태전환 상태를 알려야 한다.

근데 이게 이벤트처리로 처리를 해야한다.

즉, 다음번 프레임에서 적용시켜야 한다.

우리가 동시간대에 일어난 일은 동시간에 처리를 하도록 했으니까 그렇게 처리를 해야한다.

그래서 이것을

이것부터 이벤트 타입을 만들어 주고

이런식으로 DWORD_PTR로 받아온 비트 값을

형변환을 해준다음에 ChnageState의 인자로 넣어주도록 하자.

이 모든게

싱크를 맞춰서 이벤트매니저를 통해 다음 프레임에 적용이 될 수 있도록 한 조치이다.

assert ❗❗

두개가 같지 않아야한다.

AI 구현

State를 변경후 따라 오도록

Trace의 update에서

이런식으로 구현을 해준다.

잘 따라온다.

굿.

profile
https://cjbworld.tistory.com/ <- 이사중

0개의 댓글