feat: Introduce core player script with multiplayer state management, character selection, and game logic, alongside a new camera context manager.
This commit is contained in:
@@ -1954,6 +1954,9 @@ func set_spawn_position(pos: Vector2i):
|
|||||||
# Reveal character now that it's in the correct position
|
# Reveal character now that it's in the correct position
|
||||||
visible = true
|
visible = true
|
||||||
|
|
||||||
|
# Notify systems that position changed (for Camera snap)
|
||||||
|
position_changed.emit()
|
||||||
|
|
||||||
emit_signal("position_changed")
|
emit_signal("position_changed")
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -39,13 +39,13 @@ func set_player(p_player: Node3D):
|
|||||||
var has_snap_signal = player.has_signal("position_changed")
|
var has_snap_signal = player.has_signal("position_changed")
|
||||||
|
|
||||||
if movement_mgr and has_snap_signal:
|
if movement_mgr and has_snap_signal:
|
||||||
# 1. Follow during movement
|
# 1. Follow during movement finished
|
||||||
if not movement_mgr.movement_finished.is_connected(_on_player_moved):
|
if not movement_mgr.movement_finished.is_connected(_on_player_moved):
|
||||||
movement_mgr.movement_finished.connect(_on_player_moved)
|
movement_mgr.movement_finished.connect(_on_player_moved)
|
||||||
|
|
||||||
# 2. Snap on spawn/teleport
|
# 2. Snap on spawn/teleport (Resets setups for immediate catch-up)
|
||||||
if not player.position_changed.is_connected(_on_player_moved):
|
if not player.position_changed.is_connected(_on_player_snapped):
|
||||||
player.position_changed.connect(_on_player_moved)
|
player.position_changed.connect(_on_player_snapped)
|
||||||
|
|
||||||
print("[CameraContextManager] Successfully connected to all player signals")
|
print("[CameraContextManager] Successfully connected to all player signals")
|
||||||
else:
|
else:
|
||||||
@@ -58,7 +58,14 @@ func set_player(p_player: Node3D):
|
|||||||
_update_camera_target()
|
_update_camera_target()
|
||||||
|
|
||||||
func _on_player_moved():
|
func _on_player_moved():
|
||||||
# print("[CameraContextManager] Player moved signal received")
|
# Normal movement finish (keeps hysteresis)
|
||||||
|
_update_camera_target()
|
||||||
|
|
||||||
|
func _on_player_snapped():
|
||||||
|
# Sharp snap (spawn/teleport) - Reset setup indices to force immediate re-eval
|
||||||
|
current_row_setup = -1
|
||||||
|
current_col_setup = -1
|
||||||
|
# print("[CameraContextManager] Player snapped, resetting setups")
|
||||||
_update_camera_target()
|
_update_camera_target()
|
||||||
|
|
||||||
func _update_camera_target():
|
func _update_camera_target():
|
||||||
@@ -174,9 +181,9 @@ func _update_freemode_camera(current_row: int, current_col: int):
|
|||||||
2: target_z = 22.5; target_y = 19.22636
|
2: target_z = 22.5; target_y = 19.22636
|
||||||
|
|
||||||
match current_col_setup:
|
match current_col_setup:
|
||||||
0: target_x = 5.0
|
0: target_x = 3.0 # Left zone center
|
||||||
1: target_x = 7.0
|
1: target_x = 7.0 # Main center
|
||||||
2: target_x = 9.0
|
2: target_x = 11.0 # Right zone center
|
||||||
|
|
||||||
_apply_camera_tween(Vector3(target_x, target_y, target_z))
|
_apply_camera_tween(Vector3(target_x, target_y, target_z))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user