From 39ac434d3cacf22b3e77d48ced07b5bbb8356c35 Mon Sep 17 00:00:00 2001 From: fabianainu Date: Mon, 23 Dec 2024 21:28:20 -0500 Subject: [PATCH] multi levels, timer, health, coins, key --- fabigame/assets/graphics/pickups/key.png | Bin 0 -> 52443 bytes .../assets/graphics/pickups/key.png.import | 34 ++ fabigame/scenes/dude.tscn | 8 +- fabigame/scenes/game.tscn | 31 +- fabigame/scenes/game_level2.tscn | 530 ++++++++++++++++++ fabigame/scenes/ui.tscn | 50 ++ fabigame/scripts/dudecontroller.gd | 14 +- fabigame/scripts/game_controller.gd | 40 +- fabigame/scripts/scene_manager.gd | 48 +- fabigame/scripts/trigger_key.gd | 20 + fabigame/scripts/ui.gd | 20 + 11 files changed, 764 insertions(+), 31 deletions(-) create mode 100644 fabigame/assets/graphics/pickups/key.png create mode 100644 fabigame/assets/graphics/pickups/key.png.import create mode 100644 fabigame/scenes/game_level2.tscn create mode 100644 fabigame/scenes/ui.tscn create mode 100644 fabigame/scripts/trigger_key.gd create mode 100644 fabigame/scripts/ui.gd diff --git a/fabigame/assets/graphics/pickups/key.png b/fabigame/assets/graphics/pickups/key.png new file mode 100644 index 0000000000000000000000000000000000000000..055b739fd02927e0d066682c44f8075274546da4 GIT binary patch literal 52443 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 Z{{saW@Kw=H|G@wN002ovPDHLkV1ho@>8Jnz literal 0 HcmV?d00001 diff --git a/fabigame/assets/graphics/pickups/key.png.import b/fabigame/assets/graphics/pickups/key.png.import new file mode 100644 index 0000000..39e8b2a --- /dev/null +++ b/fabigame/assets/graphics/pickups/key.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://du0e0ddagpw2p" +path="res://.godot/imported/key.png-9a4111b1e9b4dbdd03db0f0fec3ea3ee.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/pickups/key.png" +dest_files=["res://.godot/imported/key.png-9a4111b1e9b4dbdd03db0f0fec3ea3ee.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/fabigame/scenes/dude.tscn b/fabigame/scenes/dude.tscn index 25ddc1e..4749f06 100644 --- a/fabigame/scenes/dude.tscn +++ b/fabigame/scenes/dude.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=44 format=3 uid="uid://djgtbc1quqvwe"] +[gd_scene load_steps=45 format=3 uid="uid://djgtbc1quqvwe"] [ext_resource type="Script" path="res://scripts/dudecontroller.gd" id="1_ay2gi"] [ext_resource type="Texture2D" uid="uid://dvgh32yadcjcq" path="res://assets/graphics/player/idle/Player Idle 48x48.png" id="2_5mbmt"] @@ -6,6 +6,7 @@ [ext_resource type="Texture2D" uid="uid://1tiutqy11mhk" path="res://assets/graphics/player/hurt/Player Hurt 48x48.png" id="2_p1quv"] [ext_resource type="Texture2D" uid="uid://2mxlso64vnrk" path="res://assets/graphics/player/run/player run 48x48.png" id="3_2y1a6"] [ext_resource type="Texture2D" uid="uid://cwiun1ntuu02d" path="res://assets/graphics/player/jump/player jump 48x48.png" id="3_5o14d"] +[ext_resource type="Texture2D" uid="uid://du0e0ddagpw2p" path="res://assets/graphics/pickups/key.png" id="7_o78ee"] [sub_resource type="CircleShape2D" id="CircleShape2D_iice4"] radius = 6.32456 @@ -316,4 +317,9 @@ autoplay = "Idle" [node name="Camera2D" type="Camera2D" parent="."] offset = Vector2(0, -30) +[node name="Key" type="Sprite2D" parent="."] +position = Vector2(1, 0) +scale = Vector2(0.0360825, 0.0360825) +texture = ExtResource("7_o78ee") + [connection signal="animation_finished" from="AnimatedSprite2D" to="." method="_on_animation_finished"] diff --git a/fabigame/scenes/game.tscn b/fabigame/scenes/game.tscn index fd85a14..77570b5 100644 --- a/fabigame/scenes/game.tscn +++ b/fabigame/scenes/game.tscn @@ -1,17 +1,18 @@ -[gd_scene load_steps=17 format=4 uid="uid://ciko2h5jj1a3k"] +[gd_scene load_steps=18 format=4 uid="uid://ciko2h5jj1a3k"] [ext_resource type="PackedScene" uid="uid://djgtbc1quqvwe" path="res://scenes/dude.tscn" id="1_4l1yw"] [ext_resource type="Texture2D" uid="uid://d3da1xpx6f8do" path="res://assets/graphics/environment/background/forestbackground.png" id="1_i3nvv"] [ext_resource type="PackedScene" uid="uid://bw3gps1njvtgr" path="res://scenes/box.tscn" id="1_mg5q5"] [ext_resource type="Script" path="res://scripts/scene_manager.gd" id="1_tpgoh"] [ext_resource type="Texture2D" uid="uid://qftgnypwbikp" path="res://assets/graphics/environment/terrain/Terrain (32x32).png" id="1_yjgfx"] -[ext_resource type="Script" path="res://scripts/trigger.gd" id="2_a7w16"] [ext_resource type="Texture2D" uid="uid://dr8tcpg5yp3ei" path="res://assets/graphics/environment/background/midgroud.png" id="2_ms4rf"] [ext_resource type="Texture2D" uid="uid://bcwyohfx8ft18" path="res://assets/graphics/environment/background/sky_strip.png" id="2_twm8w"] [ext_resource type="Texture2D" uid="uid://dmsqm0stkx5s2" path="res://assets/graphics/environment/background/clouds.png" id="3_nw1b4"] [ext_resource type="Texture2D" uid="uid://c5r8lr50mwhws" path="res://assets/graphics/environment/background/midgroud_grass.png" id="4_d4yqf"] +[ext_resource type="Script" path="res://scripts/trigger_key.gd" id="10_h7rqj"] [ext_resource type="PackedScene" uid="uid://cttwpovmajtsa" path="res://scenes/coin.tscn" id="11_v5ca1"] [ext_resource type="PackedScene" uid="uid://b0pun5awvst0k" path="res://scenes/badguy.tscn" id="12_18k5f"] +[ext_resource type="PackedScene" uid="uid://bj4sdxqrlfr02" path="res://scenes/ui.tscn" id="13_g6f7a"] [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_bdyqk"] texture = ExtResource("1_yjgfx") @@ -453,7 +454,7 @@ unique_name_in_owner = true script = ExtResource("1_tpgoh") [node name="CharacterBody2D" parent="." instance=ExtResource("1_4l1yw")] -position = Vector2(305, -22) +position = Vector2(37, 132) [node name="Box" parent="." groups=["shootable"] instance=ExtResource("1_mg5q5")] position = Vector2(137, 23) @@ -471,13 +472,13 @@ metadata/_edit_group_ = true [node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D"] shape = SubResource("WorldBoundaryShape2D_vdfbk") -[node name="Area2D" type="Area2D" parent="."] -position = Vector2(232, 291) -scale = Vector2(24.2, 4.16) -script = ExtResource("2_a7w16") +[node name="KeyTrigger" type="Area2D" parent="."] +position = Vector2(487, 61) +scale = Vector2(1.04, 4.16) +script = ExtResource("10_h7rqj") metadata/_edit_group_ = true -[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] +[node name="CollisionShape2D" type="CollisionShape2D" parent="KeyTrigger"] position = Vector2(0, -7.76443) shape = SubResource("RectangleShape2D_lbd3t") debug_color = Color(0.31865, 0.625237, 0, 0.42) @@ -496,22 +497,18 @@ metadata/_edit_group_ = true position = Vector2(277, -8) metadata/_edit_group_ = true -[node name="Coin6" parent="Coins" instance=ExtResource("11_v5ca1")] -position = Vector2(385, 58) -metadata/_edit_group_ = true - [node name="Coin5" parent="Coins" instance=ExtResource("11_v5ca1")] position = Vector2(246, -16) metadata/_edit_group_ = true -[node name="Coin2" parent="Coins" instance=ExtResource("11_v5ca1")] -position = Vector2(486, 25) -metadata/_edit_group_ = true - [node name="BadGuys" type="Node" parent="."] [node name="BadGuy" parent="BadGuys" instance=ExtResource("12_18k5f")] position = Vector2(359, 60) metadata/_edit_group_ = true -[connection signal="body_entered" from="Area2D" to="Area2D" method="_on_body_entered"] +[node name="CanvasLayer" type="CanvasLayer" parent="."] + +[node name="Control" parent="CanvasLayer" instance=ExtResource("13_g6f7a")] + +[connection signal="body_entered" from="KeyTrigger" to="KeyTrigger" method="_on_body_entered"] diff --git a/fabigame/scenes/game_level2.tscn b/fabigame/scenes/game_level2.tscn new file mode 100644 index 0000000..57d47dc --- /dev/null +++ b/fabigame/scenes/game_level2.tscn @@ -0,0 +1,530 @@ +[gd_scene load_steps=18 format=4 uid="uid://dmeh4ec7h0lsc"] + +[ext_resource type="Texture2D" uid="uid://d3da1xpx6f8do" path="res://assets/graphics/environment/background/forestbackground.png" id="1_tnlsl"] +[ext_resource type="Texture2D" uid="uid://bcwyohfx8ft18" path="res://assets/graphics/environment/background/sky_strip.png" id="2_6ci1w"] +[ext_resource type="Texture2D" uid="uid://dmsqm0stkx5s2" path="res://assets/graphics/environment/background/clouds.png" id="3_uqjdf"] +[ext_resource type="Texture2D" uid="uid://c5r8lr50mwhws" path="res://assets/graphics/environment/background/midgroud_grass.png" id="4_71wd1"] +[ext_resource type="Texture2D" uid="uid://dr8tcpg5yp3ei" path="res://assets/graphics/environment/background/midgroud.png" id="5_b0wjm"] +[ext_resource type="Texture2D" uid="uid://qftgnypwbikp" path="res://assets/graphics/environment/terrain/Terrain (32x32).png" id="6_f2cdw"] +[ext_resource type="Script" path="res://scripts/scene_manager.gd" id="7_3s0ov"] +[ext_resource type="PackedScene" uid="uid://djgtbc1quqvwe" path="res://scenes/dude.tscn" id="8_ctqq8"] +[ext_resource type="PackedScene" uid="uid://bw3gps1njvtgr" path="res://scenes/box.tscn" id="9_b3256"] +[ext_resource type="Script" path="res://scripts/trigger.gd" id="10_c8glf"] +[ext_resource type="PackedScene" uid="uid://cttwpovmajtsa" path="res://scenes/coin.tscn" id="11_0vqln"] +[ext_resource type="PackedScene" uid="uid://b0pun5awvst0k" path="res://scenes/badguy.tscn" id="12_hwoa7"] +[ext_resource type="PackedScene" uid="uid://bj4sdxqrlfr02" path="res://scenes/ui.tscn" id="13_7qh3f"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_bdyqk"] +texture = ExtResource("6_f2cdw") +texture_region_size = Vector2i(32, 32) +0:0/0 = 0 +0:0/0/terrain_set = 0 +0:0/0/terrain = 0 +0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +0:0/0/terrains_peering_bit/right_side = 0 +0:0/0/terrains_peering_bit/bottom_right_corner = 0 +0:0/0/terrains_peering_bit/bottom_side = 0 +1:0/0 = 0 +1:0/0/terrain_set = 0 +1:0/0/terrain = 0 +1:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +1:0/0/terrains_peering_bit/right_side = 0 +1:0/0/terrains_peering_bit/bottom_right_corner = 0 +1:0/0/terrains_peering_bit/bottom_side = 0 +1:0/0/terrains_peering_bit/bottom_left_corner = 0 +1:0/0/terrains_peering_bit/left_side = 0 +2:0/0 = 0 +2:0/0/terrain_set = 0 +2:0/0/terrain = 0 +2:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +2:0/0/terrains_peering_bit/bottom_side = 0 +2:0/0/terrains_peering_bit/bottom_left_corner = 0 +2:0/0/terrains_peering_bit/left_side = 0 +4:0/0 = 0 +4:0/0/terrain_set = 0 +4:0/0/terrain = 0 +4:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +4:0/0/terrains_peering_bit/bottom_side = 0 +6:0/0 = 0 +6:0/0/terrain_set = 0 +6:0/0/terrain = 0 +6:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, 0, 16, 0, 0, 16, 0) +6:0/0/terrains_peering_bit/right_side = 0 +6:0/0/terrains_peering_bit/bottom_side = 0 +6:0/0/terrains_peering_bit/bottom_left_corner = 0 +6:0/0/terrains_peering_bit/left_side = 0 +6:0/0/terrains_peering_bit/top_left_corner = 0 +6:0/0/terrains_peering_bit/top_side = 0 +6:0/0/terrains_peering_bit/top_right_corner = 0 +7:0/0 = 0 +7:0/0/terrain_set = 0 +7:0/0/terrain = 0 +7:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, 0, 16, 0, 0, -16, 0) +7:0/0/terrains_peering_bit/right_side = 0 +7:0/0/terrains_peering_bit/bottom_right_corner = 0 +7:0/0/terrains_peering_bit/bottom_side = 0 +7:0/0/terrains_peering_bit/left_side = 0 +7:0/0/terrains_peering_bit/top_left_corner = 0 +7:0/0/terrains_peering_bit/top_side = 0 +7:0/0/terrains_peering_bit/top_right_corner = 0 +9:0/0 = 0 +9:0/0/terrain_set = 0 +9:0/0/terrain = 0 +9:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +9:0/0/terrains_peering_bit/right_side = 0 +9:0/0/terrains_peering_bit/bottom_right_corner = 0 +9:0/0/terrains_peering_bit/bottom_side = 0 +9:0/0/terrains_peering_bit/bottom_left_corner = 0 +9:0/0/terrains_peering_bit/left_side = 0 +9:0/0/terrains_peering_bit/top_side = 0 +10:0/0 = 0 +10:0/0/terrain_set = 0 +10:0/0/terrain = 0 +10:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +10:0/0/terrains_peering_bit/bottom_side = 0 +10:0/0/terrains_peering_bit/bottom_left_corner = 0 +10:0/0/terrains_peering_bit/left_side = 0 +10:0/0/terrains_peering_bit/top_left_corner = 0 +10:0/0/terrains_peering_bit/top_side = 0 +12:0/0 = 0 +12:0/0/terrain_set = 0 +12:0/0/terrain = 0 +12:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +12:0/0/terrains_peering_bit/right_side = 0 +12:0/0/terrains_peering_bit/bottom_right_corner = 0 +12:0/0/terrains_peering_bit/bottom_side = 0 +12:0/0/terrains_peering_bit/top_side = 0 +13:0/0 = 0 +13:0/0/terrain_set = 0 +13:0/0/terrain = 0 +13:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +13:0/0/terrains_peering_bit/bottom_side = 0 +13:0/0/terrains_peering_bit/bottom_left_corner = 0 +13:0/0/terrains_peering_bit/left_side = 0 +13:0/0/terrains_peering_bit/top_side = 0 +15:0/0 = 0 +15:0/0/terrain_set = 0 +15:0/0/terrain = 0 +15:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, 16, 16, -16, 16, -16, -16) +15:0/0/terrains_peering_bit/bottom_side = 0 +15:0/0/terrains_peering_bit/top_side = 0 +0:1/0 = 0 +0:1/0/terrain_set = 0 +0:1/0/terrain = 0 +0:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +0:1/0/terrains_peering_bit/right_side = 0 +0:1/0/terrains_peering_bit/bottom_right_corner = 0 +0:1/0/terrains_peering_bit/bottom_side = 0 +0:1/0/terrains_peering_bit/top_side = 0 +0:1/0/terrains_peering_bit/top_right_corner = 0 +1:1/0 = 0 +1:1/0/terrain_set = 0 +1:1/0/terrain = 0 +1:1/0/terrains_peering_bit/right_side = 0 +1:1/0/terrains_peering_bit/bottom_right_corner = 0 +1:1/0/terrains_peering_bit/bottom_side = 0 +1:1/0/terrains_peering_bit/bottom_left_corner = 0 +1:1/0/terrains_peering_bit/left_side = 0 +1:1/0/terrains_peering_bit/top_left_corner = 0 +1:1/0/terrains_peering_bit/top_side = 0 +1:1/0/terrains_peering_bit/top_right_corner = 0 +2:1/0 = 0 +2:1/0/terrain_set = 0 +2:1/0/terrain = 0 +2:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +2:1/0/terrains_peering_bit/bottom_side = 0 +2:1/0/terrains_peering_bit/bottom_left_corner = 0 +2:1/0/terrains_peering_bit/left_side = 0 +2:1/0/terrains_peering_bit/top_left_corner = 0 +2:1/0/terrains_peering_bit/top_side = 0 +4:1/0 = 0 +4:1/0/terrain_set = 0 +4:1/0/terrain = 0 +4:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +4:1/0/terrains_peering_bit/bottom_side = 0 +4:1/0/terrains_peering_bit/top_side = 0 +6:1/0 = 0 +6:1/0/terrain_set = 0 +6:1/0/terrain = 0 +6:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, 0, -16, 0, 0, 16, 0) +6:1/0/terrains_peering_bit/right_side = 0 +6:1/0/terrains_peering_bit/bottom_right_corner = 0 +6:1/0/terrains_peering_bit/bottom_side = 0 +6:1/0/terrains_peering_bit/bottom_left_corner = 0 +6:1/0/terrains_peering_bit/left_side = 0 +6:1/0/terrains_peering_bit/top_left_corner = 0 +6:1/0/terrains_peering_bit/top_side = 0 +7:1/0 = 0 +7:1/0/terrain_set = 0 +7:1/0/terrain = 0 +7:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 0, -16, 0, 0, -16, 0) +7:1/0/terrains_peering_bit/right_side = 0 +7:1/0/terrains_peering_bit/bottom_right_corner = 0 +7:1/0/terrains_peering_bit/bottom_side = 0 +7:1/0/terrains_peering_bit/bottom_left_corner = 0 +7:1/0/terrains_peering_bit/left_side = 0 +7:1/0/terrains_peering_bit/top_side = 0 +7:1/0/terrains_peering_bit/top_right_corner = 0 +9:1/0 = 0 +9:1/0/terrain_set = 0 +9:1/0/terrain = 0 +9:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +9:1/0/terrains_peering_bit/right_side = 0 +9:1/0/terrains_peering_bit/bottom_right_corner = 0 +9:1/0/terrains_peering_bit/bottom_side = 0 +9:1/0/terrains_peering_bit/top_side = 0 +9:1/0/terrains_peering_bit/top_right_corner = 0 +10:1/0 = 0 +10:1/0/terrain_set = 0 +10:1/0/terrain = 0 +10:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +10:1/0/terrains_peering_bit/right_side = 0 +10:1/0/terrains_peering_bit/bottom_side = 0 +10:1/0/terrains_peering_bit/left_side = 0 +10:1/0/terrains_peering_bit/top_left_corner = 0 +10:1/0/terrains_peering_bit/top_side = 0 +10:1/0/terrains_peering_bit/top_right_corner = 0 +12:1/0 = 0 +12:1/0/terrain_set = 0 +12:1/0/terrain = 0 +12:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(0, -16, 0, 0, 16, 0, 16, 16, -16, 16, -16, -16) +12:1/0/terrains_peering_bit/right_side = 0 +12:1/0/terrains_peering_bit/bottom_side = 0 +12:1/0/terrains_peering_bit/top_side = 0 +12:1/0/terrains_peering_bit/top_right_corner = 0 +13:1/0 = 0 +13:1/0/terrain_set = 0 +13:1/0/terrain = 0 +13:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(0, -16, 16, -16, 16, 16, -16, 16, -16, 0, 0, 0) +13:1/0/terrains_peering_bit/bottom_side = 0 +13:1/0/terrains_peering_bit/left_side = 0 +13:1/0/terrains_peering_bit/top_left_corner = 0 +13:1/0/terrains_peering_bit/top_side = 0 +15:1/0 = 0 +15:1/0/terrain_set = 0 +15:1/0/terrain = 0 +15:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +15:1/0/terrains_peering_bit/right_side = 0 +15:1/0/terrains_peering_bit/bottom_side = 0 +15:1/0/terrains_peering_bit/bottom_left_corner = 0 +15:1/0/terrains_peering_bit/top_side = 0 +15:1/0/terrains_peering_bit/top_right_corner = 0 +16:1/0 = 0 +16:1/0/terrain_set = 0 +16:1/0/terrain = 0 +16:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +16:1/0/terrains_peering_bit/bottom_right_corner = 0 +16:1/0/terrains_peering_bit/bottom_side = 0 +16:1/0/terrains_peering_bit/left_side = 0 +16:1/0/terrains_peering_bit/top_left_corner = 0 +16:1/0/terrains_peering_bit/top_side = 0 +0:2/0 = 0 +0:2/0/terrain_set = 0 +0:2/0/terrain = 0 +0:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +0:2/0/terrains_peering_bit/right_side = 0 +0:2/0/terrains_peering_bit/top_side = 0 +0:2/0/terrains_peering_bit/top_right_corner = 0 +1:2/0 = 0 +1:2/0/terrain_set = 0 +1:2/0/terrain = 0 +1:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +1:2/0/terrains_peering_bit/right_side = 0 +1:2/0/terrains_peering_bit/left_side = 0 +1:2/0/terrains_peering_bit/top_left_corner = 0 +1:2/0/terrains_peering_bit/top_side = 0 +1:2/0/terrains_peering_bit/top_right_corner = 0 +2:2/0 = 0 +2:2/0/terrain_set = 0 +2:2/0/terrain = 0 +2:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +2:2/0/terrains_peering_bit/left_side = 0 +2:2/0/terrains_peering_bit/top_left_corner = 0 +2:2/0/terrains_peering_bit/top_side = 0 +4:2/0 = 0 +4:2/0/terrain_set = 0 +4:2/0/terrain = 0 +4:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +4:2/0/terrains_peering_bit/top_side = 0 +6:3/0 = 0 +6:3/0/terrain_set = 0 +6:3/0/terrain = 0 +6:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, -16, 16, -16, -16, 0, -16, 0, 0, 16, 0) +6:3/0/terrains_peering_bit/right_side = 0 +6:3/0/terrains_peering_bit/bottom_side = 0 +6:3/0/terrains_peering_bit/top_side = 0 +6:3/0/terrains_peering_bit/top_right_corner = 0 +7:3/0 = 0 +7:3/0/terrain_set = 0 +7:3/0/terrain = 0 +7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, 16, 16, 16, -16, 0, -16, 0, 0, -16, 0) +7:3/0/terrains_peering_bit/bottom_side = 0 +7:3/0/terrains_peering_bit/left_side = 0 +7:3/0/terrains_peering_bit/top_left_corner = 0 +7:3/0/terrains_peering_bit/top_side = 0 +9:3/0 = 0 +9:3/0/terrain_set = 0 +9:3/0/terrain = 0 +9:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, 0, 16, 0, 0, -16, 0) +9:3/0/terrains_peering_bit/bottom_side = 0 +9:3/0/terrains_peering_bit/bottom_left_corner = 0 +9:3/0/terrains_peering_bit/left_side = 0 +10:3/0 = 0 +10:3/0/terrain_set = 0 +10:3/0/terrain = 0 +10:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, -16, -16, -16, 16, 0, 16, 0, 0, 16, 0) +10:3/0/terrains_peering_bit/right_side = 0 +10:3/0/terrains_peering_bit/bottom_right_corner = 0 +10:3/0/terrains_peering_bit/bottom_side = 0 +12:3/0 = 0 +12:3/0/terrain_set = 0 +12:3/0/terrain = 0 +12:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, 16, 16, -16, 16, -16, -16) +12:3/0/terrains_peering_bit/right_side = 0 +12:3/0/terrains_peering_bit/bottom_side = 0 +12:3/0/terrains_peering_bit/top_side = 0 +13:3/0 = 0 +13:3/0/terrain_set = 0 +13:3/0/terrain = 0 +13:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, 16, 16, -16, 16, -16, -16) +13:3/0/terrains_peering_bit/right_side = 0 +13:3/0/terrains_peering_bit/bottom_side = 0 +13:3/0/terrains_peering_bit/left_side = 0 +15:3/0 = 0 +15:3/0/terrain_set = 0 +15:3/0/terrain = 0 +15:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, 16, 16, -16, 16, -16, -16) +15:3/0/terrains_peering_bit/right_side = 0 +15:3/0/terrains_peering_bit/bottom_side = 0 +16:3/0 = 0 +16:3/0/terrain_set = 0 +16:3/0/terrain = 0 +16:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, 16, 16, -16, 16, -16, -16) +16:3/0/terrains_peering_bit/bottom_side = 0 +16:3/0/terrains_peering_bit/left_side = 0 +0:4/0 = 0 +0:4/0/terrain_set = 0 +0:4/0/terrain = 0 +0:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, -16, -16, -16, 16, 16, 16) +0:4/0/terrains_peering_bit/right_side = 0 +1:4/0 = 0 +1:4/0/terrain_set = 0 +1:4/0/terrain = 0 +1:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +1:4/0/terrains_peering_bit/right_side = 0 +1:4/0/terrains_peering_bit/left_side = 0 +2:4/0 = 0 +2:4/0/terrain_set = 0 +2:4/0/terrain = 0 +2:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +2:4/0/terrains_peering_bit/left_side = 0 +4:4/0 = 0 +4:4/0/terrain_set = 0 +4:4/0/terrain = 0 +4:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +6:4/0 = 0 +6:4/0/terrain_set = 0 +6:4/0/terrain = 0 +6:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, -16, -16, -16, 16, 0, 16, 0, 0, 16, 0) +6:4/0/terrains_peering_bit/right_side = 0 +6:4/0/terrains_peering_bit/bottom_right_corner = 0 +6:4/0/terrains_peering_bit/bottom_side = 0 +6:4/0/terrains_peering_bit/top_side = 0 +7:4/0 = 0 +7:4/0/terrain_set = 0 +7:4/0/terrain = 0 +7:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, 0, 16, 0, 0, -16, 0) +7:4/0/terrains_peering_bit/bottom_side = 0 +7:4/0/terrains_peering_bit/bottom_left_corner = 0 +7:4/0/terrains_peering_bit/left_side = 0 +7:4/0/terrains_peering_bit/top_side = 0 +9:4/0 = 0 +9:4/0/terrain_set = 0 +9:4/0/terrain = 0 +9:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, 16, 16, 16, -16, 0, -16, 0, 0, -16, 0) +9:4/0/terrains_peering_bit/left_side = 0 +9:4/0/terrains_peering_bit/top_left_corner = 0 +9:4/0/terrains_peering_bit/top_side = 0 +10:4/0 = 0 +10:4/0/terrain_set = 0 +10:4/0/terrain = 0 +10:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, -16, 16, -16, -16, 0, -16, 0, 0, 16, 0) +10:4/0/terrains_peering_bit/right_side = 0 +10:4/0/terrains_peering_bit/top_side = 0 +10:4/0/terrains_peering_bit/top_right_corner = 0 +12:4/0 = 0 +12:4/0/terrain_set = 0 +12:4/0/terrain = 0 +12:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, 16, 16, -16, 16, -16, -16) +12:4/0/terrains_peering_bit/right_side = 0 +12:4/0/terrains_peering_bit/left_side = 0 +12:4/0/terrains_peering_bit/top_side = 0 +13:4/0 = 0 +13:4/0/terrain_set = 0 +13:4/0/terrain = 0 +13:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, 16, 16, -16, 16, -16, -16) +13:4/0/terrains_peering_bit/bottom_side = 0 +13:4/0/terrains_peering_bit/left_side = 0 +13:4/0/terrains_peering_bit/top_side = 0 +15:4/0 = 0 +15:4/0/terrain_set = 0 +15:4/0/terrain = 0 +15:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, 16, 16, -16, 16, -16, -16) +15:4/0/terrains_peering_bit/right_side = 0 +15:4/0/terrains_peering_bit/top_side = 0 +16:4/0 = 0 +16:4/0/terrain_set = 0 +16:4/0/terrain = 0 +16:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, 16, 16, -16, 16, -16, -16) +16:4/0/terrains_peering_bit/left_side = 0 +16:4/0/terrains_peering_bit/top_side = 0 + +[sub_resource type="TileSet" id="TileSet_vbomn"] +tile_size = Vector2i(32, 32) +physics_layer_0/collision_layer = 1 +terrain_set_0/mode = 0 +terrain_set_0/terrain_0/name = "Ground 0" +terrain_set_0/terrain_0/color = Color(0.5, 0.34375, 0.25, 1) +terrain_set_1/mode = 0 +terrain_set_1/terrain_0/name = "Sky" +terrain_set_1/terrain_0/color = Color(0, 0.701961, 0.917647, 1) +sources/0 = SubResource("TileSetAtlasSource_bdyqk") + +[sub_resource type="WorldBoundaryShape2D" id="WorldBoundaryShape2D_vdfbk"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_lbd3t"] +size = Vector2(20, 4.47115) + +[node name="Game" type="Node2D"] + +[node name="Background" type="Parallax2D" parent="."] +texture_filter = 1 +scroll_scale = Vector2(0.5, 1) +repeat_size = Vector2(320, 0) +repeat_times = 4 + +[node name="Sprite2D" type="Sprite2D" parent="Background"] +texture_filter = 1 +position = Vector2(160, 90) +texture = ExtResource("1_tnlsl") + +[node name="Sprite2D2" type="Sprite2D" parent="Background"] +texture_filter = 1 +position = Vector2(160, -128.25) +scale = Vector2(1, 51.5) +texture = ExtResource("2_6ci1w") + +[node name="Clouds" type="Parallax2D" parent="."] +scroll_scale = Vector2(0.1, 0.1) +repeat_size = Vector2(320, 0) +repeat_times = 4 + +[node name="Sprite2D" type="Sprite2D" parent="Clouds"] +texture_filter = 1 +position = Vector2(160, 90) +texture = ExtResource("3_uqjdf") + +[node name="Grass" type="Parallax2D" parent="."] +scroll_scale = Vector2(0.8, 0.8) +repeat_size = Vector2(320, 0) +repeat_times = 3 + +[node name="Sprite2D" type="Sprite2D" parent="Grass"] +texture_filter = 1 +position = Vector2(160, 90) +texture = ExtResource("4_71wd1") + +[node name="Midground" type="Parallax2D" parent="."] +repeat_size = Vector2(320, 0) +repeat_times = 4 + +[node name="Sprite2D" type="Sprite2D" parent="Midground"] +texture_filter = 1 +position = Vector2(160, 90) +texture = ExtResource("5_b0wjm") + +[node name="TileMapLayer" type="TileMapLayer" parent="."] +texture_filter = 1 +position = Vector2(918, 72) +tile_map_data = PackedByteArray("AADx/wMAAAACAAAAAADw/wMAAAABAAAAAADv/wMAAAABAAAAAADu/wMAAAABAAAAAADt/wMAAAABAAAAAADs/wMAAAABAAAAAADr/wMAAAABAAAAAADq/wMAAAABAAAAAADp/wMAAAABAAAAAADo/wMAAAABAAAAAADn/wMAAAABAAAAAADm/wMAAAABAAAAAADl/wMAAAABAAAAAADk/wMAAAABAAAAAADj/wMAAAAAAAAAAADj/wQAAAAAAAIAAADk/wQAAAABAAIAAADl/wQAAAABAAIAAADm/wQAAAABAAIAAADn/wQAAAABAAIAAADo/wQAAAABAAIAAADp/wQAAAABAAIAAADq/wQAAAABAAIAAADr/wQAAAABAAIAAADs/wQAAAABAAIAAADt/wQAAAABAAIAAADu/wQAAAABAAIAAADv/wQAAAABAAIAAADw/wQAAAABAAIAAADx/wQAAAACAAIAAADs////AAAEAAQAAADq/wAAAAACAAQAAADp/wAAAAAAAAQAAADu//7/AAAAAAQAAADv//7/AAABAAQAAADw//7/AAABAAQAAADx//7/AAACAAQAAADn/wEAAAAEAAQAAADl////AAACAAQAAADk////AAAAAAQAAADi//3/AAAEAAQAAADz/wAAAAAEAAQAAADv/wEAAAAAAAQAAADw/wEAAAACAAQAAAA=") +tile_set = SubResource("TileSet_vbomn") + +[node name="SceneManager" type="Node" parent="."] +unique_name_in_owner = true +script = ExtResource("7_3s0ov") + +[node name="CharacterBody2D" parent="." instance=ExtResource("8_ctqq8")] +position = Vector2(139, 80) + +[node name="Box" parent="." groups=["shootable"] instance=ExtResource("9_b3256")] +position = Vector2(315, 140) + +[node name="Box2" parent="." groups=["shootable"] instance=ExtResource("9_b3256")] +position = Vector2(60, -18) + +[node name="Box3" parent="." groups=["shootable"] instance=ExtResource("9_b3256")] +position = Vector2(98, 142) + +[node name="StaticBody2D" type="StaticBody2D" parent="."] +position = Vector2(142, 181) +metadata/_edit_group_ = true + +[node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D"] +shape = SubResource("WorldBoundaryShape2D_vdfbk") + +[node name="Area2D" type="Area2D" parent="."] +position = Vector2(232, 291) +scale = Vector2(24.2, 4.16) +script = ExtResource("10_c8glf") +metadata/_edit_group_ = true + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] +position = Vector2(0, -7.76443) +shape = SubResource("RectangleShape2D_lbd3t") +debug_color = Color(0.31865, 0.625237, 0, 0.42) + +[node name="Coins" type="Node" parent="."] + +[node name="Coin" parent="Coins" instance=ExtResource("11_0vqln")] +position = Vector2(54, 26) +metadata/_edit_group_ = true + +[node name="Coin3" parent="Coins" instance=ExtResource("11_0vqln")] +position = Vector2(-29, -40) +metadata/_edit_group_ = true + +[node name="Coin4" parent="Coins" instance=ExtResource("11_0vqln")] +position = Vector2(437, -7) +metadata/_edit_group_ = true + +[node name="Coin7" parent="Coins" instance=ExtResource("11_0vqln")] +position = Vector2(377, -6) +metadata/_edit_group_ = true + +[node name="Coin6" parent="Coins" instance=ExtResource("11_0vqln")] +position = Vector2(421, 93) +metadata/_edit_group_ = true + +[node name="Coin5" parent="Coins" instance=ExtResource("11_0vqln")] +position = Vector2(212, 60) +metadata/_edit_group_ = true + +[node name="Coin2" parent="Coins" instance=ExtResource("11_0vqln")] +position = Vector2(517, 59) +metadata/_edit_group_ = true + +[node name="BadGuys" type="Node" parent="."] + +[node name="BadGuy" parent="BadGuys" instance=ExtResource("12_hwoa7")] +position = Vector2(390, 91) +metadata/_edit_group_ = true + +[node name="BadGuy2" parent="BadGuys" instance=ExtResource("12_hwoa7")] +position = Vector2(40, 23) +metadata/_edit_group_ = true + +[node name="CanvasLayer" type="CanvasLayer" parent="."] + +[node name="Control" parent="CanvasLayer" instance=ExtResource("13_7qh3f")] + +[connection signal="body_entered" from="Area2D" to="Area2D" method="_on_body_entered"] diff --git a/fabigame/scenes/ui.tscn b/fabigame/scenes/ui.tscn new file mode 100644 index 0000000..cbeda5a --- /dev/null +++ b/fabigame/scenes/ui.tscn @@ -0,0 +1,50 @@ +[gd_scene load_steps=2 format=3 uid="uid://bj4sdxqrlfr02"] + +[ext_resource type="Script" path="res://scripts/ui.gd" id="1_xocjg"] + +[node name="Control" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_xocjg") + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +layout_mode = 1 +anchors_preset = 10 +anchor_right = 1.0 +grow_horizontal = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"] +layout_mode = 2 + +[node name="MarginContainer" type="MarginContainer" parent="VBoxContainer/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="Health" type="Label" parent="VBoxContainer/HBoxContainer/MarginContainer"] +texture_filter = 1 +layout_mode = 2 +text = "Health: 100" + +[node name="MarginContainer3" type="MarginContainer" parent="VBoxContainer/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="Timer" type="Label" parent="VBoxContainer/HBoxContainer/MarginContainer3"] +texture_filter = 1 +layout_mode = 2 +text = "Timer: " +horizontal_alignment = 1 + +[node name="MarginContainer2" type="MarginContainer" parent="VBoxContainer/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="Coins" type="Label" parent="VBoxContainer/HBoxContainer/MarginContainer2"] +texture_filter = 1 +layout_mode = 2 +text = "Coins: 0" +horizontal_alignment = 2 diff --git a/fabigame/scripts/dudecontroller.gd b/fabigame/scripts/dudecontroller.gd index 06917d6..73a1a85 100644 --- a/fabigame/scripts/dudecontroller.gd +++ b/fabigame/scripts/dudecontroller.gd @@ -9,6 +9,8 @@ const PUSHFORCE = 750 @onready var right_ray: RayCast2D = $RightRay @onready var left_ray: RayCast2D = $LeftRay @onready var playerSprite: AnimatedSprite2D = $AnimatedSprite2D +@onready var key: Sprite2D = $Key + var faceLeft = false @@ -25,8 +27,10 @@ signal playerDead @onready var right_target: Node2D = $RightTarget @onready var left_target: Node2D = $LeftTarget +func _ready() -> void: + keyDrop() + func hurtPlayer(amt): - print("Character knows it should be hurt") animPlaying = "hurt" playerSprite.play("Hurt") @@ -36,6 +40,10 @@ func killPlayer(): print("MORRIDO") animPlaying = "dead" playerSprite.play("Dead") + +func keyCollected(): + print("Player knows key") + key.visible = true func _physics_process(delta: float) -> void: if living and not animPlaying =="hurt": @@ -96,24 +104,20 @@ func _physics_process(delta: float) -> void: move_and_slide() if right_ray.is_colliding(): - print("Something is on my right") if not faceLeft: var collider = right_ray.get_collider() if collider is Node: if collider.is_in_group("box"): - print("This is a pushable box") pushTarget = collider pushRightEnabled = true else: pushRightEnabled = false if left_ray.is_colliding(): - print("Something is on my left") if faceLeft: var collider = left_ray.get_collider() if collider is Node: if collider.is_in_group("box"): - print("I can shove this box") pushTarget = collider pushLefEnabled = true else: diff --git a/fabigame/scripts/game_controller.gd b/fabigame/scripts/game_controller.gd index 3cb1707..d536448 100644 --- a/fabigame/scripts/game_controller.gd +++ b/fabigame/scripts/game_controller.gd @@ -2,22 +2,50 @@ extends Node var coinsCollected:int = 0 var player:Resource +var totalCoinsLevel: = 0 +var levels = ["res://scenes/game.tscn","res://scenes/game_level2.tscn"] +var timers = [5, 10] +var currentLevel = 0 + +var gameSeconds = 0 + +var gotKey = false signal playerHurt() signal playerDeath() +signal coinsUpdate(amt, total) +signal levelComplete(level) +signal tick(seconds) +signal playerOptions(key) # Called when the node enters the scene tree for the first time. func _ready() -> void: player = load("res://scripts/res/dudestats.tres") +func setTotalCoins(amt): + totalCoinsLevel = amt + coinsUpdate.emit(coinsCollected, totalCoinsLevel) # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: pass +func keyCollected(): + print("GameController knows player has key") + func coinCollected(): coinsCollected +=1 print("Total coins collected "+str(coinsCollected) ) + coinsUpdate.emit(coinsCollected, totalCoinsLevel) + #did you complete the level? + if coinsCollected >= totalCoinsLevel: + #level complete + currentLevel +=1 + if currentLevel < levels.size(): + levelComplete.emit(levels[currentLevel]) + else: + currentLevel = 0 + levelComplete.emit(levels[currentLevel]) func playerDamage(): if player.health > 0: @@ -27,8 +55,18 @@ func playerDamage(): playerDeath.emit() else: ##damage him - playerHurt.emit(20) + playerHurt.emit(player.health) func reset(): + gameSeconds = 0 player.health = player.max_health coinsCollected = 0 +func timeOut(): + gameSeconds +=1 + if gameSeconds >= timers[currentLevel]: + playerDeath.emit() + tick.emit(timers[currentLevel] - gameSeconds) + +func sendOptions(): + playerOptions.emit(gotKey) + diff --git a/fabigame/scripts/scene_manager.gd b/fabigame/scripts/scene_manager.gd index 350bd0d..1cc63c9 100644 --- a/fabigame/scripts/scene_manager.gd +++ b/fabigame/scripts/scene_manager.gd @@ -3,31 +3,55 @@ extends Node var bulletsFiredTotal := 0 var bulletsMadeTotal := 0 var bulletArray:Array = [] +var timer:= Timer.new() + @onready var coins: Node = $"../Coins" @onready var bad_guys: Node = $"../BadGuys" @onready var player: CharacterBody2D = $"../CharacterBody2D" - +@onready var ui: Control = $"../CanvasLayer/Control" +@onready var key_trigger: Area2D = $"../KeyTrigger" var bullet = preload("res://scenes/bullet.tscn") func _ready() -> void: + add_child(timer) + timer.wait_time = 1 + timer.one_shot = false + timer.connect("timeout", GameController.timeOut) + timer.start() + + + var totalCoins = 0 + var totalEnemies = 0 ### coins loop for n in coins.get_children(): - print("coin found") + totalCoins +=1 n.coinCollected.connect(GameController.coinCollected) ### enemies loop for n in bad_guys.get_children(): - print("enemy found") + totalEnemies +=1 n.playerDamage.connect(GameController.playerDamage) - + ### wire up GameController signals to Player GameController.playerHurt.connect(hurtPlayer) + GameController.playerHurt.connect(ui.healthUpdate) GameController.playerDeath.connect(killPlayer) + GameController.levelComplete.connect(changeLevel) + GameController.tick.connect(ui.timerUpdate) + GameController.playerOptions.connect(showKey) - player.playerDead.connect(deadPlayer) - + key_trigger.keyCollect.connect(GameController.keyCollected) + key_trigger.keyCollect.connect(player.keyCollected) + + player.playerDead.connect(deadPlayer) + + GameController.coinsUpdate.connect(ui.coinsUpdate) + + GameController.setTotalCoins(totalCoins) + + GameController.sendOptions() func bulletFactory(): print("Make a bullet at the factory") @@ -57,8 +81,18 @@ func hurtPlayer(amt): func killPlayer(): player.killPlayer() - + func deadPlayer(): GameController.reset() get_tree().reload_current_scene() +func showKey(key): + if key == true: + player.keyCollected() + else: + player.keyDrop() + +func changeLevel(level): + print("Scene manager should change level") + GameController.reset() + get_tree().change_scene_to_file(level) diff --git a/fabigame/scripts/trigger_key.gd b/fabigame/scripts/trigger_key.gd new file mode 100644 index 0000000..2489e87 --- /dev/null +++ b/fabigame/scripts/trigger_key.gd @@ -0,0 +1,20 @@ +extends Area2D + +signal keyCollect + + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + pass # Replace with function body. + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta: float) -> void: + pass + + +func _on_body_entered(body: Node2D) -> void: + print("Triggered!") + if body.is_in_group("player"): + print("player entered area") + keyCollect.emit() diff --git a/fabigame/scripts/ui.gd b/fabigame/scripts/ui.gd new file mode 100644 index 0000000..a21ef4d --- /dev/null +++ b/fabigame/scripts/ui.gd @@ -0,0 +1,20 @@ +extends Control +@onready var health: Label = $VBoxContainer/HBoxContainer/MarginContainer/Health +@onready var coins: Label = $VBoxContainer/HBoxContainer/MarginContainer2/Coins +@onready var timer: Label = $VBoxContainer/HBoxContainer/MarginContainer3/Timer + +var tempCoinCount +var tempCoinTotal + +func timerUpdate(amt): + timer.text = str(timer) + " s" +func healthUpdate(amt): + health.text=("Health: "+str(amt) ) +func coinsUpdate(amt, total): + tempCoinCount = amt + tempCoinTotal = total + if coins: + coins.text = ("Coins: "+str(amt)+" / "+str(total) ) + +func _ready() -> void: + coins.text="Coins: "+str(tempCoinCount)+" / "+str(tempCoinTotal)