場所、Conputer、LockedDoorにLabelをつける
部屋
パスコードを共有するComputer, LockedDoorのペア
にLabelで文字を振っておくとユーザビリティが高まる
やり方
普通に、Label をNode2Dの子供にする
CanvasLayerの子要素でないControlは、親のNode2Dの相対座標になる。
Computer, LockedDoor のラベル同期
combination_gen シグナルでパスコードを渡すとき、ついでに
combination_group: String で渡す
code: com.py
export var combination_group = "Unset"
signal combination_gen
func _ready():
...
emit_signal("combination_gen", combination, combination_group)
code: lockdoor.py
func _on_Computer_combination_gen(numbers, combination_group):
$CanvasLayer/NumberPad.set_combination(numbers)
$Label.text = combination_group
Darkvision Mode のときにラベルを隠す
1. 隠したり表示したりするLabelを全て Labels group に登録
テンプレートの方のSceneでやれば一括
2. VisualMode ノードのスクリプトで、Visionモードを切り替えするときに、get_tree().call_group()
Labelには、visible プロパティを操作するメソッドが実装されている
hide()
show()
code: VisualMode.py
func _ready():
...
get_tree().call_group("Labels", "hide")
func cycle_vision_mode():
if color == NIGHTVISION:
...
get_tree().call_group("Labels", "hide")
elif not is_cooling:
...
get_tree().call_group("Labels", "show")
Map Labels
こちらは細かい仕掛けなし
LevelsScene に、MapLabelをまとめる empty Nodeを作成してまとめるだけ。
Labelsgroupに登録するのを忘れない
まとめ
Node2D + Label
Control ノードを Node2Dの子にすると、シーンに普通に表示される
CanvasLayer (位置情報を持たない) の子にすると、シーンツリーのどこにいても前面に表示(GUI)
VisionMode とともに、Group通信でshow/hide