見慣れたウェブの形を、ゲームがそこに求めるものを軸に作り直したものだ。
GoRewardCalendar — 毎日のログインボーナス
日付ピッカーがゲームで役に立つことは、ほとんどない。カレンダーの形は役に立つ — ログインボーナスだ。 そこで問題になるのは何日目かであって、何月何日かではない。
var attendance := GoRewardCalendar.make(days, claimed_until)
attendance.claimed.connect(func(day: int) -> void: server.claim_day(day))
押せるのは今日のマスだけだ — 押しても何も起きないボタンは、壊れていると読まれる。受け取り済み・今日・ これからの3つは、同時に3つの違いで見分けられる。チェックの記号、強調色の枠、そして暗さだ。
GoRadar と GoDonut — ひと目で分かるステータス
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) # 破線の重ね描き
var share := GoDonut.make([{"label": "物理", "value": 620}, {"label": "魔法", "value": 340}])
card.add_child(share.legend())
レーダーの値が 0〜1 なのは、どこを満点とするかがゲームの決めることだからだ — 素の STR 120 を INT 45 の 隣に置けば、嘘の形が描かれる。ドーナツの値は素のままでよく、割り算はこちらでやる。5つを超えた分はまとめ られる。6枚目の扇形は、誰にも読めない糸になるからだ。比較の線は色違いではなく破線で、凡例には 割合が文字で出る。
GoCarousel — バナーとキャラクター選択
banners.set_pages([promo, event, pack])
banners.autoplay_seconds = 5.0 # 既定では動かない
頼まない限り自分では進まないし、5秒が下限だ。3秒ごとに変わるバナーは、読み終える前に文字を持ち去る。
触れるとタイマーは戻り、reduce_motion にすれば自分から進むことは一切ない。点は小さく描かれる
が、押せる範囲はタッチの最小寸法を保つ。
GoKbd — 嘘をつかないキー表示
hint.add_child(GoKbd.for_action(&"interact")) # 実際の割り当てを読む
直接書き込んだ「F を押す」は、プレイヤーが割り当てを変えたあとも F と言い続ける — PC の UI でいちばん
よくある嘘だ。for_action() は InputMap を読む。その操作がパッドに割り当てられて
いれば空を返してウィジェットは隠れる。「なし」もまた1つの嘘だからだ。Android と iOS では自分から隠れる。