Added region-stepped origin.
This commit is contained in:
parent
907695442f
commit
73baafbd6c
9 changed files with 83 additions and 2 deletions
|
@ -17,6 +17,8 @@ var m_relative_velocity: Vector3
|
|||
|
||||
var m_is_landed := false
|
||||
|
||||
@onready var m_region_transform: RegionTransform = $RegionTransform
|
||||
|
||||
func _ready() -> void:
|
||||
velocity = -global_basis.z * initial_speed
|
||||
m_relative_velocity = transform.basis.inverse() * velocity
|
||||
|
@ -77,6 +79,7 @@ func _physics_process(delta: float) -> void:
|
|||
rotate_object_local(steering_axis.normalized(), steering_axis.length())
|
||||
|
||||
move_and_slide()
|
||||
m_region_transform.sync_from_transform()
|
||||
#if !is_landed:
|
||||
# _fly()
|
||||
#else:
|
||||
|
|
25
scripts/origin/region_origin.gd
Normal file
25
scripts/origin/region_origin.gd
Normal 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
|
1
scripts/origin/region_origin.gd.uid
Normal file
1
scripts/origin/region_origin.gd.uid
Normal file
|
@ -0,0 +1 @@
|
|||
uid://dlrk82k15q6w3
|
36
scripts/origin/region_transform.gd
Normal file
36
scripts/origin/region_transform.gd
Normal 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)))
|
1
scripts/origin/region_transform.gd.uid
Normal file
1
scripts/origin/region_transform.gd.uid
Normal file
|
@ -0,0 +1 @@
|
|||
uid://ddh4omp23xc58
|
Loading…
Add table
Add a link
Reference in a new issue