diff --git a/asset/art/scene/c03/s09_棺材房/棺材互动/刀.png b/asset/art/scene/c03/s09_棺材房/棺材互动/刀.png new file mode 100644 index 00000000..c14b2ab4 Binary files /dev/null and b/asset/art/scene/c03/s09_棺材房/棺材互动/刀.png differ diff --git a/asset/art/scene/c03/s09_棺材房/棺材互动/刀.png.import b/asset/art/scene/c03/s09_棺材房/棺材互动/刀.png.import new file mode 100644 index 00000000..7fc70555 --- /dev/null +++ b/asset/art/scene/c03/s09_棺材房/棺材互动/刀.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bkn0cytl435yw" +path="res://.godot/imported/刀.png-ea51e291b52e41810a58ef723d8b650a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/scene/c03/s09_棺材房/棺材互动/刀.png" +dest_files=["res://.godot/imported/刀.png-ea51e291b52e41810a58ef723d8b650a.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/asset/art/scene/c03/s09_棺材房/棺材互动/刀把.png b/asset/art/scene/c03/s09_棺材房/棺材互动/刀把.png new file mode 100644 index 00000000..2df8ff6a Binary files /dev/null and b/asset/art/scene/c03/s09_棺材房/棺材互动/刀把.png differ diff --git a/asset/art/scene/c03/s09_棺材房/棺材互动/刀把.png.import b/asset/art/scene/c03/s09_棺材房/棺材互动/刀把.png.import new file mode 100644 index 00000000..da0b0291 --- /dev/null +++ b/asset/art/scene/c03/s09_棺材房/棺材互动/刀把.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dhdo8nxthe0et" +path="res://.godot/imported/刀把.png-fc8d9d9e1ab035d9dabca2fe2ce625af.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/scene/c03/s09_棺材房/棺材互动/刀把.png" +dest_files=["res://.godot/imported/刀把.png-fc8d9d9e1ab035d9dabca2fe2ce625af.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/asset/art/scene/c03/s09_棺材房/棺材互动/带血的纸条.png b/asset/art/scene/c03/s09_棺材房/棺材互动/带血的纸条.png new file mode 100644 index 00000000..dcf806e4 Binary files /dev/null and b/asset/art/scene/c03/s09_棺材房/棺材互动/带血的纸条.png differ diff --git a/asset/art/scene/c03/s09_棺材房/棺材互动/带血的纸条.png.import b/asset/art/scene/c03/s09_棺材房/棺材互动/带血的纸条.png.import new file mode 100644 index 00000000..4aa55223 --- /dev/null +++ b/asset/art/scene/c03/s09_棺材房/棺材互动/带血的纸条.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ush0d2g8uj08" +path="res://.godot/imported/带血的纸条.png-8a4505ea7f70d9d0dc10043d473e173a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/scene/c03/s09_棺材房/棺材互动/带血的纸条.png" +dest_files=["res://.godot/imported/带血的纸条.png-8a4505ea7f70d9d0dc10043d473e173a.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/asset/art/scene/c03/s09_棺材房/棺材互动/棺材特写.png b/asset/art/scene/c03/s09_棺材房/棺材互动/棺材特写.png new file mode 100644 index 00000000..9473d57a Binary files /dev/null and b/asset/art/scene/c03/s09_棺材房/棺材互动/棺材特写.png differ diff --git a/asset/art/scene/c03/s09_棺材房/棺材互动/棺材特写.png.import b/asset/art/scene/c03/s09_棺材房/棺材互动/棺材特写.png.import new file mode 100644 index 00000000..5704cb0d --- /dev/null +++ b/asset/art/scene/c03/s09_棺材房/棺材互动/棺材特写.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d03ja5ujdmyce" +path="res://.godot/imported/棺材特写.png-e199bb1f4e0372402ac9f4908397a75c.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/scene/c03/s09_棺材房/棺材互动/棺材特写.png" +dest_files=["res://.godot/imported/棺材特写.png-e199bb1f4e0372402ac9f4908397a75c.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/asset/art/scene/c03/s09_棺材房/棺材互动/棺材纸条.png b/asset/art/scene/c03/s09_棺材房/棺材互动/棺材纸条.png new file mode 100644 index 00000000..4da7912e Binary files /dev/null and b/asset/art/scene/c03/s09_棺材房/棺材互动/棺材纸条.png differ diff --git a/asset/art/scene/c03/s09_棺材房/棺材互动/棺材纸条.png.import b/asset/art/scene/c03/s09_棺材房/棺材互动/棺材纸条.png.import new file mode 100644 index 00000000..aad5c233 --- /dev/null +++ b/asset/art/scene/c03/s09_棺材房/棺材互动/棺材纸条.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bihf4gpj0r1jj" +path="res://.godot/imported/棺材纸条.png-14053e1063edb6915b1aea539be6699a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/scene/c03/s09_棺材房/棺材互动/棺材纸条.png" +dest_files=["res://.godot/imported/棺材纸条.png-14053e1063edb6915b1aea539be6699a.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/asset/art/scene/c03/s09_棺材房/棺材互动/特写遮罩.png b/asset/art/scene/c03/s09_棺材房/棺材互动/特写遮罩.png new file mode 100644 index 00000000..aa6c7c95 Binary files /dev/null and b/asset/art/scene/c03/s09_棺材房/棺材互动/特写遮罩.png differ diff --git a/asset/art/scene/c03/s09_棺材房/棺材互动/特写遮罩.png.import b/asset/art/scene/c03/s09_棺材房/棺材互动/特写遮罩.png.import new file mode 100644 index 00000000..2207ff3c --- /dev/null +++ b/asset/art/scene/c03/s09_棺材房/棺材互动/特写遮罩.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://crj86tnkc03nk" +path="res://.godot/imported/特写遮罩.png-676888c92a7dc46e8f45cad0f0bb4653.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/scene/c03/s09_棺材房/棺材互动/特写遮罩.png" +dest_files=["res://.godot/imported/特写遮罩.png-676888c92a7dc46e8f45cad0f0bb4653.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/asset/art/scene/c03/s09_棺材房/棺材互动/胶水.png b/asset/art/scene/c03/s09_棺材房/棺材互动/胶水.png new file mode 100644 index 00000000..5377336b Binary files /dev/null and b/asset/art/scene/c03/s09_棺材房/棺材互动/胶水.png differ diff --git a/asset/art/scene/c03/s09_棺材房/棺材互动/胶水.png.import b/asset/art/scene/c03/s09_棺材房/棺材互动/胶水.png.import new file mode 100644 index 00000000..c6b26c86 --- /dev/null +++ b/asset/art/scene/c03/s09_棺材房/棺材互动/胶水.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cd76oamv0msug" +path="res://.godot/imported/胶水.png-fca93c835a170d6ecb26e96a9f9d7be5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/scene/c03/s09_棺材房/棺材互动/胶水.png" +dest_files=["res://.godot/imported/胶水.png-fca93c835a170d6ecb26e96a9f9d7be5.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/asset/dialogue/event_stage.dialogue b/asset/dialogue/event_stage.dialogue index 087884df..c46c9c34 100644 --- a/asset/dialogue/event_stage.dialogue +++ b/asset/dialogue/event_stage.dialogue @@ -8,6 +8,11 @@ c02_musicbox_stage c02_madman_interacted_stage # 0:默认 1:寻找弹珠_老虎钳可以换弹珠 2:给出弹珠 3:游戏结束_小猫纸片 4:游戏结束_小猫离开 c02_ball_game_stage + +# c03 第二章 +# 0未开始 1邀请 2完成 +c03_invite_xchan_supper + => END ~ ArchiveStage diff --git a/manager/config_manager/global_config.gd b/manager/config_manager/global_config.gd index 187ba38a..c7b1dd2f 100644 --- a/manager/config_manager/global_config.gd +++ b/manager/config_manager/global_config.gd @@ -3,7 +3,7 @@ class_name GlobalConfig extends Resource #const DEBUG = true static var DEBUG = false # 影响事件的 release_stage # 0demo 1release -const RELEASE_STAGE := 1 +const RELEASE_STAGE := 0 # 与 Editor 编辑器有 Debugger 连接 diff --git a/manager/event_manager/event2d.gd b/manager/event_manager/event2d.gd index 6c9caabb..76771dd3 100644 --- a/manager/event_manager/event2d.gd +++ b/manager/event_manager/event2d.gd @@ -3,11 +3,33 @@ extends Node2D class_name Event2D # 当前事件 -@export var event: StringName -@export var hide_if_on_stage: Array[int] = [] +@export var event: StringName: + set(val): + if event != val: + event = val + if is_node_ready() and Engine.is_editor_hint(): + _auto_memo() +@export var hide_if_on_stage: Array[int] = []: + set(val): + if hide_if_on_stage != val: + hide_if_on_stage = val + if is_node_ready() and Engine.is_editor_hint(): + _auto_memo() # 前置依赖事件,为空时意味着无前置事件 -@export var pre_event: StringName -@export var hide_if_pre_on_stage: Array[int] = [] +@export var pre_event: StringName: + set(val): + if pre_event != val: + pre_event = val + if is_node_ready() and Engine.is_editor_hint(): + _auto_memo() +@export var hide_if_pre_on_stage: Array[int] = []: + set(val): + if hide_if_pre_on_stage != val: + hide_if_pre_on_stage = val + if is_node_ready() and Engine.is_editor_hint(): + _auto_memo() +@export_multiline var event_memo := "" +@export_tool_button("auto memo") var auto_memo = _auto_memo @export_tool_button("创建脚本") var create_script = _create_script @export_tool_button("复制 greater setter") var copy_greater_setter = _copy_greater_setter @export_tool_button("复制 setter") var copy_setter = _copy_setter @@ -113,3 +135,25 @@ func _copy_getter(): var text = 'EventManager.get_stage(&"%s")' % event DisplayServer.clipboard_set(text) print("Copied event getter: %s" % text) + + +func _auto_memo() -> void: + var memo_str = "HideIfOnStage:\n" + if event != "" and hide_if_on_stage: + memo_str += event + memo_str += "=" + memo_str += "|".join(hide_if_on_stage) + memo_str += "\n" + if pre_event != "" and hide_if_pre_on_stage: + memo_str += pre_event + memo_str += "=" + memo_str += "|".join(hide_if_pre_on_stage) + var existing_lines = event_memo.split("\n") + # 保留 # 开头的 line + var kept_lines = [] + for line in existing_lines: + if line.begins_with("#"): + kept_lines.append(line) + event_memo = "\n".join(kept_lines) + event_memo += "\n" if kept_lines else "" + event_memo += memo_str diff --git a/manager/event_manager/event_binder.gd b/manager/event_manager/event_binder.gd index 3907f1eb..c40fb0e5 100644 --- a/manager/event_manager/event_binder.gd +++ b/manager/event_manager/event_binder.gd @@ -1,26 +1,75 @@ @tool class_name EventBinder extends Node +@export_tool_button("auto memo") var auto_memo = _auto_memo +@export_multiline var memo := "" + @export_group("Updater", "updater") -@export var updater_event := &"" -@export_enum("enabler", "shower") var updater_mode := "enabler" +@export var updater_event := &"": + set(val): + if updater_event != val: + updater_event = val + if is_node_ready() and Engine.is_editor_hint(): + _auto_memo() +@export_enum("enabler", "shower") var updater_mode := "enabler": + set(val): + if updater_mode != val: + updater_mode = val + if is_node_ready() and Engine.is_editor_hint(): + _auto_memo() # 仅对 canvas item 生效; <=0 时无 ease -@export var updater_ease_duration := 1.0 -@export_enum("include", "exclude") var updater_stage_mode := "include" -@export var updater_stages: Array[int] = [1] +@export var updater_ease_duration := 1.0: + set(val): + if updater_ease_duration != val: + updater_ease_duration = val + if is_node_ready() and Engine.is_editor_hint(): + _auto_memo() +@export_enum("include", "exclude") var updater_stage_mode := "include": + set(val): + if updater_stage_mode != val: + updater_stage_mode = val + if is_node_ready() and Engine.is_editor_hint(): + _auto_memo() +@export var updater_stages: Array[int] = [1]: + set(val): + if updater_stages != val: + updater_stages = val + if is_node_ready() and Engine.is_editor_hint(): + _auto_memo() @export_group("Trigger", "trigger") -@export var trigger_event := &"" +@export var trigger_event := &"": + set(val): + if trigger_event != val: + trigger_event = val + if is_node_ready() and Engine.is_editor_hint(): + _auto_memo() @export_tool_button("AutoDetectMode") var trigger_auto_detect_mode := _auto_detect_mode -@export_enum("none", "interacted", "triggered", "played") var trigger_mode := "none" -@export_range(0, 10000, 1) var trigger_stage := 1 -@export var trigger_set_stage_if_greater := true +@export_enum("none", "interacted", "triggered", "played") var trigger_mode := "none": + set(val): + if trigger_mode != val: + trigger_mode = val + if is_node_ready() and Engine.is_editor_hint(): + _auto_memo() +@export_range(0, 10000, 1) var trigger_stage := 1: + set(val): + if trigger_stage != val: + trigger_stage = val + if is_node_ready() and Engine.is_editor_hint(): + _auto_memo() +@export var trigger_set_stage_if_greater := true: + set(val): + if trigger_set_stage_if_greater != val: + trigger_set_stage_if_greater = val + if is_node_ready() and Engine.is_editor_hint(): + _auto_memo() var _local_enable_event_stage := 0 func _ready() -> void: if Engine.is_editor_hint(): + _auto_memo() return var parent = get_parent() if not updater_event.is_empty(): @@ -102,3 +151,37 @@ func _auto_detect_mode(): trigger_mode = "played" else: printerr("[EventBinder] _auto_detect_mode cannot detect trigger mode. path:", get_path()) + + +#### TOOL BUTTON + + +func _auto_memo() -> void: + # updater release_stage[(!)=0|1] 时[显示|启用][parent.name.replace("Closeup", "")] + # trigger [parent] [picked|played...] 时 release_stage=1(greater|any) + var parent_name = get_parent().name.to_lower() + # replace english letters + var matcher = RegEx.create_from_string("^[a-z]*(.*)$") + var parent_name_match = matcher.search(parent_name).get_string(1) + if parent_name_match != "": + parent_name = parent_name_match + var memo_str = "" + if updater_event != "": + memo_str = updater_event + memo_str += "=" if updater_stage_mode == "include" else "!=" + memo_str += "|".join(updater_stages) + " 时" + memo_str += "显示" if updater_mode == "shower" else "启用" + memo_str += " [" + parent_name + "]\n" + if trigger_event != "" and trigger_mode != "none": + memo_str += "[" + parent_name + "] " + trigger_mode + "时" + memo_str += trigger_event + "=" + str(trigger_stage) + memo_str += "(greater)" if trigger_set_stage_if_greater else "(any)" + var existing_lines = memo.split("\n") + # 保留 # 开头的 line + var kept_lines = [] + for line in existing_lines: + if line.begins_with("#"): + kept_lines.append(line) + memo = "\n".join(kept_lines) + memo += "\n" if kept_lines else "" + memo += memo_str \ No newline at end of file diff --git a/scene/ground/scene/c03/s01_三楼.tscn b/scene/ground/scene/c03/s01_三楼.tscn index 85d80259..93b4b212 100644 --- a/scene/ground/scene/c03/s01_三楼.tscn +++ b/scene/ground/scene/c03/s01_三楼.tscn @@ -216,6 +216,7 @@ prop_key = "prop_奇怪的肉" [node name="EventBinder" type="Node" parent="Ground/DeployLayer/Interactable放肉处"] script = ExtResource("6_yaa68") +memo = "[放肉处] interacted时c03_s01_meat_put=1(greater)" trigger_event = &"c03_s01_meat_put" trigger_mode = "interacted" metadata/_custom_type_script = "uid://0wjaho6qkg6s" @@ -224,6 +225,7 @@ metadata/_custom_type_script = "uid://0wjaho6qkg6s" script = ExtResource("7_obrgj") event = &"c03_s01_meat_put" hide_if_on_stage = Array[int]([0, 2]) +event_memo = "c03_s01_meat_put=0|2" metadata/_custom_type_script = "uid://bkkiyk5jkdw4d" [node name="窗口闪动" type="AnimatedSprite2D" parent="Ground/DeployLayer/Event2D放肉后"] @@ -245,6 +247,8 @@ packed_scene = ExtResource("7_d27sg") [node name="EventBinder" type="Node" parent="Ground/DeployLayer/Event2D放肉后/CloseupDemo公告"] script = ExtResource("6_yaa68") +memo = "release_stage=0 时显示 [公告] +" updater_event = &"release_stage" updater_mode = "shower" updater_stages = Array[int]([0]) @@ -354,6 +358,8 @@ hook_method = "eavesdrop_luren" [node name="EventBinder" type="Node" parent="Ground/DeployLayer/Ambush偷听陆仁"] script = ExtResource("6_yaa68") +memo = "c03_s01_meat_put=1 时启用 [偷听陆仁] +" updater_event = &"c03_s01_meat_put" metadata/_custom_type_script = "uid://0wjaho6qkg6s" diff --git a/scene/ground/scene/c03/s02_瞎子新卧室.tscn b/scene/ground/scene/c03/s02_瞎子新卧室.tscn index e337738f..a479bdfa 100644 --- a/scene/ground/scene/c03/s02_瞎子新卧室.tscn +++ b/scene/ground/scene/c03/s02_瞎子新卧室.tscn @@ -169,13 +169,16 @@ position = Vector2(0, -2) scale = Vector2(0.5, 0.5) texture = ExtResource("7_u55tr") -[node name="Event2D偷听陆仁小蝶对话后" type="Node2D" parent="Ground/DeployLayer" index="4"] +[node name="Event2D偷听陆仁对话后" type="Node2D" parent="Ground/DeployLayer" index="4"] script = ExtResource("8_pixqd") +event = &"c03_invite_xchan_supper" pre_event = &"c03_eavesdrop_luren" hide_if_pre_on_stage = Array[int]([0]) +event_memo = "HideIfOnStage: +c03_eavesdrop_luren=0" metadata/_custom_type_script = "uid://bkkiyk5jkdw4d" -[node name="Sprite2D" type="Sprite2D" parent="Ground/DeployLayer/Event2D偷听陆仁小蝶对话后"] +[node name="Sprite2D" type="Sprite2D" parent="Ground/DeployLayer/Event2D偷听陆仁对话后"] position = Vector2(200, -14) texture = ExtResource("9_wdjh5") diff --git a/scene/ground/scene/debug_archive.txt b/scene/ground/scene/debug_archive.txt index 22b71790..c5ddd4ba 100644 --- a/scene/ground/scene/debug_archive.txt +++ b/scene/ground/scene/debug_archive.txt @@ -220,7 +220,7 @@ }, "handnote_c02_map_2": 0, "handnote_c02_shoe_giveToMouce": 0, -"player_x": 30.0 +"player_x": 600.0 }, "ground": { &"Ambush三男孩": { diff --git a/scene/ground/script/c03/s02_event_2d偷听陆仁小蝶对话后.gd b/scene/ground/script/c03/s02_event_2d偷听陆仁小蝶对话后.gd index 048346e5..2e3376d8 100644 --- a/scene/ground/script/c03/s02_event_2d偷听陆仁小蝶对话后.gd +++ b/scene/ground/script/c03/s02_event_2d偷听陆仁小蝶对话后.gd @@ -15,7 +15,9 @@ func _on_global_stage_updated(e: StringName, s: int): func _on_ground_ready(ground: Ground2D): - pass + if stage == 0: + # 邀请小蝉晚饭 + EventManager.set_stage(event, 1) func _on_pre_stage_updated():