アイテムの取得を実装
loot = 戦利品、略奪品
取得したアイテムを管理する方法は色々あるが、
GodotはNodeシステムを採用しているので、オブジェクト指向的な考えで実装してみる
アイテムのArea2Dに接触する
アイテムをマップから消す
Playerノードの子要素に、取得したItemのNodeを追加する
実際は、Dictionay変数で保持してもいい
Script
code: player.py
# BriefCase
func collect_briefcase():
var loot = Node.new()
loot.name = "briefcase"
self.add_child(loot)
Node.name : setter/getter。Nodeの名前のプロパティ(SceneTreeで表示される)
briefcaseを取得(Playerの子ノード)した状態で、ExitのArea2Dに入ったら
ステージクリアする。
code: Exit.py
extends ColorRect
func _on_Area2D_body_entered(body):
if body.has_node("briefcase"):
print("win")
Node.has_name("path") : そのノード以下の相対パスを指定して、ノードを持っているか(bool)
/とか./は付けなくてもいい(相対パス)
bodyにPlayerを取得できるよう、
Layer & Maskを調整しとく
取得したLootを表示するGUI
https://gyazo.com/ac74d401a23fb828879241c9070dfe0d
ゲーム開始時は非表示にして、取得したら表示する
code: LootContainer.py
extends NinePatchRect
onready var loot_texture = preload("res://Heist-Meisters-Assets/GFX/Loot/suitcase.png")
func _ready():
self.visible = false
func collect_loot():
visible = true
$VBoxContainer/LootList.add_icon_item(loot_texture, false)
groupに登録して、Player側からGroup通信で呼び出す
code: Player.py
# BriefCase
func collect_briefcase():
var loot = Node.new()
loot.name = "briefcase"
self.add_child(loot)
get_tree().call_group("LootContainer", "collect_loot")