참고: 이 일지는 네이버 카페로부터 옮겨진 레거시 게시물입니다.
이동한 새 개발환경의 변경점을 모두 푸시했습니다. 다음에도 일지마다 커밋 기록을 올릴 생각입니다.
게임 진입점 격인 rpg_. ts에서 굳이 처리할 필요가 없는 코드들을 모두 다 정리했습니다. 대표적으로 전투, 교환, 명령어, 유저 관련 함수 및 변수들이 각자의 모듈로 들어갔습니다. 애당초 이들은 서로 간 의존성이 매우 낮습니다. 아니, 오히려 참조를 전혀 하지 않기에 한 스크립트에 같이 있을 필요가 없다고 판단했습니다.
그래서 각자 Manager 모듈을 만들었습니다. 각 기능들을 편집할려고 검색 기능과 스크롤을 수없이 반복하던 과거에 비해 편집 및 보기가 매우 편리해졌습니다.
코드 정리의 또다른 일환으로써, 인터페이스들을 모두 index.d.ts에 넣었습니다. 인터페이스가 그저 타입 선언의 형태라면 굳이 그 스크립트에서 공간을 차지하기보단 index.d.ts 하나로 모아두는 게 좋을 거라 생각했기 때문입니다. 이참에 타입 선언도 같이 넣었습니다.
가끔 이벤트 타이틀에 동적인 값이 들어가야 하기 때문에 일부 이벤트들은 다른 이벤트들과 달리 title가 없고, 대신 실행 시점에서 각자의 방법으로 출력합니다.
그래서 이번에 EventData 타입을 선언해 이벤트 데이터를 선택적으로 기입할 수 있도록 만들었습니다. 이전엔 title 매개변수 자리를 빈 문자열("")로 넣어야 했고, 제 입장에선 상당히 꼴보기 싫었습니다. 다른 라이브러리도 이처럼 객체 매개변수를 통해 개발자가 옵션을 능동적으로 선택하도록 만들었던데, 이 방법을 지칭하던 용어가 안 떠오르네요.
다시 생각해보니 이벤트 타이틀이 동적이라면 차라리 타이틀을 리턴하는 함수를 옵션으로 두는 것도 나쁘지 않아 보이네요. 그럼 이벤트 리스너에 섞여 들어가는 불편함도 해결되니깐요.
이 함수들은 모두 진입점 스크립트에서 User를 인자로 받아 실행하는 함수들입니다. 하지만 이를 유저 클래스의 메서드로 두어 User를 인자로 받을 필요없이 this를 통해 참조하도록 만들었습니다. 오늘 개발에서 더 직관적이고 유지보수를 향상시켰다는 느낌을 강하게 받은 부분입니다. 과거엔 버그 수정과 구조 개선에 쫒겨다녔지만, 잠시 쉬고 돌아오니 미쳐 못보던 부분들을 개선할 수 있었습니다. 가끔은 쉴 필요가 있었네요.
저 init는 사실 진입점의 init와 유저 데이터 불러오기에서 유저 데이터를 편집하던걸 한 메소드로 모은 것입니다. 그래서 많이 뒤죽박죽이고 목적을 알 수 없는 부분이 많아 차후 정리가 필요한 부분 중 하납니다.
저런 맙소사, 초기화를 세 번이나 하는군요. 이것도 고쳐야겠습니다.
게임과 봇에서 전체적으로 활용될 변수들을 모아 Vars모듈로 만들었습니다. 여기서 users 초기화 부분을 보시면 새 User 인스턴스를 다시 만드는 것을 볼 수 있는데요,
이는 readObject(json 파일 읽고 파싱 하기)가 제너릭 타입을 받았더라도 그 타입(클래스)의 메서드를 가지지 않기 때문입니다. 그래서 결국 파싱 한 데이터를 토대로 다시 새 유저를 만드는 것이죠. 이후 진입점의 init()에서 유저 초기화 과정이 이루어집니다.
전투 시스템과 교환 시스템의 문제점은 매우 많습니다. 이는 교환 시스템을 완성하지 않고 성급하게 전투 시스템을 제작한 문제의 책임이 크고, 버그를 고치는 동시에 구조를 개선하다가 코드가 스파게티로 변해버린 책임 또한 큽니다. 때문에 이제부턴 전투 시스템 먼저 완벽하게 고치는 것을 목표로 둘 생각입니다.
'프로젝트 > RTTRPG' 카테고리의 다른 글
[RPG 개발] 26일차 (0) | 2022.12.05 |
---|---|
[RPG 개발] 25일차 (0) | 2022.12.05 |
[RPG 개발] 23일차 (0) | 2022.12.05 |
[RPG 개발] 22일차 (0) | 2022.12.05 |
[RPG 개발] 21일차 (0) | 2022.12.05 |