간단한 모듈 만들기
기본적으로 모듈은 .lnx 파일 한개와 .lua 파일 하나가 한 쌍이 되어 만들어집니다. .lua 에서는 플러그인 코드를 작성하고, .lnx 는 중간을 매개해주는 역할을 해 줍니다.
이번 예제에서는 간단하게 숫자 두개를 입력받아 더한 값을 되돌려주는 매크로를 모듈로 작성할 것입니다.
먼저, 루아 메뉴의 새로운 루아 모듈을 눌러 새로운 루아 파일을 만듭니다. 여기에서는 "TutorialPlus" 라는 이름으로 만들어 보겠습니다.
그렇다면 다음과 같이 모듈 폴더에 TutorialPlus.lua 파일이 생성될 것입니다.
그리고 짝이 되는 .lnx 파일이 필요한데, 아직 피니엔진에서는 모듈 제작 지원이 완벽하지 않으므로 이 부분은 수동으로 빈 텍스트 파일을 생성하여 만들어 줍니다.
그렇다면, 이제 TutorialPlus.lua 그리고 짝이 되는 Tutorialdef.lnx 가 생성되었습니다.
그 다음, 덧셈을 할 루아 함수를 정의해 보겠습니다.
먼저, lua 파일을 텍스트 편집기로 열면 다음과 같은 코드가 기본으로 있습니다.
기본으로 생성해주는 lua 파일의 주석은 전 VM 을 기준으로 작성되어있으므로 현재의 신 VM 에서는 무시해주시고, 다음과 같이 작성해 보겠습니다.
--최초 1회만 불리는 코드는 여기다 적어주세요. |
function tutorial_plus(vm, stck) |
local value1 = vm:ARGU("루아더하기","수1",0) -- 인자 "수1" 의 내용을 가져옵니다 |
local value2 = vm:ARGU("루아더하기","수2",0) -- 인자 "수2" 의 내용을 가져옵니다 |
local result = value1 + value2 |
vm:returnValue(result) -- "결과를 되돌려줍니다" |
end |
local function m(XVM) |
--[루아] 매크로가 불리는 시점에 사용 될 루아 코드를 적어주세요. |
end |
return m |
lnx에서 함수 호출을 했을 때, lua 에서는 vm과 stck 의 두 개의 인자가 전달됩니다. vm 은 피니엔진을 돌리는 전반적인 VM 인 LXVM 클래스를 전달해 주며, stck 는 콜스택 객체를 전달해 줍니다.
LXVM 객체에서 제공하는 함수에 대해서는, LXVM 문서를 참고해 주시기 바라겠습니다.
여기에서는 여기에서 사용한 ARGU 함수와 returnValue 함수에 대해서만 설명하겠습니다.
vm:ARGU() 함수는, 매크로의 인자를 가져오는 함수로서, 첫번째 인자는 매크로 이름, 두번째 인자는 인자 이름, 세번째 인자는 디폴트 값입니다.
따라서, 다음과 같이 작성하였다면, "루아더하기" 라는 함수의 "수1" 인자를 value1 에 저장하고, "수2" 라는 인자는 value2 에 저장하게 되겠죠.
물론, 수1 또는 수2 가 생략될 경우, 각 변수에는 0 이 대신 저장됩니다.
그리고, vm:returnValue() 함수는 전달해 준 값을 되돌려주는 함수입니다.
lua 의 return 문으로 값을 되돌려 주는 방식이 아니니 유의하여 작성해주시면 되겠습니다.
다음은 이 lua 파일에 대응하는 lnx 파일을 작성해 보겠습니다.
[스크립트 실행="아니오" 파일명="TutorialPlus.lua" ] |
!루아더하기{ |
"< p class='title'>루아더하기</ p>루아더하기 매크로에 대한 설명입니다"| |
{1| 수1| ""| 0| "수1 인자에 대한 설명입니다."}| |
{1| 수2| ""| 0| "수2 인자에 대한 설명입니다."} |
} |
@매크로 루아더하기: |
[[tutorial_plus]] |
위와 같이 작성해 주시면 되며, 의미는 다음과 같습니다.
[스크립트] 구문은, 해당 lua 파일을 불러오는 역할을 하며, 실행은 "아니오" 로 해 주셔야 합니다.
!루아더하기 로 시작하는 구문은, 해당 매크로에 대한 설명을 추가하는 구문이며,
설명을 하지 않으실 것이면, 생략이 가능합니다.
중괄호 이후 최초의 칸은 매크로 자체에 대한 설명이며,
그 다음 이어지는 중괄호는 각각 인자 하나하나씩 에대한 설명입니다.
인자의 중괄호 안의 의미는 차례대로
- 1 : 매크로를 자동완성 했을 때, 자동으로 인자를 표기할 지의 여부입니다. 1이면 표기하고, 0이면 숨깁니다.
- 수1 : 인자 이름입니다.
- "" : 타입입니다. Lnx script의 매개변수 표현 방식 페이지를 참고해 주세요.
- 0 : 자동완성시의 기본값입니다.
- "수1 인자에 대한 설명입니다." : 각 인자에 대한 설명입니다.
입니다.
다음으로, @매크로 구문은 기존 lnx 문법의 @매크로 구문과 같고,
function_name 은 해당하는 이름의 lua 함수를 호출하는 역할을 합니다.
이상으로 플러그인 작성이 끝났으니, 테스트를 해 보겠습니다.
우선, 위에서와 같이 설명을 추가하는 구문을 작성하셨다면, 피니엔진을 껏다 켜면 다음과 같은 설명을 볼 수 있습니다.
다음은 모듈에 정의한 매크로를 실행하는 테스트 코드입니다.
[스크립트 실행="예" 파일명="Tutorialdef.lnx" ] |
[텍스트 아이디="루아더하기테스트" 내용=[루아더하기 수1=23 수2=45]] |
루아더하기의 실행 결과를 텍스트 매크로로 화면에 출력하는 코드입니다.
다음은 실행 결과입니다.
두 수의 합이 무사히 화면에 표기되는 것을 확인하였습니다.
이상이며, 간단한 모듈 만들기에 대한 문서는 여기까지입니다.
여기까지 따라오셨다면 기본적인 모듈 만들기에 대해서는 기능습득을 하셨으며, 이어서 다른 PiniApi 와 연계하여 사용한다면 원하는 일을 하는 모듈을 만드실 수 있을 것입니다!