From a6e116c77f7047c20f4d14d4c31bdeb15dbc4229 Mon Sep 17 00:00:00 2001 From: Yuki Kitagawa Date: Fri, 1 Nov 2024 21:39:46 +0800 Subject: [PATCH] Krakensbane is working --- res/scene/test.tscn | 77 +++++++++++++++++++++------------------- src/Craft/Krakensbane.cs | 22 +++++++++--- src/GlobalUsing.cs | 16 +++++++++ 3 files changed, 74 insertions(+), 41 deletions(-) create mode 100644 src/GlobalUsing.cs diff --git a/res/scene/test.tscn b/res/scene/test.tscn index d8902af..370779b 100644 --- a/res/scene/test.tscn +++ b/res/scene/test.tscn @@ -1,16 +1,7 @@ -[gd_scene load_steps=11 format=3 uid="uid://tht1tf5iq6lw"] +[gd_scene load_steps=12 format=3 uid="uid://tht1tf5iq6lw"] -[ext_resource type="Script" path="res://src/testing/TestThruster.cs" id="1_y7wni"] - -[sub_resource type="BoxShape3D" id="BoxShape3D_xxi7g"] -size = Vector3(16.9697, 0.0310059, 15.6934) - -[sub_resource type="PlaneMesh" id="PlaneMesh_xcndr"] -size = Vector2(20, 20) - -[sub_resource type="BoxShape3D" id="BoxShape3D_8al46"] - -[sub_resource type="BoxMesh" id="BoxMesh_jgj3c"] +[ext_resource type="Script" path="res://src/Craft/Krakensbane.cs" id="1_ju4qj"] +[ext_resource type="Script" path="res://src/Testing/TestThruster.cs" id="2_1t1tx"] [sub_resource type="PhysicalSkyMaterial" id="PhysicalSkyMaterial_uxbcq"] @@ -25,32 +16,18 @@ sky = SubResource("Sky_iakm3") [sub_resource type="Compositor" id="Compositor_tt8nt"] +[sub_resource type="BoxShape3D" id="BoxShape3D_8al46"] + +[sub_resource type="BoxMesh" id="BoxMesh_jgj3c"] + +[sub_resource type="BoxShape3D" id="BoxShape3D_xxi7g"] +size = Vector3(16.9697, 0.0310059, 15.6934) + +[sub_resource type="PlaneMesh" id="PlaneMesh_xcndr"] +size = Vector2(20, 20) + [node name="root" type="Node3D"] -[node name="ground" type="StaticBody3D" parent="."] -disable_mode = 1 -input_ray_pickable = false - -[node name="CollisionShape3D" type="CollisionShape3D" parent="ground"] -shape = SubResource("BoxShape3D_xxi7g") - -[node name="MeshInstance3D" type="MeshInstance3D" parent="ground"] -mesh = SubResource("PlaneMesh_xcndr") - -[node name="test-rocket" type="RigidBody3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.815224, 0) -script = ExtResource("1_y7wni") - -[node name="CollisionShape3D" type="CollisionShape3D" parent="test-rocket"] -shape = SubResource("BoxShape3D_8al46") - -[node name="MeshInstance3D" type="MeshInstance3D" parent="test-rocket"] -mesh = SubResource("BoxMesh_jgj3c") - -[node name="Camera3D" type="Camera3D" parent="test-rocket"] -transform = Transform3D(1, 0, 0, 0, 0.91772, 0.397228, 0, -0.397228, 0.91772, 0, 4.51745, 14.147) -current = true - [node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] transform = Transform3D(0.767277, -0.356166, -0.533322, 0.641316, 0.42612, 0.638072, 0, -0.831605, 0.555367, -9.52374, 5.38917, 8.97674) @@ -58,3 +35,31 @@ transform = Transform3D(0.767277, -0.356166, -0.533322, 0.641316, 0.42612, 0.638 environment = SubResource("Environment_0rcmt") camera_attributes = SubResource("CameraAttributesPhysical_irbnp") compositor = SubResource("Compositor_tt8nt") + +[node name="FloatingOriginRoot" type="Node3D" parent="." node_paths=PackedStringArray("FocusedVessel")] +script = ExtResource("1_ju4qj") +FocusedVessel = NodePath("test-rocket") + +[node name="test-rocket" type="RigidBody3D" parent="FloatingOriginRoot"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.815224, 0) +script = ExtResource("2_1t1tx") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="FloatingOriginRoot/test-rocket"] +shape = SubResource("BoxShape3D_8al46") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="FloatingOriginRoot/test-rocket"] +mesh = SubResource("BoxMesh_jgj3c") + +[node name="Camera3D" type="Camera3D" parent="FloatingOriginRoot/test-rocket"] +transform = Transform3D(1, 0, 0, 0, 0.91772, 0.397228, 0, -0.397228, 0.91772, 0, 4.51745, 14.147) +current = true + +[node name="ground" type="StaticBody3D" parent="FloatingOriginRoot"] +disable_mode = 1 +input_ray_pickable = false + +[node name="CollisionShape3D" type="CollisionShape3D" parent="FloatingOriginRoot/ground"] +shape = SubResource("BoxShape3D_xxi7g") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="FloatingOriginRoot/ground"] +mesh = SubResource("PlaneMesh_xcndr") diff --git a/src/Craft/Krakensbane.cs b/src/Craft/Krakensbane.cs index 18f85f6..61f5cd4 100644 --- a/src/Craft/Krakensbane.cs +++ b/src/Craft/Krakensbane.cs @@ -1,5 +1,7 @@ using System.Diagnostics; using Godot; +using ImGuiNET; +using Quadratic.Carto.MathExt; namespace Quadratic.Carto.Craft; @@ -14,23 +16,26 @@ namespace Quadratic.Carto.Craft; /// public sealed partial class Krakensbane : Node3D { - Node3D? focusedVessel = null; + [Export] + public Node3D? FocusedVessel { get; set; } const float maxDistance = 500.0f; + DVector3 originPosition = DVector3.Zero; + public override void _PhysicsProcess(double delta) { Debug.Assert( - focusedVessel == null || focusedVessel.GetParent() == this, + FocusedVessel == null || FocusedVessel.GetParent() == this, "Focused vessel must be a direct descendant of Krakensbane" ); - if (focusedVessel == null) + if (FocusedVessel == null) { return; } - var vesselPosition = focusedVessel.Transform.Origin; + var vesselPosition = FocusedVessel.Transform.Origin; var vesselDistance = vesselPosition.Length(); if (vesselDistance > maxDistance) { @@ -45,7 +50,14 @@ public sealed partial class Krakensbane : Node3D child.Transform = applyTransform * child.Transform; } - GD.Print($"Resetting position; delta = {-vesselPosition}"); + originPosition += vesselPosition.AsVim().AsDouble(); } } + + public override void _Process(double delta) + { + ImGui.Begin("Krakensbane"); + ImGui.Text($"Origin: {originPosition}"); + ImGui.End(); + } } diff --git a/src/GlobalUsing.cs b/src/GlobalUsing.cs new file mode 100644 index 0000000..8ecae9b --- /dev/null +++ b/src/GlobalUsing.cs @@ -0,0 +1,16 @@ +// These are the types used in the engine-independent core of the codebase. +// We add aliases for them to prevent namespace clash with Godot types. +global using VVector4 = Vim.Math3d.Vector4; +global using VVector3 = Vim.Math3d.Vector3; +global using VVector2 = Vim.Math3d.Vector2; +global using DVector4 = Vim.Math3d.DVector4; +global using DVector3 = Vim.Math3d.DVector3; +global using DVector2 = Vim.Math3d.DVector2; +global using VQuaternion = Vim.Math3d.Quaternion; +global using VMatrix4x4 = Vim.Math3d.Matrix4x4; +// Also alias System.Numerics types to prevent namespace clash with Godot types. +global using NVector4 = System.Numerics.Vector4; +global using NVector3 = System.Numerics.Vector3; +global using NVector2 = System.Numerics.Vector2; +global using NQuaternion = System.Numerics.Quaternion; +global using NMatrix4x4 = System.Numerics.Matrix4x4;