feat: Introduce an EnhancedGridMap with advanced generation, randomization, pathfinding, and data serialization, along with new player, powerup, and portal managers.
This commit is contained in:
@@ -377,20 +377,21 @@ func _execute_block_floor(target_pos: Vector2i = Vector2i.ZERO):
|
||||
if _is_position_blocked_by_stand(pos): continue
|
||||
|
||||
var block_pos = Vector3i(pos.x, 0, pos.y)
|
||||
var current_item = enhanced_gridmap.get_cell_item(block_pos)
|
||||
var original_item = enhanced_gridmap.get_cell_item(block_pos)
|
||||
|
||||
# PROTECTED FLOOR CHECK: avoid overwriting Start (1), Safe (2), Finish (3), or Wall (4)
|
||||
var is_immutable = false
|
||||
if "immutable_items" in enhanced_gridmap:
|
||||
if current_item in enhanced_gridmap.immutable_items:
|
||||
if original_item in enhanced_gridmap.immutable_items:
|
||||
is_immutable = true
|
||||
if current_item == 4 or is_immutable: continue
|
||||
if original_item in [1, 2, 3, 4] or is_immutable: continue
|
||||
|
||||
batch_data.append({"x": block_pos.x, "y": 0, "z": block_pos.z, "item": 4})
|
||||
|
||||
# Record for restoration
|
||||
blocked_tiles.append({
|
||||
"position": block_pos,
|
||||
"original_item": current_item,
|
||||
"original_item": original_item,
|
||||
"timer": BLOCK_DURATION
|
||||
})
|
||||
|
||||
@@ -415,7 +416,7 @@ func _execute_invisible_mode(target: Node3D):
|
||||
# Helper: Spawn Powerups (For Super Push)
|
||||
# =============================================================================
|
||||
|
||||
func spawn_powerups_around(center: Vector2i, force_powerups: bool = true):
|
||||
func spawn_powerups_around(center: Vector2i, force_powerups: bool = true, only_common: bool = false, full_density: bool = false):
|
||||
# "spawn / replace your nearby tiles into power up ( special tiles )"
|
||||
# New PowerUp Tiles are 11, 12, 13, 14
|
||||
var radius = 2
|
||||
@@ -428,20 +429,31 @@ func spawn_powerups_around(center: Vector2i, force_powerups: bool = true):
|
||||
|
||||
if enhanced_gridmap.is_position_valid(pos):
|
||||
# Random chance to spawn ANYTHING at this spot (keep density reasonable)
|
||||
if rng.randf() > 0.5: continue
|
||||
if not full_density and rng.randf() > 0.5: continue
|
||||
|
||||
# PROTECTED FLOOR CHECK: Don't spawn on existing walls or void
|
||||
var f0 = enhanced_gridmap.get_cell_item(Vector3i(pos.x, 0, pos.y))
|
||||
var f1 = enhanced_gridmap.get_cell_item(Vector3i(pos.x, 1, pos.y))
|
||||
if f0 in [4, -1] or f1 == 4 or f1 == 13:
|
||||
continue
|
||||
|
||||
var item_id: int
|
||||
# 70% Chance for Normal Tile (7-10)
|
||||
if rng.randf() < 0.7:
|
||||
var mode = LobbyManager.get_game_mode()
|
||||
|
||||
if only_common or LobbyManager.is_game_mode(GameMode.Mode.STOP_N_GO):
|
||||
# Spawn ONLY goals (7-10) for Stop n Go or if forced
|
||||
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 mode = LobbyManager.get_game_mode()
|
||||
var is_restricted = GameMode.is_restricted(mode)
|
||||
if is_restricted:
|
||||
item_id = [11, 14].pick_random()
|
||||
# Free mode: 60% Chance for Normal Tile (7-10), 40% for PowerUp
|
||||
if rng.randf() < 0.6:
|
||||
item_id = rng.randi_range(7, 10)
|
||||
else:
|
||||
item_id = rng.randi_range(11, 14)
|
||||
# 30% Chance for PowerUp (Speed 11, Freeze 12, Ghost 14 - Exclude Wall 13 in restricted modes)
|
||||
var is_restricted = GameMode.is_restricted(mode)
|
||||
if is_restricted:
|
||||
item_id = [11, 14].pick_random()
|
||||
else:
|
||||
item_id = rng.randi_range(11, 14)
|
||||
|
||||
var cell = Vector3i(pos.x, 1, pos.y)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user