From 15bcb941defeaddfe62c172fa4818c44dc558f07 Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Fri, 22 Nov 2024 19:12:59 +0100 Subject: [PATCH] Add moods (times of day) to Truck Town demo Four moods are available: sunrise, day, sunset, night. Sunset and night also feature artificial point lights placed in the town scene. The mood can be set on the main menu before playing. It can also be cycled during gameplay by pressing M or D-Pad Down. --- 3d/truck_town/README.md | 1 + 3d/truck_town/car_select/car_select.gd | 8 + 3d/truck_town/car_select/car_select.tscn | 58 ++++++- 3d/truck_town/project.godot | 10 ++ 3d/truck_town/town/sky_day.tres | 5 + 3d/truck_town/town/sky_morning.tres | 6 + 3d/truck_town/town/sky_night.tres | 6 + 3d/truck_town/town/sky_sunset.tres | 6 + 3d/truck_town/town/town_scene.gd | 50 ++++++ 3d/truck_town/town/town_scene.tscn | 148 +++++++++++++++++- 3d/truck_town/vehicles/meshes/minivan.res | Bin 10857 -> 10857 bytes 3d/truck_town/vehicles/meshes/tow_truck.res | Bin 12456 -> 12456 bytes 3d/truck_town/vehicles/meshes/truck_cab.res | Bin 11166 -> 11166 bytes .../vehicles/meshes/truck_trailer.res | Bin 15320 -> 15320 bytes 3d/truck_town/vehicles/meshes/wheel.res | Bin 16117 -> 16117 bytes 15 files changed, 289 insertions(+), 9 deletions(-) create mode 100644 3d/truck_town/town/sky_day.tres create mode 100644 3d/truck_town/town/sky_morning.tres create mode 100644 3d/truck_town/town/sky_night.tres create mode 100644 3d/truck_town/town/sky_sunset.tres create mode 100644 3d/truck_town/town/town_scene.gd diff --git a/3d/truck_town/README.md b/3d/truck_town/README.md index d229ae4bff..b82d6da6e3 100644 --- a/3d/truck_town/README.md +++ b/3d/truck_town/README.md @@ -11,6 +11,7 @@ Controls: - Right Arrow, Gamepad Left Stick, Gamepad D-Pad Right: Steer right - U, Gamepad Select, left-click speedometer: Change speedometer unit (m/s, km/h, mph) - C, Gamepad Y/Triangle: Change camera (exterior, interior, top-down) +- M, Gamepad D-Pad Down: Change mood (sunrise, day, sunset, night) - Escape, Gamepad D-Pad Up: Go back to menu (press again to exit) On mobile platforms, the vehicle automatically accelerates. Touch the left and diff --git a/3d/truck_town/car_select/car_select.gd b/3d/truck_town/car_select/car_select.gd index 10d0e8100d..6f03ef7032 100644 --- a/3d/truck_town/car_select/car_select.gd +++ b/3d/truck_town/car_select/car_select.gd @@ -16,6 +16,14 @@ func _load_scene(car_scene: PackedScene) -> void: var car: Node3D = car_scene.instantiate() car.name = "car" town = preload("res://town/town_scene.tscn").instantiate() + if $PanelContainer/MarginContainer/HBoxContainer/Sunrise.button_pressed: + town.mood = town.Mood.SUNRISE + elif $PanelContainer/MarginContainer/HBoxContainer/Day.button_pressed: + town.mood = town.Mood.DAY + elif $PanelContainer/MarginContainer/HBoxContainer/Sunset.button_pressed: + town.mood = town.Mood.SUNSET + elif $PanelContainer/MarginContainer/HBoxContainer/Night.button_pressed: + town.mood = town.Mood.NIGHT town.get_node(^"InstancePos").add_child(car) town.get_node(^"Spedometer").car_body = car.get_child(0) town.get_node(^"Back").pressed.connect(_on_back_pressed) diff --git a/3d/truck_town/car_select/car_select.tscn b/3d/truck_town/car_select/car_select.tscn index 4732971a86..38a6221e31 100644 --- a/3d/truck_town/car_select/car_select.tscn +++ b/3d/truck_town/car_select/car_select.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=6 format=3 uid="uid://ckvqraq6j1okh"] +[gd_scene load_steps=7 format=3 uid="uid://ckvqraq6j1okh"] [ext_resource type="Script" path="res://car_select/car_select.gd" id="1"] [ext_resource type="Texture2D" uid="uid://bh7b4n4lg1uqt" path="res://car_select/choose_van.png" id="2"] @@ -11,6 +11,8 @@ variation_transform = Transform2D(1, 0.2, 0, 1, 0, 0) spacing_glyph = -1 spacing_space = 4 +[sub_resource type="ButtonGroup" id="ButtonGroup_lcrm3"] + [node name="CarSelect" type="Control"] layout_mode = 3 anchors_preset = 8 @@ -75,6 +77,60 @@ theme_override_fonts/font = SubResource("FontVariation_hqcvw") theme_override_font_sizes/font_size = 64 text = "Truck Town" +[node name="PanelContainer" type="PanelContainer" parent="."] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -325.0 +offset_top = 164.0 +offset_right = 325.0 +offset_bottom = 205.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="MarginContainer" type="MarginContainer" parent="PanelContainer"] +layout_mode = 2 +theme_override_constants/margin_left = 20 +theme_override_constants/margin_top = 5 +theme_override_constants/margin_right = 20 +theme_override_constants/margin_bottom = 5 + +[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer/MarginContainer"] +layout_mode = 2 + +[node name="Label" type="Label" parent="PanelContainer/MarginContainer/HBoxContainer"] +custom_minimum_size = Vector2(70, 0) +layout_mode = 2 +text = "Mood" + +[node name="Sunrise" type="CheckBox" parent="PanelContainer/MarginContainer/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +button_group = SubResource("ButtonGroup_lcrm3") +text = "Sunrise" + +[node name="Day" type="CheckBox" parent="PanelContainer/MarginContainer/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +button_pressed = true +button_group = SubResource("ButtonGroup_lcrm3") +text = "Day" + +[node name="Sunset" type="CheckBox" parent="PanelContainer/MarginContainer/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +button_group = SubResource("ButtonGroup_lcrm3") +text = "Sunset" + +[node name="Night" type="CheckBox" parent="PanelContainer/MarginContainer/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +button_group = SubResource("ButtonGroup_lcrm3") +text = "Night" + [connection signal="pressed" from="HBoxContainer/MiniVan" to="." method="_on_mini_van_pressed"] [connection signal="pressed" from="HBoxContainer/TrailerTruck" to="." method="_on_trailer_truck_pressed"] [connection signal="pressed" from="HBoxContainer/TowTruck" to="." method="_on_tow_truck_pressed"] diff --git a/3d/truck_town/project.godot b/3d/truck_town/project.godot index cc0216ab1d..8de8b7b678 100644 --- a/3d/truck_town/project.godot +++ b/3d/truck_town/project.godot @@ -148,6 +148,12 @@ cycle_camera={ , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":3,"pressure":0.0,"pressed":false,"script":null) ] } +cycle_mood={ +"deadzone": 0.5, +"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":77,"physical_keycode":0,"key_label":0,"unicode":109,"location":0,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":12,"pressure":0.0,"pressed":false,"script":null) +] +} [physics] @@ -159,11 +165,15 @@ textures/vram_compression/import_etc2_astc=true lights_and_shadows/directional_shadow/size=8192 lights_and_shadows/directional_shadow/soft_shadow_filter_quality=3 lights_and_shadows/directional_shadow/soft_shadow_filter_quality.mobile=1 +lights_and_shadows/positional_shadow/soft_shadow_filter_quality=3 +lights_and_shadows/positional_shadow/soft_shadow_filter_quality.mobile=1 textures/default_filters/anisotropic_filtering_level=4 textures/default_filters/texture_mipmap_bias=-0.5 textures/decals/filter=1 environment/defaults/default_clear_color=Color(0.133333, 0.133333, 0.133333, 1) anti_aliasing/quality/msaa_3d=2 anti_aliasing/quality/use_debanding=true +lights_and_shadows/positional_shadow/atlas_size=2048 +lights_and_shadows/positional_shadow/atlas_size.mobile=1024 anti_aliasing/quality/msaa_3d.mobile=0 scaling_3d/scale.mobile=0.67 diff --git a/3d/truck_town/town/sky_day.tres b/3d/truck_town/town/sky_day.tres new file mode 100644 index 0000000000..120ebdf8b6 --- /dev/null +++ b/3d/truck_town/town/sky_day.tres @@ -0,0 +1,5 @@ +[gd_resource type="ProceduralSkyMaterial" format=3 uid="uid://bpms6jemjgt36"] + +[resource] +sky_horizon_color = Color(0.64625, 0.65575, 0.67075, 1) +ground_horizon_color = Color(0.64625, 0.65575, 0.67075, 1) diff --git a/3d/truck_town/town/sky_morning.tres b/3d/truck_town/town/sky_morning.tres new file mode 100644 index 0000000000..c09e616a00 --- /dev/null +++ b/3d/truck_town/town/sky_morning.tres @@ -0,0 +1,6 @@ +[gd_resource type="ProceduralSkyMaterial" format=3 uid="uid://drtvj2ilm4c7h"] + +[resource] +sky_top_color = Color(0.164732, 0.303048, 0.411552, 1) +sky_horizon_color = Color(0.686775, 0.600323, 0.467043, 1) +ground_horizon_color = Color(0.686275, 0.6, 0.466667, 1) diff --git a/3d/truck_town/town/sky_night.tres b/3d/truck_town/town/sky_night.tres new file mode 100644 index 0000000000..f674dd7107 --- /dev/null +++ b/3d/truck_town/town/sky_night.tres @@ -0,0 +1,6 @@ +[gd_resource type="ProceduralSkyMaterial" format=3 uid="uid://c2w5t0j2rkiuu"] + +[resource] +sky_top_color = Color(0.0964875, 0.114707, 0.155705, 1) +sky_horizon_color = Color(0.201247, 0.148966, 0.125881, 1) +ground_horizon_color = Color(0.2, 0.14902, 0.12549, 1) diff --git a/3d/truck_town/town/sky_sunset.tres b/3d/truck_town/town/sky_sunset.tres new file mode 100644 index 0000000000..9e6c57ca8d --- /dev/null +++ b/3d/truck_town/town/sky_sunset.tres @@ -0,0 +1,6 @@ +[gd_resource type="ProceduralSkyMaterial" format=3 uid="uid://dbs05x6h8miq2"] + +[resource] +sky_top_color = Color(0.252654, 0.288234, 0.368141, 1) +sky_horizon_color = Color(0.77459, 0.550361, 0.50128, 1) +ground_horizon_color = Color(0.776471, 0.54902, 0.501961, 1) diff --git a/3d/truck_town/town/town_scene.gd b/3d/truck_town/town/town_scene.gd new file mode 100644 index 0000000000..31e6c20bcb --- /dev/null +++ b/3d/truck_town/town/town_scene.gd @@ -0,0 +1,50 @@ +extends Node3D + +enum Mood { + SUNRISE, + DAY, + SUNSET, + NIGHT, + MAX, +} + +var mood := Mood.DAY: set = set_mood + + +func _input(event: InputEvent) -> void: + if event.is_action_pressed(&"cycle_mood"): + mood = wrapi(mood + 1, 0, Mood.MAX) as Mood + + +func set_mood(p_mood: Mood) -> void: + mood = p_mood + + match p_mood: + Mood.SUNRISE: + $DirectionalLight3D.rotation_degrees = Vector3(-20, -150, -137) + $DirectionalLight3D.light_color = Color(0.414, 0.377, 0.25) + $DirectionalLight3D.light_energy = 4.0 + $WorldEnvironment.environment.fog_light_color = Color(0.686, 0.6, 0.467) + $WorldEnvironment.environment.sky.sky_material = preload("res://town/sky_morning.tres") + $ArtificialLights.visible = false + Mood.DAY: + $DirectionalLight3D.rotation_degrees = Vector3(-55, -120, -31) + $DirectionalLight3D.light_color = Color.WHITE + $DirectionalLight3D.light_energy = 1.45 + $WorldEnvironment.environment.sky.sky_material = preload("res://town/sky_day.tres") + $WorldEnvironment.environment.fog_light_color = Color(0.62, 0.601, 0.601) + $ArtificialLights.visible = false + Mood.SUNSET: + $DirectionalLight3D.rotation_degrees = Vector3(-19, -31, 62) + $DirectionalLight3D.light_color = Color(0.488, 0.3, 0.1) + $DirectionalLight3D.light_energy = 4.0 + $WorldEnvironment.environment.sky.sky_material = preload("res://town/sky_sunset.tres") + $WorldEnvironment.environment.fog_light_color = Color(0.776, 0.549, 0.502) + $ArtificialLights.visible = true + Mood.NIGHT: + $DirectionalLight3D.rotation_degrees = Vector3(-49, 116, -46) + $DirectionalLight3D.light_color = Color(0.232, 0.415, 0.413) + $DirectionalLight3D.light_energy = 0.7 + $WorldEnvironment.environment.sky.sky_material = preload("res://town/sky_night.tres") + $WorldEnvironment.environment.fog_light_color = Color(0.2, 0.149, 0.125) + $ArtificialLights.visible = true diff --git a/3d/truck_town/town/town_scene.tscn b/3d/truck_town/town/town_scene.tscn index 3d1f1d434f..533167e30f 100644 --- a/3d/truck_town/town/town_scene.tscn +++ b/3d/truck_town/town/town_scene.tscn @@ -1,16 +1,14 @@ -[gd_scene load_steps=14 format=3 uid="uid://d0ygmqpylq0wy"] +[gd_scene load_steps=15 format=3 uid="uid://d0ygmqpylq0wy"] [ext_resource type="PackedScene" uid="uid://csucj4oj3q3qt" path="res://town/model/town_model.gltf" id="1_amwer"] -[ext_resource type="Script" path="res://spedometer.gd" id="2"] +[ext_resource type="Script" path="res://town/town_scene.gd" id="1_gxe8p"] +[ext_resource type="Script" uid="uid://ikqivupl66lr" path="res://spedometer.gd" id="2"] +[ext_resource type="Material" uid="uid://bpms6jemjgt36" path="res://town/sky_day.tres" id="2_1df3w"] [ext_resource type="Material" uid="uid://c71ovlrgdfif5" path="res://town/materials/grass.tres" id="2_ubld8"] [ext_resource type="Material" uid="uid://bdjiubscxkdn6" path="res://town/materials/cement.tres" id="3_8s61a"] -[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_2k12y"] -sky_horizon_color = Color(0.64625, 0.65575, 0.67075, 1) -ground_horizon_color = Color(0.64625, 0.65575, 0.67075, 1) - [sub_resource type="Sky" id="Sky_1gf0c"] -sky_material = SubResource("ProceduralSkyMaterial_2k12y") +sky_material = ExtResource("2_1df3w") [sub_resource type="Environment" id="Environment_dauhq"] background_mode = 2 @@ -49,12 +47,13 @@ width = 128 height = 128 [node name="TownScene" type="Node3D"] +script = ExtResource("1_gxe8p") [node name="WorldEnvironment" type="WorldEnvironment" parent="."] environment = SubResource("Environment_dauhq") [node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] -transform = Transform3D(0.506501, -0.706305, -0.494561, -4.63342e-08, -0.573577, 0.819152, -0.862239, -0.414901, -0.290517, 11.0084, 12.3453, -31.3148) +transform = Transform3D(-0.793955, 0.350561, -0.496732, -0.295414, 0.491651, 0.819152, 0.531381, 0.797111, -0.286788, 11.0084, 12.3453, -31.3148) light_energy = 1.45 shadow_enabled = true shadow_bias = 0.015 @@ -62,6 +61,139 @@ shadow_blur = 1.5 directional_shadow_mode = 0 directional_shadow_max_distance = 80.0 +[node name="ArtificialLights" type="Node3D" parent="."] +visible = false + +[node name="OmniLight3D" type="OmniLight3D" parent="ArtificialLights"] +transform = Transform3D(0.747779, 0.367885, -0.552709, 0, 0.832459, 0.554087, 0.663947, -0.414335, 0.622495, 38.1028, 10.5868, 14.8252) +light_color = Color(1, 0.941176, 0.705882, 1) +light_energy = 2.0 +shadow_enabled = true +shadow_bias = 0.06 +shadow_blur = 2.0 +distance_fade_enabled = true +distance_fade_begin = 100.0 +distance_fade_shadow = 35.0 +distance_fade_length = 15.0 +omni_range = 15.0 + +[node name="OmniLight3D2" type="OmniLight3D" parent="ArtificialLights"] +transform = Transform3D(0.747779, 0.367885, -0.552709, 0, 0.832459, 0.554087, 0.663947, -0.414335, 0.622495, 13.1028, 11.5868, 20.8252) +light_color = Color(1, 0.941176, 0.705882, 1) +light_energy = 2.0 +shadow_enabled = true +shadow_bias = 0.06 +shadow_blur = 2.0 +distance_fade_enabled = true +distance_fade_begin = 100.0 +distance_fade_shadow = 35.0 +distance_fade_length = 15.0 +omni_range = 15.0 + +[node name="OmniLight3D3" type="OmniLight3D" parent="ArtificialLights"] +transform = Transform3D(0.747779, 0.367885, -0.552709, 0, 0.832459, 0.554087, 0.663947, -0.414335, 0.622495, 14.1028, 11.5868, -6.1748) +light_color = Color(1, 0.941176, 0.705882, 1) +light_energy = 2.0 +shadow_enabled = true +shadow_bias = 0.06 +shadow_blur = 2.0 +distance_fade_enabled = true +distance_fade_begin = 100.0 +distance_fade_shadow = 35.0 +distance_fade_length = 15.0 +omni_range = 15.0 + +[node name="OmniLight3D4" type="OmniLight3D" parent="ArtificialLights"] +transform = Transform3D(0.747779, 0.367885, -0.552709, 0, 0.832459, 0.554087, 0.663947, -0.414335, 0.622495, 36.1028, 13.5868, -7.1748) +light_color = Color(1, 0.941176, 0.705882, 1) +light_energy = 2.0 +shadow_enabled = true +shadow_bias = 0.06 +shadow_blur = 2.0 +distance_fade_enabled = true +distance_fade_begin = 100.0 +distance_fade_shadow = 35.0 +distance_fade_length = 15.0 +omni_range = 15.0 + +[node name="OmniLight3D5" type="OmniLight3D" parent="ArtificialLights"] +transform = Transform3D(0.747779, 0.367885, -0.552709, 0, 0.832459, 0.554087, 0.663947, -0.414335, 0.622495, 45.1028, 13.5868, -17.1748) +light_color = Color(1, 0.941176, 0.705882, 1) +light_energy = 2.0 +shadow_enabled = true +shadow_bias = 0.06 +shadow_blur = 2.0 +distance_fade_enabled = true +distance_fade_begin = 100.0 +distance_fade_shadow = 35.0 +distance_fade_length = 15.0 +omni_range = 15.0 + +[node name="OmniLight3D6" type="OmniLight3D" parent="ArtificialLights"] +transform = Transform3D(0.747779, 0.367885, -0.552709, 0, 0.832459, 0.554087, 0.663947, -0.414335, 0.622495, -20.8972, 7.58679, 4.8252) +light_color = Color(1, 0.941176, 0.705882, 1) +light_energy = 2.0 +shadow_enabled = true +shadow_bias = 0.06 +shadow_blur = 2.0 +distance_fade_enabled = true +distance_fade_begin = 100.0 +distance_fade_shadow = 35.0 +distance_fade_length = 15.0 +omni_range = 15.0 + +[node name="OmniLight3D7" type="OmniLight3D" parent="ArtificialLights"] +transform = Transform3D(0.747779, 0.367885, -0.552709, 0, 0.832459, 0.554087, 0.663947, -0.414335, 0.622495, -15.8972, 7.58679, 20.8252) +light_color = Color(1, 0.941176, 0.705882, 1) +light_energy = 2.0 +shadow_enabled = true +shadow_bias = 0.06 +shadow_blur = 2.0 +distance_fade_enabled = true +distance_fade_begin = 100.0 +distance_fade_shadow = 35.0 +distance_fade_length = 15.0 +omni_range = 15.0 + +[node name="OmniLight3D8" type="OmniLight3D" parent="ArtificialLights"] +transform = Transform3D(0.747779, 0.367885, -0.552709, 0, 0.832459, 0.554087, 0.663947, -0.414335, 0.622495, -44.8972, 10.5868, 4.8252) +light_color = Color(1, 0.941176, 0.705882, 1) +light_energy = 2.0 +shadow_enabled = true +shadow_bias = 0.06 +shadow_blur = 2.0 +distance_fade_enabled = true +distance_fade_begin = 100.0 +distance_fade_shadow = 35.0 +distance_fade_length = 15.0 +omni_range = 15.0 + +[node name="OmniLight3D9" type="OmniLight3D" parent="ArtificialLights"] +transform = Transform3D(0.747779, 0.367885, -0.552709, 0, 0.832459, 0.554087, 0.663947, -0.414335, 0.622495, -43.8972, 10.5868, -15.1748) +light_color = Color(1, 0.941176, 0.705882, 1) +light_energy = 2.0 +shadow_enabled = true +shadow_bias = 0.06 +shadow_blur = 2.0 +distance_fade_enabled = true +distance_fade_begin = 100.0 +distance_fade_shadow = 35.0 +distance_fade_length = 15.0 +omni_range = 15.0 + +[node name="OmniLight3D10" type="OmniLight3D" parent="ArtificialLights"] +transform = Transform3D(0.747779, 0.367885, -0.552709, 0, 0.832459, 0.554087, 0.663947, -0.414335, 0.622495, -15.7972, 3.58679, -71.175) +light_color = Color(1, 0.941176, 0.705882, 1) +light_energy = 2.0 +shadow_enabled = true +shadow_bias = 0.06 +shadow_blur = 2.0 +distance_fade_enabled = true +distance_fade_begin = 100.0 +distance_fade_shadow = 35.0 +distance_fade_length = 15.0 +omni_range = 15.0 + [node name="InstancePos" type="Marker3D" parent="."] transform = Transform3D(3.57628e-07, 0, -1, 0, 1, 0, 1, 0, 3.57628e-07, 35.48, 8.72405, 14.335) diff --git a/3d/truck_town/vehicles/meshes/minivan.res b/3d/truck_town/vehicles/meshes/minivan.res index 65ec6e00295607d396fa8925f30204bf46d4bad4..115c049d051d8ae9a6a49cf5843fd1b85198c022 100644 GIT binary patch delta 75 zcmaDE@-k#YIu~nlNr8FBRLI10*>vdtK{cqZp_sj_F7mzx_i f6ik-nmSr`_%tRLIC4|+Dk>SccqZp_sj}xJnRLI10*>vdtJIc_!y`sd8kPmzx_i g)bmW1;+A2}&#*|%nJmsN&zfmsXqLCxnmbn&0H`k(KL7v# delta 76 zcmZ3HxFT^wIu~nYZdpm%RLIC4|+Dk>Qyc_!y`sdD5bnRLI10*>vdtK{c_!y`sj_F7mzx_i f6i$}pmSr_bH!G=}EY2;@YFbuUUbNYoJ6Qn$d5{(m delta 75 zcmbOiJ}-PjIu~ncMRK{xRLIC4|+Dk>Scc_!y`sj}xJnO@$@{rvS&PzgD#|DC<&tMDDL1yr-29MB G!~_8D$r2v` delta 50 zcmexb`?YpMIu~nFaba=J