From 3e571e748215a09dbbaa740ddc6fed5e18763663 Mon Sep 17 00:00:00 2001 From: Jeremy Baxter Date: Sat, 24 Jan 2026 13:02:34 +1300 Subject: [PATCH 1/3] geep: add new gear --- gears/geep.gd | 62 +++++++++++++++++++++++++++++++++++ gears/geep.tscn | 87 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 149 insertions(+) create mode 100644 gears/geep.gd create mode 100644 gears/geep.tscn diff --git a/gears/geep.gd b/gears/geep.gd new file mode 100644 index 0000000..b08f60a --- /dev/null +++ b/gears/geep.gd @@ -0,0 +1,62 @@ +class_name Geep extends "gear.gd" + +func gear_name(): + return "Geep" +func continuous(): + return false +func use_basis(): + return idle_basis() + +# multiplier of player's speed +const speed = 2 +# how far the vehicle lifts the player off the ground +const lift = 2 + +var box = null +var driver = null +var active = false + +func init_driver(player): + driver = player + if not box: + box = Vector3(driver.get_node("CollisionShape3D").shape.size) + +func mount(): + active = true + position = Vector3(-driver.get_node("Pivot/Container").position) + position.y += 1 + driver.message( + "Press [%s] to exit the Geep" + % Util.input_action_string("gear_use")) + driver.get_node("CameraGimbal").position.y += lift + driver.get_node("Pivot/Mesh").position.y += lift + driver.get_node("CollisionShape3D").shape.size = $GearMesh/Vehicle/CollisionShape3D.shape.size + driver.protected = true + driver.suspended = true + +func unmount(): + active = false + position = Vector3.ZERO + driver.message("") + driver.get_node("CameraGimbal").position = Vector3.ZERO + driver.get_node("Pivot/Mesh").position = Vector3.ZERO + driver.get_node("CollisionShape3D").shape.size = box + driver.protected = false + driver.suspended = false + +func on_use(player): + init_driver(player) + if active: + unmount() + else: + mount() + +func on_unequip(player): + init_driver(player) + unmount() + +func _physics_process(_delta): + if not active: + return + + driver.move_player(0, -speed) diff --git a/gears/geep.tscn b/gears/geep.tscn new file mode 100644 index 0000000..481e2bb --- /dev/null +++ b/gears/geep.tscn @@ -0,0 +1,87 @@ +[gd_scene load_steps=10 format=3 uid="uid://d3k7b6o56ue5k"] + +[ext_resource type="Script" uid="uid://fljad0m3jlt0" path="res://gears/geep.gd" id="1_8skgp"] +[ext_resource type="Material" uid="uid://dpacu3e7vsks5" path="res://gears/geep_body.tres" id="2_rhiad"] +[ext_resource type="Material" uid="uid://bt5aat64e478k" path="res://gears/geep_wheel.tres" id="3_lrfuo"] + +[sub_resource type="BoxShape3D" id="BoxShape3D_lrfuo"] +size = Vector3(3, 3, 6) + +[sub_resource type="BoxMesh" id="BoxMesh_rhiad"] +material = ExtResource("2_rhiad") +size = Vector3(3, 0.5, 6) + +[sub_resource type="BoxMesh" id="BoxMesh_kyikt"] +material = ExtResource("2_rhiad") +size = Vector3(0.5, 1.75, 6) + +[sub_resource type="BoxMesh" id="BoxMesh_wm067"] +material = ExtResource("2_rhiad") +size = Vector3(3, 2, 2.5) + +[sub_resource type="BoxMesh" id="BoxMesh_lrfuo"] +material = ExtResource("2_rhiad") +size = Vector3(3, 2, 0.5) + +[sub_resource type="CylinderMesh" id="CylinderMesh_lrfuo"] +material = ExtResource("3_lrfuo") +top_radius = 1.0 +bottom_radius = 1.0 +height = 0.25 + +[node name="Gear" type="Node3D"] +rotation_edit_mode = 2 +script = ExtResource("1_8skgp") + +[node name="Timer" type="Timer" parent="."] +one_shot = true + +[node name="GearMesh" type="Node3D" parent="."] + +[node name="Vehicle" type="StaticBody3D" parent="GearMesh"] +transform = Transform3D(1, 0, 0, 0, 1.0000001, 0, 0, 0, 1.0000001, 0, 0, 0) +collision_layer = 4 + +[node name="CollisionShape3D" type="CollisionShape3D" parent="GearMesh/Vehicle"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5, 0) +shape = SubResource("BoxShape3D_lrfuo") + +[node name="BaseMesh" type="MeshInstance3D" parent="GearMesh/Vehicle"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.9997004, 0) +mesh = SubResource("BoxMesh_rhiad") + +[node name="LeftSideMesh" type="MeshInstance3D" parent="GearMesh/Vehicle"] +transform = Transform3D(1, 0, 0, 0, 0.9999999, 0, 0, 0, 0.9999999, -1.25, 2.1247003, 0) +mesh = SubResource("BoxMesh_kyikt") +skeleton = NodePath("") + +[node name="RightSideMesh" type="MeshInstance3D" parent="GearMesh/Vehicle"] +transform = Transform3D(1, 0, 0, 0, 0.9999999, 0, 0, 0, 0.9999999, 1.25, 2.1247003, 0) +mesh = SubResource("BoxMesh_kyikt") +skeleton = NodePath("") + +[node name="BonnetMesh" type="MeshInstance3D" parent="GearMesh/Vehicle"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.9997005, -1.75) +mesh = SubResource("BoxMesh_wm067") + +[node name="TailgateMesh" type="MeshInstance3D" parent="GearMesh/Vehicle"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.9997005, 2.75) +mesh = SubResource("BoxMesh_lrfuo") + +[node name="WheelFLMesh" type="MeshInstance3D" parent="GearMesh/Vehicle"] +transform = Transform3D(-4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 0, 0, 1, 1.65, 1, 2) +mesh = SubResource("CylinderMesh_lrfuo") + +[node name="WheelFRMesh" type="MeshInstance3D" parent="GearMesh/Vehicle"] +transform = Transform3D(-4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 0, 0, 1, -1.65, 1, 2) +mesh = SubResource("CylinderMesh_lrfuo") + +[node name="WheelBLMesh" type="MeshInstance3D" parent="GearMesh/Vehicle"] +transform = Transform3D(-4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 0, 0, 1, 1.65, 1, -2) +mesh = SubResource("CylinderMesh_lrfuo") + +[node name="WheelBRMesh" type="MeshInstance3D" parent="GearMesh/Vehicle"] +transform = Transform3D(-4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 0, 0, 1, -1.65, 1, -2) +mesh = SubResource("CylinderMesh_lrfuo") + +[connection signal="timeout" from="Timer" to="." method="_on_timer_timeout"] From 72c41f8817531e89b0e81497e2c25885e0504bd5 Mon Sep 17 00:00:00 2001 From: Jeremy Baxter Date: Sun, 25 Jan 2026 17:20:35 +1300 Subject: [PATCH 2/3] util: add class --- util/util.gd | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 util/util.gd diff --git a/util/util.gd b/util/util.gd new file mode 100644 index 0000000..1bd3c37 --- /dev/null +++ b/util/util.gd @@ -0,0 +1,4 @@ +class_name Util extends Node + +static func input_action_string(action): + return InputMap.action_get_events(action)[0].as_text() From 47255e585042b6bb93e466e60b0aaf1c9ef0d6d8 Mon Sep 17 00:00:00 2001 From: Jeremy Baxter Date: Sat, 24 Jan 2026 13:02:34 +1300 Subject: [PATCH 3/3] geep: add new gear --- gears/geep.gd | 62 ++++++++++++++++++++++++++++++ gears/geep.tscn | 87 +++++++++++++++++++++++++++++++++++++++++++ gears/geep_body.tres | 4 ++ gears/geep_wheel.tres | 4 ++ 4 files changed, 157 insertions(+) create mode 100644 gears/geep.gd create mode 100644 gears/geep.tscn create mode 100644 gears/geep_body.tres create mode 100644 gears/geep_wheel.tres diff --git a/gears/geep.gd b/gears/geep.gd new file mode 100644 index 0000000..b08f60a --- /dev/null +++ b/gears/geep.gd @@ -0,0 +1,62 @@ +class_name Geep extends "gear.gd" + +func gear_name(): + return "Geep" +func continuous(): + return false +func use_basis(): + return idle_basis() + +# multiplier of player's speed +const speed = 2 +# how far the vehicle lifts the player off the ground +const lift = 2 + +var box = null +var driver = null +var active = false + +func init_driver(player): + driver = player + if not box: + box = Vector3(driver.get_node("CollisionShape3D").shape.size) + +func mount(): + active = true + position = Vector3(-driver.get_node("Pivot/Container").position) + position.y += 1 + driver.message( + "Press [%s] to exit the Geep" + % Util.input_action_string("gear_use")) + driver.get_node("CameraGimbal").position.y += lift + driver.get_node("Pivot/Mesh").position.y += lift + driver.get_node("CollisionShape3D").shape.size = $GearMesh/Vehicle/CollisionShape3D.shape.size + driver.protected = true + driver.suspended = true + +func unmount(): + active = false + position = Vector3.ZERO + driver.message("") + driver.get_node("CameraGimbal").position = Vector3.ZERO + driver.get_node("Pivot/Mesh").position = Vector3.ZERO + driver.get_node("CollisionShape3D").shape.size = box + driver.protected = false + driver.suspended = false + +func on_use(player): + init_driver(player) + if active: + unmount() + else: + mount() + +func on_unequip(player): + init_driver(player) + unmount() + +func _physics_process(_delta): + if not active: + return + + driver.move_player(0, -speed) diff --git a/gears/geep.tscn b/gears/geep.tscn new file mode 100644 index 0000000..481e2bb --- /dev/null +++ b/gears/geep.tscn @@ -0,0 +1,87 @@ +[gd_scene load_steps=10 format=3 uid="uid://d3k7b6o56ue5k"] + +[ext_resource type="Script" uid="uid://fljad0m3jlt0" path="res://gears/geep.gd" id="1_8skgp"] +[ext_resource type="Material" uid="uid://dpacu3e7vsks5" path="res://gears/geep_body.tres" id="2_rhiad"] +[ext_resource type="Material" uid="uid://bt5aat64e478k" path="res://gears/geep_wheel.tres" id="3_lrfuo"] + +[sub_resource type="BoxShape3D" id="BoxShape3D_lrfuo"] +size = Vector3(3, 3, 6) + +[sub_resource type="BoxMesh" id="BoxMesh_rhiad"] +material = ExtResource("2_rhiad") +size = Vector3(3, 0.5, 6) + +[sub_resource type="BoxMesh" id="BoxMesh_kyikt"] +material = ExtResource("2_rhiad") +size = Vector3(0.5, 1.75, 6) + +[sub_resource type="BoxMesh" id="BoxMesh_wm067"] +material = ExtResource("2_rhiad") +size = Vector3(3, 2, 2.5) + +[sub_resource type="BoxMesh" id="BoxMesh_lrfuo"] +material = ExtResource("2_rhiad") +size = Vector3(3, 2, 0.5) + +[sub_resource type="CylinderMesh" id="CylinderMesh_lrfuo"] +material = ExtResource("3_lrfuo") +top_radius = 1.0 +bottom_radius = 1.0 +height = 0.25 + +[node name="Gear" type="Node3D"] +rotation_edit_mode = 2 +script = ExtResource("1_8skgp") + +[node name="Timer" type="Timer" parent="."] +one_shot = true + +[node name="GearMesh" type="Node3D" parent="."] + +[node name="Vehicle" type="StaticBody3D" parent="GearMesh"] +transform = Transform3D(1, 0, 0, 0, 1.0000001, 0, 0, 0, 1.0000001, 0, 0, 0) +collision_layer = 4 + +[node name="CollisionShape3D" type="CollisionShape3D" parent="GearMesh/Vehicle"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5, 0) +shape = SubResource("BoxShape3D_lrfuo") + +[node name="BaseMesh" type="MeshInstance3D" parent="GearMesh/Vehicle"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.9997004, 0) +mesh = SubResource("BoxMesh_rhiad") + +[node name="LeftSideMesh" type="MeshInstance3D" parent="GearMesh/Vehicle"] +transform = Transform3D(1, 0, 0, 0, 0.9999999, 0, 0, 0, 0.9999999, -1.25, 2.1247003, 0) +mesh = SubResource("BoxMesh_kyikt") +skeleton = NodePath("") + +[node name="RightSideMesh" type="MeshInstance3D" parent="GearMesh/Vehicle"] +transform = Transform3D(1, 0, 0, 0, 0.9999999, 0, 0, 0, 0.9999999, 1.25, 2.1247003, 0) +mesh = SubResource("BoxMesh_kyikt") +skeleton = NodePath("") + +[node name="BonnetMesh" type="MeshInstance3D" parent="GearMesh/Vehicle"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.9997005, -1.75) +mesh = SubResource("BoxMesh_wm067") + +[node name="TailgateMesh" type="MeshInstance3D" parent="GearMesh/Vehicle"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.9997005, 2.75) +mesh = SubResource("BoxMesh_lrfuo") + +[node name="WheelFLMesh" type="MeshInstance3D" parent="GearMesh/Vehicle"] +transform = Transform3D(-4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 0, 0, 1, 1.65, 1, 2) +mesh = SubResource("CylinderMesh_lrfuo") + +[node name="WheelFRMesh" type="MeshInstance3D" parent="GearMesh/Vehicle"] +transform = Transform3D(-4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 0, 0, 1, -1.65, 1, 2) +mesh = SubResource("CylinderMesh_lrfuo") + +[node name="WheelBLMesh" type="MeshInstance3D" parent="GearMesh/Vehicle"] +transform = Transform3D(-4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 0, 0, 1, 1.65, 1, -2) +mesh = SubResource("CylinderMesh_lrfuo") + +[node name="WheelBRMesh" type="MeshInstance3D" parent="GearMesh/Vehicle"] +transform = Transform3D(-4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 0, 0, 1, -1.65, 1, -2) +mesh = SubResource("CylinderMesh_lrfuo") + +[connection signal="timeout" from="Timer" to="." method="_on_timer_timeout"] diff --git a/gears/geep_body.tres b/gears/geep_body.tres new file mode 100644 index 0000000..862cd13 --- /dev/null +++ b/gears/geep_body.tres @@ -0,0 +1,4 @@ +[gd_resource type="StandardMaterial3D" format=3 uid="uid://dpacu3e7vsks5"] + +[resource] +albedo_color = Color(0.99607843, 0.99607843, 0.99607843, 1) diff --git a/gears/geep_wheel.tres b/gears/geep_wheel.tres new file mode 100644 index 0000000..3e7814d --- /dev/null +++ b/gears/geep_wheel.tres @@ -0,0 +1,4 @@ +[gd_resource type="StandardMaterial3D" format=3 uid="uid://bt5aat64e478k"] + +[resource] +albedo_color = Color(0.1254902, 0.1254902, 0.1254902, 1)