From 1585a2d7b32bbda8c1cd9dd222d764bb7f81f36d Mon Sep 17 00:00:00 2001 From: Olivier 'reivilibre Date: Sun, 8 Jan 2023 23:21:54 +0000 Subject: [PATCH] Add a clock, scheduler and schedule the postie's arrival --- levels/Level0A.tscn | 8 +- ui/Hud.tscn | 9 ++- ui/Scheduler.gd | 55 ++++++++++++++ ui/Scheduler.tscn | 120 ++++++++++++++++++++++++++++++ ui/calendar.kra | 3 + ui/calendar.png | 3 + ui/calendar.png.import | 35 +++++++++ ui/clock.kra | 3 + ui/clock.png | 3 + ui/clock.png.import | 35 +++++++++ ui/clock_hand.kra | 3 + ui/clock_hand.png | 3 + ui/clock_hand.png.import | 35 +++++++++ ui/clock_postie_region.kra | 3 + ui/clock_postie_region.png | 3 + ui/clock_postie_region.png.import | 35 +++++++++ vehicles/Postie.gd | 3 +- 17 files changed, 350 insertions(+), 9 deletions(-) create mode 100644 ui/Scheduler.gd create mode 100644 ui/Scheduler.tscn create mode 100644 ui/calendar.kra create mode 100644 ui/calendar.png create mode 100644 ui/calendar.png.import create mode 100644 ui/clock.kra create mode 100644 ui/clock.png create mode 100644 ui/clock.png.import create mode 100644 ui/clock_hand.kra create mode 100644 ui/clock_hand.png create mode 100644 ui/clock_hand.png.import create mode 100644 ui/clock_postie_region.kra create mode 100644 ui/clock_postie_region.png create mode 100644 ui/clock_postie_region.png.import diff --git a/levels/Level0A.tscn b/levels/Level0A.tscn index c51643b..ab4d373 100644 --- a/levels/Level0A.tscn +++ b/levels/Level0A.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=10 format=2] +[gd_scene load_steps=9 format=2] [ext_resource path="res://scenery/tiles/ohld_tileset.tres" type="TileSet" id=1] [ext_resource path="res://characters/player/Player.tscn" type="PackedScene" id=2] @@ -6,7 +6,6 @@ [ext_resource path="res://scenery/facilities/Wheelbarrow.tscn" type="PackedScene" id=4] [ext_resource path="res://scenery/facilities/Press.tscn" type="PackedScene" id=5] [ext_resource path="res://scenery/tiles/road.png" type="Texture" id=6] -[ext_resource path="res://vehicles/Postie.tscn" type="PackedScene" id=7] [ext_resource path="res://ui/Hud.tscn" type="PackedScene" id=8] [sub_resource type="TileSet" id=1] @@ -66,12 +65,7 @@ position = Vector2( 135, 190 ) [node name="Node2D3" parent="World/YSort" instance=ExtResource( 4 )] position = Vector2( 542, 475 ) -[node name="Postie" parent="World/YSort" instance=ExtResource( 7 )] -position = Vector2( 418, 768 ) - [node name="MarkerRoadPoint" type="Node2D" parent="World"] position = Vector2( 328, 770 ) [node name="Hud" parent="." instance=ExtResource( 8 )] -margin_right = 1261.0 -margin_bottom = 740.0 diff --git a/ui/Hud.tscn b/ui/Hud.tscn index f04f37e..af69edc 100644 --- a/ui/Hud.tscn +++ b/ui/Hud.tscn @@ -1,8 +1,9 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=5 format=2] [ext_resource path="res://ui/normal_font.tres" type="DynamicFont" id=1] [ext_resource path="res://ui/coin.png" type="Texture" id=2] [ext_resource path="res://ui/Hud.gd" type="Script" id=3] +[ext_resource path="res://ui/Scheduler.tscn" type="PackedScene" id=4] [node name="Hud" type="Node2D"] z_index = 50 @@ -32,3 +33,9 @@ text = "0" [node name="Coin" type="Sprite" parent="HudInner/Panel"] position = Vector2( 31, 37 ) texture = ExtResource( 2 ) + +[node name="Scheduler" parent="HudInner/Panel" instance=ExtResource( 4 )] +margin_left = 120.0 +margin_top = 8.0 +margin_right = -8.0 +margin_bottom = -88.0 diff --git a/ui/Scheduler.gd b/ui/Scheduler.gd new file mode 100644 index 0000000..911d4cb --- /dev/null +++ b/ui/Scheduler.gd @@ -0,0 +1,55 @@ +extends Control + + +var DAY_PER_SEC = 0.02 + + +func _ready(): + # TODO set up calendar + + # set up clock + _set_up_postie_clock() + + _start_schedule() + + +func _set_up_postie_clock(): + for start_time in postie_times: + var end_time = start_time + postie_length + var start_segment = round(10 * start_time) + var end_segment = round(10 * end_time) + for i in range(start_segment, end_segment): + $Clock/PostieRegions.get_child(i % 10).visible = true + +var days_on_this_level = 5 +var postie_times = [0.1] +var postie_length = .3 + +var day_num = 0 +var time_of_day = 0.0 + + +func _start_schedule(): + # schedule all events for the day... + for day in range(days_on_this_level): + var parent = find_parent("Level*").get_node("World/YSort") + for postie_time in postie_times: + # 5s early so the postie has time to drive there. + _postie_in(parent, (postie_time / DAY_PER_SEC) - 5.0, postie_length / DAY_PER_SEC) + + yield(get_tree().create_timer(1 / DAY_PER_SEC, false), "timeout") + + +func _postie_in(parent: Node2D, time: float, idling_time: float): + yield(get_tree().create_timer(time, false), "timeout") + var new_postie = preload("res://vehicles/Postie.tscn").instance() + new_postie.position = Vector2(-500, 0) + new_postie.idling_time = idling_time + parent.add_child(new_postie) + + +func _process(delta): + var old_time = time_of_day + time_of_day += delta * DAY_PER_SEC + + $Clock/ClockHand.rotation = 2 * PI * fmod(time_of_day, 1.0) diff --git a/ui/Scheduler.tscn b/ui/Scheduler.tscn new file mode 100644 index 0000000..a64b151 --- /dev/null +++ b/ui/Scheduler.tscn @@ -0,0 +1,120 @@ +[gd_scene load_steps=7 format=2] + +[ext_resource path="res://ui/calendar.png" type="Texture" id=1] +[ext_resource path="res://ui/clock.png" type="Texture" id=2] +[ext_resource path="res://ui/normal_theme.tres" type="Theme" id=3] +[ext_resource path="res://ui/clock_hand.png" type="Texture" id=4] +[ext_resource path="res://ui/Scheduler.gd" type="Script" id=5] +[ext_resource path="res://ui/clock_postie_region.png" type="Texture" id=6] + +[node name="Scheduler" type="Control"] +anchor_right = 1.0 +anchor_bottom = 1.0 +script = ExtResource( 5 ) + +[node name="Calendar" type="Sprite" parent="."] +position = Vector2( 139, 119 ) +texture = ExtResource( 1 ) +offset = Vector2( -91, -87 ) + +[node name="LabelCalendar" type="Label" parent="."] +margin_top = 66.0 +margin_right = 94.0 +margin_bottom = 93.0 +rect_pivot_offset = Vector2( 139, 53 ) +theme = ExtResource( 3 ) +text = "Calendar" +align = 1 + +[node name="Clock" type="Sprite" parent="."] +position = Vector2( 151, 36 ) +texture = ExtResource( 2 ) + +[node name="ClockHand" type="Sprite" parent="Clock"] +texture = ExtResource( 4 ) +centered = false +offset = Vector2( -4, -20 ) + +[node name="PostieRegions" type="Node2D" parent="Clock"] + +[node name="PostieRegion1" type="Sprite" parent="Clock/PostieRegions"] +visible = false +texture = ExtResource( 6 ) +centered = false +offset = Vector2( -2, -32 ) + +[node name="PostieRegion2" type="Sprite" parent="Clock/PostieRegions"] +visible = false +rotation = 0.628319 +texture = ExtResource( 6 ) +centered = false +offset = Vector2( -2, -32 ) + +[node name="PostieRegion3" type="Sprite" parent="Clock/PostieRegions"] +visible = false +rotation = 1.25664 +texture = ExtResource( 6 ) +centered = false +offset = Vector2( -2, -32 ) + +[node name="PostieRegion4" type="Sprite" parent="Clock/PostieRegions"] +visible = false +rotation = 1.88496 +texture = ExtResource( 6 ) +centered = false +offset = Vector2( -2, -32 ) + +[node name="PostieRegion5" type="Sprite" parent="Clock/PostieRegions"] +visible = false +rotation = 2.51327 +texture = ExtResource( 6 ) +centered = false +offset = Vector2( -2, -32 ) + +[node name="PostieRegion6" type="Sprite" parent="Clock/PostieRegions"] +visible = false +rotation = -3.14159 +texture = ExtResource( 6 ) +centered = false +offset = Vector2( -2, -32 ) + +[node name="PostieRegion7" type="Sprite" parent="Clock/PostieRegions"] +visible = false +rotation = -2.51327 +scale = Vector2( 1, 1 ) +texture = ExtResource( 6 ) +centered = false +offset = Vector2( -2, -32 ) + +[node name="PostieRegion8" type="Sprite" parent="Clock/PostieRegions"] +visible = false +rotation = -1.88496 +texture = ExtResource( 6 ) +centered = false +offset = Vector2( -2, -32 ) + +[node name="PostieRegion9" type="Sprite" parent="Clock/PostieRegions"] +visible = false +rotation = -1.25664 +texture = ExtResource( 6 ) +centered = false +offset = Vector2( -2, -32 ) + +[node name="PostieRegion10" type="Sprite" parent="Clock/PostieRegions"] +visible = false +rotation = -0.628319 +texture = ExtResource( 6 ) +centered = false +offset = Vector2( -2, -32 ) + +[node name="LabelClock" type="Label" parent="."] +margin_left = 103.0 +margin_top = 66.0 +margin_right = 197.0 +margin_bottom = 93.0 +rect_pivot_offset = Vector2( 139, 53 ) +theme = ExtResource( 3 ) +text = "Clock" +align = 1 + +[node name="Timer" type="Timer" parent="."] diff --git a/ui/calendar.kra b/ui/calendar.kra new file mode 100644 index 0000000..2470773 --- /dev/null +++ b/ui/calendar.kra @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b9a4cc7973f23def021a03b3957f9183e2caa239a32c324ac46090664708dd45 +size 45917 diff --git a/ui/calendar.png b/ui/calendar.png new file mode 100644 index 0000000..5aa7291 --- /dev/null +++ b/ui/calendar.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3063af0ebc548c5abb7b3c69dd47d3471ec98e6356e06c3c21bd3f67a6dfbaa2 +size 1366 diff --git a/ui/calendar.png.import b/ui/calendar.png.import new file mode 100644 index 0000000..1a11d38 --- /dev/null +++ b/ui/calendar.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/calendar.png-dd732786e3f6374d05829fdf0dad7f88.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui/calendar.png" +dest_files=[ "res://.import/calendar.png-dd732786e3f6374d05829fdf0dad7f88.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/ui/clock.kra b/ui/clock.kra new file mode 100644 index 0000000..c736b6c --- /dev/null +++ b/ui/clock.kra @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:06a2391cd85d1b06c964f77bc6b0cf4da5126e6726117da15965470ade414685 +size 100587 diff --git a/ui/clock.png b/ui/clock.png new file mode 100644 index 0000000..a6359b3 --- /dev/null +++ b/ui/clock.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0dd35a55dabae208d269401d5574b698e00adda1be515af2293e7ed64b61e90c +size 3236 diff --git a/ui/clock.png.import b/ui/clock.png.import new file mode 100644 index 0000000..977f75a --- /dev/null +++ b/ui/clock.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/clock.png-09b4a660a58c86478b8ce31163fe5a4d.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui/clock.png" +dest_files=[ "res://.import/clock.png-09b4a660a58c86478b8ce31163fe5a4d.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/ui/clock_hand.kra b/ui/clock_hand.kra new file mode 100644 index 0000000..b247578 --- /dev/null +++ b/ui/clock_hand.kra @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2431c4ffac44136ad4c02154d497e98e5e043bdac1ab4202e0ba1f5a05f612a8 +size 33578 diff --git a/ui/clock_hand.png b/ui/clock_hand.png new file mode 100644 index 0000000..f75983f --- /dev/null +++ b/ui/clock_hand.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ed626d9b10c63cb1f892ac3bd08d99d81cd0778afb5e11a3d05200320dec3e57 +size 543 diff --git a/ui/clock_hand.png.import b/ui/clock_hand.png.import new file mode 100644 index 0000000..e074528 --- /dev/null +++ b/ui/clock_hand.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/clock_hand.png-6b703f276e30e448e2d424ebe0e182f6.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui/clock_hand.png" +dest_files=[ "res://.import/clock_hand.png-6b703f276e30e448e2d424ebe0e182f6.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/ui/clock_postie_region.kra b/ui/clock_postie_region.kra new file mode 100644 index 0000000..ee94578 --- /dev/null +++ b/ui/clock_postie_region.kra @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ebeee816f0c2396c4b27e27b0b7628ab762e1e42d5a33840116705d7d38cc33 +size 96219 diff --git a/ui/clock_postie_region.png b/ui/clock_postie_region.png new file mode 100644 index 0000000..f30f97a --- /dev/null +++ b/ui/clock_postie_region.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77c8592acfdeec184fa7600a2d4d0e08737f2c0878463588427bdabb15c3acce +size 680 diff --git a/ui/clock_postie_region.png.import b/ui/clock_postie_region.png.import new file mode 100644 index 0000000..0685a85 --- /dev/null +++ b/ui/clock_postie_region.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/clock_postie_region.png-ce30bb29082ee859f65c40c5bb09037f.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui/clock_postie_region.png" +dest_files=[ "res://.import/clock_postie_region.png-ce30bb29082ee859f65c40c5bb09037f.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/vehicles/Postie.gd b/vehicles/Postie.gd index 8649892..c3cb8f7 100644 --- a/vehicles/Postie.gd +++ b/vehicles/Postie.gd @@ -6,6 +6,7 @@ extends Node2D # var b = "text" var marker: Node2D = null +var idling_time: float = 5.0 # Called when the node enters the scene tree for the first time. func _ready(): @@ -41,7 +42,7 @@ func _on_driven_in(): $BackgateOpenSfx.pitch_scale = rand_range(0.8, 1.2) $BackgateOpenSfx.play() - $Tween.interpolate_callback(self, 5.0, "_drive_off") + $Tween.interpolate_callback(self, idling_time, "_drive_off") $Tween.start() func _drive_off():