Develop document : Event - Tiny-Metro/Poly-Metro GitHub Wiki
์ด๋ฒคํธ
๊ฐ์
๊ฒ์์ ์งํํ๋ฉด์, ํน์ ํ๋ฅ ์ ๋ฐ๋ผ ํน์ ๊ธฐ๊ฐ๋์ ํน์ ํจ๊ณผ๊ฐ ๋ฐ์ํ๋ ๊ธฐ๋ฅ์ ๋๋ค.
๊ธฐ๋ฅ
์ด๋ฒคํธ๋ ์ ์ ์ ์ํด ์ถ๊ฐ, ๋ณ๊ฒฝ(๋ชจ๋ฉ) ์ด ๊ฐ๋ฅํ ์์คํ ์ ๋๋ค.
๊ธฐ๋ณธ์ ์ธ ์ฌํญ์ ๋ค์ ๋ฌธ์๋ค์ ๊ธฐ์ ๋์ด ์์ต๋๋ค.
๊ฐ๋ฐ : EventManager
Event๋ EventManager์ Event๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
๊ทธ ์ค, EventManager์ ๋ํ ์ค๋ช ์ ๋๋ค.
Begin play
EventManager๋ GameMode์ ์ํด ๊ฒ์ ์์ ์ ๋ ๋ฒจ์ ์คํฐ๋ฉ๋๋ค. ์คํฐ ๋ EventManager๋ Lua์คํฌ๋ฆฝํธ ํ์ผ์ ์ฝ์ด Event๊ฐ์ฒด๋ฅผ ์ด๊ธฐํ ํ์ฌ, ๋ฐฐ์ด๋ก ์ ์ฅํฉ๋๋ค. ๊ทธ ํ ์ผ์ผ ํ๋ฅ ๊ณ์ฐ์ ์ํด DailyTaskํจ์๋ฅผ Timer์ Delegate์ Bindํฉ๋๋ค.
Game loop
EventManager๋ Timer์ ์ํด ๋งค์ผ 0์์ ์ด๋ฒคํธ ๋ฐ์์ ์๋ฎฌ๋ ์ด์ ํฉ๋๋ค. 0์์ ํธ์ถ๋๋ ํจ์๋ DailyTask์ ๋๋ค. ์ด ํจ์๋ ์ํฉ์ ๋ฐ๋ผ Day์นด์ดํฐ๋ฅผ ์กฐ์ ํฉ๋๋ค. ์ดํ DailyTask๊ฐ SimulateProbability๋ฅผ ํธ์ถํ์ฌ ์๋ฎฌ๋ ์ด์ ์ ์ํํฉ๋๋ค. ํธ์ถ๋ SimulateProbabilityํจ์๋ Day๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ฒคํธ ๋ฐ์์ ์๋ฎฌ๋ ์ด์ ํฉ๋๋ค. ์ด๋ฒคํธ๊ฐ ๋ฐ์๋์ด์ผ ํ๋ ๊ฒฝ์ฐ UpdateEventWeight์ OccurEventํจ์๋ฅผ ํธ์ถํฉ๋๋ค. UpdateEventWeight๋ ์ด๋ฒคํธ๋ค์ ๋ฐ์ ํ๋ฅ (๊ฐ์ค์น)์ ์ ๋ฐ์ดํธํฉ๋๋ค. OccurEvent๋ ์ด๋ฒคํธ ๋ฐ์ ํ๋ฅ ์ ๋ฐ๋ผ, ๋๋คํ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํต๋๋ค.
DailyTask
์ด๋ฒคํธ๋ ๋งค์ผ 0์๋ฅผ ๊ธฐ์ ์ผ๋ก ์์ฑ ์ฌ๋ถ๊ฐ ๊ฒฐ์ ๋ฉ๋๋ค. ๋ฐ๋ผ์ Timer์ ์ํด Broadcast๋๋ DailyTaskํจ์๋ฅผ ๊ฐ์ง๋๋ค. ์ด ํจ์๋ ์ด๋ฒคํธ์ ๋ฐ์ ํ๋ฅ ์ ๊ฒฐ์ ํ๊ธฐ ์ํด Day๊ฐ์ ์ด์ฉํฉ๋๋ค. Day๋ ์ด๋ฒคํธ EventOccurProbability์ ์ธ๋ฑ์ค๊ฐ ๋์ด, ํ๋ฅ ๊ฐ์ ๊ฐ์ ธ์ต๋๋ค. ์ด๋ฒคํธ๊ฐ ๋ฐ์์ค์ผ ๋์๋ ์ถ๊ฐ์ ์ธ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ง ์๊ธฐ ๋๋ฌธ์, Day๊ฐ์ด ์ฆ๊ฐํ์ง ์์ต๋๋ค. ํ์ฌ ์ด๋ฒคํธ์ ๋ฐ์ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ๊ฒ์ EventPeriod ๋ณ์๋ฅผ ์ด์ฉํฉ๋๋ค. ํด๋น ๋ณ์๋ Event์์ ์, ์ด๋ฒคํธ ์งํ ๊ธฐ๊ฐ๋งํผ ์ด๊ธฐํ๋๋ฉฐ, DailyTask์์ 1์ฉ ๊ฐ์๋ฉ๋๋ค. ๋ํ, ํด๋น ๋ณ์๊ฐ 0์ดํ์ผ ๋ ์ฆ, ์ด๋ฒคํธ๊ฐ ๋ฐ์์ค์ด์ง ์์ ๋์๋ EventEndTask๋ฅผ Broadcastํฉ๋๋ค.
SimulateProbability
์ด๋ฒคํธ๋ ์ ํด์ง ๋ฐ์ ํ๋ฅ ์ด ์กด์ฌํฉ๋๋ค. 0~14์ผ์ 0%๋ก, ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค. ์ด๋ฒคํธ์ ๋ฐ์ ํ๋ฅ ์ 15์ผ์ 33.33%๋ก ์์ํ์ฌ, 35์ผ์ ์ต๋์น์ธ 100%๊ฐ ๋ฉ๋๋ค. ํด๋น ๋ฐ์ ํ๋ฅ ์ ๋ง์ง๋ง ์ด๋ฒคํธ์ ์ข ๋ฃ ์์ ์์ ์ด๊ธฐํ๋ฉ๋๋ค. ์ฆ, ๊ฐ๊ฐ์ ์ด๋ฒคํธ ์ฌ์ด์๋ ์ต์ 14์ผ์ ๊ณต๋ฐฑ๊ธฐ๊ฐ์ด ์กด์ฌํฉ๋๋ค. ๊ณต๋ฐฑ ๊ธฐ๊ฐ์ DailyTask์์ ์ด๋ฒคํธ๊ฐ ๋ฐ์์ค์ผ ๋ Day๊ฐ์ด ์ฆ๊ฐํ์ง ์๋ ์์ผ๋ก ๊ตฌํ๋์ด ์์ต๋๋ค. ์ด๋ฒคํธ๊ฐ ๋ฐ์๋์๋ค๋ฉด Day์นด์ดํฐ๋ฅผ 0์ผ๋ก ์ด๊ธฐํํ๊ณ , UpdateEventWeight์ OccurEventํจ์๋ฅผ ํธ์ถํฉ๋๋ค.
UpdateEventWeight
๊ฐ๊ฐ์ ์ด๋ฒคํธ๋ ๋ฐ์ ๊ฐ์ค์น๊ฐ ์กด์ฌํฉ๋๋ค. [๊ฐ๋ณ ์ด๋ฒคํธ์ ๊ฐ์ค์น / ๋ชจ๋ ์ด๋ฒคํธ์ ๊ฐ์ค์น์ ํฉ]์ด ํน์ ์ด๋ฒคํธ์ ๋ฐ์ ํ๋ฅ ์ด ๋ฉ๋๋ค. ํด๋น ๊ฐ์ค์น๋ค์ ๊ฒ์ ๋ด ๋ค๋ฅธ ์์ธ(์ ์ฑ ๋ฑ)์ ๋ฐ๋ผ ๋ณํํ ์ ์๊ธฐ ๋๋ฌธ์, ์ด๋ฒคํธ์ ๋ฐ์ ์ ์ ๋ฐ์ดํธ๊ฐ ํ์ํฉ๋๋ค. ํด๋น ํจ์๋ Event๊ฐ์ฒด์ ๊ฐ์ค์น๋ฅผ ์ ๊ฒํ์ฌ, ๊ฐ์ค์น ๋ฐฐ์ด์ ๋ํ ์ ๋ฐ์ดํธ๋ฅผ ์ํํฉ๋๋ค.
OccurEvent
์ด๋ฒคํธ์ ๋ฐ์์ ์ํํ๋ ํจ์์ ๋๋ค. ํด๋น ํจ์๋ ํธ์ถ ์ ์๋ ์ญํ ์ ์ํํฉ๋๋ค
- ๊ฐ์ค์น๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ฒคํธ๋ฅผ ์ ํํ์ฌ ๋ฐ์์ํต๋๋ค.
- EventPeriod๋ฅผ ์ด๊ธฐํํ์ฌ ์ด๋ฒคํธ ์ง์ ๊ธฐ๊ฐ์ ์ค์ ํฉ๋๋ค.
- ์ด๋ฒคํธ UI๋ฑ์ ์ด๋ฒคํธ์ ๋ฐ์์ ์๋ฆฌ๊ธฐ ์ํด EventOccurTask๋ฅผ Broadcastํฉ๋๋ค.
๋ฐ์ํ ์ด๋ฒคํธ๋ EventLog๊ตฌ์กฐ์ฒด์ ๊ธฐ๋ก๋์ด EventManager์ ๋ฐฐ์ด ๋ณ์์ ์ถ๊ฐ๋ฉ๋๋ค. ์ถ๊ฐ๋๋ Log๋ UI์ ์ ๋ฐ์ดํธ์ ์ฌ์ฉ๋ฉ๋๋ค. ๋ํ, ์ด๋ฒคํธ์ ์ง์ ์ค์๋ ๋ค๋ฅธ ์ด๋ฒคํธ๊ฐ ๋ฐ์๋ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ํด๋น ํจ์๋ Event์ ๋ฐ์๊ณผ ๋์์ ํด๋น Event์ ์ง์์๊ฐ ๊ฐ ๋งํผ EventPeriod๊ฐ์ ์ด๊ธฐํํฉ๋๋ค. ํด๋น ๊ฐ์ DailyTask์ ์ํด ๊ฐ์ํฉ๋๋ค.
EventOccurTask
์ด๋ฒคํธ์ ๋ฐ์์ ๋ํ ์๋ฆผ์ ์ ์ ์๊ฒ UI์ ํํ๋ก ์ ๊ณต๋์ด์ผ ํฉ๋๋ค. EventOccurTask์๋ Event UI์ ์ ๋ฐ์ดํธ ํจ์๊ฐ ๋ฐ์ธ๋ฉ ๋์ด์์ต๋๋ค. OccurEvent์์ EventOccurTask๊ฐ Broadcast๋๋ ๊ฒ์ผ๋ก, Event UI์ ํ์ ์๋ฆผ ๋ฐ ๋ฆฌ์คํธ ์ ๋ฐ์ดํธ ํจ์๊ฐ ํธ์ถ๋ฉ๋๋ค.
EventEndTask
์ด๋ฒคํธ๋ ๊ฒ์ ๋ด ์์คํ ์ ํ๋ฅ ๋ฐ ๊ฐ์ค์น์ ๋ณ๋์ ์ค๋๋ค. ํด๋น ๋ณ๋์ ์ง์ ๊ธฐ๊ฐ๋ง ์๋ํ๊ณ , ์ด๋ฒคํธ๊ฐ ํ์ฑํ์ค์ด ์๋ ๋์๋ 0์ ๊ฐ์ ๊ฐ์ง๋๋ค. ๋ฐ๋ผ์ ์ด๋ฒคํธ๊ฐ ํ์ฑํ ์ค์ด ์๋ ๋ EventEndTask๋ฅผ ์ง์์ ์ผ๋ก Broadcastํ์ฌ ์ด๋ฒคํธ์ ์ํ ๋ณ๋๊ฐ์ ์ด๊ธฐํ์ํต๋๋ค.
๊ฐ๋ฐ : Event
Event๋ EventManager์ Event๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
๊ทธ ์ค, Event์ ๋ํ ์ค๋ช ์ ๋๋ค.
CreateEvent
Event๋ EventManager์ ์ํด ์์ฑ๋ฉ๋๋ค. ์์ฑ๋๋ Event๋ ์กํฐ๊ฐ ์๋ UObject์ ์์์ฒด์ด๊ธฐ ๋๋ฌธ์, ๋ ๋ฒจ์ ์คํฐํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ World Referencing์ด ๋ถ๊ฐ๋ฅํ์ฌ, EventManager์ ์ํด World๋ฐ ๊ธฐํ ์ฐธ์กฐ๋ฅผ ์์กดํฉ๋๋ค.
InitEvent
Event๊ฐ์ฒด์ ์์ธ ์ ๋ณด๋ ๊ฐ๊ฐ์ Lua์คํฌ๋ฆฝํธ์ ์์ฑ๋์ด ์์ต๋๋ค. ๊ฐ๊ฐ์ ์ธ์คํด์ค๊ฐ ์ด๋ค Lua์คํฌ๋ฆฝํธ๋ฅผ ์ฐธ์กฐํ ์ง๋ EventManager์ ์ํด ๊ฒฐ์ ๋ฉ๋๋ค. InitEvent์์๋ ์ง์ ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์ด, ๊ฐ์ฒด์ ์ ๋ณด๋ฅผ ์ด๊ธฐํํฉ๋๋ค. ์ด๊ธฐํ๋๋ ์ ๋ณด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- Id : Id๋ ์คํฌ๋ฆฝํธ์ ํ์ผ๋ช ์ ์์กดํฉ๋๋ค. (Event.{Id}.lua)
- Title : Event์ ์ ๋ชฉ์ ๋ํ๋ ๋๋ค. Lua์คํฌ๋ฆฝํธ์ ์คํฌ๋ฆฝํ ๋์ด ์์ต๋๋ค.
- Message : Event์ ์ํฅ์ ๋ํด UI์ ํ์๋ ๋ฉ์์ง๋ฅผ ๋ํ๋ ๋๋ค. Lua์คํฌ๋ฆฝํธ์ ์คํฌ๋ฆฝํ ๋์ด ์์ต๋๋ค.
- Period : Event์ ์ง์ ๊ธฐ๊ฐ์ ๋ํ๋ ๋๋ค. Lua์คํฌ๋ฆฝํธ์ ์คํฌ๋ฆฝํ ๋์ด ์์ต๋๋ค.
EventStart
EventManager์ ์ํด ํธ์ถ๋๋, Event๋ฅผ ๋ฐ์์ํค๋ ํจ์์ ๋๋ค. Lua์คํฌ๋ฆฝํธ์ Startํจ์๋ฅผ ํธ์ถํ๋ฉฐ, ํจ์์ ๋ฐํ๊ฐ์ผ๋ก ์ด๋ฒคํธ์ ์ง์ ๊ธฐ๊ฐ์ ๋ฐํํฉ๋๋ค.
GetEventPeriod
Event์ ์ง์ ๊ธฐ๊ฐ์ ๋ฐํํฉ๋๋ค.
GetEventWeight
Event์ ๋ฐ์ ๊ฐ์ค์น๋ ์ํฉ์ ๋ฐ๋ผ ๋ณํ ์ ์์ต๋๋ค. ํด๋น ์กฐ๊ฑด์ Lua์คํฌ๋ฆฝํธ์ Weightํจ์์ ์ ์๋์ด ์์ต๋๋ค. GetEventWeight๋ ํด๋น ํจ์๋ฅผ ํธ์ถํ์ฌ, ์ง์ ๋ ๊ฐ์ค์น๋ฅผ ๋ฐํํฉ๋๋ค.
GetEventData
InitEvent์ ์ํด ์ด๊ธฐํ ๋ EventData๊ตฌ์กฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค.