개인맵 기능 자체는 몇개월 전에 구현했다.
완벽하다고 볼순 없지만 핵심적인 기능은 모두 구현했다. 또한 성능저하를 막기 위해 개인맵의 생성/삭제를 완전히 백그라운드에서 비동기적으로 처리하도록 했다. 이 부분이 꽤 힘들었다.
이때는 단순히 기능 구현이 목표였다. 이때만 해도 어지간한 UI는 콘솔로 다 처리할 생각이었으므로 UI부분은 전혀 신경 쓰지 않았다. 정말 다 콘솔로 구현했다.
11월에 출시한다고 마음을 굳힌 상황에서 개인맵 기능은 전투와 더불어 필수적인 기능이다. 필수적인 기능인데 그 필수적인 기능을 콘솔 커맨드로 사용하라고 하면, 이건 역시 무리인것 같다. 그래서 GUI를 넣기로 했다. 물론 개노가다가 예상되는 작업이지만 그간 GUI레이어의 코드들을 상당히 개선했고 helper 함수들도 많이 만들어놨으므로 해볼만할거라 생각했다.
버튼과 텍스트 박스 리스트 박스를 배치하고 여기 스크롤바를 붙이고 이벤트를 처리하는 모든 작업은 하드 코딩으로 이루어졌다. 물론 자랑은 아니다. 도저히 IDE툴을 만들 여유가 없었다. 그래도 UI계층은 제대로 엔진화 되어있다. 나름 체계적인 COM형태의 인터페이스를 노출하고 있고 DLL파일로 로딩된다. 당연히 여러 프로세스에서 바이너리 레벨로 재사용된다. 하드 코딩은 이 UI엔진을 이용해서 부품들을 배치하고 핸들러 설정하는 부분 뿐이다.
UI를 하드코딩하면서 UI레이어쪽의 버그들도 꽤 잡아냈다. 버그라기 뭣한 설계 결함도 상당 부분 잡아서 수정했다.
처음엔 단순히 콘솔명령어를 버튼으로 대체하면 될거라 생각했는데 GUI가 되다보니 context(문맥)이란걸 무시할수가 없다. 확실히 CUI와는 상황이 달랐다.
예를 들어 콘솔모드에선 list_private_map이란 커맨드로 개인맵 목록을 받아온다.
GUI 모드에선 개인맵 목록이 다이얼로그에 항상 표시된다. 따라서 개인맵 목록이 변경되었을때 서버측에서 클라이언트에 바로 보내줘야한다. 그래야 다이얼로그의 개인맵 목록이 즉시 갱신된다.
이런 류의 수정들이 상당히 필요했다. 그 덕에 서버측에 새로 추가해야할 프로토콜이 대량으로 늘었다. 서버 코드도 상당히 많이 수정했다.
막판엔 정말 만들기 귀찮았던 체크박스도 만들어 넣었다. 정말 만들기 싫었다. 그런데 결국 개인맵을 직접 만들고 남의 맵에 들어가다보면 초대 메시지로 귀찮아질게 뻔하다. 그래서 초대 거부 기능을 만들었다. 만들다보니 아무래도 체크박스는 반드시 구현해야할것 같다. 그래서 결국 만들었다. 그래도 기존 버튼 컨트롤의 코드를 최대한 살려서 비교적 적은 양으로 구현할 수 있었다.
오늘 새벽까지 클라이언트 3개를 붙여서 테스트하고 자잘한 버그를 잡았다.
아직 에러 메시지 출력 기능이라든가 약간 수정할 곳이 있긴 한데 ‘GUI를 이용한 개인맵 기능’자체는 일단락 된거 같다.
잘 돌아간다.
“Voxel Horizon – 개인맵 기능 개선 및 GUI추가.”에 대한 답글 1개