Added region-stepped origin.

This commit is contained in:
Patrick Marsee 2025-09-04 15:01:53 -04:00
parent 907695442f
commit 73baafbd6c
9 changed files with 83 additions and 2 deletions

View file

@ -0,0 +1,25 @@
# no name - meant to be an autoload
# Handles regional origin.
extends Node
@export var region_size := 1000.0
@export var origin := Vector3i.ZERO
@export var anchor: RegionTransform
var nodes_to_move: Dictionary[Node3D, bool]
func _physics_process(_delta: float) -> void:
if (anchor and anchor.region != origin):
move_origin(anchor.region)
func add_node(new_node: Node3D) -> void:
nodes_to_move[new_node] = true
func remove_node(old_node: Node3D) -> void:
nodes_to_move.erase(old_node)
func move_origin(new_origin: Vector3i) -> void:
origin = new_origin
var move_amount := Vector3(new_origin - origin * 1000)
for node in nodes_to_move:
node.transform.origin += move_amount

View file

@ -0,0 +1 @@
uid://dlrk82k15q6w3

View file

@ -0,0 +1,36 @@
class_name RegionTransform
extends Node
@export var offset: Vector3
@export var region: Vector3i
@export var target: Node3D
func _enter_tree() -> void:
if not target:
target = get_parent()
RegionOrigin.add_node(target)
func _exit_tree() -> void:
RegionOrigin.remove_node(target)
func move_offset(delta_offset: Vector3) -> void:
set_offset(offset + delta_offset)
func set_offset(new_offset: Vector3) -> void:
offset = new_offset
var delta_sector: Vector3i = _floor_ftoi(new_offset / 1000.0)
region += delta_sector
offset -= Vector3(delta_sector) * 1000.0
sync_to_transform()
func altitude() -> float:
return offset.y + float(region.y) * 1000.0
func sync_to_transform() -> void:
target.transform.origin = offset + Vector3(region - RegionOrigin.origin)
func sync_from_transform() -> void:
set_offset(target.transform.origin)
static func _floor_ftoi(vec: Vector3) -> Vector3i:
return Vector3i(int(floorf(vec.x)), int(floorf(vec.y)), int(floorf(vec.z)))

View file

@ -0,0 +1 @@
uid://ddh4omp23xc58