xiandie/ui/hud/inventory.gd

113 lines
3.3 KiB
GDScript3
Raw Normal View History

2024-12-23 01:29:31 +00:00
#背包实现
extends VBoxContainer
var _hand_outro: Tween
var _label_outro: Tween
#@onready var item_bar = $ItemBar
@onready var prev = $ItemBar/Prev
@onready var prop = $ItemBar/Use/Prop
@onready var hand = $ItemBar/Use/Hand
@onready var next = $ItemBar/Next
@onready var label = $Label
@onready var timer = $Label/Timer
func _ready() -> void:
#SceneManager.inventory.add_item(preload("res://items/1014_yaoshi.tres"))
#SceneManager.inventory.add_item(preload("res://items/3014_yaoshi.tres"))
hand.hide()
hand.modulate.a = 0.0
label.hide()
label.modulate.a = 0.0
SceneManager.inventory.changed.connect(_update_ui)
_update_ui(true)
#设置在屏幕中点击任意位置,互动手图案消失
func _input(event: InputEvent) -> void:
if event.is_action_pressed("click") and SceneManager.inventory.active_item:
SceneManager.inventory.set_deferred("active_item", true)
_hand_outro = create_tween()
_hand_outro.set_ease(Tween.EASE_IN_OUT).set_trans(Tween.TRANS_SINE).set_parallel()
_hand_outro.tween_property(hand, "scale", Vector2.ONE * 0.5, 0.15) #Vector2.ONE * 0.5 设置手缩放的大小.0.15表示消失的速度
_hand_outro.tween_property(hand, "modulate:a", 0.0, 0.15)
_hand_outro.chain().tween_callback(hand.hide)
func _update_ui(is_init = false): #is_inte = false 让背包物品在最开始出现时没有动画效果
var count = SceneManager.inventory.get_item_count()
prev.disabled = count < 2
next.disabled = count < 2
visible = count > 0
var item = SceneManager.inventory.get_current_item()
if not item:
return
else:
label.text = item.description
prop.texture = item.prop_texture
#item_bar.modulate.a = 1
#print("prop")
#添加背包物品在左右滑动时的弹出动画效果
if is_init:
return
var tween := create_tween()
tween.set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_BACK)
tween.tween_property(prop, "scale", Vector2.ONE, 0.15).from(Vector2.ZERO)
_show_label()
func _show_label() -> void:
if _label_outro and _label_outro.is_valid():
_label_outro.kill()
_label_outro = null
label.show()
var tween = create_tween()
tween.set_ease(Tween.EASE_IN_OUT).set_trans(Tween.TRANS_SINE)
tween.tween_property(label,"modulate:a",1.0,0.2)
tween.tween_callback(timer.start)
func _on_prev_pressed() -> void:
SoundManager.play_sfx("interact")
SceneManager.inventory.select_prev()
print("prev1")
func _on_next_pressed() -> void:
SoundManager.play_sfx("interact")
SceneManager.inventory.select_next()
print("next2")
@onready var use = $ItemBar/Use
func _on_use_pressed() -> void:
if use.button_mask == MOUSE_BUTTON_MASK_LEFT:
SceneManager.inventory.active_item = SceneManager.inventory.get_current_item()
print("use3")
if _hand_outro and _hand_outro.is_valid():
_hand_outro.kill()
_hand_outro = null
hand.show()
var tween = create_tween()
tween.set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_BACK).set_parallel()
tween.tween_property(hand, "scale", Vector2.ONE, 0.15).from(Vector2.ZERO)
tween.tween_property(hand, "modulate:a", 1.0, 0.15)
_show_label()
func _on_timer_timeout():
_label_outro = create_tween()
_label_outro.set_ease(Tween.EASE_IN_OUT).set_trans(Tween.TRANS_SINE)
_label_outro.tween_property(label,"modulate:a",0.0,0.2)
_label_outro.chain().tween_callback(label.hide)