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:
Yogi Wiguna
2026-03-04 17:40:10 +08:00
parent 8f03cc15c5
commit cd7881bc3f
12 changed files with 128 additions and 107 deletions
+17 -40
View File
@@ -14,8 +14,7 @@ var put_button: Button
var attack_mode_button: Button # Renamed from special_button
var spawn_boost_button: Button
var settings_button: Button
var tekton_knock_button: Button
var tekton_throw_button: Button
var tekton_grab_button: Button
# Settings - persisted to config file
const CONFIG_PATH = "user://touch_controls_settings.cfg"
@@ -137,15 +136,13 @@ func _create_touch_ui():
grab_button = _find_or_create_action_button(actions_container, "Grab", "👋", button_positions.grab)
put_button = _find_or_create_action_button(actions_container, "Put", "📦", button_positions.put)
tekton_knock_button = _find_or_create_action_button(actions_container, "TektonKnock", "👊", Vector2(-280, -160))
tekton_throw_button = _find_or_create_action_button(actions_container, "TektonThrow", "🎯", Vector2(-280, -80))
tekton_grab_button = _find_or_create_action_button(actions_container, "TektonGrab", "👋", Vector2(-280, -80))
# Order: AttackMode, SpawnBoost, Grab
if attack_mode_button: actions_container.move_child(attack_mode_button, 0)
if spawn_boost_button: actions_container.move_child(spawn_boost_button, 1)
if grab_button: actions_container.move_child(grab_button, 2)
if tekton_knock_button: actions_container.move_child(tekton_knock_button, 3)
if tekton_throw_button: actions_container.move_child(tekton_throw_button, 4)
if tekton_grab_button: actions_container.move_child(tekton_grab_button, 3)
# Hide Put Button
if put_button:
@@ -263,8 +260,7 @@ func _ensure_shortcut_label(btn: Button, button_name: String):
"Put": existing_lbl.text = ""
"AttackMode": existing_lbl.text = "Q" if is_sng else ""
"SpawnBoost": existing_lbl.text = "E" if is_sng else ""
"TektonKnock": existing_lbl.text = "B"
"TektonThrow": existing_lbl.text = "G"
"TektonGrab": existing_lbl.text = "G"
# Ensure correct placement (Top Right)
existing_lbl.horizontal_alignment = HORIZONTAL_ALIGNMENT_RIGHT
@@ -294,8 +290,7 @@ func _ensure_shortcut_label(btn: Button, button_name: String):
"Put": shortcut_lbl.text = "" # Disabled shortcut
"AttackMode": shortcut_lbl.text = "Q"
"SpawnBoost": shortcut_lbl.text = "E"
"TektonKnock": shortcut_lbl.text = "B"
"TektonThrow": shortcut_lbl.text = "G"
"TektonGrab": shortcut_lbl.text = "G"
btn.add_child(shortcut_lbl)
@@ -315,8 +310,7 @@ func _on_button_pressed(button_name: String):
"Put": btn = put_button
"AttackMode": btn = attack_mode_button
"SpawnBoost": btn = spawn_boost_button
"TektonKnock": btn = tekton_knock_button
"TektonThrow": btn = tekton_throw_button
"TektonGrab": btn = tekton_grab_button
if btn:
var tween = create_tween()
@@ -347,27 +341,11 @@ func _on_button_pressed(button_name: String):
else:
print("[TouchControls] PowerUpManager missing on player")
"SpawnBoost":
var powerup_mgr = local_player.get_node_or_null("PowerUpManager")
if powerup_mgr and powerup_mgr.can_use_special():
if local_player.special_tiles_manager and local_player.special_tiles_manager.has_method("spawn_powerups_around"):
local_player.special_tiles_manager.spawn_powerups_around(local_player.current_position)
powerup_mgr.reset_boost()
"TektonKnock":
var powerup_mgr = local_player.get_node_or_null("PowerUpManager")
if powerup_mgr and powerup_mgr.can_use_special():
# Proactive: If nearby, knock immediately. Else enter mode.
if local_player.has_method("_find_nearby_tekton") and local_player._find_nearby_tekton():
local_player.knock_tekton()
elif local_player.has_method("enter_knock_mode"):
local_player.enter_knock_mode()
"TektonThrow":
if local_player.is_carrying_tekton:
var powerup_mgr = local_player.get_node_or_null("PowerUpManager")
if powerup_mgr and powerup_mgr.can_use_special():
if local_player.has_method("throw_tekton"):
local_player.throw_tekton()
powerup_mgr.reset_boost()
else:
if local_player and local_player.is_carrying_tekton:
if local_player.powerup_manager and local_player.powerup_manager.has_method("spawn_boost_reward"):
local_player.powerup_manager.spawn_boost_reward()
"TektonGrab":
if not local_player.is_carrying_tekton:
if local_player.has_method("grab_tekton"):
local_player.grab_tekton()
@@ -378,8 +356,7 @@ func _on_button_released(button_name: String):
"Put": btn = put_button
"AttackMode": btn = attack_mode_button
"SpawnBoost": btn = spawn_boost_button
"TektonKnock": btn = tekton_knock_button
"TektonThrow": btn = tekton_throw_button
"TektonGrab": btn = tekton_grab_button
if btn:
var tween = create_tween()
@@ -548,12 +525,12 @@ func _on_boost_points_changed(current_points: int, max_points: int):
var is_full = current_points >= (max_points - 1) # Tolerance
_update_boost_button_state(attack_mode_button, is_full)
_update_boost_button_state(spawn_boost_button, is_full)
_update_boost_button_state(tekton_knock_button, is_full)
# TektonThrow can be used for "Grab" even without full boost
var can_throw_or_grab = is_full or (local_player and not local_player.is_carrying_tekton)
_update_boost_button_state(tekton_throw_button, can_throw_or_grab)
# SpawnBoost depends on carrying a Tekton, not boost points
var can_spawn = local_player and local_player.is_carrying_tekton
_update_boost_button_state(spawn_boost_button, can_spawn)
_update_boost_button_state(tekton_grab_button, true) # Always enabled (logic handles grab-ability)
func _on_tekton_carried_changed(_is_carrying: bool):
# Refresh button states when player grabs/throws a tekton