지난주 ReplicateDelete() 메서드를 구현하면서 서버에서 소멸자 호출되어야 할 gameObject의 소멸자가 호출되지 않던 문제가 있었다. 추가된 변경점에서 잘못된 코드를 파악해 수정하여 정상 기능하도록 만들면서, 현재 객체의 포함 상태를 한눈에 볼 수 있는 class diagram이 문제를 이해하는 데에 도움이 되었다.
그래서 이참에 전체 게임의 흐름에 대한 큰 그림의 class diagram을 그려보고자 한다.
World는 GameObject를 가진다.
PhysX는 별개 thread로 동작하면서 GameObject를 통해 World와 소통해야 한다. World에서는 GameObject와의 소통으로만 상황을 풀어 가자.
그렇지만 World에서 GameObject의 transform과 같은 정보를 초기화 하려면 PhysX에서 제공하는 물리 라이브러리를 사용해야 한다. 일단은 객체를 생성할 때의 필요 정보 정도로만
GameObject의 내부 동작으로는 물리 동작과 연계돼 있다. 이걸 pacade로 감싸서 쉬운 함수를 World에 제공해야 추상화 수준이 높아질 듯하다.
Networking은 World와는 완전히 외부의 것으로 보아야 한다.
스트림에 쓰고, 스트림으로부터 받아오고 하는 동작들은 queue를 통해서 동작하도록 하여 World와 Networking 동작은 완전히 분리 되어야 한다.
개선사항 정리
한 판의 게임이 하나의 scene이다. 지금까지 만든 것들은 scene으로 관리되어야 한다. scene이 곧 Level이다. Client 기준으로, Login Scene, Match Making Scene, Level Scene.
actor 추가, simulate, lock/unlock 모두 pxScene 단위로 동작한다. 아래 code로 scene을 만들어내니까, scene은 하나의 게임 단위로 여러 개 만들어서 관리해야 한다. → scene은 map or vector로 만들어야 한다!
pxScene = pxPhysics->createScene(sceneDesc);