盒子猫敲门与躲藏能力;hud 隐藏与 prop inventory 切换能力
This commit is contained in:
parent
bfa7fc40ac
commit
47086f56ca
@ -78,13 +78,13 @@
|
|||||||
[resource]
|
[resource]
|
||||||
animations = [{
|
animations = [{
|
||||||
"frames": [{
|
"frames": [{
|
||||||
"duration": 30.0,
|
"duration": 15.0,
|
||||||
"texture": ExtResource("1_g47xo")
|
"texture": ExtResource("1_g47xo")
|
||||||
}, {
|
}, {
|
||||||
"duration": 30.0,
|
"duration": 15.0,
|
||||||
"texture": ExtResource("2_3lx3k")
|
"texture": ExtResource("2_3lx3k")
|
||||||
}],
|
}],
|
||||||
"loop": true,
|
"loop": false,
|
||||||
"name": &"猪头怪呼吸",
|
"name": &"猪头怪呼吸",
|
||||||
"speed": 30.0
|
"speed": 30.0
|
||||||
}, {
|
}, {
|
||||||
@ -155,12 +155,65 @@ animations = [{
|
|||||||
"duration": 30.0,
|
"duration": 30.0,
|
||||||
"texture": ExtResource("24_6cnpw")
|
"texture": ExtResource("24_6cnpw")
|
||||||
}],
|
}],
|
||||||
"loop": true,
|
"loop": false,
|
||||||
"name": &"猪头怪抓盒子猫",
|
"name": &"猪头怪抓盒子猫",
|
||||||
"speed": 30.0
|
"speed": 30.0
|
||||||
}, {
|
}, {
|
||||||
"frames": [{
|
"frames": [{
|
||||||
"duration": 6.0,
|
"duration": 6.0,
|
||||||
|
"texture": ExtResource("9_3b7wk")
|
||||||
|
}, {
|
||||||
|
"duration": 6.0,
|
||||||
|
"texture": ExtResource("10_lvj16")
|
||||||
|
}, {
|
||||||
|
"duration": 15.0,
|
||||||
|
"texture": ExtResource("11_ty3yp")
|
||||||
|
}, {
|
||||||
|
"duration": 15.0,
|
||||||
|
"texture": ExtResource("12_x3isd")
|
||||||
|
}, {
|
||||||
|
"duration": 15.0,
|
||||||
|
"texture": ExtResource("13_hwoj5")
|
||||||
|
}, {
|
||||||
|
"duration": 6.0,
|
||||||
|
"texture": ExtResource("14_n6lou")
|
||||||
|
}, {
|
||||||
|
"duration": 6.0,
|
||||||
|
"texture": ExtResource("15_6p0ya")
|
||||||
|
}, {
|
||||||
|
"duration": 30.0,
|
||||||
|
"texture": ExtResource("16_uxs1n")
|
||||||
|
}, {
|
||||||
|
"duration": 6.0,
|
||||||
|
"texture": ExtResource("17_rdknj")
|
||||||
|
}, {
|
||||||
|
"duration": 6.0,
|
||||||
|
"texture": ExtResource("18_c28wc")
|
||||||
|
}, {
|
||||||
|
"duration": 6.0,
|
||||||
|
"texture": ExtResource("19_eo0ng")
|
||||||
|
}, {
|
||||||
|
"duration": 15.0,
|
||||||
|
"texture": ExtResource("20_r7gaq")
|
||||||
|
}, {
|
||||||
|
"duration": 30.0,
|
||||||
|
"texture": ExtResource("21_0tnvn")
|
||||||
|
}, {
|
||||||
|
"duration": 9.0,
|
||||||
|
"texture": ExtResource("22_algl1")
|
||||||
|
}, {
|
||||||
|
"duration": 9.0,
|
||||||
|
"texture": ExtResource("23_hexfl")
|
||||||
|
}, {
|
||||||
|
"duration": 30.0,
|
||||||
|
"texture": ExtResource("24_6cnpw")
|
||||||
|
}],
|
||||||
|
"loop": false,
|
||||||
|
"name": &"猪头怪抓盒子猫后段",
|
||||||
|
"speed": 30.0
|
||||||
|
}, {
|
||||||
|
"frames": [{
|
||||||
|
"duration": 6.0,
|
||||||
"texture": ExtResource("25_ty3yp")
|
"texture": ExtResource("25_ty3yp")
|
||||||
}, {
|
}, {
|
||||||
"duration": 6.0,
|
"duration": 6.0,
|
||||||
@ -184,7 +237,7 @@ animations = [{
|
|||||||
"duration": 6.0,
|
"duration": 6.0,
|
||||||
"texture": ExtResource("32_c28wc")
|
"texture": ExtResource("32_c28wc")
|
||||||
}],
|
}],
|
||||||
"loop": true,
|
"loop": false,
|
||||||
"name": &"猪头怪走路",
|
"name": &"猪头怪走路",
|
||||||
"speed": 30.0
|
"speed": 30.0
|
||||||
}, {
|
}, {
|
||||||
|
BIN
asset/audio/mixkit/mixkit-water-bubble-1317.wav
Normal file
BIN
asset/audio/mixkit/mixkit-water-bubble-1317.wav
Normal file
Binary file not shown.
24
asset/audio/mixkit/mixkit-water-bubble-1317.wav.import
Normal file
24
asset/audio/mixkit/mixkit-water-bubble-1317.wav.import
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="wav"
|
||||||
|
type="AudioStreamWAV"
|
||||||
|
uid="uid://cm2p6wqgfuv8y"
|
||||||
|
path="res://.godot/imported/mixkit-water-bubble-1317.wav-be4e28e0eae2edccd40066c5a04b907b.sample"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://asset/audio/mixkit/mixkit-water-bubble-1317.wav"
|
||||||
|
dest_files=["res://.godot/imported/mixkit-water-bubble-1317.wav-be4e28e0eae2edccd40066c5a04b907b.sample"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
force/8_bit=false
|
||||||
|
force/mono=false
|
||||||
|
force/max_rate=false
|
||||||
|
force/max_rate_hz=44100
|
||||||
|
edit/trim=false
|
||||||
|
edit/normalize=false
|
||||||
|
edit/loop_mode=0
|
||||||
|
edit/loop_begin=0
|
||||||
|
edit/loop_end=-1
|
||||||
|
compress/mode=2
|
@ -3,12 +3,12 @@
|
|||||||
importer="wav"
|
importer="wav"
|
||||||
type="AudioStreamWAV"
|
type="AudioStreamWAV"
|
||||||
uid="uid://7of24bqow07e"
|
uid="uid://7of24bqow07e"
|
||||||
path="res://.godot/imported/sfx_敲门1.wav-1c8265fc5da1dd78fdf657a9fa511d7b.sample"
|
path="res://.godot/imported/sfx_敲门1.wav-aa81516cb458ddb022d4221cfa4911f8.sample"
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://asset/audio/sfx/交互/第一章/sfx_敲门1.wav"
|
source_file="res://asset/audio/sfx/交互/sfx_敲门1.wav"
|
||||||
dest_files=["res://.godot/imported/sfx_敲门1.wav-1c8265fc5da1dd78fdf657a9fa511d7b.sample"]
|
dest_files=["res://.godot/imported/sfx_敲门1.wav-aa81516cb458ddb022d4221cfa4911f8.sample"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
@ -3,12 +3,12 @@
|
|||||||
importer="wav"
|
importer="wav"
|
||||||
type="AudioStreamWAV"
|
type="AudioStreamWAV"
|
||||||
uid="uid://dw8dprxhvas85"
|
uid="uid://dw8dprxhvas85"
|
||||||
path="res://.godot/imported/sfx_敲门2.wav-f372a18cad0983ad8369afcad6836870.sample"
|
path="res://.godot/imported/sfx_敲门2.wav-917059eb9a36ca4ab352ab80b1d16167.sample"
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://asset/audio/sfx/交互/第一章/sfx_敲门2.wav"
|
source_file="res://asset/audio/sfx/交互/sfx_敲门2.wav"
|
||||||
dest_files=["res://.godot/imported/sfx_敲门2.wav-f372a18cad0983ad8369afcad6836870.sample"]
|
dest_files=["res://.godot/imported/sfx_敲门2.wav-917059eb9a36ca4ab352ab80b1d16167.sample"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
@ -8,6 +8,8 @@ c02_11肉铺敲门_3,不做生意赶紧滚!,???,,
|
|||||||
c02_纸人互动_离开公寓1,你要离开芦昌公寓吗?,,,
|
c02_纸人互动_离开公寓1,你要离开芦昌公寓吗?,,,
|
||||||
c02_纸人互动_离开公寓2,离开,(response),,
|
c02_纸人互动_离开公寓2,离开,(response),,
|
||||||
c02_纸人互动_离开公寓3,留下,(response),,
|
c02_纸人互动_离开公寓3,留下,(response),,
|
||||||
|
c02_钻入隧道询问1,是否钻入隧道?,,,
|
||||||
|
c02_钻入隧道询问2,进入,(response),,
|
||||||
c02_6偷听对话_李氏_1_fx,真的假的?你钻进去啦,你这个体型进得去哒?,李兰,,
|
c02_6偷听对话_李氏_1_fx,真的假的?你钻进去啦,你这个体型进得去哒?,李兰,,
|
||||||
c02_6偷听对话_癞子_1_fx,小声点,让人听见了倒惹麻烦。,王守义,,[#db=3]
|
c02_6偷听对话_癞子_1_fx,小声点,让人听见了倒惹麻烦。,王守义,,[#db=3]
|
||||||
c02_6偷听对话_李氏_2_fx,那你说说,都看到什么啦?,李兰,,[#db=-5]
|
c02_6偷听对话_李氏_2_fx,那你说说,都看到什么啦?,李兰,,[#db=-5]
|
||||||
|
|
@ -5,6 +5,13 @@
|
|||||||
- 留下 [ID:c02_纸人互动_离开公寓3]
|
- 留下 [ID:c02_纸人互动_离开公寓3]
|
||||||
=> END
|
=> END
|
||||||
|
|
||||||
|
~ c02_钻入隧道询问
|
||||||
|
是否钻入隧道? [ID:c02_钻入隧道询问1]
|
||||||
|
- 进入 [ID:c02_钻入隧道询问2]
|
||||||
|
do GlobalFunctor.transfer_to_tunnel()
|
||||||
|
- 留下 [ID:c02_纸人互动_离开公寓3]
|
||||||
|
=> END
|
||||||
|
|
||||||
~ c02_04_李氏癞子
|
~ c02_04_李氏癞子
|
||||||
#[#anonymous]
|
#[#anonymous]
|
||||||
李兰: 真的假的?你钻进去啦,你这个体型进得去哒? [ID:c02_6偷听对话_李氏_1_fx]
|
李兰: 真的假的?你钻进去啦,你这个体型进得去哒? [ID:c02_6偷听对话_李氏_1_fx]
|
||||||
|
@ -3482,7 +3482,7 @@ animations = [{
|
|||||||
}],
|
}],
|
||||||
"loop": false,
|
"loop": false,
|
||||||
"name": &"c02_盒子猫停止躲藏",
|
"name": &"c02_盒子猫停止躲藏",
|
||||||
"speed": 5.0
|
"speed": 7.0
|
||||||
}, {
|
}, {
|
||||||
"frames": [{
|
"frames": [{
|
||||||
"duration": 1.0,
|
"duration": 1.0,
|
||||||
@ -3560,7 +3560,7 @@ animations = [{
|
|||||||
}],
|
}],
|
||||||
"loop": false,
|
"loop": false,
|
||||||
"name": &"c02_盒子猫躲藏",
|
"name": &"c02_盒子猫躲藏",
|
||||||
"speed": 5.0
|
"speed": 8.0
|
||||||
}, {
|
}, {
|
||||||
"frames": [{
|
"frames": [{
|
||||||
"duration": 1.0,
|
"duration": 1.0,
|
||||||
|
@ -40,6 +40,8 @@ class_name AssembledArchive extends Resource
|
|||||||
@export var player_running_locked := true
|
@export var player_running_locked := true
|
||||||
# prop hud 显示道具
|
# prop hud 显示道具
|
||||||
@export var prop_inventory: PropInventory
|
@export var prop_inventory: PropInventory
|
||||||
|
@export var prop_inventory_xxdie: PropInventory
|
||||||
|
@export var prop_inventory_xxxdie: PropInventory
|
||||||
|
|
||||||
@export_group("八音盒", "bayinhe")
|
@export_group("八音盒", "bayinhe")
|
||||||
@export var bayinhe_current_answer := [0, 0, 0, 0, 0, 0, 0, 0, 0]
|
@export var bayinhe_current_answer := [0, 0, 0, 0, 0, 0, 0, 0, 0]
|
||||||
@ -49,6 +51,10 @@ class_name AssembledArchive extends Resource
|
|||||||
func _init() -> void:
|
func _init() -> void:
|
||||||
if not prop_inventory:
|
if not prop_inventory:
|
||||||
prop_inventory = PropInventory.new()
|
prop_inventory = PropInventory.new()
|
||||||
|
if not prop_inventory_xxdie:
|
||||||
|
prop_inventory_xxdie = PropInventory.new()
|
||||||
|
if not prop_inventory_xxxdie:
|
||||||
|
prop_inventory_xxxdie = PropInventory.new()
|
||||||
|
|
||||||
|
|
||||||
func ground_archive(scene_name := current_scene) -> GroundArchive:
|
func ground_archive(scene_name := current_scene) -> GroundArchive:
|
||||||
|
@ -1,10 +0,0 @@
|
|||||||
extends Window
|
|
||||||
|
|
||||||
signal changed
|
|
||||||
|
|
||||||
@export var archive: AssembledArchive
|
|
||||||
|
|
||||||
func _ready() -> void:
|
|
||||||
var screen_size = DisplayServer.screen_get_size()
|
|
||||||
position = screen_size / 3
|
|
||||||
close_requested.connect(queue_free)
|
|
@ -1 +0,0 @@
|
|||||||
uid://457olpnqqdhr
|
|
@ -1,12 +0,0 @@
|
|||||||
[gd_scene load_steps=2 format=3 uid="uid://dfbmctdmc4ue6"]
|
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://457olpnqqdhr" path="res://manager/deploy/deployer_window.gd" id="1_rhcam"]
|
|
||||||
|
|
||||||
[node name="DeployerWindow" type="Window"]
|
|
||||||
auto_translate_mode = 1
|
|
||||||
title = "deployer"
|
|
||||||
position = Vector2i(2000, 300)
|
|
||||||
size = Vector2i(1200, 1000)
|
|
||||||
always_on_top = true
|
|
||||||
min_size = Vector2i(100, 100)
|
|
||||||
script = ExtResource("1_rhcam")
|
|
@ -1,12 +0,0 @@
|
|||||||
extends Node2D
|
|
||||||
|
|
||||||
@export var section_config: SectionConfig
|
|
||||||
|
|
||||||
# Called when the node enters the scene tree for the first time.
|
|
||||||
func _ready() -> void:
|
|
||||||
pass # Replace with function body.
|
|
||||||
|
|
||||||
|
|
||||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
|
||||||
func _process(delta: float) -> void:
|
|
||||||
pass
|
|
@ -1 +0,0 @@
|
|||||||
uid://cy8jsbw6w8sg0
|
|
@ -1,15 +0,0 @@
|
|||||||
[gd_scene load_steps=4 format=3 uid="uid://jveao8k40jp1"]
|
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://cy8jsbw6w8sg0" path="res://manager/deploy/section_deployer.gd" id="1_komad"]
|
|
||||||
[ext_resource type="PackedScene" uid="uid://dygvcmykn02n8" path="res://scene/main.tscn" id="2_si45r"]
|
|
||||||
[ext_resource type="PackedScene" uid="uid://dfbmctdmc4ue6" path="res://manager/deploy/deployer_window.tscn" id="3_iq8me"]
|
|
||||||
|
|
||||||
[node name="SectionDeployer" type="Node2D"]
|
|
||||||
script = ExtResource("1_komad")
|
|
||||||
|
|
||||||
[node name="Main" parent="." instance=ExtResource("2_si45r")]
|
|
||||||
|
|
||||||
[node name="DeployerWindow" parent="." instance=ExtResource("3_iq8me")]
|
|
||||||
position = Vector2i(390, 300)
|
|
||||||
|
|
||||||
[editable path="Main"]
|
|
25
manager/scene/global_functor.gd
Normal file
25
manager/scene/global_functor.gd
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
extends Node
|
||||||
|
|
||||||
|
|
||||||
|
# called from dialogue
|
||||||
|
# 传送进入隧道
|
||||||
|
func transfer_to_tunnel():
|
||||||
|
SceneManager.get_ground_loader().transition_to_scene("c02_s09", "right")
|
||||||
|
|
||||||
|
# called from Amush2D's global_method
|
||||||
|
# c02 盒子猫游戏,小猫交互门
|
||||||
|
var knocking = false
|
||||||
|
|
||||||
|
|
||||||
|
func c02_cat_play_with_door():
|
||||||
|
if knocking:
|
||||||
|
return
|
||||||
|
knocking = true
|
||||||
|
var knock_stream = preload("uid://7of24bqow07e")
|
||||||
|
SceneManager.freeze_player(1.5, 6, true)
|
||||||
|
await get_tree().create_timer(0.8).timeout
|
||||||
|
AudioManager.play_sfx(knock_stream)
|
||||||
|
await get_tree().create_timer(0.3).timeout
|
||||||
|
AudioManager.play_sfx(knock_stream)
|
||||||
|
await get_tree().create_timer(0.5).timeout
|
||||||
|
knocking = false
|
1
manager/scene/global_functor.gd.uid
Normal file
1
manager/scene/global_functor.gd.uid
Normal file
@ -0,0 +1 @@
|
|||||||
|
uid://cylss15sumkuw
|
@ -22,6 +22,13 @@ func _ready():
|
|||||||
func get_ground_loader() -> GroundLoader:
|
func get_ground_loader() -> GroundLoader:
|
||||||
return get_node_or_null("/root/Main/GroundLoader") as GroundLoader
|
return get_node_or_null("/root/Main/GroundLoader") as GroundLoader
|
||||||
|
|
||||||
|
# restart scene in debug launch...
|
||||||
|
func is_restarting() -> bool:
|
||||||
|
var ground = get_ground()
|
||||||
|
if ground:
|
||||||
|
return ground.restarting
|
||||||
|
return false
|
||||||
|
|
||||||
|
|
||||||
func get_ground() -> Ground2D:
|
func get_ground() -> Ground2D:
|
||||||
var loader = get_ground_loader()
|
var loader = get_ground_loader()
|
||||||
@ -150,6 +157,25 @@ func get_prop_hud() -> PropHud:
|
|||||||
return get_node_or_null("/root/Main/UILayer/PropHUD") as PropHud
|
return get_node_or_null("/root/Main/UILayer/PropHUD") as PropHud
|
||||||
|
|
||||||
|
|
||||||
|
func toggle_hud_display(display_hud: bool):
|
||||||
|
var prop_hud = get_prop_hud() as PropHud
|
||||||
|
if prop_hud:
|
||||||
|
if display_hud:
|
||||||
|
prop_hud.display_hud()
|
||||||
|
else:
|
||||||
|
prop_hud.hide_hud()
|
||||||
|
else:
|
||||||
|
printerr("toggle_hud_display: PropHud node not found")
|
||||||
|
|
||||||
|
|
||||||
|
func checkout_prop_inventory(inv):
|
||||||
|
var prop_hud = get_prop_hud() as PropHud
|
||||||
|
if prop_hud:
|
||||||
|
prop_hud.checkout_inventory(inv)
|
||||||
|
else:
|
||||||
|
printerr("checkout_prop_inventory: PropHud node not found")
|
||||||
|
|
||||||
|
|
||||||
func get_current_prop(must_selected: bool) -> String:
|
func get_current_prop(must_selected: bool) -> String:
|
||||||
var prop_hud = get_prop_hud()
|
var prop_hud = get_prop_hud()
|
||||||
if prop_hud and (not must_selected or prop_hud.selected):
|
if prop_hud and (not must_selected or prop_hud.selected):
|
||||||
@ -170,7 +196,7 @@ func enable_prop_item_silently(prop_key: String) -> void:
|
|||||||
if prop_hud:
|
if prop_hud:
|
||||||
prop_hud.enable_prop_item(prop_key, false)
|
prop_hud.enable_prop_item(prop_key, false)
|
||||||
else:
|
else:
|
||||||
printerr("enable_prop_item_silently PropHud node not found")
|
printerr("enable_prop_item_silently: PropHud node not found")
|
||||||
|
|
||||||
|
|
||||||
func enable_prop_item(prop_key: String) -> void:
|
func enable_prop_item(prop_key: String) -> void:
|
||||||
|
@ -48,6 +48,7 @@ SceneManager="*res://manager/scene/scene_manager.gd"
|
|||||||
AudioManager="*res://manager/audio_manager/audio_manager.gd"
|
AudioManager="*res://manager/audio_manager/audio_manager.gd"
|
||||||
EventManager="*res://manager/event_manager/event_manager.gd"
|
EventManager="*res://manager/event_manager/event_manager.gd"
|
||||||
DialogueManager="*res://addons/dialogue_manager/dialogue_manager.gd"
|
DialogueManager="*res://addons/dialogue_manager/dialogue_manager.gd"
|
||||||
|
GlobalFunctor="*res://manager/scene/global_functor.gd"
|
||||||
|
|
||||||
[debug]
|
[debug]
|
||||||
|
|
||||||
|
@ -14,17 +14,17 @@ signal sign_mark_offset_updated
|
|||||||
set(val):
|
set(val):
|
||||||
enabled = val
|
enabled = val
|
||||||
if is_node_ready():
|
if is_node_ready():
|
||||||
# sign_mark.enabled = val
|
|
||||||
_check_sign_display()
|
_check_sign_display()
|
||||||
@export_enum("enter", "area_enter", "interact") var trigger_mode := "enter":
|
@export_enum("enter", "area_enter", "interact") var trigger_mode := "enter":
|
||||||
set(val):
|
set(val):
|
||||||
trigger_mode = val
|
trigger_mode = val
|
||||||
if is_node_ready():
|
if is_node_ready():
|
||||||
_check_sign_display()
|
_check_sign_display()
|
||||||
|
@export var interacted_sign_texture: Texture2D
|
||||||
@export var one_shot := true
|
@export var one_shot := true
|
||||||
# 首次进入 tree 就直接启用
|
# 首次进入 tree 就直接启用
|
||||||
@export var on_first_enter_tree := false
|
@export var on_first_enter_tree := false
|
||||||
@export var freeze_time := 5.0
|
@export var freeze_time := 0.5
|
||||||
var hook_animation = ""
|
var hook_animation = ""
|
||||||
@export var lock_player_on_playing_dialogue = true
|
@export var lock_player_on_playing_dialogue = true
|
||||||
@export var hook_os_key := ""
|
@export var hook_os_key := ""
|
||||||
@ -48,6 +48,7 @@ var hook_animation = ""
|
|||||||
notify_property_list_changed()
|
notify_property_list_changed()
|
||||||
var hook_dialogue_title := ""
|
var hook_dialogue_title := ""
|
||||||
var hook_method := ""
|
var hook_method := ""
|
||||||
|
@export var global_method := ""
|
||||||
|
|
||||||
var dialogue_c01 = preload("res://asset/dialogue/c01.dialogue")
|
var dialogue_c01 = preload("res://asset/dialogue/c01.dialogue")
|
||||||
var dialogue_c02 = preload("res://asset/dialogue/c02.dialogue")
|
var dialogue_c02 = preload("res://asset/dialogue/c02.dialogue")
|
||||||
@ -72,6 +73,8 @@ var played: bool:
|
|||||||
played = val
|
played = val
|
||||||
if not Engine.is_editor_hint() and ground_archive:
|
if not Engine.is_editor_hint() and ground_archive:
|
||||||
ground_archive.set_pair(name, "played", played)
|
ground_archive.set_pair(name, "played", played)
|
||||||
|
if is_node_ready() and val and interacted_sign_texture:
|
||||||
|
sign_mark.sprite2d.texture = interacted_sign_texture
|
||||||
|
|
||||||
|
|
||||||
# Called when the node enters the scene tree for the first time.
|
# Called when the node enters the scene tree for the first time.
|
||||||
@ -81,29 +84,34 @@ func _ready() -> void:
|
|||||||
# 更新 hook_animation 的可选项
|
# 更新 hook_animation 的可选项
|
||||||
if animation_player:
|
if animation_player:
|
||||||
animation_player.animation_libraries_updated.connect(notify_property_list_changed)
|
animation_player.animation_libraries_updated.connect(notify_property_list_changed)
|
||||||
|
# editor 中展示 sign
|
||||||
|
sign_mark.enabled = true
|
||||||
|
sign_mark.display_sign = true
|
||||||
return
|
return
|
||||||
# setup default value
|
# setup default value
|
||||||
ground_archive = ArchiveManager.archive.ground_archive()
|
ground_archive = ArchiveManager.archive.ground_archive()
|
||||||
played = ground_archive.get_value(name, "played", false)
|
played = ground_archive.get_value(name, "played", false)
|
||||||
played_time = 0.0
|
played_time = 0.0
|
||||||
sign_mark.enabled = enabled
|
|
||||||
_check_sign_display()
|
_check_sign_display()
|
||||||
if played:
|
if played:
|
||||||
if GlobalConfig.DEBUG:
|
if GlobalConfig.DEBUG:
|
||||||
print("Ambush has played, name=", name, " one_shot=", one_shot)
|
print("Ambush has played, name=", name, " one_shot=", one_shot)
|
||||||
|
if interacted_sign_texture:
|
||||||
|
sign_mark.sprite2d.texture = interacted_sign_texture
|
||||||
if one_shot:
|
if one_shot:
|
||||||
return
|
return
|
||||||
sign_mark.interacted.connect(_interacted)
|
sign_mark.interacted.connect(_interacted)
|
||||||
area.body_entered.connect(_entered)
|
area.body_entered.connect(_entered)
|
||||||
area.area_entered.connect(_area_entered)
|
area.area_entered.connect(_area_entered)
|
||||||
if on_first_enter_tree:
|
if on_first_enter_tree:
|
||||||
call_deferred("_do_trigger")
|
_do_trigger.call_deferred()
|
||||||
|
|
||||||
|
|
||||||
func _check_sign_display():
|
func _check_sign_display():
|
||||||
sign_mark.enabled = enabled and (not one_shot or not played)
|
sign_mark.enabled = enabled and (not played or not one_shot)
|
||||||
sign_mark.display_sign = trigger_mode == "interact"
|
sign_mark.display_sign = trigger_mode == "interact"
|
||||||
|
|
||||||
|
|
||||||
func _get_animation_player() -> AnimationPlayer:
|
func _get_animation_player() -> AnimationPlayer:
|
||||||
var node = get_parent()
|
var node = get_parent()
|
||||||
while node and not node is Ground2D:
|
while node and not node is Ground2D:
|
||||||
@ -131,12 +139,12 @@ func _area_entered(_area = null):
|
|||||||
_do_trigger()
|
_do_trigger()
|
||||||
|
|
||||||
|
|
||||||
func _do_trigger():
|
func _do_trigger() -> bool:
|
||||||
var time = Time.get_ticks_msec()
|
var time = Time.get_ticks_msec()
|
||||||
# 确保只有一个线程进入该逻辑,因为有时 player 碰撞和首次进入 tree 都会触发该方法
|
# 确保只有一个线程进入该逻辑,因为有时 player 碰撞和首次进入 tree 都会触发该方法
|
||||||
if not trigger_mutex.try_lock():
|
if not trigger_mutex.try_lock():
|
||||||
print("Ambush trigger mutex lock fail, name=", name)
|
print("Ambush trigger mutex lock fail, name=", name)
|
||||||
return
|
return false
|
||||||
print("Ambush trigger mutex locked, name=", name)
|
print("Ambush trigger mutex locked, name=", name)
|
||||||
if not one_shot and freeze_time > 0:
|
if not one_shot and freeze_time > 0:
|
||||||
var time_left = freeze_time - (time - played_time) * 0.001
|
var time_left = freeze_time - (time - played_time) * 0.001
|
||||||
@ -144,10 +152,10 @@ func _do_trigger():
|
|||||||
if GlobalConfig.DEBUG:
|
if GlobalConfig.DEBUG:
|
||||||
print("Ambush freeze time not reached, time left=", time_left)
|
print("Ambush freeze time not reached, time left=", time_left)
|
||||||
trigger_mutex.unlock()
|
trigger_mutex.unlock()
|
||||||
return
|
return false
|
||||||
if one_shot and played:
|
if one_shot and played:
|
||||||
trigger_mutex.unlock()
|
trigger_mutex.unlock()
|
||||||
return
|
return false
|
||||||
played_time = time
|
played_time = time
|
||||||
played = true
|
played = true
|
||||||
trigger_mutex.unlock()
|
trigger_mutex.unlock()
|
||||||
@ -169,10 +177,13 @@ func _do_trigger():
|
|||||||
var animation_player = _get_animation_player()
|
var animation_player = _get_animation_player()
|
||||||
if animation_player:
|
if animation_player:
|
||||||
animation_player.call(hook_method)
|
animation_player.call(hook_method)
|
||||||
|
if global_method:
|
||||||
|
GlobalFunctor.call(global_method)
|
||||||
triggered.emit()
|
triggered.emit()
|
||||||
if GlobalConfig.DEBUG:
|
if GlobalConfig.DEBUG:
|
||||||
print("ambush triggered! name=", name)
|
print("ambush triggered! name=", name)
|
||||||
_check_sign_display()
|
_check_sign_display()
|
||||||
|
return true
|
||||||
|
|
||||||
|
|
||||||
func _on_dialogue_ended(_res):
|
func _on_dialogue_ended(_res):
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
[gd_scene load_steps=4 format=3 uid="uid://bnf3lkcbpx1ar"]
|
[gd_scene load_steps=5 format=3 uid="uid://bnf3lkcbpx1ar"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://pf3dyid8b35p" path="res://scene/entity/ambush.gd" id="1_rxgbr"]
|
[ext_resource type="Script" uid="uid://pf3dyid8b35p" path="res://scene/entity/ambush.gd" id="1_rxgbr"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://gui0ubwlwoi0" path="res://asset/art/ui/action_mark/UI手.png" id="2_1tnxk"]
|
||||||
[ext_resource type="PackedScene" uid="uid://c4tipnj1cr1j3" path="res://scene/entity/ux/sign.tscn" id="2_n51wc"]
|
[ext_resource type="PackedScene" uid="uid://c4tipnj1cr1j3" path="res://scene/entity/ux/sign.tscn" id="2_n51wc"]
|
||||||
|
|
||||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_iwrfx"]
|
[sub_resource type="RectangleShape2D" id="RectangleShape2D_iwrfx"]
|
||||||
@ -9,14 +10,13 @@ size = Vector2(10, 70)
|
|||||||
|
|
||||||
[node name="Ambush" type="Sprite2D"]
|
[node name="Ambush" type="Sprite2D"]
|
||||||
script = ExtResource("1_rxgbr")
|
script = ExtResource("1_rxgbr")
|
||||||
freeze_time = 0.5
|
interacted_sign_texture = ExtResource("2_1tnxk")
|
||||||
hook_dialogue_title = ""
|
hook_dialogue_title = ""
|
||||||
hook_animation = ""
|
hook_animation = ""
|
||||||
hook_method = ""
|
hook_method = ""
|
||||||
|
|
||||||
[node name="Sign" parent="." instance=ExtResource("2_n51wc")]
|
[node name="Sign" parent="." instance=ExtResource("2_n51wc")]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
display_sign = false
|
|
||||||
|
|
||||||
[node name="Area2D" type="Area2D" parent="."]
|
[node name="Area2D" type="Area2D" parent="."]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|
@ -5,6 +5,7 @@ class_name Ground2D extends Node2D
|
|||||||
# 用于在 debug 时态下,指定进入的 portal
|
# 用于在 debug 时态下,指定进入的 portal
|
||||||
@export_enum("left", "right", "1", "2", "3", "4", "5", "6", "7", "8", "9")
|
@export_enum("left", "right", "1", "2", "3", "4", "5", "6", "7", "8", "9")
|
||||||
var default_portal := "left"
|
var default_portal := "left"
|
||||||
|
@export var display_hud := true
|
||||||
@export_group("Player", "player_")
|
@export_group("Player", "player_")
|
||||||
@export var player_y_fixed := true:
|
@export var player_y_fixed := true:
|
||||||
set(val):
|
set(val):
|
||||||
@ -77,6 +78,7 @@ func _ready() -> void:
|
|||||||
printerr("scene_name is not valid")
|
printerr("scene_name is not valid")
|
||||||
if Engine.is_editor_hint():
|
if Engine.is_editor_hint():
|
||||||
return
|
return
|
||||||
|
SceneManager.toggle_hud_display(display_hud)
|
||||||
# 隐藏 player_line
|
# 隐藏 player_line
|
||||||
player_line.visible = false
|
player_line.visible = false
|
||||||
_set_camera_and_player_boundary()
|
_set_camera_and_player_boundary()
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
[gd_scene load_steps=10 format=3 uid="uid://dayyx4jerj7io"]
|
[gd_scene load_steps=9 format=3 uid="uid://dayyx4jerj7io"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://bee4ot74k4wg2" path="res://scene/ground/ground.gd" id="1_0vrlo"]
|
[ext_resource type="Script" uid="uid://bee4ot74k4wg2" path="res://scene/ground/ground.gd" id="1_0vrlo"]
|
||||||
[ext_resource type="PackedScene" uid="uid://dygvcmykn02n8" path="res://scene/main.tscn" id="2_6ggqv"]
|
|
||||||
[ext_resource type="PackedScene" uid="uid://cjhw5ecygrqty" path="res://scene/player/main_player.tscn" id="3_atha7"]
|
[ext_resource type="PackedScene" uid="uid://cjhw5ecygrqty" path="res://scene/player/main_player.tscn" id="3_atha7"]
|
||||||
[ext_resource type="PackedScene" uid="uid://61pis75a8fdq" path="res://scene/entity/portal.tscn" id="3_t73yw"]
|
[ext_resource type="PackedScene" uid="uid://61pis75a8fdq" path="res://scene/entity/portal.tscn" id="3_t73yw"]
|
||||||
[ext_resource type="PackedScene" uid="uid://cqkeegrcdjyg4" path="res://scene/ground/camera/camera_focus_marker.tscn" id="4_mgk0a"]
|
[ext_resource type="PackedScene" uid="uid://cqkeegrcdjyg4" path="res://scene/ground/camera/camera_focus_marker.tscn" id="4_mgk0a"]
|
||||||
@ -24,7 +23,6 @@ height = 500
|
|||||||
|
|
||||||
[node name="Ground" type="Node2D"]
|
[node name="Ground" type="Node2D"]
|
||||||
script = ExtResource("1_0vrlo")
|
script = ExtResource("1_0vrlo")
|
||||||
main_scene = ExtResource("2_6ggqv")
|
|
||||||
|
|
||||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||||
|
|
||||||
|
@ -75,11 +75,10 @@ metadata/_custom_type_script = "uid://rq6w1vuhuq1m"
|
|||||||
[node name="诡异环境音" type="AudioStreamPlayer" parent="Ground/AnimationPlayer" index="1"]
|
[node name="诡异环境音" type="AudioStreamPlayer" parent="Ground/AnimationPlayer" index="1"]
|
||||||
stream = ExtResource("5_eerhd")
|
stream = ExtResource("5_eerhd")
|
||||||
volume_db = -7.0
|
volume_db = -7.0
|
||||||
autoplay = true
|
|
||||||
bus = &"game_sfx"
|
bus = &"game_sfx"
|
||||||
script = ExtResource("4_p6k3c")
|
script = ExtResource("4_p6k3c")
|
||||||
mode = "场景背景音"
|
mode = "场景背景音"
|
||||||
"自动开始" = true
|
"自动开始" = false
|
||||||
"循环播放" = true
|
"循环播放" = true
|
||||||
"感应玩家操作" = false
|
"感应玩家操作" = false
|
||||||
metadata/_custom_type_script = "uid://rq6w1vuhuq1m"
|
metadata/_custom_type_script = "uid://rq6w1vuhuq1m"
|
||||||
|
@ -26,7 +26,7 @@ var counter: Interactable2D
|
|||||||
var wood_puppet: Pickable2D
|
var wood_puppet: Pickable2D
|
||||||
var catty_head: Pickable2D
|
var catty_head: Pickable2D
|
||||||
var door: Portal2D
|
var door: Portal2D
|
||||||
var portal: Portal2D
|
var portal_note: Note2D
|
||||||
|
|
||||||
|
|
||||||
func _on_ground_ready() -> void:
|
func _on_ground_ready() -> void:
|
||||||
@ -36,7 +36,7 @@ func _on_ground_ready() -> void:
|
|||||||
wood_puppet = $"../DeployLayer/Pickable木头人偶"
|
wood_puppet = $"../DeployLayer/Pickable木头人偶"
|
||||||
catty_head = $"../DeployLayer/Pickable小猫玩具脑袋"
|
catty_head = $"../DeployLayer/Pickable小猫玩具脑袋"
|
||||||
door = $"../DeployLayer/portal_left"
|
door = $"../DeployLayer/portal_left"
|
||||||
portal = $"../DeployLayer/portal_1"
|
portal_note = $"../DeployLayer/Note进入隧道询问"
|
||||||
|
|
||||||
# 进过瞎子卧室后,通道关闭
|
# 进过瞎子卧室后,通道关闭
|
||||||
if ArchiveManager.get_global_value("c02_the_blind_room_unlocked"):
|
if ArchiveManager.get_global_value("c02_the_blind_room_unlocked"):
|
||||||
@ -165,14 +165,14 @@ func after_counter_moved():
|
|||||||
# default_counter_x +- 40
|
# default_counter_x +- 40
|
||||||
var x_diff = current_x - default_counter_x
|
var x_diff = current_x - default_counter_x
|
||||||
if x_diff > -40 and x_diff < 40:
|
if x_diff > -40 and x_diff < 40:
|
||||||
portal.enabled = false
|
portal_note.enabled = false
|
||||||
catty_head.enabled = false
|
catty_head.enabled = false
|
||||||
return
|
return
|
||||||
catty_head.enabled = true
|
catty_head.enabled = true
|
||||||
# 进过瞎子卧室后,通道关闭
|
# 进过瞎子卧室后,通道关闭
|
||||||
var entered = ArchiveManager.get_global_value("c02_the_blind_room_unlocked", false)
|
var entered = ArchiveManager.get_global_value("c02_the_blind_room_unlocked", false)
|
||||||
if not entered and catty_head.picked:
|
if not entered and catty_head.picked:
|
||||||
portal.enabled = true
|
portal_note.enabled = true
|
||||||
|
|
||||||
|
|
||||||
func _on_pick_catty_head() -> void:
|
func _on_pick_catty_head() -> void:
|
||||||
@ -191,4 +191,4 @@ func _on_pick_catty_head() -> void:
|
|||||||
SceneManager.enable_prop_item("prop_小猫玩具完整")
|
SceneManager.enable_prop_item("prop_小猫玩具完整")
|
||||||
# 进过瞎子卧室后,通道关闭
|
# 进过瞎子卧室后,通道关闭
|
||||||
if not ArchiveManager.get_global_value("c02_the_blind_room_unlocked"):
|
if not ArchiveManager.get_global_value("c02_the_blind_room_unlocked"):
|
||||||
portal.enabled = true
|
portal_note.enabled = true
|
||||||
|
@ -1,15 +1,16 @@
|
|||||||
[gd_scene load_steps=25 format=3 uid="uid://dny21yhtuteap"]
|
[gd_scene load_steps=26 format=3 uid="uid://dny21yhtuteap"]
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_w7j0m"]
|
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_w7j0m"]
|
||||||
[ext_resource type="Script" uid="uid://dkkey7qillk15" path="res://scene/ground/scene/c02/s10_animation.gd" id="2_egtqi"]
|
[ext_resource type="Script" uid="uid://dkkey7qillk15" path="res://scene/ground/scene/c02/s10_animation.gd" id="2_egtqi"]
|
||||||
[ext_resource type="AudioStream" uid="uid://6gttowdwmado" path="res://asset/audio/sfx/环境音/第一章/房间内部场景1.wav" id="3_chbaa"]
|
[ext_resource type="AudioStream" uid="uid://6gttowdwmado" path="res://asset/audio/sfx/环境音/第一章/房间内部场景1.wav" id="3_chbaa"]
|
||||||
[ext_resource type="Texture2D" uid="uid://molvyfyy63ik" path="res://asset/art/scene/c02/s10_空房间/bg_空房间.png" id="3_ox8et"]
|
[ext_resource type="Texture2D" uid="uid://molvyfyy63ik" path="res://asset/art/scene/c02/s10_空房间/bg_空房间.png" id="3_ox8et"]
|
||||||
[ext_resource type="Script" uid="uid://rq6w1vuhuq1m" path="res://scene/entity/audio/sfx.gd" id="4_chbaa"]
|
[ext_resource type="Script" uid="uid://rq6w1vuhuq1m" path="res://scene/entity/audio/sfx.gd" id="4_chbaa"]
|
||||||
[ext_resource type="PackedScene" uid="uid://61pis75a8fdq" path="res://scene/entity/portal.tscn" id="4_pde4i"]
|
|
||||||
[ext_resource type="PackedScene" uid="uid://cw3q5pvciumil" path="res://scene/entity/interactable.tscn" id="5_ylhfc"]
|
[ext_resource type="PackedScene" uid="uid://cw3q5pvciumil" path="res://scene/entity/interactable.tscn" id="5_ylhfc"]
|
||||||
[ext_resource type="PackedScene" uid="uid://dsa6frlw6e6gg" path="res://scene/entity/pickable.tscn" id="6_27dvh"]
|
[ext_resource type="PackedScene" uid="uid://dsa6frlw6e6gg" path="res://scene/entity/pickable.tscn" id="6_27dvh"]
|
||||||
[ext_resource type="Texture2D" uid="uid://cuno8okh8ytw2" path="res://asset/art/scene/c02/s10_空房间/柜子.png" id="6_mty8e"]
|
[ext_resource type="Texture2D" uid="uid://cuno8okh8ytw2" path="res://asset/art/scene/c02/s10_空房间/柜子.png" id="6_mty8e"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://jr1yd46wm5je" path="res://scene/entity/note.tscn" id="7_th1ek"]
|
||||||
[ext_resource type="Texture2D" uid="uid://dg43u88jwlbpu" path="res://asset/art/prop/c02/新小猫头.png" id="8_3ftnp"]
|
[ext_resource type="Texture2D" uid="uid://dg43u88jwlbpu" path="res://asset/art/prop/c02/新小猫头.png" id="8_3ftnp"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://gui0ubwlwoi0" path="res://asset/art/ui/action_mark/UI手.png" id="8_to1d1"]
|
||||||
[ext_resource type="Texture2D" uid="uid://cdsq0ylmgtfq0" path="res://asset/art/prop/c02/小蝉人偶.png" id="12_27dvh"]
|
[ext_resource type="Texture2D" uid="uid://cdsq0ylmgtfq0" path="res://asset/art/prop/c02/小蝉人偶.png" id="12_27dvh"]
|
||||||
[ext_resource type="PackedScene" uid="uid://cxw5rovg5mu1a" path="res://scene/ground/script/c02/s00_煤油灯.tscn" id="13_27dvh"]
|
[ext_resource type="PackedScene" uid="uid://cxw5rovg5mu1a" path="res://scene/ground/script/c02/s00_煤油灯.tscn" id="13_27dvh"]
|
||||||
[ext_resource type="PackedScene" uid="uid://bnf3lkcbpx1ar" path="res://scene/entity/ambush.tscn" id="14_3ftnp"]
|
[ext_resource type="PackedScene" uid="uid://bnf3lkcbpx1ar" path="res://scene/entity/ambush.tscn" id="14_3ftnp"]
|
||||||
@ -71,7 +72,6 @@ metadata/_edit_horizontal_guides_ = [87.0, 86.0]
|
|||||||
|
|
||||||
[node name="Ground" parent="." instance=ExtResource("1_w7j0m")]
|
[node name="Ground" parent="." instance=ExtResource("1_w7j0m")]
|
||||||
scene_name = "c02_s10"
|
scene_name = "c02_s10"
|
||||||
default_portal = "1"
|
|
||||||
player_y = 60
|
player_y = 60
|
||||||
|
|
||||||
[node name="AnimationPlayer" parent="Ground" index="0"]
|
[node name="AnimationPlayer" parent="Ground" index="0"]
|
||||||
@ -109,14 +109,12 @@ matched_sign_texture = null
|
|||||||
position = Vector2(510, 20.7047)
|
position = Vector2(510, 20.7047)
|
||||||
matched_sign_texture = null
|
matched_sign_texture = null
|
||||||
|
|
||||||
[node name="portal_1" parent="Ground/DeployLayer" index="2" instance=ExtResource("4_pde4i")]
|
[node name="Note进入隧道询问" parent="Ground/DeployLayer" index="2" instance=ExtResource("7_th1ek")]
|
||||||
position = Vector2(363, 54.2267)
|
position = Vector2(362, 20)
|
||||||
debug_note = "通往裂缝"
|
mode = "ballon"
|
||||||
enabled = false
|
dialogue = "c02"
|
||||||
portal_name = "1"
|
note_sign_texture = ExtResource("8_to1d1")
|
||||||
target_scene = "c02_s09"
|
note_key = "c02_钻入隧道询问"
|
||||||
target_portal = "right"
|
|
||||||
matched_sign_texture = null
|
|
||||||
|
|
||||||
[node name="小蜡烛" type="AnimatedSprite2D" parent="Ground/DeployLayer" index="3"]
|
[node name="小蜡烛" type="AnimatedSprite2D" parent="Ground/DeployLayer" index="3"]
|
||||||
self_modulate = Color(0.611765, 0.611765, 0.611765, 1)
|
self_modulate = Color(0.611765, 0.611765, 0.611765, 1)
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
[node name="Ground" parent="." instance=ExtResource("1_ngo77")]
|
[node name="Ground" parent="." instance=ExtResource("1_ngo77")]
|
||||||
scene_name = "c02_s12"
|
scene_name = "c02_s12"
|
||||||
|
display_hud = null
|
||||||
player_y = 87
|
player_y = 87
|
||||||
footstep_type = "盒子猫"
|
footstep_type = "盒子猫"
|
||||||
|
|
||||||
@ -22,13 +23,13 @@ texture = ExtResource("3_oskpk")
|
|||||||
offset = Vector2(0, -102)
|
offset = Vector2(0, -102)
|
||||||
|
|
||||||
[node name="portal_left" parent="Ground/DeployLayer" index="0"]
|
[node name="portal_left" parent="Ground/DeployLayer" index="0"]
|
||||||
position = Vector2(152, 50)
|
position = Vector2(152, 56)
|
||||||
target_scene = "c02_s17"
|
target_scene = "c02_s17"
|
||||||
target_portal = "1"
|
target_portal = "1"
|
||||||
status = "opened"
|
status = "opened"
|
||||||
|
|
||||||
[node name="portal_right" parent="Ground/DeployLayer" index="1"]
|
[node name="portal_right" parent="Ground/DeployLayer" index="1"]
|
||||||
position = Vector2(579, 0)
|
position = Vector2(465, 21)
|
||||||
|
|
||||||
[node name="小猫初始动画" type="AnimatedSprite2D" parent="Ground/DeployLayer" index="2"]
|
[node name="小猫初始动画" type="AnimatedSprite2D" parent="Ground/DeployLayer" index="2"]
|
||||||
position = Vector2(211, 3)
|
position = Vector2(211, 3)
|
||||||
@ -49,6 +50,9 @@ position = Vector2(3584, -7)
|
|||||||
[node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"]
|
[node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"]
|
||||||
points = PackedVector2Array(37, 150, 400, 150)
|
points = PackedVector2Array(37, 150, 400, 150)
|
||||||
|
|
||||||
|
[node name="DirectionalLight2D" parent="Ground" index="8"]
|
||||||
|
blend_mode = 1
|
||||||
|
|
||||||
[node name="盒子猫CanvasLayer" parent="Ground" instance=ExtResource("4_vv3sh")]
|
[node name="盒子猫CanvasLayer" parent="Ground" instance=ExtResource("4_vv3sh")]
|
||||||
visible = false
|
visible = false
|
||||||
offset = Vector2(-40, -158)
|
offset = Vector2(-40, -158)
|
||||||
|
@ -1,20 +1,24 @@
|
|||||||
[gd_scene load_steps=11 format=3 uid="uid://bvjutch6jex0v"]
|
[gd_scene load_steps=13 format=3 uid="uid://bvjutch6jex0v"]
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_71lma"]
|
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_71lma"]
|
||||||
[ext_resource type="Script" uid="uid://28ujp27cbdh2" path="res://scene/ground/scene/c02/s13_animation.gd" id="2_w5nqu"]
|
[ext_resource type="Script" uid="uid://28ujp27cbdh2" path="res://scene/ground/scene/c02/s13_animation.gd" id="2_w5nqu"]
|
||||||
[ext_resource type="AudioStream" uid="uid://ccng5y2fip6mc" path="res://asset/audio/sfx/UI/开锁声.mp3" id="3_g6cxj"]
|
[ext_resource type="AudioStream" uid="uid://ccng5y2fip6mc" path="res://asset/audio/sfx/UI/开锁声.mp3" id="3_g6cxj"]
|
||||||
[ext_resource type="Texture2D" uid="uid://dweafdywxenu6" path="res://asset/art/scene/c02/s12_to_s17_盒子猫/bg_二楼楼道.png" id="3_miykx"]
|
[ext_resource type="Texture2D" uid="uid://dweafdywxenu6" path="res://asset/art/scene/c02/s12_to_s17_盒子猫/bg_二楼楼道.png" id="3_miykx"]
|
||||||
[ext_resource type="Texture2D" uid="uid://b3ootg88b63rb" path="res://asset/art/scene/c02/旧版/s13_院子诡异版/fg_楼梯调色后.png" id="4_4adgb"]
|
[ext_resource type="Texture2D" uid="uid://b3ootg88b63rb" path="res://asset/art/scene/c02/旧版/s13_院子诡异版/fg_楼梯调色后.png" id="4_4adgb"]
|
||||||
[ext_resource type="PackedScene" uid="uid://61pis75a8fdq" path="res://scene/entity/portal.tscn" id="4_u2fv1"]
|
|
||||||
[ext_resource type="Script" uid="uid://rq6w1vuhuq1m" path="res://scene/entity/audio/sfx.gd" id="4_yywsi"]
|
[ext_resource type="Script" uid="uid://rq6w1vuhuq1m" path="res://scene/entity/audio/sfx.gd" id="4_yywsi"]
|
||||||
[ext_resource type="PackedScene" uid="uid://jr1yd46wm5je" path="res://scene/entity/note.tscn" id="5_gge8e"]
|
[ext_resource type="PackedScene" uid="uid://jr1yd46wm5je" path="res://scene/entity/note.tscn" id="5_gge8e"]
|
||||||
[ext_resource type="Texture2D" uid="uid://csrfyvaufo1wb" path="res://asset/art/scene/c02/s12_to_s17_盒子猫/l_瞎子理发店光.png" id="6_gge8e"]
|
[ext_resource type="Texture2D" uid="uid://csrfyvaufo1wb" path="res://asset/art/scene/c02/s12_to_s17_盒子猫/l_瞎子理发店光.png" id="6_gge8e"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://gui0ubwlwoi0" path="res://asset/art/ui/action_mark/UI手.png" id="7_g6cxj"]
|
||||||
[ext_resource type="PackedScene" uid="uid://khwxm5qbfj3k" path="res://scene/ground/script/c02/盒子猫canvas_layer.tscn" id="7_u2fv1"]
|
[ext_resource type="PackedScene" uid="uid://khwxm5qbfj3k" path="res://scene/ground/script/c02/盒子猫canvas_layer.tscn" id="7_u2fv1"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://bnf3lkcbpx1ar" path="res://scene/entity/ambush.tscn" id="9_yywsi"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://dewbg4phd8c17" path="res://scene/ground/script/c02/追猫猪头怪.tscn" id="10_kmk38"]
|
||||||
|
|
||||||
[node name="S13" type="Node2D"]
|
[node name="S13" type="Node2D"]
|
||||||
|
|
||||||
[node name="Ground" parent="." instance=ExtResource("1_71lma")]
|
[node name="Ground" parent="." instance=ExtResource("1_71lma")]
|
||||||
scene_name = "c02_s13"
|
scene_name = "c02_s13"
|
||||||
|
display_hud = null
|
||||||
|
player_y = 85
|
||||||
footstep_type = "盒子猫"
|
footstep_type = "盒子猫"
|
||||||
|
|
||||||
[node name="AnimationPlayer" parent="Ground" index="0"]
|
[node name="AnimationPlayer" parent="Ground" index="0"]
|
||||||
@ -29,35 +33,57 @@ metadata/_custom_type_script = "uid://rq6w1vuhuq1m"
|
|||||||
|
|
||||||
[node name="BGSprite2D" parent="Ground" index="1"]
|
[node name="BGSprite2D" parent="Ground" index="1"]
|
||||||
texture = ExtResource("3_miykx")
|
texture = ExtResource("3_miykx")
|
||||||
offset = Vector2(0, -105)
|
offset = Vector2(0, -102)
|
||||||
|
|
||||||
[node name="portal_left" parent="Ground/DeployLayer" index="0"]
|
[node name="portal_left" parent="Ground/DeployLayer" index="0"]
|
||||||
position = Vector2(40, 48)
|
position = Vector2(36, 54)
|
||||||
target_scene = "c02_s14"
|
target_scene = "c02_s14"
|
||||||
target_portal = "left"
|
target_portal = "left"
|
||||||
|
|
||||||
[node name="portal_right" parent="Ground/DeployLayer" index="1"]
|
[node name="portal_right" parent="Ground/DeployLayer" index="1"]
|
||||||
position = Vector2(776, 52)
|
position = Vector2(776, 55)
|
||||||
target_scene = "c02_s17"
|
target_scene = "c02_s17"
|
||||||
target_portal = "right"
|
target_portal = "right"
|
||||||
|
|
||||||
[node name="portal_1" parent="Ground/DeployLayer" index="2" instance=ExtResource("4_u2fv1")]
|
[node name="NotePortal" parent="Ground/DeployLayer" index="2" instance=ExtResource("5_gge8e")]
|
||||||
position = Vector2(106, 51)
|
position = Vector2(853, 6)
|
||||||
portal_name = "1"
|
note_sign_texture = ExtResource("7_g6cxj")
|
||||||
target_scene = "c02_s12"
|
|
||||||
target_portal = "left"
|
|
||||||
status = "opened"
|
|
||||||
|
|
||||||
[node name="NotePortal" parent="Ground/DeployLayer" index="3" instance=ExtResource("5_gge8e")]
|
|
||||||
position = Vector2(852, 0)
|
|
||||||
note_key = "notes_无法通过"
|
note_key = "notes_无法通过"
|
||||||
|
|
||||||
[node name="终点光芒" type="Sprite2D" parent="Ground/DeployLayer" index="4"]
|
[node name="终点光芒" type="Sprite2D" parent="Ground/DeployLayer" index="3"]
|
||||||
modulate = Color(1, 1, 1, 0.34902)
|
modulate = Color(1, 1, 1, 0.34902)
|
||||||
position = Vector2(226, 11)
|
position = Vector2(226, 11)
|
||||||
texture = ExtResource("6_gge8e")
|
texture = ExtResource("6_gge8e")
|
||||||
|
|
||||||
|
[node name="Ambush猫咪敲门互动" parent="Ground/DeployLayer" index="4" instance=ExtResource("9_yywsi")]
|
||||||
|
position = Vector2(103, 6)
|
||||||
|
trigger_mode = "interact"
|
||||||
|
one_shot = false
|
||||||
|
freeze_time = 1.5
|
||||||
|
global_method = "c02_cat_play_with_door"
|
||||||
|
|
||||||
|
[node name="Ambush猫咪敲门互动2" parent="Ground/DeployLayer" index="5" instance=ExtResource("9_yywsi")]
|
||||||
|
position = Vector2(539, 6)
|
||||||
|
trigger_mode = "interact"
|
||||||
|
one_shot = false
|
||||||
|
freeze_time = 1.5
|
||||||
|
global_method = "c02_cat_play_with_door"
|
||||||
|
|
||||||
|
[node name="Ambush猫咪敲门互动3" parent="Ground/DeployLayer" index="6" instance=ExtResource("9_yywsi")]
|
||||||
|
position = Vector2(663, 5)
|
||||||
|
trigger_mode = "interact"
|
||||||
|
one_shot = false
|
||||||
|
freeze_time = 1.5
|
||||||
|
global_method = "c02_cat_play_with_door"
|
||||||
|
|
||||||
|
[node name="追猫猪头怪" parent="Ground/DeployLayer" index="7" instance=ExtResource("10_kmk38")]
|
||||||
|
position = Vector2(642, 17)
|
||||||
|
|
||||||
|
[node name="追猫猪头怪2" parent="Ground/DeployLayer" index="8" instance=ExtResource("10_kmk38")]
|
||||||
|
position = Vector2(154, 18)
|
||||||
|
|
||||||
[node name="MainPlayer" parent="Ground" index="4"]
|
[node name="MainPlayer" parent="Ground" index="4"]
|
||||||
|
position = Vector2(41, 73)
|
||||||
character = "盒子猫"
|
character = "盒子猫"
|
||||||
|
|
||||||
[node name="楼梯" type="Sprite2D" parent="Ground/ParallaxForeground/BGParallaxLayer" index="0"]
|
[node name="楼梯" type="Sprite2D" parent="Ground/ParallaxForeground/BGParallaxLayer" index="0"]
|
||||||
|
@ -10,6 +10,8 @@
|
|||||||
|
|
||||||
[node name="Ground" parent="." instance=ExtResource("1_cr1hi")]
|
[node name="Ground" parent="." instance=ExtResource("1_cr1hi")]
|
||||||
scene_name = "c02_s14"
|
scene_name = "c02_s14"
|
||||||
|
display_hud = null
|
||||||
|
player_y = 85
|
||||||
footstep_type = "盒子猫"
|
footstep_type = "盒子猫"
|
||||||
|
|
||||||
[node name="AnimationPlayer" parent="Ground" index="0"]
|
[node name="AnimationPlayer" parent="Ground" index="0"]
|
||||||
@ -18,30 +20,32 @@ oneshot_animation = ""
|
|||||||
|
|
||||||
[node name="BGSprite2D" parent="Ground" index="1"]
|
[node name="BGSprite2D" parent="Ground" index="1"]
|
||||||
texture = ExtResource("3_cr1hi")
|
texture = ExtResource("3_cr1hi")
|
||||||
offset = Vector2(0, -105)
|
offset = Vector2(0, -102)
|
||||||
|
|
||||||
[node name="portal_left" parent="Ground/DeployLayer" index="0"]
|
[node name="portal_left" parent="Ground/DeployLayer" index="0"]
|
||||||
position = Vector2(354, 49)
|
position = Vector2(363, 58)
|
||||||
target_scene = "c02_s13"
|
target_scene = "c02_s13"
|
||||||
target_portal = "left"
|
target_portal = "left"
|
||||||
|
|
||||||
[node name="portal_right" parent="Ground/DeployLayer" index="1"]
|
[node name="portal_right" parent="Ground/DeployLayer" index="1"]
|
||||||
position = Vector2(564, 48)
|
position = Vector2(565, 56)
|
||||||
target_scene = "c02_s15"
|
target_scene = "c02_s15"
|
||||||
target_portal = "right"
|
target_portal = "right"
|
||||||
|
|
||||||
[node name="portal_1" parent="Ground/DeployLayer" index="2" instance=ExtResource("4_o47bv")]
|
[node name="portal_1" parent="Ground/DeployLayer" index="2" instance=ExtResource("4_o47bv")]
|
||||||
position = Vector2(494, 48)
|
position = Vector2(492, 57)
|
||||||
portal_name = "1"
|
portal_name = "1"
|
||||||
target_scene = "c02_s16"
|
target_scene = "c02_s16"
|
||||||
target_portal = "right"
|
target_portal = "right"
|
||||||
|
|
||||||
[node name="MainPlayer" parent="Ground" index="4"]
|
[node name="MainPlayer" parent="Ground" index="4"]
|
||||||
|
position = Vector2(41, 73)
|
||||||
character = "盒子猫"
|
character = "盒子猫"
|
||||||
|
|
||||||
[node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"]
|
[node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"]
|
||||||
points = PackedVector2Array(37, 150, 660, 150)
|
points = PackedVector2Array(101, 150, 660, 150)
|
||||||
|
|
||||||
[node name="盒子猫CanvasLayer" parent="Ground" instance=ExtResource("5_cr1hi")]
|
[node name="盒子猫CanvasLayer" parent="Ground" instance=ExtResource("5_cr1hi")]
|
||||||
|
visible = false
|
||||||
|
|
||||||
[editable path="Ground"]
|
[editable path="Ground"]
|
||||||
|
@ -1,16 +1,18 @@
|
|||||||
[gd_scene load_steps=6 format=3 uid="uid://b21p53g42j2nt"]
|
[gd_scene load_steps=7 format=3 uid="uid://b21p53g42j2nt"]
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_qxg0l"]
|
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_qxg0l"]
|
||||||
[ext_resource type="Script" uid="uid://ebaq235h32fd" path="res://scene/ground/scene/c02/s15_animation.gd" id="2_etqjj"]
|
[ext_resource type="Script" uid="uid://ebaq235h32fd" path="res://scene/ground/scene/c02/s15_animation.gd" id="2_etqjj"]
|
||||||
[ext_resource type="Texture2D" uid="uid://c4eb71kdnqy3y" path="res://asset/art/scene/c02/s12_to_s17_盒子猫/bg_一楼内侧楼道(粉笔画).png" id="3_qxg0l"]
|
[ext_resource type="Texture2D" uid="uid://c4eb71kdnqy3y" path="res://asset/art/scene/c02/s12_to_s17_盒子猫/bg_一楼内侧楼道(粉笔画).png" id="3_qxg0l"]
|
||||||
[ext_resource type="PackedScene" uid="uid://jr1yd46wm5je" path="res://scene/entity/note.tscn" id="4_etqjj"]
|
[ext_resource type="PackedScene" uid="uid://jr1yd46wm5je" path="res://scene/entity/note.tscn" id="4_etqjj"]
|
||||||
[ext_resource type="PackedScene" uid="uid://khwxm5qbfj3k" path="res://scene/ground/script/c02/盒子猫canvas_layer.tscn" id="5_isic3"]
|
[ext_resource type="PackedScene" uid="uid://khwxm5qbfj3k" path="res://scene/ground/script/c02/盒子猫canvas_layer.tscn" id="5_isic3"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://gui0ubwlwoi0" path="res://asset/art/ui/action_mark/UI手.png" id="5_qxg0l"]
|
||||||
|
|
||||||
[node name="S15" type="Node2D"]
|
[node name="S15" type="Node2D"]
|
||||||
|
|
||||||
[node name="Ground" parent="." instance=ExtResource("1_qxg0l")]
|
[node name="Ground" parent="." instance=ExtResource("1_qxg0l")]
|
||||||
scene_name = "c02_s15"
|
scene_name = "c02_s15"
|
||||||
player_y = 60
|
display_hud = null
|
||||||
|
player_y = 85
|
||||||
footstep_type = "盒子猫"
|
footstep_type = "盒子猫"
|
||||||
|
|
||||||
[node name="AnimationPlayer" parent="Ground" index="0"]
|
[node name="AnimationPlayer" parent="Ground" index="0"]
|
||||||
@ -19,22 +21,23 @@ oneshot_animation = ""
|
|||||||
|
|
||||||
[node name="BGSprite2D" parent="Ground" index="1"]
|
[node name="BGSprite2D" parent="Ground" index="1"]
|
||||||
texture = ExtResource("3_qxg0l")
|
texture = ExtResource("3_qxg0l")
|
||||||
offset = Vector2(0, -105)
|
offset = Vector2(0, -102)
|
||||||
|
|
||||||
[node name="portal_left" parent="Ground/DeployLayer" index="0"]
|
[node name="portal_left" parent="Ground/DeployLayer" index="0"]
|
||||||
position = Vector2(64, 13)
|
position = Vector2(160, 57)
|
||||||
|
|
||||||
[node name="portal_right" parent="Ground/DeployLayer" index="1"]
|
[node name="portal_right" parent="Ground/DeployLayer" index="1"]
|
||||||
position = Vector2(496, 47)
|
position = Vector2(496, 57)
|
||||||
target_scene = "c02_s14"
|
target_scene = "c02_s14"
|
||||||
target_portal = "right"
|
target_portal = "right"
|
||||||
|
|
||||||
[node name="NotePortal" parent="Ground/DeployLayer" index="2" instance=ExtResource("4_etqjj")]
|
[node name="NotePortal" parent="Ground/DeployLayer" index="2" instance=ExtResource("4_etqjj")]
|
||||||
position = Vector2(362, 0)
|
position = Vector2(366, 10)
|
||||||
|
note_sign_texture = ExtResource("5_qxg0l")
|
||||||
note_key = "notes_无法通过"
|
note_key = "notes_无法通过"
|
||||||
|
|
||||||
[node name="MainPlayer" parent="Ground" index="4"]
|
[node name="MainPlayer" parent="Ground" index="4"]
|
||||||
position = Vector2(64, 98)
|
position = Vector2(64, 73)
|
||||||
character = "盒子猫"
|
character = "盒子猫"
|
||||||
facing_direction = Vector2(1, 0)
|
facing_direction = Vector2(1, 0)
|
||||||
|
|
||||||
@ -42,8 +45,9 @@ facing_direction = Vector2(1, 0)
|
|||||||
position = Vector2(-1, -15)
|
position = Vector2(-1, -15)
|
||||||
|
|
||||||
[node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"]
|
[node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"]
|
||||||
points = PackedVector2Array(37, 150, 660, 150)
|
points = PackedVector2Array(125, 150, 660, 150)
|
||||||
|
|
||||||
[node name="盒子猫CanvasLayer" parent="Ground" instance=ExtResource("5_isic3")]
|
[node name="盒子猫CanvasLayer" parent="Ground" instance=ExtResource("5_isic3")]
|
||||||
|
visible = false
|
||||||
|
|
||||||
[editable path="Ground"]
|
[editable path="Ground"]
|
||||||
|
@ -1,15 +1,17 @@
|
|||||||
[gd_scene load_steps=6 format=3 uid="uid://22hc3oe8t0id"]
|
[gd_scene load_steps=7 format=3 uid="uid://22hc3oe8t0id"]
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_umyae"]
|
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_umyae"]
|
||||||
[ext_resource type="Script" uid="uid://dx2w5v1erjyls" path="res://scene/ground/scene/c02/s16_animation.gd" id="2_tmnwc"]
|
[ext_resource type="Script" uid="uid://dx2w5v1erjyls" path="res://scene/ground/scene/c02/s16_animation.gd" id="2_tmnwc"]
|
||||||
[ext_resource type="Texture2D" uid="uid://by4ymjhnma8c6" path="res://asset/art/scene/c02/s12_to_s17_盒子猫/bg_三楼内侧楼道(粉笔画).png" id="3_tmnwc"]
|
[ext_resource type="Texture2D" uid="uid://by4ymjhnma8c6" path="res://asset/art/scene/c02/s12_to_s17_盒子猫/bg_三楼内侧楼道(粉笔画).png" id="3_tmnwc"]
|
||||||
[ext_resource type="PackedScene" uid="uid://61pis75a8fdq" path="res://scene/entity/portal.tscn" id="4_qkv3g"]
|
[ext_resource type="PackedScene" uid="uid://61pis75a8fdq" path="res://scene/entity/portal.tscn" id="4_qkv3g"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://bnf3lkcbpx1ar" path="res://scene/entity/ambush.tscn" id="5_qkv3g"]
|
||||||
[ext_resource type="PackedScene" uid="uid://khwxm5qbfj3k" path="res://scene/ground/script/c02/盒子猫canvas_layer.tscn" id="5_tmnwc"]
|
[ext_resource type="PackedScene" uid="uid://khwxm5qbfj3k" path="res://scene/ground/script/c02/盒子猫canvas_layer.tscn" id="5_tmnwc"]
|
||||||
|
|
||||||
[node name="S16" type="Node2D"]
|
[node name="S16" type="Node2D"]
|
||||||
|
|
||||||
[node name="Ground" parent="." instance=ExtResource("1_umyae")]
|
[node name="Ground" parent="." instance=ExtResource("1_umyae")]
|
||||||
scene_name = "c02_s16"
|
scene_name = "c02_s16"
|
||||||
|
display_hud = false
|
||||||
player_y = 85
|
player_y = 85
|
||||||
footstep_type = "盒子猫"
|
footstep_type = "盒子猫"
|
||||||
|
|
||||||
@ -19,22 +21,29 @@ oneshot_animation = ""
|
|||||||
|
|
||||||
[node name="BGSprite2D" parent="Ground" index="1"]
|
[node name="BGSprite2D" parent="Ground" index="1"]
|
||||||
texture = ExtResource("3_tmnwc")
|
texture = ExtResource("3_tmnwc")
|
||||||
offset = Vector2(0, -105)
|
offset = Vector2(0, -102)
|
||||||
|
|
||||||
[node name="portal_left" parent="Ground/DeployLayer" index="0"]
|
[node name="portal_left" parent="Ground/DeployLayer" index="0"]
|
||||||
position = Vector2(100, 25)
|
position = Vector2(57, 56)
|
||||||
|
|
||||||
[node name="portal_right" parent="Ground/DeployLayer" index="1"]
|
[node name="portal_right" parent="Ground/DeployLayer" index="1"]
|
||||||
position = Vector2(563, 48)
|
position = Vector2(564, 56)
|
||||||
target_scene = "c02_s14"
|
target_scene = "c02_s14"
|
||||||
target_portal = "1"
|
target_portal = "1"
|
||||||
|
|
||||||
[node name="portal_1" parent="Ground/DeployLayer" index="2" instance=ExtResource("4_qkv3g")]
|
[node name="portal_1" parent="Ground/DeployLayer" index="2" instance=ExtResource("4_qkv3g")]
|
||||||
position = Vector2(363, 49)
|
position = Vector2(363, 58)
|
||||||
portal_name = "1"
|
portal_name = "1"
|
||||||
target_scene = "c02_s17"
|
target_scene = "c02_s17"
|
||||||
target_portal = "left"
|
target_portal = "left"
|
||||||
|
|
||||||
|
[node name="Ambush猫咪敲门互动" parent="Ground/DeployLayer" index="3" instance=ExtResource("5_qkv3g")]
|
||||||
|
position = Vector2(105, 16)
|
||||||
|
trigger_mode = "interact"
|
||||||
|
one_shot = false
|
||||||
|
freeze_time = 1.5
|
||||||
|
global_method = "c02_cat_play_with_door"
|
||||||
|
|
||||||
[node name="MainPlayer" parent="Ground" index="4"]
|
[node name="MainPlayer" parent="Ground" index="4"]
|
||||||
position = Vector2(235, 73)
|
position = Vector2(235, 73)
|
||||||
character = "盒子猫"
|
character = "盒子猫"
|
||||||
@ -47,5 +56,6 @@ position = Vector2(3584, -7)
|
|||||||
points = PackedVector2Array(37, 150, 655, 150)
|
points = PackedVector2Array(37, 150, 655, 150)
|
||||||
|
|
||||||
[node name="盒子猫CanvasLayer" parent="Ground" instance=ExtResource("5_tmnwc")]
|
[node name="盒子猫CanvasLayer" parent="Ground" instance=ExtResource("5_tmnwc")]
|
||||||
|
visible = false
|
||||||
|
|
||||||
[editable path="Ground"]
|
[editable path="Ground"]
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
[gd_scene load_steps=6 format=3 uid="uid://cbr6gbgrl2wb1"]
|
[gd_scene load_steps=8 format=3 uid="uid://cbr6gbgrl2wb1"]
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_e436a"]
|
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_e436a"]
|
||||||
[ext_resource type="Script" uid="uid://bkkhxiyblu2lo" path="res://scene/ground/scene/c02/s17_animation.gd" id="2_e436a"]
|
[ext_resource type="Script" uid="uid://bkkhxiyblu2lo" path="res://scene/ground/scene/c02/s17_animation.gd" id="2_e436a"]
|
||||||
[ext_resource type="Texture2D" uid="uid://iyeqjguyrhog" path="res://asset/art/scene/c02/s12_to_s17_盒子猫/bg_三楼楼道(粉笔画).png" id="3_e436a"]
|
[ext_resource type="Texture2D" uid="uid://iyeqjguyrhog" path="res://asset/art/scene/c02/s12_to_s17_盒子猫/bg_三楼楼道(粉笔画).png" id="3_e436a"]
|
||||||
[ext_resource type="PackedScene" uid="uid://61pis75a8fdq" path="res://scene/entity/portal.tscn" id="4_e436a"]
|
[ext_resource type="PackedScene" uid="uid://61pis75a8fdq" path="res://scene/entity/portal.tscn" id="4_e436a"]
|
||||||
[ext_resource type="PackedScene" uid="uid://khwxm5qbfj3k" path="res://scene/ground/script/c02/盒子猫canvas_layer.tscn" id="4_n3bxc"]
|
[ext_resource type="PackedScene" uid="uid://khwxm5qbfj3k" path="res://scene/ground/script/c02/盒子猫canvas_layer.tscn" id="4_n3bxc"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://dewbg4phd8c17" path="res://scene/ground/script/c02/追猫猪头怪.tscn" id="6_pfgbg"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://bnf3lkcbpx1ar" path="res://scene/entity/ambush.tscn" id="8_m6dyn"]
|
||||||
|
|
||||||
[node name="S17" type="Node2D"]
|
[node name="S17" type="Node2D"]
|
||||||
|
|
||||||
@ -19,24 +21,40 @@ oneshot_animation = ""
|
|||||||
|
|
||||||
[node name="BGSprite2D" parent="Ground" index="1"]
|
[node name="BGSprite2D" parent="Ground" index="1"]
|
||||||
texture = ExtResource("3_e436a")
|
texture = ExtResource("3_e436a")
|
||||||
offset = Vector2(0, -105)
|
offset = Vector2(0, -102)
|
||||||
|
|
||||||
[node name="portal_left" parent="Ground/DeployLayer" index="0"]
|
[node name="portal_left" parent="Ground/DeployLayer" index="0"]
|
||||||
position = Vector2(34, 48)
|
position = Vector2(35, 56)
|
||||||
target_scene = "c02_s16"
|
target_scene = "c02_s16"
|
||||||
target_portal = "1"
|
target_portal = "1"
|
||||||
|
|
||||||
[node name="portal_right" parent="Ground/DeployLayer" index="1"]
|
[node name="portal_right" parent="Ground/DeployLayer" index="1"]
|
||||||
position = Vector2(853, 47)
|
position = Vector2(853, 56)
|
||||||
target_scene = "c02_s13"
|
target_scene = "c02_s13"
|
||||||
target_portal = "right"
|
target_portal = "right"
|
||||||
|
|
||||||
[node name="portal_1" parent="Ground/DeployLayer" index="2" instance=ExtResource("4_e436a")]
|
[node name="portal_1" parent="Ground/DeployLayer" index="2" instance=ExtResource("4_e436a")]
|
||||||
position = Vector2(661, 50)
|
position = Vector2(662, 57)
|
||||||
debug_note = "出来就不能回来了"
|
debug_note = "出来就不能回来了"
|
||||||
portal_name = "1"
|
portal_name = "1"
|
||||||
target_scene = "c02_s12"
|
target_scene = "c02_s12"
|
||||||
|
|
||||||
|
[node name="Ambush猫咪敲门互动" parent="Ground/DeployLayer" index="3" instance=ExtResource("8_m6dyn")]
|
||||||
|
position = Vector2(661, 7)
|
||||||
|
trigger_mode = "interact"
|
||||||
|
one_shot = false
|
||||||
|
freeze_time = 1.5
|
||||||
|
global_method = "c02_cat_play_with_door"
|
||||||
|
|
||||||
|
[node name="Ambush猫咪敲门互动2" parent="Ground/DeployLayer" index="4" instance=ExtResource("8_m6dyn")]
|
||||||
|
position = Vector2(106, 6)
|
||||||
|
trigger_mode = "interact"
|
||||||
|
one_shot = false
|
||||||
|
freeze_time = 1.5
|
||||||
|
global_method = "c02_cat_play_with_door"
|
||||||
|
|
||||||
|
[node name="追猫猪头怪" parent="Ground/DeployLayer" index="5" instance=ExtResource("6_pfgbg")]
|
||||||
|
|
||||||
[node name="MainPlayer" parent="Ground" index="4"]
|
[node name="MainPlayer" parent="Ground" index="4"]
|
||||||
position = Vector2(235, 73)
|
position = Vector2(235, 73)
|
||||||
character = "盒子猫"
|
character = "盒子猫"
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
[gd_scene load_steps=7 format=3 uid="uid://bxpexbk7f3rax"]
|
[gd_scene load_steps=7 format=3 uid="uid://bxpexbk7f3rax"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://chap3ifmyg20c" path="res://scene/ground/script/c02/敲门游戏.gd" id="1_dnsvv"]
|
[ext_resource type="Script" uid="uid://chap3ifmyg20c" path="res://scene/ground/script/c02/敲门游戏.gd" id="1_dnsvv"]
|
||||||
[ext_resource type="AudioStream" uid="uid://dw8dprxhvas85" path="res://asset/audio/sfx/交互/第一章/sfx_敲门2.wav" id="2_hgfqc"]
|
[ext_resource type="AudioStream" uid="uid://dw8dprxhvas85" path="res://asset/audio/sfx/交互/sfx_敲门2.wav" id="2_hgfqc"]
|
||||||
[ext_resource type="Texture2D" uid="uid://dkvuc5llqax6d" path="res://asset/art/scene/c02/s03_公寓一楼院子/肉铺门板.png" id="3_n5c57"]
|
[ext_resource type="Texture2D" uid="uid://dkvuc5llqax6d" path="res://asset/art/scene/c02/s03_公寓一楼院子/肉铺门板.png" id="3_n5c57"]
|
||||||
[ext_resource type="AudioStream" uid="uid://7of24bqow07e" path="res://asset/audio/sfx/交互/第一章/sfx_敲门1.wav" id="3_ue6qj"]
|
[ext_resource type="AudioStream" uid="uid://7of24bqow07e" path="res://asset/audio/sfx/交互/sfx_敲门1.wav" id="3_ue6qj"]
|
||||||
[ext_resource type="AudioStream" uid="uid://sjanwwtxggtq" path="res://asset/audio/effect/impact/impactWood_medium_002.ogg" id="4_hgfqc"]
|
[ext_resource type="AudioStream" uid="uid://sjanwwtxggtq" path="res://asset/audio/effect/impact/impactWood_medium_002.ogg" id="4_hgfqc"]
|
||||||
[ext_resource type="AudioStream" uid="uid://b1kaqn1ewg2ly" path="res://asset/audio/sfx/交互/第一章/sfx_肉落下.wav" id="5_t58cl"]
|
[ext_resource type="AudioStream" uid="uid://b1kaqn1ewg2ly" path="res://asset/audio/sfx/交互/第一章/sfx_肉落下.wav" id="5_t58cl"]
|
||||||
|
|
||||||
|
@ -56,6 +56,7 @@ func _make_ripple(pos:Vector2) -> bool:
|
|||||||
if p_pos.x < 0 or p_pos.x > image_size.x or p_pos.y < 0 or p_pos.y > image_size.y:
|
if p_pos.x < 0 or p_pos.x > image_size.x or p_pos.y < 0 or p_pos.y > image_size.y:
|
||||||
return false
|
return false
|
||||||
if image.get_pixelv(p_pos).a > 0:
|
if image.get_pixelv(p_pos).a > 0:
|
||||||
|
$"Sfx水滴".play()
|
||||||
# setup shader_parameter/offset
|
# setup shader_parameter/offset
|
||||||
var m_offset = -Vector2(pos.x / 564 - 0.5, pos.y / 316 - 0.5)
|
var m_offset = -Vector2(pos.x / 564 - 0.5, pos.y / 316 - 0.5)
|
||||||
shader.material.set("shader_parameter/offset", m_offset)
|
shader.material.set("shader_parameter/offset", m_offset)
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
[gd_scene load_steps=8 format=3 uid="uid://trkypc4gox20"]
|
[gd_scene load_steps=10 format=3 uid="uid://trkypc4gox20"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://bica4jcy2w6ta" path="res://scene/ground/script/c02/水盆特写.gd" id="1_qtddk"]
|
[ext_resource type="Script" uid="uid://bica4jcy2w6ta" path="res://scene/ground/script/c02/水盆特写.gd" id="1_qtddk"]
|
||||||
[ext_resource type="Texture2D" uid="uid://oiswtv7jqcqy" path="res://asset/art/scene/c02/s06_二楼楼道/ux_水盆特写.png" id="2_h4mql"]
|
[ext_resource type="Texture2D" uid="uid://oiswtv7jqcqy" path="res://asset/art/scene/c02/s06_二楼楼道/ux_水盆特写.png" id="2_h4mql"]
|
||||||
|
[ext_resource type="AudioStream" uid="uid://cm2p6wqgfuv8y" path="res://asset/audio/mixkit/mixkit-water-bubble-1317.wav" id="2_qpkvl"]
|
||||||
[ext_resource type="Texture2D" uid="uid://bfum7jdjilgif" path="res://asset/art/scene/c02/s06_二楼楼道/ux_水中倒影成年.png" id="3_31ty5"]
|
[ext_resource type="Texture2D" uid="uid://bfum7jdjilgif" path="res://asset/art/scene/c02/s06_二楼楼道/ux_水中倒影成年.png" id="3_31ty5"]
|
||||||
[ext_resource type="Texture2D" uid="uid://b0o1bgwdn6tcn" path="res://asset/art/scene/c02/s06_二楼楼道/ux_水中倒影幼年.png" id="3_ekkoo"]
|
[ext_resource type="Texture2D" uid="uid://b0o1bgwdn6tcn" path="res://asset/art/scene/c02/s06_二楼楼道/ux_水中倒影幼年.png" id="3_ekkoo"]
|
||||||
|
[ext_resource type="Script" uid="uid://rq6w1vuhuq1m" path="res://scene/entity/audio/sfx.gd" id="3_j0ps2"]
|
||||||
[ext_resource type="Texture2D" uid="uid://s1c6gytu0gbx" path="res://asset/art/scene/c02/s06_二楼楼道/ux_水盆波纹.png" id="3_rdtwt"]
|
[ext_resource type="Texture2D" uid="uid://s1c6gytu0gbx" path="res://asset/art/scene/c02/s06_二楼楼道/ux_水盆波纹.png" id="3_rdtwt"]
|
||||||
[ext_resource type="Shader" uid="uid://hxcx4sbqtniu" path="res://asset/shader/ripple.gdshader" id="4_qtddk"]
|
[ext_resource type="Shader" uid="uid://hxcx4sbqtniu" path="res://asset/shader/ripple.gdshader" id="4_qtddk"]
|
||||||
|
|
||||||
@ -22,6 +24,13 @@ script = ExtResource("1_qtddk")
|
|||||||
metadata/_edit_vertical_guides_ = [424.0]
|
metadata/_edit_vertical_guides_ = [424.0]
|
||||||
metadata/_edit_horizontal_guides_ = [253.0]
|
metadata/_edit_horizontal_guides_ = [253.0]
|
||||||
|
|
||||||
|
[node name="Sfx水滴" type="AudioStreamPlayer" parent="."]
|
||||||
|
stream = ExtResource("2_qpkvl")
|
||||||
|
volume_db = -5.0
|
||||||
|
bus = &"game_sfx"
|
||||||
|
script = ExtResource("3_j0ps2")
|
||||||
|
metadata/_custom_type_script = "uid://rq6w1vuhuq1m"
|
||||||
|
|
||||||
[node name="背景" type="TextureRect" parent="."]
|
[node name="背景" type="TextureRect" parent="."]
|
||||||
anchors_preset = 15
|
anchors_preset = 15
|
||||||
anchor_right = 1.0
|
anchor_right = 1.0
|
||||||
|
@ -18,3 +18,46 @@ func _ready():
|
|||||||
create_tween().tween_property(cat, "modulate:a", 0.0, show_cat_duration)
|
create_tween().tween_property(cat, "modulate:a", 0.0, show_cat_duration)
|
||||||
else:
|
else:
|
||||||
cat.visible = false
|
cat.visible = false
|
||||||
|
|
||||||
|
|
||||||
|
var down_pressing = false:
|
||||||
|
set(val):
|
||||||
|
# print("down_pressing: ", val)
|
||||||
|
down_pressing = val
|
||||||
|
_try_toggle_crawl()
|
||||||
|
|
||||||
|
var crawling = false:
|
||||||
|
set(val):
|
||||||
|
crawling = val
|
||||||
|
# print("crawling: ", val)
|
||||||
|
if val != down_pressing:
|
||||||
|
# 执行结束后,如果发现不一致,尝试切换
|
||||||
|
# print("crawling mismatch, swtich to: ", down_pressing)
|
||||||
|
# 需要重置 tween
|
||||||
|
crawling_toggle_tween = null
|
||||||
|
_try_toggle_crawl()
|
||||||
|
|
||||||
|
var crawling_toggle_tween: Tween
|
||||||
|
|
||||||
|
|
||||||
|
func _try_toggle_crawl():
|
||||||
|
if crawling_toggle_tween and crawling_toggle_tween.is_valid():
|
||||||
|
# print("tweening, skip.")
|
||||||
|
return
|
||||||
|
crawling_toggle_tween = create_tween()
|
||||||
|
var crawl = down_pressing
|
||||||
|
if crawl:
|
||||||
|
SceneManager.freeze_player(0, 7)
|
||||||
|
else:
|
||||||
|
SceneManager.freeze_player(0, 8, true)
|
||||||
|
crawling_toggle_tween.tween_interval(0.4)
|
||||||
|
if not crawl:
|
||||||
|
crawling_toggle_tween.tween_callback(SceneManager.release_player)
|
||||||
|
crawling_toggle_tween.tween_callback(func(): crawling = crawl)
|
||||||
|
|
||||||
|
|
||||||
|
func _unhandled_input(event: InputEvent) -> void:
|
||||||
|
if event.is_action_pressed("down") and not down_pressing:
|
||||||
|
down_pressing = true
|
||||||
|
elif event.is_action_released("down") and down_pressing:
|
||||||
|
down_pressing = false
|
||||||
|
57
scene/ground/script/c02/追猫猪头怪.gd
Normal file
57
scene/ground/script/c02/追猫猪头怪.gd
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
extends Node2D
|
||||||
|
|
||||||
|
@export var enabled := true
|
||||||
|
# 追击开始距离
|
||||||
|
@export var start_distance := 400
|
||||||
|
# 追击开始方位(左/右)
|
||||||
|
@export var from_left := true
|
||||||
|
# 追击速度
|
||||||
|
@export var speed := 30
|
||||||
|
# 脚步声周期时间
|
||||||
|
@export var footstep_wait_time := 0.7
|
||||||
|
|
||||||
|
@onready var sfx_footstep = $SfxFootstep as Sfx
|
||||||
|
|
||||||
|
var footstep_timer
|
||||||
|
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
var player = SceneManager.get_player()
|
||||||
|
# 高度对齐
|
||||||
|
position.y = player.position.y
|
||||||
|
# 脚步声 timer
|
||||||
|
footstep_timer = Timer.new()
|
||||||
|
footstep_timer.autostart = false
|
||||||
|
footstep_timer.wait_time = footstep_wait_time
|
||||||
|
add_child(footstep_timer)
|
||||||
|
footstep_timer.timeout.connect(_on_footstep_timer_timeout)
|
||||||
|
|
||||||
|
|
||||||
|
func _on_footstep_timer_timeout() -> void:
|
||||||
|
sfx_footstep.play()
|
||||||
|
# shake camera
|
||||||
|
|
||||||
|
|
||||||
|
# 启用/禁用脚步声
|
||||||
|
func toggle_footstep_sfx(play := true):
|
||||||
|
if play:
|
||||||
|
footstep_timer.start()
|
||||||
|
else:
|
||||||
|
footstep_timer.stop()
|
||||||
|
|
||||||
|
var move_tween :Tween
|
||||||
|
|
||||||
|
# 开始追击
|
||||||
|
func start_chasing() -> void:
|
||||||
|
toggle_footstep_sfx(true)
|
||||||
|
# 初始位置与方向
|
||||||
|
|
||||||
|
|
||||||
|
# 停止追击
|
||||||
|
func stop_chasing() -> void:
|
||||||
|
toggle_footstep_sfx(false)
|
||||||
|
|
||||||
|
# 转身追击
|
||||||
|
func turn_back():
|
||||||
|
# 呼吸一帧,然后转身
|
||||||
|
pass
|
1
scene/ground/script/c02/追猫猪头怪.gd.uid
Normal file
1
scene/ground/script/c02/追猫猪头怪.gd.uid
Normal file
@ -0,0 +1 @@
|
|||||||
|
uid://tn7sfe0qmix2
|
29
scene/ground/script/c02/追猫猪头怪.tscn
Normal file
29
scene/ground/script/c02/追猫猪头怪.tscn
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
[gd_scene load_steps=6 format=3 uid="uid://dewbg4phd8c17"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://tn7sfe0qmix2" path="res://scene/ground/script/c02/追猫猪头怪.gd" id="1_lrjfo"]
|
||||||
|
[ext_resource type="Script" uid="uid://wapo47a1oddf" path="res://scene/entity/audio/sfx2d.gd" id="2_35vtd"]
|
||||||
|
[ext_resource type="AudioStream" uid="uid://dd2whbtg7ah8a" path="res://asset/audio/sfx/脚步/猫咪走路2.wav" id="2_e62rv"]
|
||||||
|
[ext_resource type="SpriteFrames" uid="uid://b85gyfhk1mg6r" path="res://asset/art/gif/c02_盒子猫/c02_盒子猫_frames.tres" id="4_3sbui"]
|
||||||
|
|
||||||
|
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_3sbui"]
|
||||||
|
playback_mode = 1
|
||||||
|
streams_count = 1
|
||||||
|
stream_0/stream = ExtResource("2_e62rv")
|
||||||
|
|
||||||
|
[node name="追猫猪头怪" type="Node2D"]
|
||||||
|
script = ExtResource("1_lrjfo")
|
||||||
|
|
||||||
|
[node name="SfxFootstep" type="AudioStreamPlayer2D" parent="."]
|
||||||
|
stream = SubResource("AudioStreamRandomizer_3sbui")
|
||||||
|
max_distance = 600.0
|
||||||
|
attenuation = 1.7411
|
||||||
|
bus = &"game_sfx"
|
||||||
|
script = ExtResource("2_35vtd")
|
||||||
|
metadata/_custom_type_script = "uid://wapo47a1oddf"
|
||||||
|
|
||||||
|
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
|
||||||
|
z_index = 20
|
||||||
|
sprite_frames = ExtResource("4_3sbui")
|
||||||
|
animation = &"猪头怪呼吸"
|
||||||
|
frame = 1
|
||||||
|
frame_progress = 1.0
|
@ -21,14 +21,12 @@ signal animation_finished
|
|||||||
@export var lock_move_left := false
|
@export var lock_move_left := false
|
||||||
@export var lock_move_right := false
|
@export var lock_move_right := false
|
||||||
@export var camera_marker: CameraFocusMarker
|
@export var camera_marker: CameraFocusMarker
|
||||||
@export_enum("吕萍", "吕萍爬行", "吕萍带小猫", "吕萍推柜子", "小小蝶", "盒子猫") var character := "吕萍":
|
@export_enum("吕萍", "吕萍爬行", "吕萍带小猫", "吕萍推柜子", "小小蝶", "盒子猫", "小小小蝶") var character := "吕萍":
|
||||||
set(val):
|
set(val):
|
||||||
character = val
|
character = val
|
||||||
# 使用 new,方便在 editor 中刷新新值
|
|
||||||
current_animation_config = PlayerAnimationConfig.new().ANIMATION_CONFIG[val]
|
|
||||||
current_status = PlayerAnimationConfig.MOVEMENT_IDLE
|
|
||||||
if is_node_ready():
|
if is_node_ready():
|
||||||
sprite.scale = current_animation_config["scale"]
|
# 切换 inventory
|
||||||
|
_check_character_runtime_status()
|
||||||
# @export var shadow_color := Color(0.1, 0.1, 0.1, 0.7)
|
# @export var shadow_color := Color(0.1, 0.1, 0.1, 0.7)
|
||||||
# var shadow_y := 0.0
|
# var shadow_y := 0.0
|
||||||
@export var player_movement_rect := Rect2(50, -500, 1400, 1000)
|
@export var player_movement_rect := Rect2(50, -500, 1400, 1000)
|
||||||
@ -61,15 +59,14 @@ signal animation_finished
|
|||||||
if not Engine.is_editor_hint():
|
if not Engine.is_editor_hint():
|
||||||
return
|
return
|
||||||
debug_freeze = val
|
debug_freeze = val
|
||||||
current_animation_config = PlayerAnimationConfig.new().ANIMATION_CONFIG[character]
|
if is_node_ready():
|
||||||
|
_check_character_runtime_status()
|
||||||
if val > 3:
|
if val > 3:
|
||||||
freeze_player(0, val, true)
|
freeze_player(0, val, true)
|
||||||
release_player()
|
release_player()
|
||||||
|
|
||||||
# 使用 new,方便在 editor 中刷新新值
|
# 使用 new,方便在 editor 中刷新新值
|
||||||
var current_animation_config := (
|
var current_animation_config: Dictionary
|
||||||
PlayerAnimationConfig.new().ANIMATION_CONFIG[character] as Dictionary
|
|
||||||
)
|
|
||||||
|
|
||||||
@onready var light = $PointLight2D as PointLight2D
|
@onready var light = $PointLight2D as PointLight2D
|
||||||
@onready var catty_light = $CattyPointLight2D as PointLight2D
|
@onready var catty_light = $CattyPointLight2D as PointLight2D
|
||||||
@ -86,28 +83,48 @@ func _ready() -> void:
|
|||||||
sprite.visible = not hide_sprite
|
sprite.visible = not hide_sprite
|
||||||
light.enabled = enable_light
|
light.enabled = enable_light
|
||||||
os_contaner.modulate.a = 0.0
|
os_contaner.modulate.a = 0.0
|
||||||
# set up animated sprite
|
_check_character_runtime_status()
|
||||||
sprite.scale = current_animation_config["scale"]
|
|
||||||
_play_animation()
|
_play_animation()
|
||||||
if Engine.is_editor_hint():
|
if not Engine.is_editor_hint():
|
||||||
return
|
|
||||||
footstep_timer.timeout.connect(_on_footstep_timer_timeout)
|
footstep_timer.timeout.connect(_on_footstep_timer_timeout)
|
||||||
footstep_timer.stop()
|
footstep_timer.stop()
|
||||||
sprite.animation_finished.connect(animation_finished.emit)
|
sprite.animation_finished.connect(animation_finished.emit)
|
||||||
_check_character_status()
|
|
||||||
|
|
||||||
|
# func _enter_tree() -> void:
|
||||||
|
# if is_node_ready() and not Engine.is_editor_hint():
|
||||||
|
# _check_character_runtime_status()
|
||||||
|
|
||||||
|
|
||||||
|
func _check_character_runtime_status():
|
||||||
|
# set up animated sprite
|
||||||
|
# 使用 new,方便在 editor 中刷新新值
|
||||||
|
current_animation_config = PlayerAnimationConfig.new().ANIMATION_CONFIG[character]
|
||||||
|
current_status = PlayerAnimationConfig.MOVEMENT_IDLE
|
||||||
|
sprite.scale = current_animation_config["scale"]
|
||||||
|
# editor 中无需检查下列项目
|
||||||
|
if Engine.is_editor_hint() or not is_node_ready() or SceneManager.is_restarting():
|
||||||
|
return
|
||||||
# 如果当前是 prop_小猫玩具完整 ,尝试点亮玩家的灯效;否则无需点亮
|
# 如果当前是 prop_小猫玩具完整 ,尝试点亮玩家的灯效;否则无需点亮
|
||||||
if SceneManager.get_current_prop(false) == "prop_小猫玩具完整":
|
if SceneManager.get_current_prop(false) == "prop_小猫玩具完整":
|
||||||
set_catty_light(true)
|
set_catty_light(true)
|
||||||
|
else:
|
||||||
|
set_catty_light(false)
|
||||||
func _enter_tree() -> void:
|
# 设置 inventory
|
||||||
if is_node_ready() and not Engine.is_editor_hint():
|
if not ArchiveManager or not ArchiveManager.archive:
|
||||||
_check_character_status()
|
printerr("player _checkout_inventory failed. ArchiveManager or Archive is not ready.")
|
||||||
|
else:
|
||||||
|
# 每个角色有对应 inverntory
|
||||||
func _check_character_status():
|
var archive = ArchiveManager.archive
|
||||||
# 检查角色锁定状态
|
# 检查角色锁定状态
|
||||||
running_locked = ArchiveManager.archive.player_running_locked
|
running_locked = archive.player_running_locked
|
||||||
|
match character:
|
||||||
|
"小小蝶":
|
||||||
|
SceneManager.checkout_prop_inventory(archive.prop_inventory_xxdie)
|
||||||
|
"小小小蝶":
|
||||||
|
SceneManager.checkout_prop_inventory(archive.prop_inventory_xxxdie)
|
||||||
|
_:
|
||||||
|
SceneManager.checkout_prop_inventory(archive.prop_inventory)
|
||||||
|
|
||||||
|
|
||||||
func _on_footstep_timer_timeout():
|
func _on_footstep_timer_timeout():
|
||||||
|
@ -163,4 +163,23 @@ var ANIMATION_CONFIG = {
|
|||||||
7: [&"c02_盒子猫躲藏", Vector2.ONE, Vector2(0, -68.0)],
|
7: [&"c02_盒子猫躲藏", Vector2.ONE, Vector2(0, -68.0)],
|
||||||
8: [&"c02_盒子猫停止躲藏", Vector2.ONE, Vector2(0, -68.0)],
|
8: [&"c02_盒子猫停止躲藏", Vector2.ONE, Vector2(0, -68.0)],
|
||||||
},
|
},
|
||||||
|
"小小小蝶":
|
||||||
|
{
|
||||||
|
"scale": Vector2(1, 1),
|
||||||
|
"speed_walking": 55.0,
|
||||||
|
"can_run": true,
|
||||||
|
"speed_runnig": 100.0,
|
||||||
|
"walk_footstep": 0.5,
|
||||||
|
"run_footstep": 7.0 / 9.0 / 2.0,
|
||||||
|
"os_height": 70.0,
|
||||||
|
"light_height": 20.0,
|
||||||
|
# 如果使用 auto,就会自动以最低点为基准
|
||||||
|
# "auto_foot_offset": true,
|
||||||
|
"foot_offset": Vector2(0, -68.0),
|
||||||
|
MOVEMENT_IDLE: [&"", &"c02_盒子猫_idle_r"],
|
||||||
|
# 此处为[2][3]分别为 sprite 向左、向右时的 offset
|
||||||
|
MOVEMENT_WALKING: [&"", &"c02_盒子猫_walking_r"],
|
||||||
|
MOVEMENT_RUNNING: [&"", &"c02_盒子猫_running_r"],
|
||||||
|
5: [&"c02_盒子猫钻进盒子", Vector2.ONE, Vector2(-20, -68.0)],
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
@ -55,12 +55,16 @@ var item_config_res = preload("res://asset/dialogue/item_description.dialogue")
|
|||||||
var path_prefix = "res://asset/art/prop/"
|
var path_prefix = "res://asset/art/prop/"
|
||||||
var cached_inventory_textures := {}
|
var cached_inventory_textures := {}
|
||||||
|
|
||||||
|
# hud 展示与隐藏动效
|
||||||
var listen_mouse = false
|
var listen_mouse = false
|
||||||
var displaying = false
|
var displaying = false
|
||||||
var timer := Timer.new()
|
var timer := Timer.new()
|
||||||
var display_tween: Tween
|
var display_tween: Tween
|
||||||
var container_tween: Tween
|
var container_tween: Tween
|
||||||
|
|
||||||
|
# hud 是否监听快捷键
|
||||||
|
var listening_hotkey = true
|
||||||
|
|
||||||
|
|
||||||
func _emit_changed(prop_key := ""):
|
func _emit_changed(prop_key := ""):
|
||||||
if not selected:
|
if not selected:
|
||||||
@ -160,6 +164,25 @@ func _load_from_archive() -> void:
|
|||||||
_update_prop_display_with_texture()
|
_update_prop_display_with_texture()
|
||||||
|
|
||||||
|
|
||||||
|
func checkout_inventory(inv: PropInventory) -> void:
|
||||||
|
inventory = inv
|
||||||
|
_align_container_size()
|
||||||
|
_load_texture_cache()
|
||||||
|
_update_prop_display_with_texture()
|
||||||
|
|
||||||
|
|
||||||
|
func hide_hud():
|
||||||
|
# 隐藏 hud 并静音
|
||||||
|
hide()
|
||||||
|
listening_hotkey = false
|
||||||
|
|
||||||
|
|
||||||
|
func display_hud():
|
||||||
|
# 显示 hud 并取消静音
|
||||||
|
show()
|
||||||
|
listening_hotkey = true
|
||||||
|
|
||||||
|
|
||||||
func _load_texture_cache() -> void:
|
func _load_texture_cache() -> void:
|
||||||
if not inventory:
|
if not inventory:
|
||||||
return
|
return
|
||||||
@ -359,7 +382,7 @@ func _on_timer_timeout() -> void:
|
|||||||
|
|
||||||
|
|
||||||
func _unhandled_input(event: InputEvent) -> void:
|
func _unhandled_input(event: InputEvent) -> void:
|
||||||
if locked:
|
if locked or not listening_hotkey:
|
||||||
return
|
return
|
||||||
if event.is_action_pressed("prop_left"):
|
if event.is_action_pressed("prop_left"):
|
||||||
on_left_pressed()
|
on_left_pressed()
|
||||||
|
Loading…
Reference in New Issue
Block a user