small racing game im working on
add param for sun position
bendn 2023-04-23
parent cdc7c03 · commit 5910eea
-rw-r--r--godot.lock5
-rw-r--r--godot.package10
-rw-r--r--tracks.cfg4
-rw-r--r--ui/editor/propertys.gd1
-rw-r--r--ui/editor/propertys.tscn17
-rw-r--r--ui/editor/track_editor.gd13
6 files changed, 43 insertions, 7 deletions
diff --git a/godot.lock b/godot.lock
index 6ba883a..bb90ee5 100644
--- a/godot.lock
+++ b/godot.lock
@@ -13,5 +13,10 @@
"name": "@bendn/splitter",
"tarball": "https://registry.npmjs.org/@bendn/splitter/-/splitter-1.1.0.tgz",
"version": "1.1.0"
+ },
+ {
+ "name": "@bendn/timecontrol",
+ "tarball": "https://registry.npmjs.org/@bendn/timecontrol/-/timecontrol-1.2.2.tgz",
+ "version": "1.2.2"
}
] \ No newline at end of file
diff --git a/godot.package b/godot.package
index c9b7804..b89b419 100644
--- a/godot.package
+++ b/godot.package
@@ -1,4 +1,6 @@
-[packages]
-"@bendn/gizmo3d" = '1.0.4'
-"@bendn/splitter" = '1.1.0'
-"@bendn/enginesound" = '1.0.0'
+packages: {
+ @bendn/gizmo3d: '1.0.4'
+ @bendn/splitter: '1.1.0'
+ @bendn/enginesound: '1.0.0'
+ @bendn/timecontrol: '1.2.2'
+}
diff --git a/tracks.cfg b/tracks.cfg
index b13590d..8961e96 100644
--- a/tracks.cfg
+++ b/tracks.cfg
@@ -189,7 +189,7 @@
"l": 1,
"n": "swonk",
"o": Vector3(0, 1, 0),
-"x": -45,
+"x": -15,
"y": 0
}, {
"b": Array[Dictionary]([{
@@ -1144,4 +1144,4 @@
"o": Vector3(0, 1, 0),
"x": -90,
"y": 0
-}] \ No newline at end of file
+}]
diff --git a/ui/editor/propertys.gd b/ui/editor/propertys.gd
index 30bb352..05a1dc7 100644
--- a/ui/editor/propertys.gd
+++ b/ui/editor/propertys.gd
@@ -2,3 +2,4 @@ extends VBoxContainer
@onready var name_: LineEdit = %name
@onready var laps_: SpinBox = %laps
+@onready var time_: TimeButton = %time
diff --git a/ui/editor/propertys.tscn b/ui/editor/propertys.tscn
index 185a780..50d380c 100644
--- a/ui/editor/propertys.tscn
+++ b/ui/editor/propertys.tscn
@@ -1,6 +1,7 @@
-[gd_scene load_steps=3 format=3 uid="uid://c4h850namjrn2"]
+[gd_scene load_steps=4 format=3 uid="uid://c4h850namjrn2"]
[ext_resource type="Script" path="res://ui/editor/propertys.gd" id="1_0vjdc"]
+[ext_resource type="Script" path="res://addons/@bendn/timecontrol/timebutton.gd" id="2_bn54u"]
[sub_resource type="GDScript" id="GDScript_ly6xd"]
resource_name = "laps"
@@ -50,4 +51,18 @@ rounded = true
suffix = "lap"
script = SubResource("GDScript_ly6xd")
+[node name="time" type="HBoxContainer" parent="."]
+layout_mode = 2
+
+[node name="label" type="Label" parent="time"]
+custom_minimum_size = Vector2(150, 0)
+layout_mode = 2
+text = "time"
+
+[node name="time" type="Button" parent="time"]
+unique_name_in_owner = true
+layout_mode = 2
+text = "12:00 PM"
+script = ExtResource("2_bn54u")
+
[connection signal="value_changed" from="laps/laps" to="laps/laps" method="_on_value_changed"]
diff --git a/ui/editor/track_editor.gd b/ui/editor/track_editor.gd
index 9b2a499..3bd1e78 100644
--- a/ui/editor/track_editor.gd
+++ b/ui/editor/track_editor.gd
@@ -20,6 +20,7 @@ var snapping := true
var objects: Array[TrackObject] = []
var history := UndoRedo.new()
var track: TrackResource
+var sun: DirectionalLight3D
signal make_gizmo(mode: Mode)
signal selection_changed(objects: Array[TrackObject])
@@ -35,11 +36,16 @@ func _ready() -> void:
for c in l.get_children():
l.remove_child(c)
%port.add_child(c)
+ if c is DirectionalLight3D:
+ sun = c
# the loader has loaded, get rid of it
l.queue_free()
+
objects = track.blocks.duplicate() # duplicate: if not saved, will be lost
%propertys.name_.text = track.name
%propertys.laps_.value = track.laps
+ %propertys.time_.time = { hour = rot2hour(track.sun_x), minute = 00 }
+ %propertys.time_.time_changed.connect(func(t: Dictionary): sun.global_rotation.x = hour2rot(t.hour))
%cam.global_transform = IntroCam.get_origin(track) # put the camera up high, looking straight down
if not FileAccess.file_exists(Globals.TRACKS % track.name) and not track.builtin:
@@ -52,6 +58,12 @@ func _ready() -> void:
obj.delete_live()
)
+func rot2hour(rot: int) -> int:
+ return round(24.0 * float(posmod(90 - rot, 360)) / 360.0)
+
+func hour2rot(hour: int) -> float:
+ return (6.0 - hour) / 24.0 * TAU
+
func pressed(b: Button) -> void:
mode = Mode[b.name.to_pascal_case()]
make_gizmo.emit(mode)
@@ -85,6 +97,7 @@ func get_trackdata() -> TrackResource:
track.blocks = objects.duplicate()
track.name = %propertys.name_.text
track.laps = %propertys.laps_.value
+ track.sun_x = roundi(sun.global_rotation_degrees.x)
return track
func _on_item_created(object: TrackObject) -> void: