[Asset 제작 일지] 대화 시스템 만들기 07 : 커맨드 구현 (1), (2)
비장한 BGM을 틀면서 작업을 했더니 강해짐을 느낀다. 하여간, 작업은 아마도 순조로운 상태다.
이걸 봐라. 멋지게 구현하지 않았는가.
해당 커밋 보러가기
Show("이것은 /size:17/대화창이다. /emote:Sad/하지만 /color:red/'언젠가는' /color:white/ 완성되겠지. /emote:Happy/^O^", character);
#1 구현
구현은 이전과 마찬가지의 방법으로 진행했다.
그리고 닫는 태그는 어떻게 처리했느냐? 출력하는 텍스트와 마지막에 붙여질 텍스트를 구분하였다.
이렇게 하면, isColoring과 isSizing을 키는것만으로 color와 size 닫는 태그의 처리를 해줄 수 있다. 아래와 같은 방식으로 말이다.
_coloring과 _sizing의 내용은 사실상 같아서 리팩토링은 해야겠지만. 아무튼 아이디어는 간단하다.
- color 태그나 size 태그가 하나라도 들어 있으면, 어차피 닫는 태그는 항상 존재한다.
- 이미 isColoring이나 isSizing이 켜져 있으면, 해당 위치에 닫는 태그를 만들어주면 된다.
자, 이렇게 간단하게 해결하였다. 스스로에게 박수를 쳐 주도록 한다!
...그러면 그렇지.
#2 원인
원인은 간단하다. 아래의 예시 코드 중, 첫 번째는 되고 두 번째는 안 된다.
Show("/size:18//color:red/^O^", character);
Show("/color:red//size:20/^O^", character);
해당 구문들은 아래와 같이 파싱된다.
<size=20><color=red>^O^</color></size>
<color=red><size=20>^O^</color></size>
첫 번째 구문은 color=red가 /color와 짝을 이루어 순서가 맞게 들어가고 있다.
그러나, 두 번째 구문은 보다시피 size=20과 /color가 짝이 이루어지지 않아 순수한 문자열 그대로 출력되고 있는 것이다.
이걸 해결하기 위해서는, tag가 선언된 순서대로 스택에 넣고, 스택에서 해당 문자열을 치환하여 밖으로 빼 줘야 한다.
#3 해결
사악했던 isColoring과 isSizing을 없애 버리고, CloseCommands라는 리스트를 만들었다. 이는 스택으로 사용될 것이다.
coloring과 sizing 메서드를 처리 할 때마다, CloseCommands에 Enum의 형태로 리스트가 쌓일 것이다.
BackText는 다음과 같은 형태가 된다.
매 WaitTime마다 BackText를 새 string으로 받아오는 것은 미미하더라도 성능 상으로 좋지 않다. 이는 이후에 해결하도록 하고.
BackText는 리스트의 뒷부분부터 하나씩 꺼내 result string을 만들어준다.
해결... 해결하였다...
해당 커밋 보러가기
'개발 일지 > 소프트웨어' 카테고리의 다른 글
[Asset 제작 일지] 대화 시스템 만들기 09 : 문장 데이터 불러오기 (0) | 2020.04.16 |
---|---|
[Asset 제작 일지] 대화 시스템 만들기 08 : 커맨드 구현 (3) (0) | 2020.04.15 |
[Asset 제작 일지] 대화 시스템 만들기 06 : 커맨드 밑작업 (2), (3) (0) | 2020.04.13 |
[Asset 제작 일지] 대화 시스템 만들기 05 : 커맨드 밑작업 (1) (0) | 2020.04.11 |
[Asset 제작 일지] 대화 시스템 만들기 04 : Property Drawer 구현하기 (0) | 2020.04.11 |
댓글
이 글 공유하기
다른 글
-
[Asset 제작 일지] 대화 시스템 만들기 09 : 문장 데이터 불러오기
[Asset 제작 일지] 대화 시스템 만들기 09 : 문장 데이터 불러오기
2020.04.16 -
[Asset 제작 일지] 대화 시스템 만들기 08 : 커맨드 구현 (3)
[Asset 제작 일지] 대화 시스템 만들기 08 : 커맨드 구현 (3)
2020.04.15 -
[Asset 제작 일지] 대화 시스템 만들기 06 : 커맨드 밑작업 (2), (3)
[Asset 제작 일지] 대화 시스템 만들기 06 : 커맨드 밑작업 (2), (3)
2020.04.13 -
[Asset 제작 일지] 대화 시스템 만들기 05 : 커맨드 밑작업 (1)
[Asset 제작 일지] 대화 시스템 만들기 05 : 커맨드 밑작업 (1)
2020.04.11