feat: implement StopNGoManager for phase-based gameplay and update player logic for mission tracking and movement penalties

This commit is contained in:
Yogi Wiguna
2026-03-30 15:44:10 +08:00
parent f43dba73a2
commit c5da49d872
2 changed files with 15 additions and 3 deletions
+9
View File
@@ -352,6 +352,7 @@ func _ready():
@onready var floor_spawn_bot: AnimatedSprite3D = $floor_spawn_bot @onready var floor_spawn_bot: AnimatedSprite3D = $floor_spawn_bot
@onready var floor_spawn_top: AnimatedSprite3D = $floor_spawn_top @onready var floor_spawn_top: AnimatedSprite3D = $floor_spawn_top
@onready var vfx_scatter_knock: AnimatedSprite3D = $scatter_knock
#func _input(event: InputEvent) -> void: #func _input(event: InputEvent) -> void:
#if event.is_action_pressed("grab_item"): #if event.is_action_pressed("grab_item"):
@@ -369,6 +370,14 @@ func play_floor_spawn():
floor_spawn_bot.visible = false floor_spawn_bot.visible = false
floor_spawn_top.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(): func _init_managers():
movement_manager = load("res://scripts/managers/player_movement_manager.gd").new() movement_manager = load("res://scripts/managers/player_movement_manager.gd").new()
movement_manager.name = "MovementManager" movement_manager.name = "MovementManager"
+6 -3
View File
@@ -1013,9 +1013,12 @@ func _scatter_player_tiles(player_node: Node):
SfxManager.rpc("play_rpc", "tile_scatter") SfxManager.rpc("play_rpc", "tile_scatter")
NotificationManager.send_message(player_node, "Not in Safe Zone! Tiles scattered!", NotificationManager.MessageType.WARNING) NotificationManager.send_message(player_node, "Not in Safe Zone! Tiles scattered!", NotificationManager.MessageType.WARNING)
# Screen shake # Screen shake and animation
if player_node.has_method("trigger_screen_shake") and can_rpc(): if can_rpc():
player_node.rpc("trigger_screen_shake", "heavy") 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]) print("[StopNGo] Caught outside: Scattered %d tiles from Player %d" % [tiles_to_scatter.size(), peer_id])