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:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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 ""
|
||||
|
||||
Reference in New Issue
Block a user