@tool class_name PropInspector extends CanvasLayer enum { STATUS_HIDDEN, STATUS_INSPECTING_COVER, STATUS_INSPECTING_NOTES } # must be connected to signal quit @onready var texture_rect = %TextureRect as TextureRect @onready var content_label = %ContentLabel as Label @onready var tip_label = %TipLabel as Label var tip_cover = "Q: 退出 E: 阅读" var tip_notes = "Q: 退出 E: 收起" var texture_cover: Texture2D var texture_notes: Texture2D var status := STATUS_HIDDEN var blinking_tween : Tween # Called when the node enters the scene tree for the first time. func _ready() -> void: layer = GlobalConfig.CANVAS_LAYER_PROP_INSPECTOR texture_rect.modulate.a = 0.0 content_label.modulate.a = 0.0 tip_label.modulate.a = 0.0 tip_label.text = tip_cover func _hide(): status = STATUS_HIDDEN var tween = create_tween() tween.tween_property(texture_rect, "modulate:a", 0.0, 0.3) tween.parallel().tween_property(content_label, "modulate:a", 0.0, 0.15) if blinking_tween and blinking_tween.is_running(): blinking_tween.stop() tween.parallel().tween_property(tip_label, "modulate:a", 0.0, 0.15) tween.tween_callback(_post_hide) var player = SceneManager.get_player() if player: player.release_player() func _post_hide(): texture_rect.texture = null texture_cover = null texture_notes = null content_label.text = "" tip_label.text = tip_cover func _blink_label(init := true): if status == STATUS_HIDDEN: return blinking_tween = create_tween() if init: blinking_tween.tween_property(tip_label, "modulate:a", 0.8, 2.0) blinking_tween.tween_callback(_blink_label.bind(false)) else: blinking_tween.tween_property(tip_label, "modulate:a", 0.5, 1.0) blinking_tween.tween_callback(_blink_label.bind(true)) func pop_inspection(cover_texture, notes_texture, inspection_note): status = STATUS_INSPECTING_COVER texture_rect.texture = cover_texture texture_cover = cover_texture texture_notes = notes_texture content_label.text = inspection_note var player = SceneManager.get_player() if player: player.freeze_player(0) var tween = create_tween() tween.tween_property(texture_rect, "modulate:a", 1.0, 0.15) _blink_label() func _input(event: InputEvent) -> void: if status == STATUS_HIDDEN: return if event.is_action_pressed("cancel"): quit.emit() _hide() if event.is_action_pressed("interact"): if status == STATUS_INSPECTING_COVER: # inspect notes status = STATUS_INSPECTING_NOTES texture_rect.texture = texture_notes tip_label.text = tip_notes create_tween().tween_property(content_label, "modulate:a", 1.0, 0.2) elif status == STATUS_INSPECTING_NOTES: # inspect cover status = STATUS_INSPECTING_COVER texture_rect.texture = texture_cover tip_label.text = tip_cover create_tween().tween_property(content_label, "modulate:a", 0.0, 0.2)