From c5da49d87265cb47aa0b120560ba94f57eb284cd Mon Sep 17 00:00:00 2001 From: Yogi Wiguna Date: Mon, 30 Mar 2026 15:44:10 +0800 Subject: [PATCH] feat: implement StopNGoManager for phase-based gameplay and update player logic for mission tracking and movement penalties --- scenes/player.gd | 9 +++++++++ scripts/managers/stop_n_go_manager.gd | 9 ++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/scenes/player.gd b/scenes/player.gd index 4ee5041..48b2e8a 100644 --- a/scenes/player.gd +++ b/scenes/player.gd @@ -352,6 +352,7 @@ func _ready(): @onready var floor_spawn_bot: AnimatedSprite3D = $floor_spawn_bot @onready var floor_spawn_top: AnimatedSprite3D = $floor_spawn_top +@onready var vfx_scatter_knock: AnimatedSprite3D = $scatter_knock #func _input(event: InputEvent) -> void: #if event.is_action_pressed("grab_item"): @@ -369,6 +370,14 @@ func play_floor_spawn(): floor_spawn_bot.visible = false floor_spawn_top.visible = false +@rpc("any_peer", "call_local") +func play_scatter_knock(): + if vfx_scatter_knock: + vfx_scatter_knock.visible = true + vfx_scatter_knock.play("scatter_knock") + await vfx_scatter_knock.animation_finished + vfx_scatter_knock.visible = false + func _init_managers(): movement_manager = load("res://scripts/managers/player_movement_manager.gd").new() movement_manager.name = "MovementManager" diff --git a/scripts/managers/stop_n_go_manager.gd b/scripts/managers/stop_n_go_manager.gd index 959b65d..a51e904 100644 --- a/scripts/managers/stop_n_go_manager.gd +++ b/scripts/managers/stop_n_go_manager.gd @@ -1013,9 +1013,12 @@ func _scatter_player_tiles(player_node: Node): SfxManager.rpc("play_rpc", "tile_scatter") NotificationManager.send_message(player_node, "Not in Safe Zone! Tiles scattered!", NotificationManager.MessageType.WARNING) - # Screen shake - if player_node.has_method("trigger_screen_shake") and can_rpc(): - player_node.rpc("trigger_screen_shake", "heavy") + # Screen shake and animation + if can_rpc(): + if player_node.has_method("trigger_screen_shake"): + player_node.rpc("trigger_screen_shake", "heavy") + if player_node.has_method("play_scatter_knock"): + player_node.rpc("play_scatter_knock") print("[StopNGo] Caught outside: Scattered %d tiles from Player %d" % [tiles_to_scatter.size(), peer_id])