feat: Add dynamic camera context manager, initial main scene setup with gridmap and UI, and player script.
This commit is contained in:
+1
-1
@@ -106,7 +106,7 @@ current = true
|
|||||||
fov = 35.5
|
fov = 35.5
|
||||||
|
|
||||||
[node name="Camera3D200" type="Camera3D" parent="." unique_id=1763366951]
|
[node name="Camera3D200" type="Camera3D" parent="." unique_id=1763366951]
|
||||||
transform = Transform3D(1, 0, 0, 0, 0.5077037, 0.86153173, 0, -0.86153173, 0.5077037, 7, 19.636, 22.5)
|
transform = Transform3D(1, 0, 0, 0, 0.5077037, 0.86153173, 0, -0.86153173, 0.5077037, 9, 19.636, 22.5)
|
||||||
environment = ExtResource("4_ky38j")
|
environment = ExtResource("4_ky38j")
|
||||||
current = true
|
current = true
|
||||||
fov = 21.0
|
fov = 21.0
|
||||||
|
|||||||
+2
-12
@@ -463,18 +463,8 @@ func sync_special_animation() -> void:
|
|||||||
|
|
||||||
@rpc("any_peer", "call_local", "reliable")
|
@rpc("any_peer", "call_local", "reliable")
|
||||||
func trigger_screen_shake(shake_type: String) -> void:
|
func trigger_screen_shake(shake_type: String) -> void:
|
||||||
"""Trigger screen shake effect. Called via RPC when targeted or completing goals."""
|
# Shake disabled by user request. Camera movement now handled by CameraContextManager.
|
||||||
var main = get_tree().get_root().get_node_or_null("Main")
|
pass
|
||||||
if main:
|
|
||||||
var screen_shake_manager = main.get_node_or_null("ScreenShakeManager")
|
|
||||||
if screen_shake_manager:
|
|
||||||
match shake_type:
|
|
||||||
"targeted":
|
|
||||||
screen_shake_manager.shake_targeted()
|
|
||||||
"goal":
|
|
||||||
screen_shake_manager.shake_goal_complete()
|
|
||||||
_:
|
|
||||||
screen_shake_manager.shake_light()
|
|
||||||
|
|
||||||
# Add function to check if position is at finish line
|
# Add function to check if position is at finish line
|
||||||
func is_at_finish_line() -> bool:
|
func is_at_finish_line() -> bool:
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ var camera_setups = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
var unique_id: int
|
var unique_id: int
|
||||||
|
var current_row_setup: int = -1
|
||||||
|
var current_col_setup: int = -1
|
||||||
|
|
||||||
func initialize(p_camera: Camera3D, _p_shake_manager: Node):
|
func initialize(p_camera: Camera3D, _p_shake_manager: Node):
|
||||||
camera = p_camera
|
camera = p_camera
|
||||||
@@ -58,18 +60,79 @@ func _update_camera_target():
|
|||||||
# Player current_position is Vector2i(grid_x, grid_y)
|
# Player current_position is Vector2i(grid_x, grid_y)
|
||||||
|
|
||||||
var current_row = player.current_position.y
|
var current_row = player.current_position.y
|
||||||
var target_pos = Vector3.ZERO
|
var current_col = player.current_position.x
|
||||||
|
|
||||||
for i in range(camera_setups.size()):
|
# --- ROW LOGIC (Z/Y) ---
|
||||||
var setup = camera_setups[i]
|
# Zone 1 (Top): 0-4
|
||||||
if current_row <= setup.max_row:
|
# Zone 2 (Mid): 5-9
|
||||||
target_pos = setup.position
|
# Zone 3 (Bot): 10-13
|
||||||
break
|
|
||||||
|
# Initialize if needed
|
||||||
|
if current_row_setup == -1:
|
||||||
|
if current_row <= 4: current_row_setup = 0
|
||||||
|
elif current_row <= 9: current_row_setup = 1
|
||||||
|
else: current_row_setup = 2
|
||||||
|
|
||||||
|
# Row Hysteresis
|
||||||
|
match current_row_setup:
|
||||||
|
0: # Top
|
||||||
|
if current_row >= 6: current_row_setup = 1 # Move to Mid
|
||||||
|
1: # Mid
|
||||||
|
if current_row <= 3: current_row_setup = 0 # Move to Top
|
||||||
|
elif current_row >= 11: current_row_setup = 2 # Move to Bot
|
||||||
|
2: # Bot
|
||||||
|
if current_row <= 8: current_row_setup = 1 # Move to Mid
|
||||||
|
|
||||||
|
# --- COLUMN LOGIC (X) ---
|
||||||
|
# Zone 1 (Left): 0-4
|
||||||
|
# Zone 2 (Center): 5-9
|
||||||
|
# Zone 3 (Right): 10-13
|
||||||
|
|
||||||
|
# Initialize if needed
|
||||||
|
if current_col_setup == -1:
|
||||||
|
if current_col <= 4: current_col_setup = 0
|
||||||
|
elif current_col <= 9: current_col_setup = 1
|
||||||
|
else: current_col_setup = 2
|
||||||
|
|
||||||
|
# Col Hysteresis
|
||||||
|
match current_col_setup:
|
||||||
|
0: # Left
|
||||||
|
if current_col >= 6: current_col_setup = 1 # Move to Center
|
||||||
|
1: # Center
|
||||||
|
if current_col <= 3: current_col_setup = 0 # Move to Left
|
||||||
|
elif current_col >= 11: current_col_setup = 2 # Move to Right
|
||||||
|
2: # Right
|
||||||
|
if current_col <= 8: current_col_setup = 1 # Move to Center
|
||||||
|
|
||||||
|
# --- TARGET CALCULATION ---
|
||||||
|
var target_z = 0.0
|
||||||
|
var target_y = 0.0
|
||||||
|
var target_x = 7.0
|
||||||
|
|
||||||
|
# Apply Row Targets
|
||||||
|
match current_row_setup:
|
||||||
|
0: # Top
|
||||||
|
target_z = 15.0
|
||||||
|
target_y = 19.636
|
||||||
|
1: # Mid
|
||||||
|
target_z = 19.0
|
||||||
|
target_y = 19.636
|
||||||
|
2: # Bot
|
||||||
|
target_z = 22.5
|
||||||
|
target_y = 19.22636
|
||||||
|
|
||||||
|
# Apply Col Targets
|
||||||
|
match current_col_setup:
|
||||||
|
0: # Left
|
||||||
|
target_x = 5.0
|
||||||
|
1: # Center
|
||||||
|
target_x = 7.0
|
||||||
|
2: # Right
|
||||||
|
target_x = 9.0
|
||||||
|
|
||||||
|
var target_pos = Vector3(target_x, target_y, target_z)
|
||||||
|
|
||||||
# print("[CameraContextManager] Player Row: %d -> Selected Setup: %d (Target: %s)" % [current_row, setup_index, target_pos])
|
|
||||||
|
|
||||||
# Update ScreenShakeManager's target
|
|
||||||
# Update Camera Position directly with Tween
|
# Update Camera Position directly with Tween
|
||||||
if camera.position != target_pos:
|
if camera.position != target_pos:
|
||||||
var tween = create_tween()
|
var tween = create_tween()
|
||||||
tween.tween_property(camera, "position", target_pos, 1.0).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT)
|
tween.tween_property(camera, "position", target_pos, 0.4).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT)
|
||||||
|
|||||||
Reference in New Issue
Block a user