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

4
demo/demo.gd Normal file
View file

@ -0,0 +1,4 @@
extends Node3D
func _ready() -> void:
RegionOrigin.anchor = $FixedWingAircraft/RegionTransform

1
demo/demo.gd.uid Normal file
View file

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

View file

@ -1,5 +1,6 @@
[gd_scene load_steps=18 format=3 uid="uid://d20jwlre5rc5m"] [gd_scene load_steps=20 format=3 uid="uid://d20jwlre5rc5m"]
[ext_resource type="Script" uid="uid://cdk7y1rat3juk" path="res://demo/demo.gd" id="1_oeqrt"]
[ext_resource type="Texture2D" uid="uid://bruwqvb6qrsfn" path="res://demo/textures/untexture.png" id="1_ytiva"] [ext_resource type="Texture2D" uid="uid://bruwqvb6qrsfn" path="res://demo/textures/untexture.png" id="1_ytiva"]
[ext_resource type="Script" uid="uid://bddnsq0h2tpf" path="res://scripts/aircraft/nodes/fixed_wing_aircraft.gd" id="2_dar0o"] [ext_resource type="Script" uid="uid://bddnsq0h2tpf" path="res://scripts/aircraft/nodes/fixed_wing_aircraft.gd" id="2_dar0o"]
[ext_resource type="Resource" uid="uid://dpk3bgq54ajul" path="res://demo/airfoils/symmetric.tres" id="3_u10mr"] [ext_resource type="Resource" uid="uid://dpk3bgq54ajul" path="res://demo/airfoils/symmetric.tres" id="3_u10mr"]
@ -7,6 +8,7 @@
[ext_resource type="Resource" uid="uid://p2i7a806s6gs" path="res://demo/propulsion/electric_motor.tres" id="4_s1s6j"] [ext_resource type="Resource" uid="uid://p2i7a806s6gs" path="res://demo/propulsion/electric_motor.tres" id="4_s1s6j"]
[ext_resource type="Script" uid="uid://pc3j1c6e1ra7" path="res://scripts/aircraft/nodes/flight_sim_controller.gd" id="5_s1s6j"] [ext_resource type="Script" uid="uid://pc3j1c6e1ra7" path="res://scripts/aircraft/nodes/flight_sim_controller.gd" id="5_s1s6j"]
[ext_resource type="Script" uid="uid://tgj0rvn5wj8t" path="res://demo/hud.gd" id="6_onu7k"] [ext_resource type="Script" uid="uid://tgj0rvn5wj8t" path="res://demo/hud.gd" id="6_onu7k"]
[ext_resource type="Script" uid="uid://ddh4omp23xc58" path="res://scripts/origin/region_transform.gd" id="7_onvmd"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_j5lb4"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_j5lb4"]
albedo_texture = ExtResource("1_ytiva") albedo_texture = ExtResource("1_ytiva")
@ -14,7 +16,8 @@ uv1_scale = Vector3(100, 100, 100)
[sub_resource type="PlaneMesh" id="PlaneMesh_5hjng"] [sub_resource type="PlaneMesh" id="PlaneMesh_5hjng"]
material = SubResource("StandardMaterial3D_j5lb4") material = SubResource("StandardMaterial3D_j5lb4")
size = Vector2(2000, 2000) size = Vector2(1000, 1000)
center_offset = Vector3(500, 0, 500)
[sub_resource type="Curve" id="Curve_s1s6j"] [sub_resource type="Curve" id="Curve_s1s6j"]
_limits = [0.0, 0.5, 0.0, 20.0] _limits = [0.0, 0.5, 0.0, 20.0]
@ -72,6 +75,7 @@ ambient_light_source = 3
ambient_light_color = Color(1, 1, 1, 1) ambient_light_color = Color(1, 1, 1, 1)
[node name="Demo" type="Node3D"] [node name="Demo" type="Node3D"]
script = ExtResource("1_oeqrt")
[node name="Ground" type="MeshInstance3D" parent="."] [node name="Ground" type="MeshInstance3D" parent="."]
mesh = SubResource("PlaneMesh_5hjng") mesh = SubResource("PlaneMesh_5hjng")
@ -96,6 +100,11 @@ metadata/_custom_type_script = "uid://pc3j1c6e1ra7"
[node name="Camera3D" type="Camera3D" parent="FixedWingAircraft"] [node name="Camera3D" type="Camera3D" parent="FixedWingAircraft"]
[node name="RegionTransform" type="Node" parent="FixedWingAircraft" node_paths=PackedStringArray("target")]
script = ExtResource("7_onvmd")
target = NodePath("..")
metadata/_custom_type_script = "uid://ddh4omp23xc58"
[node name="CanvasLayer" type="CanvasLayer" parent="."] [node name="CanvasLayer" type="CanvasLayer" parent="."]
[node name="HUD" type="Control" parent="CanvasLayer" node_paths=PackedStringArray("source")] [node name="HUD" type="Control" parent="CanvasLayer" node_paths=PackedStringArray("source")]

View file

@ -18,6 +18,7 @@ config/icon="res://icon.svg"
[autoload] [autoload]
Atmosphere="*res://scripts/aircraft/nodes/atmosphere.gd" Atmosphere="*res://scripts/aircraft/nodes/atmosphere.gd"
RegionOrigin="*res://scripts/origin/region_origin.gd"
[debug] [debug]

View file

@ -17,6 +17,8 @@ var m_relative_velocity: Vector3
var m_is_landed := false var m_is_landed := false
@onready var m_region_transform: RegionTransform = $RegionTransform
func _ready() -> void: func _ready() -> void:
velocity = -global_basis.z * initial_speed velocity = -global_basis.z * initial_speed
m_relative_velocity = transform.basis.inverse() * velocity 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()) rotate_object_local(steering_axis.normalized(), steering_axis.length())
move_and_slide() move_and_slide()
m_region_transform.sync_from_transform()
#if !is_landed: #if !is_landed:
# _fly() # _fly()
#else: #else:

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