feat: Implement core player entity with multiplayer state synchronization, character selection, movement, and manager-based input.
This commit is contained in:
@@ -44,6 +44,10 @@ func initialize(p_main: Node3D):
|
||||
func set_player(p_player: Node3D):
|
||||
local_player = p_player
|
||||
|
||||
# Connect to Tekton status updates
|
||||
if not local_player.tekton_carried_changed.is_connected(_on_tekton_carried_changed):
|
||||
local_player.tekton_carried_changed.connect(_on_tekton_carried_changed)
|
||||
|
||||
# Connect to PowerUpManager if it exists (for boost updates)
|
||||
var powerup_mgr = local_player.get_node_or_null("PowerUpManager")
|
||||
if powerup_mgr:
|
||||
@@ -351,18 +355,21 @@ func _on_button_pressed(button_name: String):
|
||||
"TektonKnock":
|
||||
var powerup_mgr = local_player.get_node_or_null("PowerUpManager")
|
||||
if powerup_mgr and powerup_mgr.can_use_special():
|
||||
if local_player.has_method("enter_knock_mode"):
|
||||
local_player.enter_knock_mode()
|
||||
powerup_mgr.reset_boost()
|
||||
elif local_player.has_method("knock_tekton"):
|
||||
# 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()
|
||||
powerup_mgr.reset_boost()
|
||||
elif local_player.has_method("enter_knock_mode"):
|
||||
local_player.enter_knock_mode()
|
||||
"TektonThrow":
|
||||
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()
|
||||
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.has_method("grab_tekton"):
|
||||
local_player.grab_tekton()
|
||||
|
||||
func _on_button_released(button_name: String):
|
||||
var btn: Button
|
||||
@@ -543,7 +550,16 @@ func _on_boost_points_changed(current_points: int, max_points: int):
|
||||
_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)
|
||||
_update_boost_button_state(tekton_throw_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)
|
||||
|
||||
func _on_tekton_carried_changed(_is_carrying: bool):
|
||||
# Refresh button states when player grabs/throws a tekton
|
||||
var powerup_mgr = local_player.get_node_or_null("PowerUpManager")
|
||||
if powerup_mgr:
|
||||
_on_boost_points_changed(powerup_mgr.current_boost, powerup_mgr.MAX_BOOST)
|
||||
|
||||
func _update_boost_button_state(btn: Button, is_enabled: bool):
|
||||
if not btn: return
|
||||
|
||||
Reference in New Issue
Block a user