Ace3.0 GUI - 뭐라도 띄워보자

Hisop·2023년 3월 9일
0

WOW Addon Dev

목록 보기
5/9
post-thumbnail

기초적인 애드온의 형태를 가지며 뭐라도 출력해보는걸 목표로 삼았다.
일단 틀부터 만들고 그 안에 들어갈 기능은 하나씩 천천히 구현하면 된다는 생각이 들었다.


애드온 객체 만들기

기초적인 불러오기 과정은 지난 글처럼 작성했으며
Ace3 Getting Started 페이지를 참고해 애드온 객체를 만드는 과정을 진행해보았다.

일단 가이드에서 제시한 애드온 객체 생성 방법대로 생성해주었다.

HRGT = LibStub("AceAddon-3.0"):NewAddon("HRGT", "AceConsole-3.0", "AceEvent-3.0")
local GUI = LibStub("AceGUI-3.0")

NewAddon의 두번째 매개변수로는 Console과 Event를 입력했다. 해당 라이브러리에 속한 위젯을 써야할 필요가 있었다.


기본 메서드와 HelloWorld!

가이드에서 설명한 3가지 메서드들만 간단히 정리했다.
OnInitialize () - 애드온이 처음 로드될 때
OnEnable () - 애드온이 활성화될 때
OnDisable () - 애드온이 비활성화될 때
이 메서드들을 정의해 필요한 코드를 넣기만 하면 되었다.

function HRGT:OnInitialize()
	self:Print("Hello World!")
end

아무튼 위 테스트 코드를 작성하고 애드온을 실행했다.
최초 실행시에 채팅창에 HelloWorld! 메세지가 정상 출력됨을 확인했다.
(self에 던졌기 때문에 HRGT : HelloWorld! 형태로 애드온을 통해 출력되었다)


GUI

GUI는 Ace3 GUI를 참고해 작성하기 시작했다.

Crate

local MainPanel = GUI:Create("Window")
MainPanel:SetWidth(500)
MainPanel:SetHeight(700)
MainPanel:SetTitle("HRGT MainPanel")
튜토리얼은 "Frame"을 선택했지만 난 Frame 하단의 부제목과 Close 버튼이 마음에 들지 않아 "Window" 타입을 선택했다.

(Ace3 설명페이지엔 다른 타입에 대한 설명은 보이지 않았다.
결국 내부 파일 하나하나 읽어보고 타입 적용시키기 + 구글링으로 맘에드는 타입을 선택)

다른 메서드들은 이름 그대로 동작해서 따로 설명이 필요 없을듯 하다.


SetCallBack

MainPanel:SetCallback("OnClose",
function(widget) 
	MainPanel:Hide()
end)
MainPanel:SetLayout("Fill")
MainPanel:EnableResize(false)

SetCallBack은 특정 Event가 실행됐을 때 Function를 실행시키겠다는 선언으로 이해했다.
이미 만들어진 함수를 호출할 수도 있지만 클로저 형식으로 처리하는게 일반적이었다.


SetLayout

Layout은 Flow, List, Fill 3가지로 나누어진다.

  • The "Flow" Layout will let widgets fill one row, and then flow into the next row if there isn't enough space left. Its most of the time the best Layout to use.
    레이아웃은 위젯이 한 행을 채울 수 있도록 한 후 공간이 부족할 경우 다음 행으로 이동합니다. 대부분의 경우 사용하기에 가장 좋은 레이아웃입니다.

  • The "List" Layout will simply stack all widgets on top of each other on the left side of the container.
    컨테이너의 왼쪽에 있는 모든 위젯을 서로 겹쳐 쌓습니다.

  • The "Fill" Layout will use the first widget in the list, and fill the whole container with it. Its only useful for containers within containers. (We'll see this later.)
    목록의 첫 번째 위젯을 사용하고 전체 컨테이너를 채웁니다. 컨테이너 내의 컨테이너에만 유용합니다.
profile
42seoul - C, C++ / YagomAcademy - Swift

0개의 댓글