From f8ffcbb6be9feb3d0ca3fff78c5b859c6811265a Mon Sep 17 00:00:00 2001 From: ObeseTermite Date: Sat, 14 Mar 2026 12:08:16 -0700 Subject: [PATCH] Initial commit --- .editorconfig | 4 ++ .gitattributes | 2 + .gitignore | 3 ++ Cart/cart.gd | 25 +++++++++ Cart/cart.gd.uid | 1 + Cart/cart.tscn | 12 +++++ Splines/spline.gd | 7 +++ Splines/spline.gd.uid | 1 + Splines/spline.tscn | 6 +++ UI/Spline Editor/control_point.gd | 24 +++++++++ UI/Spline Editor/control_point.gd.uid | 1 + UI/Spline Editor/control_point.tscn | 11 ++++ UI/Spline Editor/spline_editor.gd | 71 ++++++++++++++++++++++++++ UI/Spline Editor/spline_editor.gd.uid | 1 + UI/Spline Editor/spline_editor.tscn | 40 +++++++++++++++ cart.png | Bin 0 -> 7983 bytes cart.png.import | 40 +++++++++++++++ icon.svg | 1 + icon.svg.import | 43 ++++++++++++++++ main_scene.tscn | 16 ++++++ project.godot | 39 ++++++++++++++ 21 files changed, 348 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 Cart/cart.gd create mode 100644 Cart/cart.gd.uid create mode 100644 Cart/cart.tscn create mode 100644 Splines/spline.gd create mode 100644 Splines/spline.gd.uid create mode 100644 Splines/spline.tscn create mode 100644 UI/Spline Editor/control_point.gd create mode 100644 UI/Spline Editor/control_point.gd.uid create mode 100644 UI/Spline Editor/control_point.tscn create mode 100644 UI/Spline Editor/spline_editor.gd create mode 100644 UI/Spline Editor/spline_editor.gd.uid create mode 100644 UI/Spline Editor/spline_editor.tscn create mode 100644 cart.png create mode 100644 cart.png.import create mode 100644 icon.svg create mode 100644 icon.svg.import create mode 100644 main_scene.tscn create mode 100644 project.godot diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..f28239b --- /dev/null +++ b/.editorconfig @@ -0,0 +1,4 @@ +root = true + +[*] +charset = utf-8 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..8ad74f7 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Normalize EOL for all files that Git considers text files. +* text=auto eol=lf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0af181c --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +# Godot 4+ specific ignores +.godot/ +/android/ diff --git a/Cart/cart.gd b/Cart/cart.gd new file mode 100644 index 0000000..51e9398 --- /dev/null +++ b/Cart/cart.gd @@ -0,0 +1,25 @@ +extends Node2D +class_name Cart + +@export var spline : Spline + + +var going = false +var progress = 0 + +func _ready(): + hide() + +func _process(delta: float) -> void: + if len(spline.curve_points) > 1: + position = spline.curve_points[progress] + rotation = (spline.curve_points[progress+1] - position).angle() + + if not going: + return + + progress += 1 + if progress >= len(spline.curve_points)-1: + going = false + hide() + progress = 0 diff --git a/Cart/cart.gd.uid b/Cart/cart.gd.uid new file mode 100644 index 0000000..5334350 --- /dev/null +++ b/Cart/cart.gd.uid @@ -0,0 +1 @@ +uid://jrmwg6neheh5 diff --git a/Cart/cart.tscn b/Cart/cart.tscn new file mode 100644 index 0000000..6a9b2c4 --- /dev/null +++ b/Cart/cart.tscn @@ -0,0 +1,12 @@ +[gd_scene format=3 uid="uid://pdmq2mjt8uxg"] + +[ext_resource type="Script" uid="uid://jrmwg6neheh5" path="res://Cart/cart.gd" id="1_amo0v"] +[ext_resource type="Texture2D" uid="uid://xcgu5k1v41tq" path="res://cart.png" id="2_f3qtc"] + +[node name="Cart" type="Node2D" unique_id=800624852] +script = ExtResource("1_amo0v") + +[node name="Cart Sprite" type="Sprite2D" parent="." unique_id=1281407851] +scale = Vector2(0.1, 0.1) +texture = ExtResource("2_f3qtc") +offset = Vector2(0, -165) diff --git a/Splines/spline.gd b/Splines/spline.gd new file mode 100644 index 0000000..8ac29eb --- /dev/null +++ b/Splines/spline.gd @@ -0,0 +1,7 @@ +extends Node2D + +class_name Spline + +var points : PackedVector2Array + +var curve_points : PackedVector2Array diff --git a/Splines/spline.gd.uid b/Splines/spline.gd.uid new file mode 100644 index 0000000..16be4cc --- /dev/null +++ b/Splines/spline.gd.uid @@ -0,0 +1 @@ +uid://k0tl2g83mr6s diff --git a/Splines/spline.tscn b/Splines/spline.tscn new file mode 100644 index 0000000..bc5a963 --- /dev/null +++ b/Splines/spline.tscn @@ -0,0 +1,6 @@ +[gd_scene format=3 uid="uid://cbh3fab2u11vg"] + +[ext_resource type="Script" uid="uid://k0tl2g83mr6s" path="res://Splines/spline.gd" id="1_2cbjp"] + +[node name="Spline" type="Node2D" unique_id=1036543531] +script = ExtResource("1_2cbjp") diff --git a/UI/Spline Editor/control_point.gd b/UI/Spline Editor/control_point.gd new file mode 100644 index 0000000..505fa84 --- /dev/null +++ b/UI/Spline Editor/control_point.gd @@ -0,0 +1,24 @@ +extends Button + +class_name ControlPoint + +var locked : bool = false + +func _draw(): + draw_circle(size/2, 5, Color.DIM_GRAY, true, -1, true) + draw_circle(size/2, 5, Color.WHITE, false, 1, true) + +func get_represented_position() -> Vector2: + return position + size/2 + +func set_represented_position(new_position : Vector2): + position = new_position - size/2 + + var parent = get_parent() + if parent != null: + parent.update() + + +func _process(delta: float) -> void: + if button_pressed: + set_represented_position(get_global_mouse_position()) diff --git a/UI/Spline Editor/control_point.gd.uid b/UI/Spline Editor/control_point.gd.uid new file mode 100644 index 0000000..fa6650a --- /dev/null +++ b/UI/Spline Editor/control_point.gd.uid @@ -0,0 +1 @@ +uid://bpx1v5s2m4ept diff --git a/UI/Spline Editor/control_point.tscn b/UI/Spline Editor/control_point.tscn new file mode 100644 index 0000000..754c79a --- /dev/null +++ b/UI/Spline Editor/control_point.tscn @@ -0,0 +1,11 @@ +[gd_scene format=3 uid="uid://di4jvhvyqtusq"] + +[ext_resource type="Script" uid="uid://bpx1v5s2m4ept" path="res://UI/Spline Editor/control_point.gd" id="1_ottbd"] + +[node name="Control Point" type="Button" unique_id=1542646560] +custom_minimum_size = Vector2(10, 10) +offset_right = 50.0 +offset_bottom = 50.0 +focus_mode = 0 +flat = true +script = ExtResource("1_ottbd") diff --git a/UI/Spline Editor/spline_editor.gd b/UI/Spline Editor/spline_editor.gd new file mode 100644 index 0000000..0bb2896 --- /dev/null +++ b/UI/Spline Editor/spline_editor.gd @@ -0,0 +1,71 @@ +extends Control + +@export var spline : Spline +@export var cart : Cart +@export var control_point_scene : PackedScene + +@export var steps : int = 10 + +var editing = true + +func _ready() -> void: + pass + + +func _draw(): + if editing: + for i in range(len(spline.points)-1): + draw_line(spline.points[i], spline.points[i+1], Color.DIM_GRAY, 1, true) + + if len(spline.curve_points) > 2: + draw_polyline(spline.curve_points, Color.WHITE, 3, true) + +func _process(delta: float) -> void: + if not editing: + return + + if Input.is_action_just_pressed("add_new_point"): + var new_control_point : ControlPoint = control_point_scene.instantiate() + new_control_point.set_represented_position(get_global_mouse_position()) + add_child(new_control_point) + update() + +func update(): + spline.points = [] + for child in get_children(): + if not child is ControlPoint: + continue + spline.points.append(child.get_represented_position()) + + spline.curve_points = [] + for i in range(len(spline.points)-3): + var b0 : Vector2 = spline.points[i] + var b1 : Vector2 = spline.points[i+1] + var b2 : Vector2 = spline.points[i+2] + var b3 : Vector2 = spline.points[i+3] + + var t : float = 0 + while t < 0.99: + # B-spline calculations + var calculated_position =\ + ((-b0+3*b1-3*b2+b3)*(t**3) +\ + (3*b0-6*b1+3*b2)*(t**2) +\ + (-3*b0+3*b2)*t +\ + (b0+4*b1+b2))/6 + spline.curve_points.append(calculated_position) + t += 0.1 + queue_redraw() + + +func _on_check_button_toggled(toggled_on: bool) -> void: + editing = toggled_on + for child in get_children(): + if not child is ControlPoint: + continue + child.visible = editing + update() + + +func _on_start_pressed() -> void: + cart.going = true + cart.show() diff --git a/UI/Spline Editor/spline_editor.gd.uid b/UI/Spline Editor/spline_editor.gd.uid new file mode 100644 index 0000000..e1e95cc --- /dev/null +++ b/UI/Spline Editor/spline_editor.gd.uid @@ -0,0 +1 @@ +uid://dttjp7o66ghn4 diff --git a/UI/Spline Editor/spline_editor.tscn b/UI/Spline Editor/spline_editor.tscn new file mode 100644 index 0000000..8582ec8 --- /dev/null +++ b/UI/Spline Editor/spline_editor.tscn @@ -0,0 +1,40 @@ +[gd_scene format=3 uid="uid://curwvxlv5wr2s"] + +[ext_resource type="Script" uid="uid://dttjp7o66ghn4" path="res://UI/Spline Editor/spline_editor.gd" id="1_ahlr6"] +[ext_resource type="PackedScene" uid="uid://di4jvhvyqtusq" path="res://UI/Spline Editor/control_point.tscn" id="2_td7mw"] + +[sub_resource type="InputEventKey" id="InputEventKey_td7mw"] +device = -1 +keycode = 69 +unicode = 101 + +[sub_resource type="Shortcut" id="Shortcut_j0rrm"] +events = [SubResource("InputEventKey_td7mw")] + +[node name="Spline Editor" type="Control" unique_id=1591101939] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_ahlr6") +control_point_scene = ExtResource("2_td7mw") + +[node name="HBoxContainer" type="HBoxContainer" parent="." unique_id=836867708] +layout_mode = 0 +offset_right = 40.0 +offset_bottom = 40.0 + +[node name="Start" type="Button" parent="HBoxContainer" unique_id=767033586] +layout_mode = 2 +text = "Start Roller Coaster" + +[node name="CheckButton" type="CheckButton" parent="HBoxContainer" unique_id=1422024819] +layout_mode = 2 +button_pressed = true +shortcut = SubResource("Shortcut_j0rrm") +text = "Editing" + +[connection signal="pressed" from="HBoxContainer/Start" to="." method="_on_start_pressed"] +[connection signal="toggled" from="HBoxContainer/CheckButton" to="." method="_on_check_button_toggled"] diff --git a/cart.png b/cart.png new file mode 100644 index 0000000000000000000000000000000000000000..e9bda16d1fb40cf12aa9c6d84893ad4b6f5e9fb2 GIT binary patch literal 7983 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 XyH0uL-Bt+``+wcY3|@Hc-qZgA@%(Mn literal 0 HcmV?d00001 diff --git a/cart.png.import b/cart.png.import new file mode 100644 index 0000000..c9dd1f8 --- /dev/null +++ b/cart.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://xcgu5k1v41tq" +path="res://.godot/imported/cart.png-c0d5895155eac46d26ac9947ca1d6fe3.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://cart.png" +dest_files=["res://.godot/imported/cart.png-c0d5895155eac46d26ac9947ca1d6fe3.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/icon.svg b/icon.svg new file mode 100644 index 0000000..c6bbb7d --- /dev/null +++ b/icon.svg @@ -0,0 +1 @@ + diff --git a/icon.svg.import b/icon.svg.import new file mode 100644 index 0000000..c61b218 --- /dev/null +++ b/icon.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dg3obuh047f7w" +path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon.svg" +dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/main_scene.tscn b/main_scene.tscn new file mode 100644 index 0000000..e57b31f --- /dev/null +++ b/main_scene.tscn @@ -0,0 +1,16 @@ +[gd_scene format=3 uid="uid://bgwqqwit2n52j"] + +[ext_resource type="PackedScene" uid="uid://cbh3fab2u11vg" path="res://Splines/spline.tscn" id="1_2c62f"] +[ext_resource type="PackedScene" uid="uid://curwvxlv5wr2s" path="res://UI/Spline Editor/spline_editor.tscn" id="2_gyfs4"] +[ext_resource type="PackedScene" uid="uid://pdmq2mjt8uxg" path="res://Cart/cart.tscn" id="3_gyfs4"] + +[node name="Main Scene" type="Node2D" unique_id=1730722189] + +[node name="Spline" parent="." unique_id=1036543531 instance=ExtResource("1_2c62f")] + +[node name="Spline Editor" parent="." unique_id=1591101939 node_paths=PackedStringArray("spline", "cart") instance=ExtResource("2_gyfs4")] +spline = NodePath("../Spline") +cart = NodePath("../Cart") + +[node name="Cart" parent="." unique_id=800624852 node_paths=PackedStringArray("spline") instance=ExtResource("3_gyfs4")] +spline = NodePath("../Spline") diff --git a/project.godot b/project.godot new file mode 100644 index 0000000..388a6bc --- /dev/null +++ b/project.godot @@ -0,0 +1,39 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=5 + +[application] + +config/name="Rollercoaster Derivatives" +run/main_scene="uid://bgwqqwit2n52j" +config/features=PackedStringArray("4.6", "GL Compatibility") +config/icon="res://icon.svg" + +[display] + +window/stretch/mode="canvas_items" +window/stretch/aspect="expand" + +[input] + +add_new_point={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null) +] +} + +[physics] + +3d/physics_engine="Jolt Physics" + +[rendering] + +rendering_device/driver.windows="d3d12" +renderer/rendering_method="gl_compatibility" +renderer/rendering_method.mobile="gl_compatibility"