여러가지 모드가 로드되면 상단 버튼이 너저분해질텐데, 그걸 방지위해 개발자가 제안한 규격이 있음.
https://www.factorio.com/blog/post/fff-174
mod gui안에 만들어라... 인데, 각 모드에 속한 GUI가 보기 불편하지 않게 스타일을 적용해주는 기능인가봐.
하지만 모든 모드들이 이 규격을 잘 지키는건 아님. 이걸 따르고 안따르고는 모더의 자유지만 난 사용하는것을 추천하겠어.
mod-gui는 팩토리오 설치폴더/data/core/lualib/mod-gui.lua 에 위치해 있고,
.button_style = "mod_gui_button"
.frame_style = "inner_frame_in_outer_frame"
.get_button_flow(player)
.get_frame_flow(player)
네가지 항목을 가지고 있다.
스타일에는 문자열로 스타일 이름이 들어가는데,
그건 설치폴더/data/core/prototypes/style.lua 안에서 확인할 수 있고,
스타일 역시 프로토타입이라서 입맛에 맞는 스타일을 data.lua에서 디자인 해줄수도 있다.
https://wiki.factorio.com/Prototype/GuiStyle
하지만 스타일은 간단한거만 적용하고 넘어갈거야.
굳이 프로토타입을 안만들어도 대부분은 스크립트로 스타일을 적용시킬 수 있어.
https://lua-api.factorio.com/latest/LuaStyle.html
스타일 언급했는데, 스타일 그렇게 신경안써도 됨. 지금은 무시하셈.
------------------------------------------
GUI 연습용으로 사용할 수 있도록 템플릿을 만들었다.
이 템플릿은 mod-gui를 적용한 거야.
https://drive.google.com/u/0/uc?id=1g6LoluyL1uLKYUfBjzy467b0e1YSpOmu&export=download
다운받아서 살펴봐. 연습해볼거면 모드 폴더에 압축풀어넣고 불러와보고.
------------------------------------------
설명은 대부분 압축파일 내부의 control.lua에 들어가 있을거야.
사용하는 이벤트는
on_gui_click
on_player_created
이고,
특수이벤트
script.on_configuration_changed
script.on_init
script.on_load
를 살펴볼 수 있도록 넣어뒀다.
특히 이것처럼 모드로 만든경우 script.on_configuration_changed 가 아주 엄청나게 중요해.
왜냐하면 사람들이 게임 하나 저장해두고 플레이하면서 빈번하게 모드를 껐다켰다 하잖아.
이 이벤트는 모드 구성이 변화할 때 발생하는거야.
lua 자체 내장함수인 pcall함수를 사용하는 예시도 들어가있어.
팩토리오 lua스크립트를 짜서 집어넣고 돌리다가 오류가 뜨면 맵 자체가 다 꺼지고 크래시가 나서 메뉴로 팅겨나가는데,
이 pcall함수는 그것을 방지하고 오류를 확인하거나 사후처리를 할 수 있도록 해준다.
아주 간단한 미션하나를 수행한다면,
아래같이 옆에 추가적인 모니터화면이 뜨는것을 볼 수 있을거다.
--------------------
script의 세가지 특수이벤트들은 플레이어 화면에 뭐가 뜰 수 있게 되기전에 실행되는거라서 그 단계의 뭔가를 모니터링하려면
log() 함수를 사용해서 팩토리오 사용자데이터 폴더의
factorio-current.log 파일에 원하는 텍스트를 기록을 해야함.
윈도우의 PowerShell이 활성화되어있다면,
팩토리오 사용자데이터 폴더에 monitor.ps1 파일같은걸 만들고 내용을
Get-Content "factorio-current.log" -Encoding UTF8 -Wait
집어넣고 저장한뒤, ps1확장자인 파일을 "우클릭 - PowerShell에서 실행"을 하면
실시간으로 factorio-current.log 내용이 뜨는것을 모니터링 할 수도 있다.
모니터가 하나라면 팩토리오를 창모드를 해두고 옆에 띄워두고 해야겠지.
이걸 잘 활용하면 게임화면에 뭔가 print할 수 없는 단계에도 실행순서같은걸 추적해볼 수 있을거임.
--------------------
댓글 0