feat: Introduce core player movement manager with grid-based movement, player pushing mechanics, and initial bot control and strategic planning.

This commit is contained in:
Yogi Wiguna
2026-03-05 16:41:35 +08:00
parent aa26e9f2a4
commit 5c4764b082
7 changed files with 169 additions and 47 deletions
+1 -9
View File
@@ -40,15 +40,7 @@ func _process(delta):
player.auto_put_item()
if move_vec != Vector2i.ZERO:
# Calculate target relative to intent (future position) to prevent zigzagging
var reference_pos = player.current_position
if movement_manager.is_moving:
if not movement_manager.movement_queue.is_empty():
reference_pos = movement_manager.movement_queue[-1]
elif player.target_position != Vector2i(-1, -1):
reference_pos = player.target_position
var target_position = reference_pos + move_vec
var target_position = player.current_position + move_vec
movement_manager.simple_move_to(target_position)
+1 -11
View File
@@ -50,17 +50,7 @@ func _can_rpc() -> bool:
func simple_move_to(grid_position: Vector2i) -> bool:
if is_moving:
# Check if we are already moving to this position or if it's already queued
var current_target = player.target_position
if movement_queue.is_empty():
if current_target == grid_position:
return false
elif movement_queue[-1] == grid_position:
return false
if movement_queue.size() < 1: # Buffer at most 1 future move
movement_queue.append(grid_position)
return true
return false
if not player.is_multiplayer_authority():
print("[Move] Failed: Not authority for %s (Authority: %d, My Peer: %d)" % [player.name, player.get_multiplayer_authority(), player.multiplayer.get_unique_id()])
+3 -3
View File
@@ -444,11 +444,11 @@ func spawn_powerups_around(center: Vector2i, force_powerups: bool = true, only_c
# Spawn ONLY common tiles (7-10) for Stop n Go or if forced
item_id = rng.randi_range(7, 10)
else:
# Free mode: 60% Chance for Common Tile (7-10), 40% for PowerUp
if rng.randf() < 0.6:
# Free mode: 80% Chance for Common Tile (7-10), 20% for PowerUp
if rng.randf() < 0.8:
item_id = rng.randi_range(7, 10)
else:
# 40% Chance for PowerUp
# 20% Chance for PowerUp
var is_restricted = GameMode.is_restricted(mode)
if is_restricted:
item_id = [11, 14].pick_random()