优化道具获取检视界面的ux逻辑(与balloon同时退出);ground 场景下 debug 时直接通过 main 场景启动
This commit is contained in:
parent
5e0183a8a4
commit
eaa51620e1
@ -78,8 +78,9 @@ func check_autosave_options():
|
|||||||
autosave_timer.start()
|
autosave_timer.start()
|
||||||
if GlobalConfig.DEBUG:
|
if GlobalConfig.DEBUG:
|
||||||
print(
|
print(
|
||||||
"check_autosave_options:",
|
"check_autosave_option: ",
|
||||||
GlobalConfigManager.config.auto_save_enabled,
|
GlobalConfigManager.config.auto_save_enabled,
|
||||||
|
" wait_time=",
|
||||||
autosave_timer.wait_time
|
autosave_timer.wait_time
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -28,11 +28,6 @@ func get_ground() -> Ground2D:
|
|||||||
var loader = get_ground_loader()
|
var loader = get_ground_loader()
|
||||||
if loader:
|
if loader:
|
||||||
return loader.ground
|
return loader.ground
|
||||||
# 在 editor 编辑时,ground 在 Section 节点下
|
|
||||||
var root = get_node("/root")
|
|
||||||
for child in root.get_children():
|
|
||||||
if child.name.begins_with("S0") or child.name.begins_with("S1"):
|
|
||||||
return child.get_node_or_null("Ground") as Ground2D
|
|
||||||
return null
|
return null
|
||||||
|
|
||||||
|
|
||||||
@ -73,7 +68,7 @@ func focus_player() -> void:
|
|||||||
ground.focus_player()
|
ground.focus_player()
|
||||||
|
|
||||||
|
|
||||||
func focus_player_and_reset_zoom(duration := .5) -> void:
|
func focus_player_and_reset_zoom(duration := 1) -> void:
|
||||||
var marker = get_camera_marker()
|
var marker = get_camera_marker()
|
||||||
if marker:
|
if marker:
|
||||||
marker.tween_zoom(1.0, duration).tween_callback(focus_player)
|
marker.tween_zoom(1.0, duration).tween_callback(focus_player)
|
||||||
@ -152,35 +147,9 @@ func pop_debug_dialog_info(character: String, content: String):
|
|||||||
|
|
||||||
#### Prop ####
|
#### Prop ####
|
||||||
|
|
||||||
var hud_path = ""
|
|
||||||
|
|
||||||
|
|
||||||
func get_prop_hud() -> PropHud:
|
func get_prop_hud() -> PropHud:
|
||||||
var hud = get_node_or_null("/root/Main/UILayer/PropHUD") as PropHud
|
return get_node_or_null("/root/Main/UILayer/PropHUD") as PropHud
|
||||||
if hud:
|
|
||||||
return hud
|
|
||||||
if hud_path:
|
|
||||||
hud = get_node_or_null(hud_path) as PropHud
|
|
||||||
if hud:
|
|
||||||
return hud
|
|
||||||
else:
|
|
||||||
hud_path = ""
|
|
||||||
# 如果在 debug 模式从其他场景启动,没有 HUD 但又要获取,就新建 hud 放进场景
|
|
||||||
var ground = get_ground()
|
|
||||||
if ground:
|
|
||||||
var parent = ground.get_parent()
|
|
||||||
if parent:
|
|
||||||
var layer = CanvasLayer.new()
|
|
||||||
layer.layer = GlobalConfig.CANVAS_LAYER_UI
|
|
||||||
layer.name = "UILayer"
|
|
||||||
hud = preload("res://scene/prop/prop_hud.tscn").instantiate()
|
|
||||||
hud.name = "PropHUD"
|
|
||||||
layer.add_child(hud)
|
|
||||||
hud.inventory = ArchiveManager.archive.prop_inventory
|
|
||||||
parent.call_deferred("add_child", layer)
|
|
||||||
hud_path = str(parent.get_path()) + "/UILayer/PropHUD"
|
|
||||||
print("New HUD path:", hud_path)
|
|
||||||
return hud
|
|
||||||
|
|
||||||
|
|
||||||
func get_current_prop(must_selected: bool) -> String:
|
func get_current_prop(must_selected: bool) -> String:
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
extends CanvasLayer
|
extends CanvasLayer
|
||||||
|
|
||||||
|
signal manually_skipped_line
|
||||||
|
|
||||||
@export var force_locale :String:
|
@export var force_locale :String:
|
||||||
set(val):
|
set(val):
|
||||||
force_locale = val
|
force_locale = val
|
||||||
@ -46,10 +48,6 @@ var dialogue_line: DialogueLine:
|
|||||||
if not is_node_ready():
|
if not is_node_ready():
|
||||||
await ready
|
await ready
|
||||||
dialogue_line = next_dialogue_line
|
dialogue_line = next_dialogue_line
|
||||||
# 如果是「音效: ...」,且不是 debug 模式,则直接跳过
|
|
||||||
if dialogue_line.character == "音效" and not GlobalConfig.DEBUG:
|
|
||||||
next(dialogue_line.next_id)
|
|
||||||
return
|
|
||||||
character_label.visible = not dialogue_line.character.is_empty()
|
character_label.visible = not dialogue_line.character.is_empty()
|
||||||
character_label.text = tr(dialogue_line.character, "dialogue")
|
character_label.text = tr(dialogue_line.character, "dialogue")
|
||||||
#主要角色颜色
|
#主要角色颜色
|
||||||
@ -127,6 +125,9 @@ var dialogue_line: DialogueLine:
|
|||||||
next(next_dialogue_line.next_id)
|
next(next_dialogue_line.next_id)
|
||||||
# var time = next_dialogue_line.text.length() * 0.2 if next_dialogue_line.time == "auto" else next_dialogue_line.time.to_float()
|
# var time = next_dialogue_line.text.length() * 0.2 if next_dialogue_line.time == "auto" else next_dialogue_line.time.to_float()
|
||||||
# await get_tree().create_timer(time).timeout
|
# await get_tree().create_timer(time).timeout
|
||||||
|
# 如果当前 line 运行结束,则 queue free 释放资源
|
||||||
|
if dialogue_line == next_dialogue_line:
|
||||||
|
queue_free()
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
layer = GlobalConfig.CANVAS_LAYER_DIALOG
|
layer = GlobalConfig.CANVAS_LAYER_DIALOG
|
||||||
@ -162,10 +163,6 @@ func _setup_content_text() -> void:
|
|||||||
dialogue_line.text = text
|
dialogue_line.text = text
|
||||||
|
|
||||||
|
|
||||||
func _unhandled_input(_event: InputEvent) -> void:
|
|
||||||
# Only the balloon is allowed to handle input while it's showing
|
|
||||||
get_viewport().set_input_as_handled()
|
|
||||||
|
|
||||||
func _notification(what: int) -> void:
|
func _notification(what: int) -> void:
|
||||||
# Detect a change of locale and update the current dialogue line to show the new language
|
# Detect a change of locale and update the current dialogue line to show the new language
|
||||||
if what == NOTIFICATION_TRANSLATION_CHANGED and is_instance_valid(dialogue_label):
|
if what == NOTIFICATION_TRANSLATION_CHANGED and is_instance_valid(dialogue_label):
|
||||||
@ -196,10 +193,16 @@ func _on_mutated(_mutation: Dictionary) -> void:
|
|||||||
balloon.hide()
|
balloon.hide()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# func _unhandled_input(_event: InputEvent) -> void:
|
||||||
|
# # Only the balloon is allowed to handle input while it's showing
|
||||||
|
# get_viewport().set_input_as_handled()
|
||||||
|
|
||||||
|
|
||||||
func _on_balloon_gui_input(event: InputEvent) -> void:
|
func _on_balloon_gui_input(event: InputEvent) -> void:
|
||||||
# See if we need to skip typing of the dialogue
|
# See if we need to skip typing of the dialogue
|
||||||
if dialogue_label.is_typing:
|
if dialogue_label.is_typing:
|
||||||
if event.is_action_pressed("interact"):
|
if event.is_action_pressed("interact") or event.is_action_pressed("cancel"):
|
||||||
dialogue_label.skip_typing()
|
dialogue_label.skip_typing()
|
||||||
get_viewport().set_input_as_handled()
|
get_viewport().set_input_as_handled()
|
||||||
return
|
return
|
||||||
@ -208,15 +211,17 @@ func _on_balloon_gui_input(event: InputEvent) -> void:
|
|||||||
if dialogue_line.responses.size() > 0: return
|
if dialogue_line.responses.size() > 0: return
|
||||||
|
|
||||||
# When there are no response options the balloon itself is the clickable thing
|
# When there are no response options the balloon itself is the clickable thing
|
||||||
get_viewport().set_input_as_handled()
|
# get_viewport().set_input_as_handled()
|
||||||
|
|
||||||
#if event is InputEventMouseButton and event.is_pressed() and event.button_index == MOUSE_BUTTON_LEFT:
|
#if event is InputEventMouseButton and event.is_pressed() and event.button_index == MOUSE_BUTTON_LEFT:
|
||||||
#next(dialogue_line.next_id)
|
#next(dialogue_line.next_id)
|
||||||
#elif event.is_action_pressed(next_action) and get_viewport().gui_get_focus_owner() == balloon:
|
#elif event.is_action_pressed(next_action) and get_viewport().gui_get_focus_owner() == balloon:
|
||||||
#next(dialogue_line.next_id)
|
#next(dialogue_line.next_id)
|
||||||
|
|
||||||
if event.is_action_pressed("interact"):
|
if event.is_action_pressed("interact") or event.is_action_pressed("cancel"):
|
||||||
# if event.is_action_pressed("interact") and get_viewport().gui_get_focus_owner() == balloon:
|
# if event.is_action_pressed("interact") and get_viewport().gui_get_focus_owner() == balloon:
|
||||||
|
get_viewport().set_input_as_handled()
|
||||||
|
manually_skipped_line.emit()
|
||||||
next(dialogue_line.next_id)
|
next(dialogue_line.next_id)
|
||||||
|
|
||||||
func _on_responses_menu_response_selected(response: DialogueResponse) -> void:
|
func _on_responses_menu_response_selected(response: DialogueResponse) -> void:
|
||||||
|
@ -127,6 +127,7 @@ clip_contents = false
|
|||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 4
|
size_flags_horizontal = 4
|
||||||
size_flags_vertical = 0
|
size_flags_vertical = 0
|
||||||
|
mouse_filter = 2
|
||||||
theme_override_colors/font_shadow_color = Color(0.306923, 0.306923, 0.306923, 0.388235)
|
theme_override_colors/font_shadow_color = Color(0.306923, 0.306923, 0.306923, 0.388235)
|
||||||
theme_override_constants/shadow_offset_y = 1
|
theme_override_constants/shadow_offset_y = 1
|
||||||
theme_override_constants/shadow_offset_x = 1
|
theme_override_constants/shadow_offset_x = 1
|
||||||
@ -154,13 +155,14 @@ mouse_filter = 2
|
|||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_vertical = 8
|
size_flags_vertical = 8
|
||||||
|
mouse_filter = 2
|
||||||
theme_override_constants/separation = 2
|
theme_override_constants/separation = 2
|
||||||
script = ExtResource("4_4netn")
|
script = ExtResource("4_4netn")
|
||||||
response_template = NodePath("ResponseExample")
|
response_template = NodePath("ResponseExample")
|
||||||
|
|
||||||
[node name="ResponseExample" type="Button" parent="Balloon/Responses/ResponsesMenu"]
|
[node name="ResponseExample" type="Button" parent="Balloon/Responses/ResponsesMenu"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
mouse_filter = 1
|
mouse_filter = 2
|
||||||
text = "Response example"
|
text = "Response example"
|
||||||
|
|
||||||
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
|
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
|
||||||
|
@ -89,7 +89,6 @@ func _show_os(res, title):
|
|||||||
|
|
||||||
func _show_balloon(res, title):
|
func _show_balloon(res, title):
|
||||||
# SceneManager.focus_node(self)
|
# SceneManager.focus_node(self)
|
||||||
# SceneManager.get_camera_marker().tween_zoom(1.1, 1.5)
|
|
||||||
DialogueManager.show_dialogue_balloon(res, title)
|
DialogueManager.show_dialogue_balloon(res, title)
|
||||||
# TODO note viewing animation
|
# TODO note viewing animation
|
||||||
SceneManager.freeze_player(0)
|
SceneManager.freeze_player(0)
|
||||||
|
@ -18,10 +18,10 @@ class_name CameraFocusMarker extends Marker2D
|
|||||||
# @export var limit_bottom := 158.0
|
# @export var limit_bottom := 158.0
|
||||||
@export var limit_top := 0
|
@export var limit_top := 0
|
||||||
@export var limit_bottom := 316.0
|
@export var limit_bottom := 316.0
|
||||||
|
@export var zoom_ratio := 1.0
|
||||||
|
|
||||||
@onready var target = %Target as Node2D
|
@onready var target = %Target as Node2D
|
||||||
|
|
||||||
var zoom_ratio := 1.0
|
|
||||||
var zoom_tween: Tween
|
var zoom_tween: Tween
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
class_name Ground2D extends Node2D
|
class_name Ground2D extends Node2D
|
||||||
|
|
||||||
@export var scene_name := ""
|
@export var scene_name := ""
|
||||||
|
# 用于在 debug 时态下,指定进入的 portal
|
||||||
|
@export_enum("left", "right", "1", "2", "3", "4", "5", "6", "7", "8", "9") var default_portal := "left"
|
||||||
@export_group("Player", "player_")
|
@export_group("Player", "player_")
|
||||||
@export var player_y_fixed := true
|
@export var player_y_fixed := true
|
||||||
@export var player_y := 70:
|
@export var player_y := 70:
|
||||||
@ -44,23 +46,38 @@ const FOOTSTEP_AUDIO = {
|
|||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
foreground.layer = GlobalConfig.CANVAS_LAYER_FG
|
# 仅在编辑器中调试时,通过 main 场景启动
|
||||||
_reset_player_positon()
|
if GlobalConfig.DEBUG and (not Engine.is_editor_hint()) and (not get_parent() is GroundLoader):
|
||||||
|
call_deferred("_restart_from_main")
|
||||||
|
return
|
||||||
# 检查 scene_name 是否合法
|
# 检查 scene_name 是否合法
|
||||||
scene_name = scene_name.strip_edges()
|
scene_name = scene_name.strip_edges()
|
||||||
if not scene_name or scene_name.length() != 7:
|
if not scene_name or scene_name.length() != 7:
|
||||||
printerr("scene_name is not valid")
|
printerr("scene_name is not valid")
|
||||||
return
|
return
|
||||||
|
_reset_player_positon()
|
||||||
if Engine.is_editor_hint():
|
if Engine.is_editor_hint():
|
||||||
return
|
return
|
||||||
# 如果 debug 模式下不通过 GroundLoader 启动,读取 palyer 位置
|
foreground.layer = GlobalConfig.CANVAS_LAYER_FG
|
||||||
if GlobalConfig.DEBUG and not get_parent() is GroundLoader:
|
|
||||||
player.global_position.x = ArchiveManager.archive.player_global_position_x
|
|
||||||
_set_camera_and_player_boundary()
|
_set_camera_and_player_boundary()
|
||||||
_load_footstep_audio()
|
_load_footstep_audio()
|
||||||
focus_player()
|
focus_player()
|
||||||
# %ColorRectTop.visible = true
|
# %ColorRectTop.visible = true
|
||||||
# %ColorRectBottom.visible = true
|
# %ColorRectBottom.visible = true
|
||||||
|
# 如果 debug 模式下不通过 GroundLoader 启动,则插入到 main 以下
|
||||||
|
|
||||||
|
|
||||||
|
func _restart_from_main():
|
||||||
|
var main = load("res://scene/main.tscn").instantiate()
|
||||||
|
# if not main.is_node_ready():
|
||||||
|
# await main.ready
|
||||||
|
var ground_loader = main.get_node("./GroundLoader") as GroundLoader
|
||||||
|
ground_loader.ignore_archive = false
|
||||||
|
ground_loader.archive_scene = scene_name
|
||||||
|
ground_loader.archive_portal = default_portal
|
||||||
|
# ground_loader.transition_to_scene(scene_name, default_portal, true)
|
||||||
|
get_node("/root").add_child(main)
|
||||||
|
get_parent().queue_free()
|
||||||
|
|
||||||
|
|
||||||
func _enter_tree() -> void:
|
func _enter_tree() -> void:
|
||||||
@ -126,3 +143,13 @@ func focus_node(node: CanvasItem) -> void:
|
|||||||
|
|
||||||
func focus_player() -> void:
|
func focus_player() -> void:
|
||||||
focus_node(player)
|
focus_node(player)
|
||||||
|
|
||||||
|
|
||||||
|
func move_player_to_portal(portal_name := default_portal) -> void:
|
||||||
|
var portal_node = get_node_or_null("DeployLayer/portal_" + portal_name) as Node2D
|
||||||
|
if portal_node:
|
||||||
|
player.global_position.x = portal_node.global_position.x
|
||||||
|
if GlobalConfig.DEBUG:
|
||||||
|
print("move player to portal:", portal_name, portal_node.global_position)
|
||||||
|
else:
|
||||||
|
printerr(scene_name + " portal not found: " + portal_name)
|
||||||
|
@ -16,6 +16,7 @@ func _ready() -> void:
|
|||||||
|
|
||||||
[node name="Ground" type="Node2D"]
|
[node name="Ground" type="Node2D"]
|
||||||
script = ExtResource("1_0vrlo")
|
script = ExtResource("1_0vrlo")
|
||||||
|
default_portal = "left"
|
||||||
|
|
||||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||||
|
|
||||||
|
@ -10,6 +10,7 @@ class_name GroundLoader extends Node2D
|
|||||||
debug_reload = false
|
debug_reload = false
|
||||||
if is_node_ready() and current_scene and entrance_portal:
|
if is_node_ready() and current_scene and entrance_portal:
|
||||||
transition_to_scene(current_scene, entrance_portal, true)
|
transition_to_scene(current_scene, entrance_portal, true)
|
||||||
|
# 强制覆盖 archive 记录
|
||||||
@export var archive_scene := ""
|
@export var archive_scene := ""
|
||||||
@export var archive_portal := ""
|
@export var archive_portal := ""
|
||||||
|
|
||||||
@ -32,7 +33,9 @@ func _ready() -> void:
|
|||||||
mask.color.a = 0.0
|
mask.color.a = 0.0
|
||||||
# grounds
|
# grounds
|
||||||
_read_grounds()
|
_read_grounds()
|
||||||
# ground = get_node_or_null("Ground")
|
ground = get_node_or_null("Ground") as Ground2D
|
||||||
|
if ground:
|
||||||
|
ground.queue_free()
|
||||||
# load save
|
# load save
|
||||||
if not ignore_archive:
|
if not ignore_archive:
|
||||||
_load_save()
|
_load_save()
|
||||||
@ -62,14 +65,14 @@ func _load_save():
|
|||||||
archive_scene = ArchiveManager.archive.current_scene
|
archive_scene = ArchiveManager.archive.current_scene
|
||||||
if ArchiveManager.archive.entrance_portal:
|
if ArchiveManager.archive.entrance_portal:
|
||||||
archive_portal = ArchiveManager.archive.entrance_portal
|
archive_portal = ArchiveManager.archive.entrance_portal
|
||||||
# 使用 archive 所记录的场景
|
# 强制覆盖 archive 记录
|
||||||
if archive_scene and archive_portal:
|
if archive_scene or archive_portal:
|
||||||
current_scene = archive_scene
|
current_scene = archive_scene
|
||||||
entrance_portal = archive_portal
|
entrance_portal = archive_portal
|
||||||
|
|
||||||
|
|
||||||
func _toggle_mask(display: bool, _immediately: bool) -> Tween:
|
func _toggle_mask(display: bool, _immediately: bool) -> Tween:
|
||||||
var tween = get_tree().create_tween()
|
var tween = create_tween()
|
||||||
if display:
|
if display:
|
||||||
tween.tween_property(mask, "color:a", 1.0, 0.3).set_trans(Tween.TRANS_CUBIC)
|
tween.tween_property(mask, "color:a", 1.0, 0.3).set_trans(Tween.TRANS_CUBIC)
|
||||||
display_mask_time = Time.get_ticks_msec()
|
display_mask_time = Time.get_ticks_msec()
|
||||||
@ -90,6 +93,7 @@ func transition_to_scene(scene_name: String, portal: String, immediately: bool)
|
|||||||
current_scene = scene_name
|
current_scene = scene_name
|
||||||
entrance_portal = portal
|
entrance_portal = portal
|
||||||
# 优先更新 archive,使 ground 可以访问自己的 current_scene 键值
|
# 优先更新 archive,使 ground 可以访问自己的 current_scene 键值
|
||||||
|
if not Engine.is_editor_hint():
|
||||||
_update_archive()
|
_update_archive()
|
||||||
# 转场效果,在 _load_ground_node 之前播放
|
# 转场效果,在 _load_ground_node 之前播放
|
||||||
var tween = _toggle_mask(true, immediately)
|
var tween = _toggle_mask(true, immediately)
|
||||||
@ -99,28 +103,20 @@ func transition_to_scene(scene_name: String, portal: String, immediately: bool)
|
|||||||
print("Scene not found: " + scene_name)
|
print("Scene not found: " + scene_name)
|
||||||
|
|
||||||
|
|
||||||
func _update_player_position():
|
func _update_archive():
|
||||||
if ignore_archive or Engine.is_editor_hint():
|
ArchiveManager.archive.current_scene = current_scene
|
||||||
return
|
ArchiveManager.archive.entrance_portal = entrance_portal
|
||||||
var player = SceneManager.get_player() as MainPlayer
|
archive_scene = current_scene
|
||||||
if player and ArchiveManager.archive:
|
archive_portal = entrance_portal
|
||||||
# if GlobalConfig.DEBUG:
|
|
||||||
# print("update player position", ArchiveManager.archive.player_global_position)
|
|
||||||
if ArchiveManager.archive.player_global_position_x >= 0:
|
|
||||||
player.global_position.x = ArchiveManager.archive.player_global_position_x
|
|
||||||
player.set_facing_direction(ArchiveManager.archive.player_direction)
|
|
||||||
|
|
||||||
|
|
||||||
func _do_transition(scene_name: String):
|
func _do_transition(scene_name: String):
|
||||||
# SceneManager.freeze_player(0)
|
# SceneManager.freeze_player(0)
|
||||||
var ground_node = _load_ground_node(scene_name)
|
|
||||||
if ground == ground_node:
|
|
||||||
return
|
|
||||||
if ground:
|
if ground:
|
||||||
# 提前移除,防止命名冲突
|
# 提前移除,防止命名冲突
|
||||||
remove_child(ground)
|
remove_child(ground)
|
||||||
# 不需要释放,因为会缓存,在 ground_node_cache 中释放
|
ground.queue_free()
|
||||||
# ground.queue_free()
|
var ground_node = _load_ground_node(scene_name)
|
||||||
# 先设置 ground,再添加到场景中
|
# 先设置 ground,再添加到场景中
|
||||||
# 因为 ground 在 enter_tree 时会用到 SceneManager 的方法
|
# 因为 ground 在 enter_tree 时会用到 SceneManager 的方法
|
||||||
# 其中间接用到了 GroundLoader 的 ground
|
# 其中间接用到了 GroundLoader 的 ground
|
||||||
@ -135,30 +131,26 @@ func _do_transition(scene_name: String):
|
|||||||
func _add_ground():
|
func _add_ground():
|
||||||
ground.name = "Ground"
|
ground.name = "Ground"
|
||||||
add_child(ground)
|
add_child(ground)
|
||||||
if not Engine.is_editor_hint():
|
|
||||||
var portal_node = ground.get_node_or_null("DeployLayer/portal_" + entrance_portal) as Node2D
|
|
||||||
if portal_node:
|
|
||||||
var player = SceneManager.get_player()
|
|
||||||
if player:
|
|
||||||
# player.global_position.x = -20.0
|
|
||||||
player.global_position.x = portal_node.global_position.x
|
|
||||||
if GlobalConfig.DEBUG:
|
|
||||||
print("move player to portal:", entrance_portal, portal_node.global_position)
|
|
||||||
else:
|
|
||||||
printerr(current_scene + " portal not found: " + entrance_portal)
|
|
||||||
# 更新玩家位置
|
# 更新玩家位置
|
||||||
if first_entered and not Engine.is_editor_hint():
|
if first_entered and not Engine.is_editor_hint():
|
||||||
_update_player_position()
|
_update_player_position_from_archive()
|
||||||
|
elif not Engine.is_editor_hint():
|
||||||
|
# move player to portal
|
||||||
|
ground.move_player_to_portal(entrance_portal)
|
||||||
first_entered = false
|
first_entered = false
|
||||||
# SceneManager.release_player()
|
# SceneManager.release_player()
|
||||||
|
|
||||||
|
|
||||||
func _update_archive():
|
func _update_player_position_from_archive():
|
||||||
if not Engine.is_editor_hint() and ArchiveManager.archive:
|
if ignore_archive or Engine.is_editor_hint():
|
||||||
ArchiveManager.archive.current_scene = current_scene
|
return
|
||||||
ArchiveManager.archive.entrance_portal = entrance_portal
|
var player = SceneManager.get_player() as MainPlayer
|
||||||
archive_scene = current_scene
|
if player and ArchiveManager.archive:
|
||||||
archive_portal = entrance_portal
|
# if GlobalConfig.DEBUG:
|
||||||
|
# print("update player position", ArchiveManager.archive.player_global_position)
|
||||||
|
if ArchiveManager.archive.player_global_position_x >= 0:
|
||||||
|
player.global_position.x = ArchiveManager.archive.player_global_position_x
|
||||||
|
player.set_facing_direction(ArchiveManager.archive.player_direction)
|
||||||
|
|
||||||
|
|
||||||
func _load_ground_node(scene_name: String) -> Node2D:
|
func _load_ground_node(scene_name: String) -> Node2D:
|
||||||
|
@ -7,6 +7,7 @@ script = ExtResource("1_6mjre")
|
|||||||
|
|
||||||
[node name="MaskLayer" type="CanvasLayer" parent="."]
|
[node name="MaskLayer" type="CanvasLayer" parent="."]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|
layer = 11
|
||||||
|
|
||||||
[node name="Mask" type="ColorRect" parent="MaskLayer"]
|
[node name="Mask" type="ColorRect" parent="MaskLayer"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|
@ -197,38 +197,38 @@ tracks/13/keys = {
|
|||||||
tracks/14/type = "value"
|
tracks/14/type = "value"
|
||||||
tracks/14/imported = false
|
tracks/14/imported = false
|
||||||
tracks/14/enabled = true
|
tracks/14/enabled = true
|
||||||
tracks/14/path = NodePath("Camera2D:zoom")
|
tracks/14/path = NodePath("DeployLayer/oneshot纸片/Sign:display_sign")
|
||||||
tracks/14/interp = 1
|
tracks/14/interp = 1
|
||||||
tracks/14/loop_wrap = true
|
tracks/14/loop_wrap = true
|
||||||
tracks/14/keys = {
|
tracks/14/keys = {
|
||||||
"times": PackedFloat32Array(0),
|
"times": PackedFloat32Array(0),
|
||||||
"transitions": PackedFloat32Array(1),
|
"transitions": PackedFloat32Array(1),
|
||||||
"update": 0,
|
"update": 1,
|
||||||
"values": [Vector2(1, 1)]
|
"values": [true]
|
||||||
}
|
}
|
||||||
tracks/15/type = "value"
|
tracks/15/type = "value"
|
||||||
tracks/15/imported = false
|
tracks/15/imported = false
|
||||||
tracks/15/enabled = true
|
tracks/15/enabled = true
|
||||||
tracks/15/path = NodePath("DeployLayer/oneshot纸片/Sign:display_sign")
|
tracks/15/path = NodePath("DeployLayer/oneshot纸片/Sign:position")
|
||||||
tracks/15/interp = 1
|
tracks/15/interp = 1
|
||||||
tracks/15/loop_wrap = true
|
tracks/15/loop_wrap = true
|
||||||
tracks/15/keys = {
|
tracks/15/keys = {
|
||||||
"times": PackedFloat32Array(0),
|
"times": PackedFloat32Array(0),
|
||||||
"transitions": PackedFloat32Array(1),
|
"transitions": PackedFloat32Array(1),
|
||||||
"update": 1,
|
"update": 0,
|
||||||
"values": [true]
|
"values": [Vector2(3, -4)]
|
||||||
}
|
}
|
||||||
tracks/16/type = "value"
|
tracks/16/type = "value"
|
||||||
tracks/16/imported = false
|
tracks/16/imported = false
|
||||||
tracks/16/enabled = true
|
tracks/16/enabled = true
|
||||||
tracks/16/path = NodePath("DeployLayer/oneshot纸片/Sign:position")
|
tracks/16/path = NodePath("MainPlayer/CameraFocusMarker:zoom_ratio")
|
||||||
tracks/16/interp = 1
|
tracks/16/interp = 1
|
||||||
tracks/16/loop_wrap = true
|
tracks/16/loop_wrap = true
|
||||||
tracks/16/keys = {
|
tracks/16/keys = {
|
||||||
"times": PackedFloat32Array(0),
|
"times": PackedFloat32Array(0),
|
||||||
"transitions": PackedFloat32Array(1),
|
"transitions": PackedFloat32Array(1),
|
||||||
"update": 0,
|
"update": 0,
|
||||||
"values": [Vector2(3, -4)]
|
"values": [1.0]
|
||||||
}
|
}
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_7k2c8"]
|
[sub_resource type="Animation" id="Animation_7k2c8"]
|
||||||
@ -462,7 +462,7 @@ tracks/8/path = NodePath("MainPlayer/CameraFocusMarker:position")
|
|||||||
tracks/8/interp = 1
|
tracks/8/interp = 1
|
||||||
tracks/8/loop_wrap = true
|
tracks/8/loop_wrap = true
|
||||||
tracks/8/keys = {
|
tracks/8/keys = {
|
||||||
"times": PackedFloat32Array(0, 0.46, 3.98, 4.38),
|
"times": PackedFloat32Array(0, 0.5, 3.98, 4.38),
|
||||||
"transitions": PackedFloat32Array(1, 1, 1, 1),
|
"transitions": PackedFloat32Array(1, 1, 1, 1),
|
||||||
"update": 0,
|
"update": 0,
|
||||||
"values": [Vector2(0, 0), Vector2(0, 10), Vector2(0, 10), Vector2(0, 0)]
|
"values": [Vector2(0, 0), Vector2(0, 10), Vector2(0, 10), Vector2(0, 0)]
|
||||||
@ -470,14 +470,14 @@ tracks/8/keys = {
|
|||||||
tracks/9/type = "value"
|
tracks/9/type = "value"
|
||||||
tracks/9/imported = false
|
tracks/9/imported = false
|
||||||
tracks/9/enabled = true
|
tracks/9/enabled = true
|
||||||
tracks/9/path = NodePath("Camera2D:zoom")
|
tracks/9/path = NodePath("MainPlayer/CameraFocusMarker:zoom_ratio")
|
||||||
tracks/9/interp = 1
|
tracks/9/interp = 1
|
||||||
tracks/9/loop_wrap = true
|
tracks/9/loop_wrap = true
|
||||||
tracks/9/keys = {
|
tracks/9/keys = {
|
||||||
"times": PackedFloat32Array(0.3, 0.7, 3.92, 4.38),
|
"times": PackedFloat32Array(0.02, 0.54, 3.96, 4.38),
|
||||||
"transitions": PackedFloat32Array(1, 1, 1, 1),
|
"transitions": PackedFloat32Array(1, 1, 1, 1),
|
||||||
"update": 0,
|
"update": 0,
|
||||||
"values": [Vector2(1, 1), Vector2(1.5, 1.5), Vector2(1.5, 1.5), Vector2(1, 1)]
|
"values": [1.0, 1.5, 1.5, 1.0]
|
||||||
}
|
}
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_ocf0o"]
|
[sub_resource type="Animation" id="Animation_ocf0o"]
|
||||||
@ -712,7 +712,6 @@ height = 50.0
|
|||||||
|
|
||||||
[node name="MainPlayer" parent="Ground" index="5"]
|
[node name="MainPlayer" parent="Ground" index="5"]
|
||||||
character = "小小蝶"
|
character = "小小蝶"
|
||||||
running_locked = true
|
|
||||||
|
|
||||||
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
|
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
|
||||||
position = Vector2(21, 39)
|
position = Vector2(21, 39)
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
[ext_resource type="Texture2D" uid="uid://c40gmvqw3vd88" path="res://asset/art/scene/c01/s06_孤儿院长廊围墙/l_长廊光.png" id="4_6ffae"]
|
[ext_resource type="Texture2D" uid="uid://c40gmvqw3vd88" path="res://asset/art/scene/c01/s06_孤儿院长廊围墙/l_长廊光.png" id="4_6ffae"]
|
||||||
[ext_resource type="SpriteFrames" uid="uid://cemn2bnebsfko" path="res://asset/art/scene/c01/s06_孤儿院长廊围墙/全局参考.gif" id="4_8hecq"]
|
[ext_resource type="SpriteFrames" uid="uid://cemn2bnebsfko" path="res://asset/art/scene/c01/s06_孤儿院长廊围墙/全局参考.gif" id="4_8hecq"]
|
||||||
[ext_resource type="Texture2D" uid="uid://bllt2wycchkp2" path="res://asset/art/scene/c01/s06_孤儿院长廊围墙/e_红柱子.png" id="4_dtycx"]
|
[ext_resource type="Texture2D" uid="uid://bllt2wycchkp2" path="res://asset/art/scene/c01/s06_孤儿院长廊围墙/e_红柱子.png" id="4_dtycx"]
|
||||||
[ext_resource type="Script" path="res://scene/tool/autoplay_animated_sprite.gd" id="5_ailfs"]
|
[ext_resource type="Script" path="res://scene/ground/script/general/autoplay_animated_sprite.gd" id="6_4o4lo"]
|
||||||
|
|
||||||
[node name="S06" type="Node2D"]
|
[node name="S06" type="Node2D"]
|
||||||
metadata/_edit_horizontal_guides_ = [158.0, 88.0]
|
metadata/_edit_horizontal_guides_ = [158.0, 88.0]
|
||||||
@ -43,19 +43,19 @@ immediately = false
|
|||||||
position = Vector2(547.5, 0.5)
|
position = Vector2(547.5, 0.5)
|
||||||
sprite_frames = ExtResource("2_l4axy")
|
sprite_frames = ExtResource("2_l4axy")
|
||||||
animation = &"男孩跑动-右"
|
animation = &"男孩跑动-右"
|
||||||
script = ExtResource("5_ailfs")
|
script = ExtResource("6_4o4lo")
|
||||||
|
|
||||||
[node name="跷跷板" type="AnimatedSprite2D" parent="Ground/DeployLayer" index="3"]
|
[node name="跷跷板" type="AnimatedSprite2D" parent="Ground/DeployLayer" index="3"]
|
||||||
position = Vector2(1358.5, -0.5)
|
position = Vector2(1358.5, -0.5)
|
||||||
sprite_frames = ExtResource("2_l4axy")
|
sprite_frames = ExtResource("2_l4axy")
|
||||||
animation = &"跷跷板"
|
animation = &"跷跷板"
|
||||||
script = ExtResource("5_ailfs")
|
script = ExtResource("6_4o4lo")
|
||||||
|
|
||||||
[node name="秋千" type="AnimatedSprite2D" parent="Ground/DeployLayer" index="4"]
|
[node name="秋千" type="AnimatedSprite2D" parent="Ground/DeployLayer" index="4"]
|
||||||
position = Vector2(1241.5, -0.5)
|
position = Vector2(1241.5, -0.5)
|
||||||
sprite_frames = ExtResource("2_l4axy")
|
sprite_frames = ExtResource("2_l4axy")
|
||||||
animation = &"秋千"
|
animation = &"秋千"
|
||||||
script = ExtResource("5_ailfs")
|
script = ExtResource("6_4o4lo")
|
||||||
|
|
||||||
[node name="PointLight2D" type="PointLight2D" parent="Ground/AmbientLayer" index="0"]
|
[node name="PointLight2D" type="PointLight2D" parent="Ground/AmbientLayer" index="0"]
|
||||||
energy = 0.6
|
energy = 0.6
|
||||||
@ -77,37 +77,37 @@ offset = Vector2(0, -153)
|
|||||||
position = Vector2(377.5, -1.5)
|
position = Vector2(377.5, -1.5)
|
||||||
sprite_frames = ExtResource("2_l4axy")
|
sprite_frames = ExtResource("2_l4axy")
|
||||||
animation = &"中蓝衣小孩呼吸"
|
animation = &"中蓝衣小孩呼吸"
|
||||||
script = ExtResource("5_ailfs")
|
script = ExtResource("6_4o4lo")
|
||||||
|
|
||||||
[node name="群众2" type="AnimatedSprite2D" parent="Ground/ParallaxForeground/BGParallaxLayer" index="2"]
|
[node name="群众2" type="AnimatedSprite2D" parent="Ground/ParallaxForeground/BGParallaxLayer" index="2"]
|
||||||
position = Vector2(408.5, 0.5)
|
position = Vector2(408.5, 0.5)
|
||||||
sprite_frames = ExtResource("2_l4axy")
|
sprite_frames = ExtResource("2_l4axy")
|
||||||
animation = &"右绿衣男孩呼吸"
|
animation = &"右绿衣男孩呼吸"
|
||||||
script = ExtResource("5_ailfs")
|
script = ExtResource("6_4o4lo")
|
||||||
|
|
||||||
[node name="群众3" type="AnimatedSprite2D" parent="Ground/ParallaxForeground/BGParallaxLayer" index="3"]
|
[node name="群众3" type="AnimatedSprite2D" parent="Ground/ParallaxForeground/BGParallaxLayer" index="3"]
|
||||||
position = Vector2(269.5, -1.5)
|
position = Vector2(269.5, -1.5)
|
||||||
sprite_frames = ExtResource("2_l4axy")
|
sprite_frames = ExtResource("2_l4axy")
|
||||||
animation = &"左2黄衣男呼吸"
|
animation = &"左2黄衣男呼吸"
|
||||||
script = ExtResource("5_ailfs")
|
script = ExtResource("6_4o4lo")
|
||||||
|
|
||||||
[node name="群众4" type="AnimatedSprite2D" parent="Ground/ParallaxForeground/BGParallaxLayer" index="4"]
|
[node name="群众4" type="AnimatedSprite2D" parent="Ground/ParallaxForeground/BGParallaxLayer" index="4"]
|
||||||
position = Vector2(426.5, -0.5)
|
position = Vector2(426.5, -0.5)
|
||||||
sprite_frames = ExtResource("2_l4axy")
|
sprite_frames = ExtResource("2_l4axy")
|
||||||
animation = &"左一绿衣男呼吸"
|
animation = &"左一绿衣男呼吸"
|
||||||
script = ExtResource("5_ailfs")
|
script = ExtResource("6_4o4lo")
|
||||||
|
|
||||||
[node name="红衣姑娘" type="AnimatedSprite2D" parent="Ground/ParallaxForeground/BGParallaxLayer" index="5"]
|
[node name="红衣姑娘" type="AnimatedSprite2D" parent="Ground/ParallaxForeground/BGParallaxLayer" index="5"]
|
||||||
position = Vector2(333.5, -1.5)
|
position = Vector2(333.5, -1.5)
|
||||||
sprite_frames = ExtResource("2_l4axy")
|
sprite_frames = ExtResource("2_l4axy")
|
||||||
animation = &"红衣姑娘呼吸"
|
animation = &"红衣姑娘呼吸"
|
||||||
script = ExtResource("5_ailfs")
|
script = ExtResource("6_4o4lo")
|
||||||
|
|
||||||
[node name="院长" type="AnimatedSprite2D" parent="Ground/ParallaxForeground/BGParallaxLayer" index="6"]
|
[node name="院长" type="AnimatedSprite2D" parent="Ground/ParallaxForeground/BGParallaxLayer" index="6"]
|
||||||
position = Vector2(301.5, -1.5)
|
position = Vector2(301.5, -1.5)
|
||||||
sprite_frames = ExtResource("2_l4axy")
|
sprite_frames = ExtResource("2_l4axy")
|
||||||
animation = &"院长呼吸"
|
animation = &"院长呼吸"
|
||||||
script = ExtResource("5_ailfs")
|
script = ExtResource("6_4o4lo")
|
||||||
|
|
||||||
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
|
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
|
||||||
texture = null
|
texture = null
|
||||||
|
@ -42,7 +42,7 @@ position = Vector2(629, 2)
|
|||||||
|
|
||||||
[node name="Npc" parent="Ground/DeployLayer" index="2" instance=ExtResource("2_r5smg")]
|
[node name="Npc" parent="Ground/DeployLayer" index="2" instance=ExtResource("2_r5smg")]
|
||||||
position = Vector2(465, 23)
|
position = Vector2(465, 23)
|
||||||
frame_progress = 0.514003
|
frame_progress = 0.649558
|
||||||
character_name = "张胖子"
|
character_name = "张胖子"
|
||||||
dialogue_title = "张胖子_01"
|
dialogue_title = "张胖子_01"
|
||||||
|
|
||||||
|
11
scene/ground/script/general/animated_sprite_state_machine.gd
Normal file
11
scene/ground/script/general/animated_sprite_state_machine.gd
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
extends AnimatedSprite2D
|
||||||
|
|
||||||
|
var animation_state_dict = {
|
||||||
|
}
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
if animation:
|
||||||
|
play(animation)
|
||||||
|
|
||||||
|
|
||||||
|
|
6
scene/ground/script/general/state_action_res.gd
Normal file
6
scene/ground/script/general/state_action_res.gd
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
class_name StateActionConfigResource extends Resource
|
||||||
|
|
||||||
|
@export var action_name := ""
|
||||||
|
@export var animation_begin := ""
|
||||||
|
@export var animation_mid := ""
|
||||||
|
@export var animation_end := ""
|
@ -66,7 +66,7 @@ func _ready() -> void:
|
|||||||
|
|
||||||
|
|
||||||
func _enter_tree() -> void:
|
func _enter_tree() -> void:
|
||||||
if is_node_ready():
|
if is_node_ready() and not Engine.is_editor_hint():
|
||||||
_check_character_status()
|
_check_character_status()
|
||||||
|
|
||||||
|
|
||||||
|
@ -27,6 +27,7 @@ modulate_color = Color(0.996078, 0.92549, 0.85098, 0.733333)
|
|||||||
[node name="MainPlayer" type="CharacterBody2D"]
|
[node name="MainPlayer" type="CharacterBody2D"]
|
||||||
collision_mask = 2
|
collision_mask = 2
|
||||||
script = ExtResource("1_3a78y")
|
script = ExtResource("1_3a78y")
|
||||||
|
running_locked = true
|
||||||
metadata/_edit_vertical_guides_ = [-120.0]
|
metadata/_edit_vertical_guides_ = [-120.0]
|
||||||
metadata/_edit_horizontal_guides_ = [-9.0]
|
metadata/_edit_horizontal_guides_ = [-9.0]
|
||||||
|
|
||||||
|
@ -295,18 +295,13 @@ func enable_prop_item(prop_key: String) -> void:
|
|||||||
var inspector = SceneManager.get_inspector()
|
var inspector = SceneManager.get_inspector()
|
||||||
if inspector:
|
if inspector:
|
||||||
var inspect_path = items_dict[prop_key].inspect_path
|
var inspect_path = items_dict[prop_key].inspect_path
|
||||||
|
var prop_title = tr(prop_key)
|
||||||
if inspect_path:
|
if inspect_path:
|
||||||
var texture = load(inspect_path) as Texture2D
|
var texture = load(inspect_path) as Texture2D
|
||||||
inspector.pop_prop_inspection(texture)
|
inspector.pop_prop_inspection(prop_title, texture)
|
||||||
else:
|
else:
|
||||||
var texture = cached_inventory_textures[prop_key]
|
var texture = cached_inventory_textures[prop_key]
|
||||||
inspector.pop_prop_inspection(texture, true)
|
inspector.pop_prop_inspection(prop_title, texture, true)
|
||||||
var prop_title = tr(prop_key)
|
|
||||||
var obtain_str = tr("ui_获得")
|
|
||||||
var text = "~ " + prop_key + "\n" + obtain_str + ": " + prop_title
|
|
||||||
text += "[#item][ID:" + prop_title + "]\n=> END"
|
|
||||||
var prop_res = DialogueManager.create_resource_from_text(text)
|
|
||||||
DialogueManager.show_dialogue_balloon(prop_res, prop_key)
|
|
||||||
|
|
||||||
|
|
||||||
func disable_prop_item(prop_key: String) -> void:
|
func disable_prop_item(prop_key: String) -> void:
|
||||||
|
@ -4,7 +4,7 @@ class_name PropInspector extends CanvasLayer
|
|||||||
enum { STATUS_HIDDEN, STATUS_INSPECTING_PROP, STATUS_INSPECTING_COVER, STATUS_INSPECTING_NOTES }
|
enum { STATUS_HIDDEN, STATUS_INSPECTING_PROP, STATUS_INSPECTING_COVER, STATUS_INSPECTING_NOTES }
|
||||||
|
|
||||||
# must be connected to
|
# must be connected to
|
||||||
signal quit
|
signal quit_and_hidden
|
||||||
|
|
||||||
@onready var prop_bg = %PropBG as TextureRect
|
@onready var prop_bg = %PropBG as TextureRect
|
||||||
@onready var origin_texture = %OriginPropTexture as TextureRect
|
@onready var origin_texture = %OriginPropTexture as TextureRect
|
||||||
@ -12,7 +12,6 @@ signal quit
|
|||||||
@onready var content_label = %ContentLabel as Label
|
@onready var content_label = %ContentLabel as Label
|
||||||
@onready var tip_label = %TipLabel as Label
|
@onready var tip_label = %TipLabel as Label
|
||||||
|
|
||||||
|
|
||||||
var tip_cover = "Q: " + tr("ui_退出") + " " + "E: " + tr("ui_阅读")
|
var tip_cover = "Q: " + tr("ui_退出") + " " + "E: " + tr("ui_阅读")
|
||||||
var tip_notes = "Q: " + tr("ui_退出") + " " + "E: " + tr("ui_收起")
|
var tip_notes = "Q: " + tr("ui_退出") + " " + "E: " + tr("ui_收起")
|
||||||
var texture_cover: Texture2D
|
var texture_cover: Texture2D
|
||||||
@ -57,6 +56,7 @@ func _post_hide():
|
|||||||
content_label.text = ""
|
content_label.text = ""
|
||||||
tip_label.text = tip_cover
|
tip_label.text = tip_cover
|
||||||
visible = false
|
visible = false
|
||||||
|
quit_and_hidden.emit()
|
||||||
|
|
||||||
|
|
||||||
func _blink_label(init := true):
|
func _blink_label(init := true):
|
||||||
@ -87,7 +87,7 @@ func pop_standard_inspection(cover_texture, notes_texture, inspection_note):
|
|||||||
_blink_label()
|
_blink_label()
|
||||||
|
|
||||||
|
|
||||||
func pop_prop_inspection(cover_texture: Texture2D, use_default_bg := false):
|
func pop_prop_inspection(prop_title: String, cover_texture: Texture2D, use_default_bg := false):
|
||||||
if status != STATUS_HIDDEN:
|
if status != STATUS_HIDDEN:
|
||||||
_hide()
|
_hide()
|
||||||
if not cover_texture:
|
if not cover_texture:
|
||||||
@ -108,6 +108,16 @@ func pop_prop_inspection(cover_texture: Texture2D, use_default_bg := false):
|
|||||||
tween.tween_property(full_texture, "modulate:a", 1.0, 0.15)
|
tween.tween_property(full_texture, "modulate:a", 1.0, 0.15)
|
||||||
content_label.text = ""
|
content_label.text = ""
|
||||||
tip_label.text = ""
|
tip_label.text = ""
|
||||||
|
|
||||||
|
# 显示道具获得提示
|
||||||
|
var obtain_str = tr("ui_获得")
|
||||||
|
var text = "~ title\n" + obtain_str + ": " + prop_title
|
||||||
|
text += "[#item][ID:" + prop_title + "]\n=> END"
|
||||||
|
var prop_res = DialogueManager.create_resource_from_text(text)
|
||||||
|
var balloon = preload("res://scene/dialog/balloon.tscn").instantiate()
|
||||||
|
# 手动跳过的同时隐藏
|
||||||
|
balloon.manually_skipped_line.connect(_hide)
|
||||||
|
DialogueManager.show_dialogue_balloon_scene(balloon, prop_res, "title")
|
||||||
SceneManager.freeze_player(0)
|
SceneManager.freeze_player(0)
|
||||||
|
|
||||||
|
|
||||||
@ -117,7 +127,6 @@ func _unhandled_input(event: InputEvent) -> void:
|
|||||||
if event.is_action_pressed("cancel"):
|
if event.is_action_pressed("cancel"):
|
||||||
get_viewport().set_input_as_handled()
|
get_viewport().set_input_as_handled()
|
||||||
_hide()
|
_hide()
|
||||||
quit.emit()
|
|
||||||
if event.is_action_pressed("interact"):
|
if event.is_action_pressed("interact"):
|
||||||
get_viewport().set_input_as_handled()
|
get_viewport().set_input_as_handled()
|
||||||
# STATUS_INSPECTING_COVER 与 STATUS_INSPECTING_NOTES 之间互相切换
|
# STATUS_INSPECTING_COVER 与 STATUS_INSPECTING_NOTES 之间互相切换
|
||||||
@ -140,4 +149,3 @@ func _unhandled_input(event: InputEvent) -> void:
|
|||||||
# STATUS_INSPECTING_PROP 直接退出
|
# STATUS_INSPECTING_PROP 直接退出
|
||||||
elif status == STATUS_INSPECTING_PROP:
|
elif status == STATUS_INSPECTING_PROP:
|
||||||
_hide()
|
_hide()
|
||||||
quit.emit()
|
|
||||||
|
@ -1,17 +0,0 @@
|
|||||||
extends Object
|
|
||||||
class_name ResourceUtils
|
|
||||||
|
|
||||||
# # remove editor's cache
|
|
||||||
# func remove_editor_cache(resource: Resource) -> void:
|
|
||||||
# if Engine.is_editor_hint():
|
|
||||||
# (resource)
|
|
||||||
|
|
||||||
|
|
||||||
static func remove_editor_cache(name: String) -> void:
|
|
||||||
pass
|
|
||||||
# var dir = DirAccess.open("res://.godot/editor")
|
|
||||||
# for file in dir.get_files():
|
|
||||||
# if file.get_basename().begins_with(name):
|
|
||||||
# DirAccess.remove_absolute("res://.godot/editor/" + file)
|
|
||||||
# print("Removed editor cache: ", file)
|
|
||||||
# break
|
|
Loading…
Reference in New Issue
Block a user