레이아웃 (15)
GoScaffold

앱 화면을 한 번에 엮는다 — 바, 스크롤 페이지, 아래 바, FAB, 서랍.
바탕 Control
var page := GoStyle.column()
var screen := GoScaffold.make("Inbox", page, true)
screen.set_fab(GoFab.make(GoIconSet.EDIT))
add_child(screen)
GoTopBar

위쪽 가장자리를 따라 칸 1~3개 — 가운데 칸은 늘 가운데.
바탕 GoEdgeBar
var bar := GoTopBar.make(3)
bar.add_start(GoStyle.icon_button(GoIconSet.BACK, go_back, -1, &"back"))
bar.add_center(GoStyle.label("Stage 3"))
bar.add_end(GoStyle.chip("1,250"))
GoBottomBar

아래쪽 가장자리를 따라 — 제스처 바를 피해서.
바탕 GoEdgeBar
var actions := GoBottomBar.make(1, GoBottomBar.Justify.SPACE_BETWEEN)
for name in ["Attack", "Guard", "Run"]: actions.add_start(GoStyle.button(name))
screen.add_child(actions)
GoLeftSideBar

왼쪽 가장자리를 따라 최대 세 단.
바탕 GoSideBar
var tools := GoLeftSideBar.make(3)
tools.add_start(GoStyle.icon_button(GoIconSet.MENU, open_menu, -1, &"menu"))
tools.add_end(GoStyle.icon_button(GoIconSet.USER, open_profile, -1, &"profile"))
screen.add_child(tools)
GoRightSideBar

오른쪽 가장자리를 따라 최대 세 단.
바탕 GoSideBar
var tools := GoRightSideBar.make(3)
tools.add_start(GoStyle.icon_button(GoIconSet.SETTINGS, open_settings, -1, &"settings"))
tools.add_center(GoStyle.icon_button(GoIconSet.SEARCH, find, -1, &"search"))
screen.add_child(tools)
GoSideBar

위 둘의 바탕이 되는 옆 바 — 오른쪽에서 왼쪽으로 쓰는 언어에서도 제 쪽을 지킨다.
바탕 GoEdgeBar
var rail := GoRightSideBar.make(1, GoSideBar.Justify.CENTER)
rail.add_start(GoStyle.icon_button(GoIconSet.MAP, open_map, -1, &"map"))
GoEdgeBar

모든 가장자리 바가 공유하는 규칙 — 칸, 고르게 펼치기, 가장자리에 붙이기, 안전 영역.
바탕 Container
var bar := GoTopBar.make(1)
bar.justify = GoEdgeBar.Justify.SPACE_BETWEEN
bar.pin_to_edge = GoEdgeBar.Pin.ALWAYS
GoGrid

폭이 정확히 같은 열 — 정해진 수, 또는 들어가는 만큼.
바탕 Container
var cards := GoGrid.make(1, 160.0)
for item in items: cards.add_child(GoStyle.item_card(item))
GoForm

폭을 제한하고 키보드와 HUD 를 피하는 폼.
바탕 MarginContainer
var form := GoForm.new()
form.avoid_hud = true
form.add_child(GoScroll.new())
add_child(form)
GoScroll

내용 어디서 시작해도 되는 터치 스크롤 — 오른쪽에서 왼쪽 언어도 맞춘다.
바탕 ScrollContainer
var list := GoScroll.new()
list.add_child(GoStyle.column())
var strip := GoScroll.horizontal()
GoHudAnchor

HUD 조각을 안전 영역의 아홉 자리 중 하나에 고정한다.
바탕 Control
var corner := GoHudAnchor.new()
corner.spot = GoHudAnchor.Spot.TOP_LEFT
corner.add_child(GoStyle.hud_panel())
GoStyle.column · row · wrap_row

테마의 간격을 쓰는 세로줄·가로줄·줄바꿈 줄.
소속 GoStyle
var page := GoStyle.column()
var line := GoStyle.row()
var chips := GoStyle.wrap_row()
GoStyle.responsive_grid · aspect

넓어지면 열을 늘리는 격자, 그리고 비율을 지키는 상자.
소속 GoStyle
var tiles := GoStyle.responsive_grid(160)
var thumb := GoStyle.aspect(16.0 / 9.0)
GoStyle.padding · spacer · divider

안쪽 여백, 남는 자리를 차지하는 빈칸, 구분선.
소속 GoStyle
var pad := GoStyle.padding(16)
line.add_child(GoStyle.spacer())
page.add_child(GoStyle.divider())
GoStyle.foldable · section

절 제목, 그리고 펼치고 접는 절.
소속 GoStyle
page.add_child(GoStyle.section("Sound", false))
var more := GoStyle.foldable("Advanced", true, null, false)
창과 오버레이 (12)
GoSurface

떠 있는 창 — 가운데, 아래에서, 또는 컨트롤 옆에.
바탕 Control
var window := GoSurface.new()
window.set_title("Settings")
window.close_requested.connect(window.queue_free)
layer.add_child(window)
GoSheet

페이지·뒤로 가기·고정 바닥줄이 있는 아래 시트.
바탕 CanvasLayer
var sheet := GoSheet.new()
add_child(sheet)
sheet.open("Inventory")
sheet.body.add_child(bag_list)
GoPage
카테고리 레일(가로는 왼쪽, 세로는 위쪽 탭)·미리보기·뒤로 가기, 그리고 페이지 안에 쌓는 하위 페이지가 있는 전체 화면 페이지.
바탕 CanvasLayer
var page := GoPage.new()
add_child(page)
page.open("Settings")
page.set_tabs([{id = &"sound", label = "Sound", icon = GoIconSet.VOLUME_HIGH, badge = ""}])
page.push("About", func(box: VBoxContainer) -> void: box.add_child(GoStyle.label("Version 1.0")))
GoDialogs

await 로 기다리는 확인·알림 창 — 알림은 차례를 기다린다.
바탕 Node
var dialogs := GoDialogs.new()
add_child(dialogs)
if await dialogs.confirm("Delete save", "This cannot be undone.", "", "", "", {}, true):
delete_save()
GoDialogs.choose

몇 가지 중 하나 — 폰에서는 아래 시트, 데스크톱에서는 카드.
소속 GoDialogs
var index := await dialogs.choose("Sort by", ["Newest", "Price", "Rating"])
if index >= 0: sort_by(index)
GoDrawer

왼쪽이나 오른쪽에서 밀려 들어오는 판.
바탕 CanvasLayer
var drawer := GoDrawer.new()
add_child(drawer)
drawer.side = GoDrawer.Side.RIGHT
drawer.open("Bag")
GoPopover

누른 것 옆의 정보 카드 — 한 번에 하나.
바탕 RefCounted
GoPopover.open(slot, GoStyle.item_card(item, false))
GoContextMenu

길게 누르기·오른쪽 클릭 메뉴 — 손가락이 움직이면 취소된다.
바탕 RefCounted
GoContextMenu.attach(slot, [{"text": "Use"}, {"text": "Drop", "danger": true}])
GoCoachMark

실제 컨트롤을 가리키는 안내 투어.
바탕 Control
var tour := GoCoachMark.new()
add_child(tour)
tour.start([{"target": bag_button, "title": "Bag", "body": "Your items live here."}])
GoConsole

명령과 기록이 있는 개발자 콘솔 — 출시 빌드에서는 꺼진다.
바탕 CanvasLayer
var console := GoConsole.new()
add_child(console)
console.register("give", "Grant an item", give_item)
GoRibbonHeader
카드 위쪽 가장자리에 걸치는 화면 제목 리본 — 글리프와 룩의 모서리 그림이 함께한다.
바탕 Control
var header := GoRibbonHeader.make("PAUSED", GoIconSet.PAUSE)
card_column.add_child(header)
GoFitBox
카드를 통째로 화면 안에 둔다 — 너무 크면 리본까지 함께 줄이고, 긴 목록은 대신 스크롤된다.
바탕 Container
var fit := GoFitBox.new()
fit.add_child(card)
알림과 기다림 (12)
GoSnackbar

아래에 뜨는 알림 — 줄을 서고 버튼도 달 수 있다.
바탕 Node
var snack := GoSnackbar.new()
add_child(snack)
if await snack.post({"text": "Item dropped", "actions": ["Undo"]}) == 0:
restore_item()
GoNotice

입력도 초점도 가져가지 않는 알림.
바탕 PanelContainer
var notice := GoNotice.new()
hud.add_child(notice)
notice.show_text("Saved", GoTheme.SUCCESS)
GoPromptCard

게임을 멈추지 않는 질문 — 초대, 거래.
바탕 PanelContainer
var invite := GoPromptCard.new()
invite.set_title("Party invite from Ann")
invite.set_actions([{"text": "Accept", "action": accept, "primary": true}])
GoBanner

처리할 때까지 페이지에 남는 알림.
바탕 PanelContainer
var offline := GoBanner.make("You're offline.", [{"text": "Retry", "action": reconnect}], GoIconSet.WARNING)
page.add_child(offline)
GoSpinner

기다림 표시 — 버튼을 그 자리에서 스피너로 바꿔 두 번 눌리지 않게 한다.
바탕 Control
GoSpinner.busy(buy_button, true)
await shop.buy(item)
GoSpinner.busy(buy_button, false)
GoBadge

안 읽음 점, NEW 표시, 99+ — 모서리에 건다.
바탕 PanelContainer
GoBadge.attach(mail_button, unread)
GoBadge.attach(shop_button, 0, "NEW")
GoProgress

선이나 고리로 보이는 진행 — 물결 또는 평평, 크기를 모르면 무한.
바탕 Control
var upload := GoProgress.linear()
upload.value = 0.4
var ring := GoProgress.circular(true)
GoLoadingIndicator

모양이 바뀌는 Material 3 Expressive 기다림 표시 — reduce_motion 이면 멈춘다.
바탕 Control
var wait := GoLoadingIndicator.new()
wait.contained = true
page.add_child(wait)
GoRefresh

목록 맨 위에서 아래로 당겨 새로 고친다.
바탕 Control
var refresh := GoRefresh.attach(feed)
refresh.refresh_requested.connect(func() -> void:
await reload_posts()
refresh.finish())
GoStyle.alert

정보·성공·주의·위험 톤의 본문 속 알림.
소속 GoStyle
page.add_child(GoStyle.alert("Maintenance at 3 AM", GoTheme.WARNING))
GoStyle.skeleton · empty_state

불러오는 동안의 자리 표시, 그리고 빈 목록 안내.
소속 GoStyle
page.add_child(GoStyle.skeleton(200))
page.add_child(GoStyle.empty_state(GoIconSet.BOX, "No items yet", false))
GoStyle.tooltip_node

테마 모양의 툴팁 — 단어를 쪼개지 않는다.
소속 GoStyle
func _make_custom_tooltip(text: String) -> Object:
return GoStyle.tooltip_node(text)
입력과 선택기 (14)
GoStyle.line_edit · textarea

한 줄, 여러 줄 글 입력칸.
소속 GoStyle
var nickname := GoStyle.line_edit("Your name")
var note := GoStyle.textarea("Message", 4)
GoField

라벨·컨트롤·힌트 — 틀린 칸 아래에 오류를 단다.
바탕 VBoxContainer
var field := GoField.make("Nickname", GoStyle.line_edit(), "3–12 letters", false)
field.set_error("That name is taken")
GoInputGroup

입력칸과 그 버튼을 한 모양으로 붙인다.
바탕 HBoxContainer
var chat := GoInputGroup.make(GoStyle.line_edit("Message"), {"suffix": GoStyle.button("Send", send)})
GoCombobox

이름 처음만이 아니라 안쪽까지 찾는 선택기.
바탕 Button
var friend := GoCombobox.make(friends, -1, "Find a friend")
friend.picked.connect(invite)
GoCodeInput

칸으로 보이는 쿠폰·선물 코드 — 붙여 넣기와 IME 입력이 그대로 된다.
바탕 VBoxContainer
var coupon := GoCodeInput.make(12, 4)
coupon.completed.connect(redeem)
GoStyle.select · dropdown

펼침 목록, 그리고 메뉴를 여는 버튼.
소속 GoStyle
var quality := GoStyle.select(["Low", "Medium", "High"])
var sort := GoStyle.dropdown("Sort", ["Newest", "Price"], sort_by)
GoStyle.slider

테마 모양의 슬라이더.
소속 GoStyle
var volume := GoStyle.slider(0.0, 1.0, 0.05)
volume.value_changed.connect(set_volume)
GoRangeSlider

서로 넘지 않는 손잡이 두 개 — 가격·레벨 범위.
바탕 Control
var price := GoRangeSlider.make(0.0, 500.0, 40.0, 220.0, 10.0)
price.change_ended.connect(func(low: float, high: float) -> void: refilter(low, high))
GoSlider
칠한 모양의 슬라이더 — 채움이 손잡이보다 조금 더 나가고, 누른 손잡이는 커진다.
바탕 HSlider
var music := GoSlider.make(0.0, 1.0, 0.01)
music.theme_type_variation = &"GoSliderGreen"
GoSwitch
칠한 모양의 켜기/끄기 스위치 — 손잡이 옆에 ON / OFF 글자가 들어간다.
바탕 CheckButton
var vibration := GoSwitch.make(true)
vibration.set_texts(tr("ON"), tr("OFF"))
GoDatePicker

눌러 고르는 한 달 — range_mode 로 기간도.
바탕 Container
var stay := GoDatePicker.make()
stay.range_mode = true
stay.range_picked.connect(func(start: Dictionary, end: Dictionary) -> void: book(start, end))
GoTimePicker

시계 다이얼 — 시 다음 분, 12·24시간, 칸에서 위·아래 키.
바탕 Container
var alarm := GoTimePicker.make(7, 30, func(hour: int, minute: int) -> void: set_alarm(hour, minute))
alarm.use_24h = true
GoWheelPicker

돌다가 띠 위에 항목 하나를 세우는 휠.
바탕 Control
var amount := GoWheelPicker.make(["x1", "x5", "x10", "x50"], 0, set_amount)
row.add_child(amount)
GoStepper

다음·이전이 있는 번호 단계 — 세로로, 또는 한 줄로.
바탕 VBoxContainer
var checkout := GoStepper.make([{"title": "Cart", "content": cart}, {"title": "Pay", "content": pay}])
checkout.finished.connect(place_order)
목록·카드·데이터 (8)
GoStyle.list_row · list_button

아이콘·제목·요약·끝 표시가 있는 목록 줄.
소속 GoStyle
page.add_child(GoStyle.list_button(GoIconSet.SETTINGS, "Settings", open_settings, Color.TRANSPARENT, "", false))
GoListView

수천 줄 — 보이는 줄만 만든다.
바탕 GoScroll
var feed := GoListView.make(10000, 72.0, func(index: int) -> Control: return post_row(posts[index]))
feed.end_reached.connect(load_more)
GoReorderList

손잡이나 길게 누르기로 끌어 순서를 바꾸는 줄.
바탕 Container
var queue := GoReorderList.make([intro_row, theme_row, boss_row])
queue.reordered.connect(func(from: int, to: int) -> void: songs.insert(to, songs.pop_at(from)))
GoSwipeRow

옆으로 밀어 지우거나 보관하는 줄 — 목록 스크롤은 그대로.
바탕 Container
inbox.add_child(GoSwipeRow.wrap(mail_row, {"icon": GoIconSet.TRASH, "text": "Delete",
"tone": GoTheme.DANGER, "action": delete_mail}))
GoTable

정렬되는 머리와 고를 수 있는 줄 — 숫자는 숫자로 정렬.
바탕 VBoxContainer
var board := GoTable.make(["Name", {"text": "Score", "numeric": true}], [["Ann", 9124], ["Ben", 91240]])
board.row_selected.connect(open_profile)
GoStyle.card · item_card

카드, 그리고 고른 아이템의 상세 카드.
소속 GoStyle
var card := GoStyle.card()
card.add_child(GoStyle.label("Daily quest"))
popup.add_child(GoStyle.item_card({"title": "Rusty sword", "subtitle": "Common"}))
GoStyle.avatar

원 안의 이니셜이나 사진.
소속 GoStyle
row.add_child(GoStyle.avatar("AK", 40))
GoStyle.label

마이크로부터 제목까지 일곱 가지 글자 역할 중 하나로.
소속 GoStyle
page.add_child(GoStyle.label("Level 12", GoTheme.ROLE_TITLE))
page.add_child(GoStyle.label("Next level in 340 XP", GoTheme.ROLE_CAPTION, GoUi.color(GoTheme.MUTED)))
HUD 와 게임 모양 (30)
GoBar

값·분수·퍼센트를 보여 주는 HP·MP·XP 막대.
바탕 Control
var hp := GoBar.new()
hp.label_text = "HP"
hp.set_values(320, 500)
GoSlot

퀵슬롯 — 아이콘·수량·쿨다운·단축키를 한 면에.
바탕 Button
var potion := GoSlot.new()
potion.icon_name = GoIconSet.POTION
potion.quantity = 12
potion.start_cooldown(5.0)
GoSlotGrid

인벤토리 격자 — 칸 사이로 아이템을 끌어 옮길 수 있다.
바탕 HFlowContainer
var bag := GoSlotGrid.new()
bag.set_cell(0, {"icon": GoIconSet.POTION, "quantity": 12})
GoJoystick

가상 스틱 — 고정, 엄지 따라가기, 상대.
바탕 Control
var pad := GoJoystick.new()
pad.mode = GoJoystick.Mode.FOLLOW
pad.moved.connect(func(direction: Vector2) -> void: player.move(direction))
GoKbd

실제 키 설정을 읽는 키캡 — 키를 바꿔도 안내가 거짓이 되지 않는다.
바탕 HBoxContainer
hint.add_child(GoKbd.for_action(&"interact"))
GoChoiceColumn

한 번 눌러 고르는 짧은 세로 목록 — 소환 목록. 게임이 여러 칸을 표시할 수 있다.
바탕 Control
var animals := GoChoiceColumn.make(["Hen", "Cat", "Dog", "Pig", "Cow"], 4, summon)
animals.set_selected(2, true)
side_bar.add_center(animals)
GoLevelCard
스테이지 선택 카드 — 썸네일·제목·부제, 상태에 따라 체크·자물쇠·PLAY! 태그.
바탕 Button
var card := GoLevelCard.make("STAGE 3", "OPPONENTS: 3", GoLevelCard.State.CURRENT)
card.pressed.connect(play_stage)
GoStarRow
별점 줄 — 몇 개는 금색으로 켜고 나머지는 흐리게. 레벨의 최고 클리어나 결과 화면의 등급.
바탕 HBoxContainer
var rating := GoStarRow.make(2)
rating.star_size = 40.0
GoKeyCluster
역 T 모양의 이동 키 네 개 — WASD 또는 방향키 — 조작 안내 화면처럼.
바탕 Control
var wasd := GoKeyCluster.make(["W", "A", "S", "D"])
var arrows := GoKeyCluster.make(GoKeyCluster.ARROWS)
GoCoverImage
상자를 가득 채우고 넘치는 부분은 잘라 내는 그림 — CSS object-fit: cover.
바탕 Control
var shot := GoCoverImage.make(preload("res://art/level_3.png"), Vector2(0.5, 0.3))
shot.custom_minimum_size = Vector2(74, 74)
GoHudCard
경기 HUD 윗줄의 판 하나 — 아이콘과 배너·막대, 숫자, 시계, 또는 준비 게이지.
바탕 PanelContainer
var clock := GoHudCard.make(GoUi.skin().widget_art(&"stopwatch"))
clock.title = "MATCH TIME"
clock.set_clock(83.0)
GoCountdown
경기 시작 카운트 — 3, 2, 1, GO! 를 원판 위에 크게, 단계마다 톡 튀어 나온다.
바탕 Label
var count := GoCountdown.new()
count.show_step("3")
GoHudButton
HUD 모서리 버튼 — 그림 버튼 옆에 같은 일을 하는 키를 키캡으로 보인다.
바탕 HBoxContainer
var pause := GoHudButton.make(GoUi.skin().widget_art(&"pause_button"), 52.0, "Esc")
pause.pressed.connect(func() -> void: print("pause"))
GoNameplate
3D 세계의 캐릭터 위에 뜨는 이름표 — 거리와 상관없이 화면에서 같은 크기다.
바탕 PanelContainer
var plate := GoNameplate.make("BOT RED", Color(0.86, 0.24, 0.24))
plate.follow(camera, anchor.global_position)
GoNoticeFeed
킬 피드처럼 한 줄 알림이 쌓이고, 서서히 나타났다가 저절로 사라지는 피드.
바탕 VBoxContainer
var feed := GoNoticeFeed.new()
feed.push("RED knocked out BLUE")
feed.push("YOU knocked out GREEN", true)
GoTouchButton
쿨다운 고리, 준비 효과, 끌어서 조준을 갖춘 터치 화면용 둥근 엄지 버튼.
바탕 Control
var jump := GoTouchButton.make(&"btn_jump", "JUMP", 86.0)
jump.pressed_down.connect(send_jump)
var skill := GoTouchButton.make(&"btn_repulse", "REPULSE", 92.0)
skill.cooling = true
skill.cooldown = 0.4
GoSpotlight
컨트롤 하나 둘레의 화면을 어둡게 하고 테두리를 두른다. 어둠은 사라지고 테두리는 남는다.
바탕 Control
var spot := GoSpotlight.new()
hud.add_child(spot)
spot.follow(jump_button, true)
GoEditFrame
레이아웃 편집기가 플레이어가 옮길 수 있는 것마다 두르는 테두리: 기본, 핸들이 달린 선택, 경고, 숨김. 입력을 받지 않는다.
바탕 Control
var frame := GoEditFrame.new()
editor.add_child(frame)
frame.circle = true
frame.state = GoEditFrame.State.SELECTED
GoGestureHint
반투명한 손가락 끝이 터치 제스처를 반복해서 보여 준다 — 두 손가락이 벌어졌다 다시 오므라들며 핀치 줌을 가르친다. 입력을 받지 않는다.
바탕 Control
var hint := GoGestureHint.new()
hud.add_child(hint)
hint.position = Vector2(480, 0)
hint.size = Vector2(480, 540)
hint.play()
GoTaskCard
튜토리얼 과제 카드 — 단계, 제목, 할 일, 끝나면 체크되는 칩과 힌트. 한 줄로 접힌다.
바탕 PanelContainer
var card := GoTaskCard.new()
card.caption = "TRAINING · STEP 1/12"
card.title = "MOVE"
card.body = "Move with W A S D."
card.set_parts(["W", "A", "S", "D"], [true])
GoPerfReadout
항상 켜 두는 성능 띠 — fps, 프레임 시간, 삼각형, 드로 콜, 노드, 메모리. fps가 떨어지면 빨개진다.
바탕 PanelContainer
var perf := GoPerfReadout.new()
perf.tier_text = "LOW (auto)"
overlay_layer.add_child(perf)
GoSignalBars
휴대폰 같은 신호 막대 — 왼쪽에서 오른쪽으로 높아지는 막대를 초록·금색·빨강으로 켜고 옆에 "48 ms" 같은 수치를. 매치 HUD의 핑.
바탕 PanelContainer
var ping := GoSignalBars.make(4, GoSignalBars.Tone.GOOD)
ping.set_reading(2, GoSignalBars.Tone.FAIR, "180 ms")
GoRewardRow
진행으로 얻는 것을 보여 주는 줄 — 막대와 보상이 있는 퀘스트·업적, 상태에 따라 받기 버튼, 체크, 자물쇠. GoListView 에 맞는 고정 높이.
바탕 PanelContainer
var quest := GoRewardRow.make("Win 3 matches", GoIconSet.STAR)
quest.key = "win_3"
quest.set_progress(1, 3)
quest.set_reward(50, GoIconSet.COIN)
quest.set_claim_text("CLAIM")
quest.set_state(GoRewardRow.State.READY)
quest.claim_pressed.connect(func(id: Variant) -> void: server.claim(id))
GoFoldTab
HUD 패널을 작은 알약으로 접었다 펴는 탭 — 갈매기 표시가 있는 가는 손잡이, 접히면 글리프·짧은 글자·게이지를 간직한 알약. 호스트는 fold_changed 에서 HUD 를 다시 배치한다.
바탕 Button
var tab := GoFoldTab.new()
tab.side = SIDE_LEFT
tab.icon_name = GoIconSet.USERS
tab.pill_text = "3"
tab.fold_changed.connect(func(now_folded: bool) -> void: party.visible = not now_folded)
GoMapPreview
레벨의 작은 지도 — 구역·다리·시작 점을 그리고, 잠기면 회색 실루엣이 된다.
바탕 Control
var map := GoMapPreview.new()
map.add_rect(Vector2(0, 0), Vector2(6, 4), Color("#f2b84b"))
map.add_circle(Vector2(18, 0), 5.0, Color("#6fc3ff"))
map.add_link(Vector2(0, 0), Vector2(18, 0), 2.0, Color("#c9a26b"))
map.set_starts(PackedVector2Array([Vector2(-3, 0), Vector2(20, 0)]))
GoRewardCalendar

매일 출석 보상 — 오늘 칸만 누를 수 있다.
바탕 VBoxContainer
var attendance := GoRewardCalendar.make(days, claimed_until)
attendance.claimed.connect(func(day: int) -> void: server.claim_day(day))
GoRadar

능력치 오각형 — 장비 비교는 점선으로.
바탕 Control
var stats := GoRadar.make({"STR": 0.85, "AGI": 0.5, "INT": 0.3, "VIT": 0.7, "LUK": 0.45})
stats.set_compare(with_new_sword)
GoDonut

몫을 조각으로 — 범례는 색만이 아니라 말로도.
바탕 Control
var share := GoDonut.make([{"label": "Physical", "value": 620}, {"label": "Magic", "value": 340}])
card.add_child(share.legend())
GoZoomView

지도를 두 손가락·휠·두 번 탭으로 확대 — 가장자리 안에서 이동.
바탕 Control
var map := GoZoomView.wrap(world_map, 4.0)
map.custom_minimum_size.y = 320
page.add_child(map)
GoStyle.hud_panel · overlay_panel

게임 위에 뜨는 판 — 어떤 그림 위에서도 글자가 읽힌다.
소속 GoStyle
var bars := GoStyle.hud_panel()
var pill := GoStyle.overlay_panel()
모양과 시스템 (9)
GoUi · GoThemePresets

프리셋(기본·SF·중세·Material·어린이·코믹·아케이드) 중 하나를 고르고, 색과 크기는 토큰에서 읽는다.
바탕 RefCounted
GoUi.use_preset(GoThemePresets.MATERIAL_LIGHT)
var accent := GoUi.color(GoTheme.ACCENT)
var gap := GoUi.metric(GoTheme.GAP)
GoConfig
모든 설정을 담는 리소스 하나 — 애드온을 업데이트해도 남는다.
바탕 Resource
GoUi.config.reduce_motion = true
GoUi.config.container_alpha = 1.0
GoUi.refresh()
GoSkin

코드가 그리는 모양 — 칩·슬롯·조이스틱·새 부품 — 을 내 방식으로.
바탕 Resource
class_name MySkin
extends GoSkin
func banner_box() -> StyleBox:
return surface_box(GoTheme.BOX_CARD)
GoIconSet · GoGameIcons

이름으로 부르는 아이콘 — 기본 세트, 게임 아이콘 187개, 또는 내 SVG.
바탕 Resource · RefCounted
GoUi.config.icons = GoGameIcons.icon_set()
var gear := GoUi.icons().node(GoIconSet.SETTINGS, 24)
GoStyleBoxCut · GoStyleBoxBracket · GoStyleBoxMedieval

내 판에 쓰는 모서리 깎인·괄호·단조 면.
바탕 StyleBox
var face := GoStyleBoxCut.new()
face.cut = 8
panel.add_theme_stylebox_override(&"panel", face)
GoStyleBoxSprite · GoTextureSprite
PNG 를 9슬라이스로 그리는 페인티드 박스와, 슬라이더 손잡이·스위치용 아이콘 짝.
바탕 StyleBox
var plate := GoStyleBoxSprite.new()
plate.texture = preload("res://ui/painted/gloss_green.png")
plate.pixels_per_unit = 3.0
button.add_theme_stylebox_override(&"normal", plate)
GoSafeArea · GoScale
노치·제스처 바·키보드를 피한 영역, 그리고 dp 기준 구간.
바탕 Control · RefCounted
var usable := GoSafeArea.usable_rect(get_viewport())
var size_class := GoScale.breakpoint_for_dp(minf(usable.size.x, usable.size.y)) # by the short side
GoFeedback
소리 신호와 진동을 내 오디오로 보낸다 — gohud 는 소리를 싣지 않는다.
바탕 RefCounted
GoFeedback.sound_handler = func(cue: String) -> void: audio.play_cue(cue)
GoFeedback.haptic_handler = func(ms: int, amplitude: float) -> void: Input.vibrate_handheld(ms, amplitude)
GoBackPolicy
지금 안드로이드 뒤로·Esc 를 누가 갖는지 — 창들 사이에 나눠 쓴다.
바탕 RefCounted
GoBackPolicy.acquire(get_tree())





















