DevLog/D2D11 프로젝트

상속구조를 이용한 유한 상태 기계 + Component Pattern을 곁들인...

뽀또치즈맛 2024. 10. 27. 20:00

 
 
얼마전에 책에서도 봤고,
최근 블로그에 정리해 놓기도 한 enum 쓰지않고 state 패턴 관리하는 방법을
현재 진행하는 프로젝트에 적용하고 싶어졌다.
 
state를 클래스로 빼고 enum을 쓰지 않고 사용하면 다음과 같은 이점이 있다.
state 패턴을 상속구조로 이용해 다양한 state 패턴을 만들 수 있다.
또한 클래스이기 때문에 코드 관리하기가 편하다.
menuState, AIState, PlayerState .. 등등 을 하위 클래스로 관리하고 설계하게되면,
추후 코드가 더 깔끔하게 정돈되기 때문이다.

코드가 정돈이 되면 이로 인해 가독성도 높아진다.
클래스로 만들었기 때문에 재사용성도 높아져 효율도 좋아진다.
 
따라서 ActorClass에서 map으로 Component를 관리하고,
StateComponent가 State 상태를 관리하는 것으로 구조를 제작하였다.
 
State는 자신의 이름 (자신의 상태)를 담는 것 하나,
상태 변화하는 조건 중 진입 조건과 탈출 조건을 관리하는 것이 있다.

 
State가 필요한 컴포넌트들은

map<std::string, class AIState*> mStateMap;

 
해당 코드 한줄로, 복잡한 enum과 여러 함수가 Actor클래스에서 직접적으로
만들어줄 필요가 없이 자신만의 State를 조절할 수 있다.