강께르의 개발일지
[Project] 20210902_11일차 본문
개발일지_210902_11일차
● 오늘 하기로 한 일
- 생산 시스템
-> 공장 건물을 누르면 생산 UI가 나오도록
-> UI 클래스를 구현하도록 하자
이미 유닛이 있는 타일은 이동범위 제외되게 하기
유닛의 연료 값에 따라 이동범위가 변동되게 수정
● 오늘 한 일
1. 게임 매니저의 서브 시스템에 게임 매니저 주소값을 가지게 만듦.
-> 이슈 : 클래스의 생성자에서 자기 멤버변수에게 자신의 주소를 넘겨주는 것은 불가능하다.
아마 생성자를 모두 수행해야 주소값을 할당하는 것 같다.
init으로 링크를 걸어보자.
2. 게임 매니저 메소드만으로 서로 서브 시스템의 값을 수정하는 기능을 도입
3. 플레이어의 모든 버튼 기능을 게임 매니저 메소드로 변경
4. 맵 클래스가 가지는 타일 클래스의 데이터 기반으로 빌딩 클래스를 벡터에 추가
5. ui 클래스 구현
6. ui를 상속받은 자식 클래스인 factoryUI 클래스 구현 / 생산과 관련된 UI
7. 유닛 생성 커맨드 구현, excute() 확인
8. ui 클래스를 일괄적으로 관리하는 ui 매니저를 구현, 게임 매니저의 서브 시스템
8. 메시지를 이용한 유아이 활성화, 렌더까지 되는 것을 확인
● 내일 할 일
생산 시스템 완성
-> 카메라에 영향을 받지 않는 ui 렌더
-> 크기 및 위치 조정
-> 상호작용을 통한 유닛 클래스 생성이 가능하게 하는 것이 목표
세부적인 턴제, 플레이어, 생산 완성할 것
-> 플레이어의 돈은 턴마다 보유한 건물만큼 들어온다. 수입 기능 구현
-> 수입 기능 활성화되어 돈이라는 데이터가 있다면 돈을 소비하여 생산을 하는 기능을 구현
이동과 관련하여 정리할 것들
-> 이미 유닛이 있는 타일은 이동범위 제외되게 하기
-> 유닛의 연료 값에 따라 이동범위가 변동되게 수정
-> 에이스타 및 유닛들은 아직 게임 매니저의 주소값을 갖지 않고 서브 시스템인 맵클래스의 주소값을 가진다. 수정 요망. 유닛은 매니저를 통해 얻어도 되고...
● 게임 매니저 재구성하기
게임 매니저의 멤버 변수인 서브 시스템이 있다.
서브 시스템은 여러 개가 있는데 서로의 정보를 필요로 한다.
이 정보를 공유하기 위해 그동안 전방선언을 통해 서브시스템의 주소를 각자 갖고 있어
그 서브 시스템에 직접 접근하여 데이터를 가져오거나 데이터를 바꾸는 일을 해왔다.
하지만 그렇게 데이터를 접근하면 디버그 시, 데이터의 변화로 인해 원하지 않은 결과를 가지게 돼 이에 대한 정리가 필요할 것 같다,
첫 번째 방안
각 서브 시스템은 자신들을 멤버변수로 갖고있는 게임매니저의 주소값을 가지고 생성된다.
각 서브 시스템에서 발생한 이벤트들이 있다면 그 이벤트들에 대한 메소드들을 게임 매니저에서 정의가 되어있고 그것을 호출하는 방식
호출한 메소드들은 해당 이벤트와 관련하여 변화를 줘야하는 데이터가 있는 서브 시스템에 변화를 준다.
-> 플레이어 클래스를 이 방안 기준으로 바꿨다.
두 번째 방안
게임 내에서 발생하는 이벤트들을 enum으로 구성한다.
각 서브 시스템에서 발생한 이벤트가 있으면 해당 이벤트에 해당하는 enum을 메시지로 하여 메시지 매니저에 전달한다.
메시지 매니저는 전달받은 메시지를 큐에 넣고 큐에 메시지가 들어오면 그 큐에서 메시지를 꺼내 자신이 갖고 있는 컨테이너인 맵에 키를 비교한다. 이 때 키는 enum값이다. 그 키를 통해 얻은 value는 리스트이다. 그 리스트는 해당 이벤트가 발생하면 메시지를 받아야하는 애들이다. 리스트를 순차적으로 돌면서 순차적으로 메시지를 전달하는 메소드를 호출한다. 그렇게 해서 호출한 메소드들을 통해 데이터의 변화를 준다. 메소드이름 예 onmsg()
-> 너무 좋은데 먼저 기능 추가가 너무 안되어있으니 기능 추가 이후 코드 정리하면서 도입해보는 걸로 하자.
생각난 것
이렇게 메시지 기반으로 바꾸면 빌딩 매니저와 유닛 매니저를 분리해도 상관없을 것 같다.
그렇게 하면 빌딩 매니저를 처음에 초기화해주는 기능이 필요할 거 같다.
각 빌딩 매니저에 빌딩을 추가시키는 기능 말이다. (ex player1, player2, NONE)
하지만 유닛, 빌딩 매니저를 통일하고 게임매니저의 서브시스템으로 빼놓는게 더 좋을것같다!
모든 유닛이 하나의 맵을 가리키도록 하는게 좋을 것 같다. (조금이따가)
질문한 것
UI 계층을 생각하면서 구현하기보다 큰 UI 범위로 자식클래스를 만들어서 매니저를 굴리자
원 게임을 하면서 발견한 것
건물이 2프레임의 애니메이션이 있었다... 불이 깜박깜박
'프로젝트 > 210823~210910_개인프로젝트' 카테고리의 다른 글
[Project] 20210904_13일차 (0) | 2021.09.05 |
---|---|
[Project] 20210903_12일차 (0) | 2021.09.04 |
[Project] 20210901_10일차 (0) | 2021.09.02 |
[Project] 20210831_9일차 (0) | 2021.09.01 |
[Project] 20210830_8일차 (0) | 2021.08.31 |