113 lines
3.3 KiB
GDScript
Executable File
113 lines
3.3 KiB
GDScript
Executable File
#背包实现
|
|
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)
|