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
+12 -5
View File
@@ -1271,13 +1271,18 @@ func _find_random_spawn_position() -> Vector2i:
var available_positions = []
# Scan the grid for valid walkable floor tiles that are not occupied
for x in range(enhanced_gridmap.columns):
for z in range(enhanced_gridmap.rows):
var cols = enhanced_gridmap.columns if "columns" in enhanced_gridmap else 14
var rs = enhanced_gridmap.rows if "rows" in enhanced_gridmap else 14
for x in range(cols):
for z in range(rs):
var pos = Vector2i(x, z)
# Check Floor 0 for walkable ground (Item 0)
# Check Floor 0 for walkable ground (Not a wall/obstacle)
var ground_item = enhanced_gridmap.get_cell_item(Vector3i(x, 0, z))
if ground_item == 0: # Assuming 0 is walkable ground
var is_walkable = ground_item != -1 and not ground_item in enhanced_gridmap.non_walkable_items
if is_walkable:
# Check if position is occupied by another player
if not is_position_occupied(pos):
available_positions.append(pos)
@@ -1287,7 +1292,9 @@ func _find_random_spawn_position() -> Vector2i:
rng.randomize()
return available_positions[rng.randi() % available_positions.size()]
return Vector2i.ZERO
# Better fallback center instead of 0,0 which is often a wall/border
print("[Player] Warning: No available spawn positions found! Using fallback.")
return Vector2i(cols / 2, rs / 2)
func find_random_valid_position_in_range() -> Vector2i:
var rng = RandomNumberGenerator.new()