player freeze status fix

This commit is contained in:
bbd_pc 2025-06-28 06:51:13 +08:00
parent 4f50d8c668
commit 85c931d334
5 changed files with 73 additions and 95 deletions

View File

@ -14,7 +14,7 @@ static var user_root_dir := "user://data/" # must end with "/"
static var archive_dir := "user://data/archives/"
static var archive_prefix := "save"
const CURRENT_VERSION = 3
const CURRENT_VERSION = 4
var archives := {}
var autosave_timer := Timer.new()

View File

@ -1,7 +1,7 @@
class_name GlobalConfig extends Resource
#const DEBUG = true
const DEBUG = false
const DEBUG = true
#const DEBUG = false
# .res would be binary encoded, .tres is text encoded
const RES_FILE_FORMAT = ".tres"
@ -67,8 +67,8 @@ signal auto_save_seconds_changed
auto_save_seconds = val
auto_save_seconds_changed.emit()
# window
@export var window_fullscreen := false
@export var window_top := true
@export var window_fullscreen := true
@export var window_top := false
# sound
@export var db_master := -3.0 # default
@export var db_dialog := -13.0 # default

View File

@ -281,11 +281,12 @@ func _on_freeze_changed(count: int, is_add: bool):
# 非首次 freeze 不改变动画状态,因为在动画演出中可能多次 freeze 与 release
func _on_first_frozen() -> void:
if GlobalConfig.DEBUG:
print("player _on_first_frozen. current_status=", current_status)
# reset status to idle or stay
velocity = Vector2.ZERO
if current_status != PlayerAnimationConfig.MOVEMENT_IDLE:
current_status = PlayerAnimationConfig.MOVEMENT_IDLE
_play_animation()
# duration: the time to lock the player action. 0 means lock forever, thus the player will be locked until release_player is called.
func freeze_player(duration: float, action_code: int, auto_quit: bool) -> void:
@ -501,5 +502,6 @@ func walk_to(global_pos: Vector2) -> Tween:
func _after_walk_to() -> void:
SceneManager.unlock_player()
current_status = PlayerAnimationConfig.MOVEMENT_IDLE
_play_animation()
SceneManager.unlock_player()

View File

@ -91,6 +91,9 @@ func _on_ambush_triggered():
# 鸡毛掸子 4.5s,再等待 3s 后掉落纸片
get_tree().create_timer(8).timeout.connect(_play_paper_animation)
func lock_on_use_stick():
SceneManager.lock_player(4.0)
SceneManager.get_player().walk_to_x(261.0)
func _play_paper_animation():
# 播放纸片动画

View File

@ -449,137 +449,109 @@ resource_name = "使用鸡毛掸子"
length = 4.5
step = 0.02
capture_included = true
tracks/0/type = "method"
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("MainPlayer")
tracks/0/path = NodePath("DeployLayer/画框:rotation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0.02),
"transitions": PackedFloat32Array(1),
"values": [{
"args": [4.0, -1, true],
"method": &"freeze_player"
}]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("DeployLayer/画框:rotation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(1.8, 1.98, 2.24, 2.42, 2.58, 2.76),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1),
"update": 0,
"values": [-0.179974, -0.124821, -0.124821, -0.051063, -0.051063, 0.0]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("DeployLayer/使用鸡毛掸子:frame")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("DeployLayer/使用鸡毛掸子:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(1.04, 3.78),
"transitions": PackedFloat32Array(1, 1),
"update": 2,
"values": [0, 11]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("DeployLayer/使用鸡毛掸子:position")
tracks/3/interp = 1
tracks/3/loop_wrap = false
tracks/3/keys = {
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("DeployLayer/使用鸡毛掸子:position")
tracks/2/interp = 1
tracks/2/loop_wrap = false
tracks/2/keys = {
"times": PackedFloat32Array(0.88, 3.96),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector2(261, 42), Vector2(261, 42)]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("DeployLayer/使用鸡毛掸子:visible")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("DeployLayer/使用鸡毛掸子:visible")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0.88, 3.96),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [true, false]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("DeployLayer/ambush鸡毛掸子:visible")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("DeployLayer/ambush鸡毛掸子:visible")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0.02, 1.48, 3.42),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 1,
"values": [true, false, true]
}
tracks/6/type = "method"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("MainPlayer")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0.08),
"transitions": PackedFloat32Array(1),
"values": [{
"args": [Vector2(261, 88)],
"method": &"walk_to"
}]
}
tracks/7/type = "value"
tracks/7/imported = false
tracks/7/enabled = true
tracks/7/path = NodePath("CameraFocusMarker:zoom_ratio")
tracks/7/interp = 1
tracks/7/loop_wrap = true
tracks/7/keys = {
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("CameraFocusMarker:zoom_ratio")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0, 1.22, 3.1, 4.1),
"transitions": PackedFloat32Array(1, 1, 1, 1),
"update": 0,
"values": [1.0, 1.3, 1.3, 1.0]
}
tracks/8/type = "value"
tracks/8/imported = false
tracks/8/enabled = true
tracks/8/path = NodePath("CameraFocusMarker:force_offset")
tracks/8/interp = 1
tracks/8/loop_wrap = true
tracks/8/keys = {
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("CameraFocusMarker:force_offset")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0, 4.08),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector2(0, -20), Vector2(0, -20)]
}
tracks/9/type = "value"
tracks/9/imported = false
tracks/9/enabled = true
tracks/9/path = NodePath("AnimationPlayer/扶正相框:playing")
tracks/9/interp = 1
tracks/9/loop_wrap = true
tracks/9/keys = {
tracks/7/type = "value"
tracks/7/imported = false
tracks/7/enabled = true
tracks/7/path = NodePath("AnimationPlayer/扶正相框:playing")
tracks/7/interp = 1
tracks/7/loop_wrap = true
tracks/7/keys = {
"times": PackedFloat32Array(0, 2.28),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [false, true]
}
tracks/10/type = "value"
tracks/10/imported = false
tracks/10/enabled = true
tracks/10/path = NodePath("MainPlayer:hide_sprite")
tracks/10/interp = 1
tracks/10/loop_wrap = true
tracks/10/keys = {
tracks/8/type = "value"
tracks/8/imported = false
tracks/8/enabled = true
tracks/8/path = NodePath("MainPlayer:hide_sprite")
tracks/8/interp = 1
tracks/8/loop_wrap = true
tracks/8/keys = {
"times": PackedFloat32Array(0.94, 3.98),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
@ -783,6 +755,7 @@ position = Vector2(270, 23.5)
texture = ExtResource("12_jtglg")
trigger_mode = "interact"
hook_animation = "使用鸡毛掸子"
hook_method = "lock_on_use_stick"
[node name="使用鸡毛掸子" type="AnimatedSprite2D" parent="Ground/DeployLayer" index="7"]
visible = false