gohud

아이콘

이름으로 부르는 그림 1,287개 — 늘 있는 84개, 게임용 187개, 라이브러리의 1,000개. 아래에서 찾아 이름을 복사하면 gohud 의 어떤 위젯이든 그 아이콘을 그린다.

아이콘은 이름으로 부른다

위젯은 그림을 들고 있지 않다. 이름만 묻고, 무엇을 그릴지는 지금 쓰는 아이콘 세트가 정한다 — 세트를 바꾸면 코드 한 줄 고치지 않고 모든 아이콘이 바뀐다.

GoStyle.icon_button(GoIconSet.SETTINGS, open_settings)   # a button
slot.icon_name = GoGameIcons.BACKPACK                     # a quick slot
var mark := GoUi.icons().node(&"cloud_rain", 24)          # a bare Control, any size

GoUi.icons() 가 지금 쓰는 세트다. 그리지 못하는 이름은 자리를 지키는 빈 상자가 되고, 디버그 빌드에서는 경고가 뜬다. 아이콘 하나가 없어도 줄이 밀리지 않는다.

아이콘 찾기

gohud 에 든 그림 전부. 이름이나 모양으로 검색하고, 세트나 묶음으로 좁힌 뒤, 아이콘을 골라 이름을 복사한다.

이름과 검색어는 어느 언어에서나 영어 그대로다 — 코드에 치는 글자이기 때문이다.

세트 넷, 찾는 길 하나

어느 세트든 같은 호출에 답한다. 큰 세트는 지금 쓰는 세트 위에 더해 쓴다.

세트이름상수켜는 법
기본84GoIconSet늘 켜져 있다
중세각인 16개—GoUi.use_preset(GoThemePresets.MEDIEVAL_DARK)
게임187GoGameIconsGoUi.add_icons(GoGameIcons.icon_set())
라이브러리1,000GoIconLibraryGoUi.add_icons(GoIconLibrary.icon_set())
GoUi.add_icons(GoIconLibrary.icon_set())   # the library — and the game set under it
GoUi.add_icons(GoGameIcons.icon_set())     # or the game set alone

라이브러리는 게임 세트로, 게임 세트는 기본 세트로 넘어가므로 한 줄이면 이름 1,271개를 그릴 수 있다. 세트는 그림을 경로로 들고 있다가 그 이름을 처음 그릴 때 파일을 읽는다 — 라이브러리를 더하면 텍스처 1,000장이 아니라 경로 표 하나를 읽는다(데스크톱에서 약 30 ms).

경로는 문자열이지 의존성이 아니다. 리소스를 골라 내보내는 export 는 addons/gohud/icons/ 를 넣어야 한다. 기본값인 “모든 리소스 내보내기”는 따로 할 것이 없다.

이름을 찾는 순서

모든 세트가 같은 순서를 따른다. 그래서 어느 그림이 이기는지 미리 알 수 있다.

  1. 모든 세트의 자기 그림이 먼저다 — 지금 쓰는 세트, 그다음 더한 세트들, 그다음 그 세트들의 fallback 을 한 단씩 본다. 세트의 자기 그림이란 텍스처·경로·아이콘 폰트 글리프다.
  2. 아무도 그리지 못하면 별칭을 본다: gear 는 settings 로, x 는 close 로. 한 번만 건너간다.
  3. 그래도 없으면 자리를 지키는 빈 상자.

중세 프리셋에 라이브러리를 더해도 각인된 칼이 그대로 남는 까닭이 이 순서다 — 중세 세트의 자기 그림이 누구의 fallback 보다 먼저 찾아진다.

GoUi.use_preset(GoThemePresets.MEDIEVAL_DARK)
GoUi.add_icons(GoIconLibrary.icon_set())

GoUi.icons().texture(&"sword")      # the medieval engraving — its own drawing comes first
GoUi.icons().texture(&"rocket")     # from the game set
GoUi.icons().canonical(&"gear")     # &"settings" — an alias

프리셋, 내 세트, 더한 세트

무엇을 그릴지는 세 곳이 정한다.

호출하는 일
GoUi.use_preset(…)테마·스킨·아이콘 세트를 한 번에 바꾼다. config.icons 는 비우고 config.extra_icons 는 남긴다.
GoUi.config.icons = my_set프리셋의 아이콘 세트를 내 세트로 바꾼다.
GoUi.add_icons(set)지금 쓰는 세트 다음에 볼 세트를 더한다. 프리셋을 바꿔도 남는다.

내 그림 넣기

이름 몇 개만 덮어쓰거나, 폴더 하나를 통째로 더하거나, 아이콘 폰트를 꽂는다 — 부르는 코드는 그대로다.

# Override a few names — everything else still comes from the set in use
var mine := GoIconSet.new()
mine.fallback = GoUi.icons()
mine.textures = {GoIconSet.CLOSE: preload("res://art/close.svg")}
GoUi.config.icons = mine

# A folder of drawings — file name = icon name, each read when first drawn
GoUi.config.icons = GoIconSet.from_folder("res://art/icons", GoUi.icons())

이름·묶음·검색

함께 든 세트가 따르는 규칙과, 이름을 찾는 호출.

var icons := GoUi.icons()
icons.search("arrow left", 5)       # best matches first: back, arrow_bar_left …
icons.search("rain")                # cloud_rain, then drawings tagged "rain"

group_names() · names_in_group()

icons.group_names()                 # every group key, in lookup order
icons.names_in_group(&"weather")    # one group, in display order — every set's share of it
icons.group_title(&"weather")       # "Weather & sky"

canonical() · has_icon()

icons.canonical(&"gear")            # &"settings"
icons.canonical(&"treasure_chest")  # &"chest" — Tabler's name for a game drawing
icons.has_icon(&"cloud_rain")       # true once the library is added — nothing is loaded to answer

그림의 출처

전부 MIT 다. 고지는 THIRD_PARTY_NOTICES.md 로 ZIP 에 함께 들어간다.

세트출처라이선스
기본gohud 를 위해 그림MIT
중세gohud 를 위해 그림MIT
게임171개는 Tabler Icons 3.46.0, 16개는 gohud 를 위해 그림MIT
라이브러리Tabler Icons 3.46.0MIT

다른 사람의 아이콘을 꽂으면 그 출처를 GoIconSet.attribution 에 적는다 — 그리고 상용 아이콘 폰트는 공개하는 포크가 아니라 내 게임 안에만 둔다.