feat: Implement core playerboard management including item grabbing, power-up handling, goal completion, and grid refilling, alongside new Tekton entity and various game managers.

This commit is contained in:
2026-03-02 03:10:38 +08:00
parent 1c5c3d47f6
commit a7442bb1a6
17 changed files with 78 additions and 42 deletions
+3 -2
View File
@@ -75,9 +75,10 @@ func _update_camera_target():
var current_row = player.current_position.y
var current_col = player.current_position.x
if LobbyManager.game_mode == "Stop n Go":
var mode = LobbyManager.get_game_mode()
if mode == GameMode.Mode.STOP_N_GO:
_update_stop_n_go_camera(current_row, current_col)
elif LobbyManager.game_mode == "Tekton Doors":
elif mode == GameMode.Mode.TEKTON_DOORS:
_update_tekton_doors_camera()
else:
_update_freemode_camera(current_row, current_col)
+6
View File
@@ -46,6 +46,12 @@ var selected_area: String = "Desert" # Host-controlled
var game_mode: String = "Freemode" # Host-controlled
var local_character_index: int = 0 # Local player's character index
func get_game_mode() -> GameMode.Mode:
return GameMode.from_string(game_mode)
func is_game_mode(mode: GameMode.Mode) -> bool:
return get_game_mode() == mode
# Signals
signal game_mode_changed(mode: String)
+2 -1
View File
@@ -90,7 +90,8 @@ func handle_unhandled_input(event):
if event is InputEventKey and event.pressed and not event.echo:
match event.keycode:
KEY_KP_1, KEY_1, KEY_KP_2, KEY_2, KEY_KP_3, KEY_3, KEY_KP_4, KEY_4:
var is_restricted = LobbyManager.game_mode == "Stop n Go" or LobbyManager.game_mode == "Tekton Doors"
var mode = LobbyManager.get_game_mode()
var is_restricted = GameMode.is_restricted(mode)
match event.keycode:
KEY_KP_1, KEY_1:
player.activate_powerup(0) # FASTER_SPEED
+1 -1
View File
@@ -219,7 +219,7 @@ func try_push(target_pos: Vector2i, direction: Vector2i) -> bool:
# SCORING: 200 Points for successful attack (ONLY in Free Mode)
if player.is_multiplayer_authority():
var is_sng = LobbyManager.game_mode == "Stop n Go"
var is_sng = LobbyManager.is_game_mode(GameMode.Mode.STOP_N_GO)
if not is_sng:
var main = player.get_tree().get_root().get_node_or_null("Main")
if main:
+1 -1
View File
@@ -232,7 +232,7 @@ func _check_and_refill_grid_if_needed(server_gridmap: Node):
break
if not has_items:
if LobbyManager.game_mode == "Tekton Doors":
if LobbyManager.is_game_mode(GameMode.Mode.TEKTON_DOORS):
# Tekton Doors handles its own wall-aware refill in PortalModeManager
return
+3 -2
View File
@@ -315,7 +315,7 @@ func _execute_area_freeze(center_pos: Vector2i = Vector2i.ZERO):
hit_count += 1
if hit_count > 0 and player.is_multiplayer_authority():
var is_sng = LobbyManager.game_mode == "Stop n Go"
var is_sng = LobbyManager.is_game_mode(GameMode.Mode.STOP_N_GO)
if not is_sng:
var points = hit_count * 50
var main = player.get_tree().get_root().get_node_or_null("Main")
@@ -462,7 +462,8 @@ func spawn_powerups_around(center: Vector2i, force_powerups: bool = true):
item_id = rng.randi_range(7, 10)
else:
# 30% Chance for PowerUp (Speed 11, Freeze 12, Ghost 14 - Exclude Wall 13 in restricted modes)
var is_restricted = LobbyManager.game_mode == "Stop n Go" or LobbyManager.game_mode == "Tekton Doors"
var mode = LobbyManager.get_game_mode()
var is_restricted = GameMode.is_restricted(mode)
if is_restricted:
item_id = [11, 12, 14].pick_random()
else:
+1 -1
View File
@@ -256,7 +256,7 @@ func _ensure_shortcut_label(btn: Button, button_name: String):
if btn.has_node("ShortcutLabel"):
# Update Label content if it exists to match potential remapping
var existing_lbl = btn.get_node("ShortcutLabel")
var is_sng = LobbyManager.game_mode == "Stop n Go"
var is_sng = LobbyManager.is_game_mode(GameMode.Mode.STOP_N_GO)
match button_name:
"Grab": existing_lbl.text = "Space" if is_sng else ""