Fixing daynight cycle, and adding character home
This commit is contained in:
@@ -7,12 +7,14 @@ class_name GridCharacterController
|
||||
@export var start_cell: Vector2i = Vector2i.ZERO
|
||||
@export_range(0.1, 20.0, 0.1) var move_speed: float = 4.0
|
||||
@export_range(0.0, 2.0, 0.01) var height_offset: float = 0.3
|
||||
@export var home_marker_scene: PackedScene
|
||||
|
||||
var _grid_manager: GridPlaneManager = null
|
||||
var _camera: Camera3D = null
|
||||
var _current_cell: Vector2i = Vector2i(-1, -1)
|
||||
var _target_position: Vector3
|
||||
var _is_moving: bool = false
|
||||
var _home_instance: Node3D = null
|
||||
|
||||
func _ready() -> void:
|
||||
set_physics_process(true)
|
||||
@@ -21,6 +23,7 @@ func _ready() -> void:
|
||||
if _grid_manager:
|
||||
_grid_manager.grid_layout_changed.connect(_on_grid_layout_changed)
|
||||
_move_to_cell(start_cell, true)
|
||||
_spawn_home()
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
if not _is_moving:
|
||||
@@ -89,6 +92,7 @@ func _on_grid_layout_changed(_cells: Dictionary) -> void:
|
||||
clamp(_current_cell.y, 0, _grid_manager.rows - 1)
|
||||
)
|
||||
_move_to_cell(_current_cell, true)
|
||||
_update_home_position()
|
||||
|
||||
func _resolve_references() -> void:
|
||||
if grid_manager_path != NodePath():
|
||||
@@ -97,3 +101,37 @@ func _resolve_references() -> void:
|
||||
_grid_manager = get_parent() as GridPlaneManager
|
||||
if camera_path != NodePath():
|
||||
_camera = get_node_or_null(camera_path) as Camera3D
|
||||
if not _home_instance and home_marker_scene:
|
||||
_spawn_home()
|
||||
|
||||
func _spawn_home() -> void:
|
||||
if not home_marker_scene or not _grid_manager:
|
||||
return
|
||||
if _home_instance and is_instance_valid(_home_instance):
|
||||
_home_instance.queue_free()
|
||||
var new_home := home_marker_scene.instantiate()
|
||||
if not new_home:
|
||||
return
|
||||
if not (new_home is Node3D):
|
||||
new_home.queue_free()
|
||||
return
|
||||
_home_instance = new_home
|
||||
var parent := get_parent()
|
||||
if parent:
|
||||
call_deferred("_add_home_to_parent", parent)
|
||||
|
||||
func _add_home_to_parent(parent: Node) -> void:
|
||||
if not parent or not _home_instance:
|
||||
return
|
||||
if _home_instance.get_parent() == parent:
|
||||
_update_home_position()
|
||||
return
|
||||
parent.add_child(_home_instance)
|
||||
_update_home_position()
|
||||
|
||||
func _update_home_position() -> void:
|
||||
if not _home_instance or not _grid_manager or not _grid_manager.has_cell(start_cell):
|
||||
return
|
||||
var local_center := _grid_manager.cell_to_world(start_cell)
|
||||
var world_center := _grid_manager.to_global(local_center)
|
||||
_home_instance.global_position = world_center + Vector3.UP * 0.01
|
||||
|
||||
Reference in New Issue
Block a user