diff --git a/manager/archive_manager/archive_manager.gd b/manager/archive_manager/archive_manager.gd index f5e9953f..6f4a297a 100644 --- a/manager/archive_manager/archive_manager.gd +++ b/manager/archive_manager/archive_manager.gd @@ -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() diff --git a/manager/config_manager/global_config.gd b/manager/config_manager/global_config.gd index 6b4c96d9..edf82a98 100644 --- a/manager/config_manager/global_config.gd +++ b/manager/config_manager/global_config.gd @@ -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 diff --git a/scene/character/main_player.gd b/scene/character/main_player.gd index 610ef0f3..14d52989 100644 --- a/scene/character/main_player.gd +++ b/scene/character/main_player.gd @@ -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 - + 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() diff --git a/scene/ground/scene/c01/s05_院长房间.gd b/scene/ground/scene/c01/s05_院长房间.gd index 1c70c5eb..be3c1b71 100644 --- a/scene/ground/scene/c01/s05_院长房间.gd +++ b/scene/ground/scene/c01/s05_院长房间.gd @@ -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(): # 播放纸片动画 diff --git a/scene/ground/scene/c01/s05_院长房间.tscn b/scene/ground/scene/c01/s05_院长房间.tscn index d29fcfc1..81488023 100644 --- a/scene/ground/scene/c01/s05_院长房间.tscn +++ b/scene/ground/scene/c01/s05_院长房间.tscn @@ -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