From c4af95fa6b8cfff0d525b3d2d7a06cb6c6c1cd4e Mon Sep 17 00:00:00 2001 From: OddlyTimbot Date: Mon, 23 Dec 2024 21:27:45 -0500 Subject: [PATCH] multi levels, timer, health, coins --- .../assets/graphics/pickups/Toy-gun.jpg | Bin 0 -> 36611 bytes .../graphics/pickups/Toy-gun.jpg.import | 34 ++ novembergame/scenes/character.tscn | 13 +- novembergame/scenes/game.tscn | 17 +- novembergame/scenes/game_level2.tscn | 475 ++++++++++++++++++ novembergame/scenes/ui.tscn | 44 ++ novembergame/scripts/dudecontroller.gd | 11 +- novembergame/scripts/game_controller.gd | 44 +- novembergame/scripts/scene_manager.gd | 46 +- novembergame/scripts/trigger.gd | 12 +- novembergame/scripts/ui.gd | 19 + 11 files changed, 687 insertions(+), 28 deletions(-) create mode 100644 novembergame/assets/graphics/pickups/Toy-gun.jpg create mode 100644 novembergame/assets/graphics/pickups/Toy-gun.jpg.import create mode 100644 novembergame/scenes/game_level2.tscn create mode 100644 novembergame/scenes/ui.tscn create mode 100644 novembergame/scripts/ui.gd diff --git a/novembergame/assets/graphics/pickups/Toy-gun.jpg b/novembergame/assets/graphics/pickups/Toy-gun.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b9867c7c9d5f108ed3ab9ac3ce8fc6e5062e80fc GIT binary patch literal 36611 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 literal 0 HcmV?d00001 diff --git a/novembergame/assets/graphics/pickups/Toy-gun.jpg.import b/novembergame/assets/graphics/pickups/Toy-gun.jpg.import new file mode 100644 index 0000000..aaad546 --- /dev/null +++ b/novembergame/assets/graphics/pickups/Toy-gun.jpg.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c8v2hylsdn8bd" +path="res://.godot/imported/Toy-gun.jpg-e9336d368085e0ef705756a6f3a625b7.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/pickups/Toy-gun.jpg" +dest_files=["res://.godot/imported/Toy-gun.jpg-e9336d368085e0ef705756a6f3a625b7.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/novembergame/scenes/character.tscn b/novembergame/scenes/character.tscn index eb16fd5..67b4be2 100644 --- a/novembergame/scenes/character.tscn +++ b/novembergame/scenes/character.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=44 format=3 uid="uid://cjqhmd3158nb7"] +[gd_scene load_steps=45 format=3 uid="uid://cjqhmd3158nb7"] [ext_resource type="Script" path="res://scripts/dudecontroller.gd" id="1_u27sl"] [ext_resource type="Texture2D" uid="uid://1h4aupwklktd" path="res://assets/graphics/player/death/Player Death 64x64.png" id="2_puyd6"] @@ -6,6 +6,7 @@ [ext_resource type="Texture2D" uid="uid://chrp31s6hw6fp" path="res://assets/graphics/player/hurt/Player Hurt 48x48.png" id="2_t63lx"] [ext_resource type="Texture2D" uid="uid://b82ecqnclroum" path="res://assets/graphics/player/jump/player jump 48x48.png" id="3_5pc3d"] [ext_resource type="Texture2D" uid="uid://bddwju2m8xvbj" path="res://assets/graphics/player/run/player run 48x48.png" id="3_pvg6g"] +[ext_resource type="Texture2D" uid="uid://c8v2hylsdn8bd" path="res://assets/graphics/pickups/Toy-gun.jpg" id="7_mx582"] [sub_resource type="CircleShape2D" id="CircleShape2D_pg3nc"] radius = 18.1108 @@ -285,7 +286,6 @@ animations = [{ [node name="CharacterBody2D" type="CharacterBody2D" groups=["player"]] script = ExtResource("1_u27sl") -metadata/_edit_group_ = true [node name="CollisionShape2D" type="CollisionShape2D" parent="."] position = Vector2(0, 2) @@ -308,13 +308,16 @@ position = Vector2(-18, -5) [node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] texture_filter = 1 sprite_frames = SubResource("SpriteFrames_p5ykk") -animation = &"death" +animation = &"idle" autoplay = "run" -frame = 9 -frame_progress = 1.0 [node name="Camera2D" type="Camera2D" parent="."] position = Vector2(-1, 0) offset = Vector2(0, -40) +[node name="Gun" type="Sprite2D" parent="."] +position = Vector2(22, 1) +scale = Vector2(0.016357, 0.0194301) +texture = ExtResource("7_mx582") + [connection signal="animation_finished" from="AnimatedSprite2D" to="." method="_on_animation_finished"] diff --git a/novembergame/scenes/game.tscn b/novembergame/scenes/game.tscn index 3f9da3e..d023fc6 100644 --- a/novembergame/scenes/game.tscn +++ b/novembergame/scenes/game.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=16 format=4 uid="uid://cmh68gsfunmwa"] +[gd_scene load_steps=17 format=4 uid="uid://cmh68gsfunmwa"] [ext_resource type="Texture2D" uid="uid://vwe7rit3r0ho" path="res://assets/graphics/environment/background/forestbackground.png" id="1_6g8gi"] [ext_resource type="Texture2D" uid="uid://bvbxh8nxgekny" path="res://assets/graphics/environment/terrain/Terrain (32x32).png" id="1_n0y6d"] @@ -10,6 +10,7 @@ [ext_resource type="PackedScene" uid="uid://dm71h7adhhf8u" path="res://scenes/box.tscn" id="3_pi0u1"] [ext_resource type="PackedScene" uid="uid://0e20afji7t11" path="res://scenes/coin.tscn" id="9_6tlsy"] [ext_resource type="PackedScene" uid="uid://do41rhebtm7vw" path="res://scenes/badguy.tscn" id="10_rpj3s"] +[ext_resource type="PackedScene" uid="uid://ccepucdoyfi3d" path="res://scenes/ui.tscn" id="11_rtn2l"] [sub_resource type="TileMapPattern" id="TileMapPattern_mkieg"] tile_data = PackedInt32Array(0, 262144, 0, 65536, 262144, 1, 131072, 262144, 1, 196608, 262144, 2) @@ -416,13 +417,13 @@ script = ExtResource("1_obwxw") [node name="CharacterBody2D" parent="." instance=ExtResource("1_p32ky")] position = Vector2(161, 92) -[node name="Area2D" type="Area2D" parent="."] -position = Vector2(519, 464) -scale = Vector2(10.92, 1) +[node name="GunTrigger" type="Area2D" parent="."] +position = Vector2(351, -12) +scale = Vector2(2.56, 1) script = ExtResource("2_tsnf5") metadata/_edit_group_ = true -[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] +[node name="CollisionShape2D" type="CollisionShape2D" parent="GunTrigger"] shape = SubResource("RectangleShape2D_supj4") debug_color = Color(0.793021, 0.25626, 0.844091, 0.42) @@ -460,4 +461,8 @@ position = Vector2(422, 58) position = Vector2(386, 51) 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("11_rtn2l")] + +[connection signal="body_entered" from="GunTrigger" to="GunTrigger" method="_on_body_entered"] diff --git a/novembergame/scenes/game_level2.tscn b/novembergame/scenes/game_level2.tscn new file mode 100644 index 0000000..79845f4 --- /dev/null +++ b/novembergame/scenes/game_level2.tscn @@ -0,0 +1,475 @@ +[gd_scene load_steps=17 format=4 uid="uid://brobnglfmxk70"] + +[ext_resource type="Texture2D" uid="uid://vwe7rit3r0ho" path="res://assets/graphics/environment/background/forestbackground.png" id="1_r2qtu"] +[ext_resource type="Texture2D" uid="uid://cvdu6wo2vq2ka" path="res://assets/graphics/environment/background/stratosphere.png" id="2_r2om4"] +[ext_resource type="Texture2D" uid="uid://ceoscwflxdsej" path="res://assets/graphics/environment/background/midground.png" id="3_p46t2"] +[ext_resource type="Texture2D" uid="uid://bvbxh8nxgekny" path="res://assets/graphics/environment/terrain/Terrain (32x32).png" id="4_yoprk"] +[ext_resource type="Script" path="res://scripts/scene_manager.gd" id="5_x4qhp"] +[ext_resource type="PackedScene" uid="uid://cjqhmd3158nb7" path="res://scenes/character.tscn" id="6_fn0pc"] +[ext_resource type="Script" path="res://scripts/trigger.gd" id="7_sy3hv"] +[ext_resource type="PackedScene" uid="uid://dm71h7adhhf8u" path="res://scenes/box.tscn" id="8_sia32"] +[ext_resource type="PackedScene" uid="uid://0e20afji7t11" path="res://scenes/coin.tscn" id="9_c3eax"] +[ext_resource type="PackedScene" uid="uid://do41rhebtm7vw" path="res://scenes/badguy.tscn" id="10_iodg5"] +[ext_resource type="PackedScene" uid="uid://ccepucdoyfi3d" path="res://scenes/ui.tscn" id="11_ufug8"] + +[sub_resource type="TileMapPattern" id="TileMapPattern_mkieg"] +tile_data = PackedInt32Array(0, 262144, 0, 65536, 262144, 1, 131072, 262144, 1, 196608, 262144, 2) + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_ih8kf"] +texture = ExtResource("4_yoprk") +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/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/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/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/terrains_peering_bit/right_side = 0 +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/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/terrains_peering_bit/bottom_side = 0 +13:0/0/terrains_peering_bit/bottom_left_corner = 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/terrains_peering_bit/right_side = 0 +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/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/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/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/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/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/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/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/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/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/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, 0, -16, 0, 16, -16, 16) +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(2.75, -16, 16, -16, 16, 16, 3, 16) +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, -0.25, -16, -0.5) +9:3/0/terrains_peering_bit/right_side = 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, -0.25, -16, -0.5) +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 +10:3/0/terrains_peering_bit/left_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, -0.25, -16, -0.25, 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, -0.5, -16, -0.75) +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, 1.25, -16, 1.25, 16, -16, 16) +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(2.75, -16, 16, -16, 16, 16, 3, 16) +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, 1.5, 16, 1.25, 16, 16, -16, 16) +9:4/0/terrains_peering_bit/right_side = 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, 1.5, 16, 1.25, 16, 16, -16, 16) +10:4/0/terrains_peering_bit/right_side = 0 +10:4/0/terrains_peering_bit/left_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, 1.5, 16, 1.25, 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(1.75, -16, 16, -16, 16, 16, -16, 16, -16, 1, 1.25, 0.5) +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_wyq3g"] +tile_size = Vector2i(32, 32) +physics_layer_0/collision_layer = 1 +terrain_set_0/mode = 0 +terrain_set_0/terrain_0/name = "Ground" +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.348943, 0.362533, 0.56576, 1) +sources/0 = SubResource("TileSetAtlasSource_ih8kf") +pattern_0 = SubResource("TileMapPattern_mkieg") + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_supj4"] + +[sub_resource type="WorldBoundaryShape2D" id="WorldBoundaryShape2D_c5gsu"] + +[node name="Game" type="Node2D"] + +[node name="Background" type="Parallax2D" parent="."] +scroll_scale = Vector2(0.5, 1) +repeat_size = Vector2(320, 0) + +[node name="forest" type="Sprite2D" parent="Background"] +texture_filter = 1 +position = Vector2(160, 90) +texture = ExtResource("1_r2qtu") + +[node name="Sprite2D" type="Sprite2D" parent="Background"] +position = Vector2(160, -182) +scale = Vector2(1, 13.1333) +texture = ExtResource("2_r2om4") + +[node name="Midground" type="Parallax2D" parent="."] +repeat_size = Vector2(320, 0) + +[node name="Sprite2D" type="Sprite2D" parent="Midground"] +texture_filter = 1 +position = Vector2(160, 90) +texture = ExtResource("3_p46t2") + +[node name="TileMapLayer" type="TileMapLayer" parent="."] +tile_map_data = PackedByteArray("AAAAAAUAAAAAAAQAAAABAAUAAAABAAQAAAACAAUAAAABAAQAAAADAAUAAAABAAQAAAAEAAUAAAABAAQAAAAFAAUAAAABAAQAAAAGAAUAAAABAAQAAAAHAAUAAAABAAQAAAAIAAUAAAABAAQAAAAJAAUAAAABAAQAAAAKAAUAAAABAAQAAAALAAUAAAABAAQAAAAMAAUAAAABAAQAAAANAAUAAAABAAQAAAAOAAUAAAABAAQAAAAPAAUAAAABAAQAAAAQAAUAAAABAAQAAAARAAUAAAABAAQAAAASAAUAAAABAAQAAAATAAUAAAABAAQAAAAUAAUAAAABAAQAAAAVAAUAAAACAAQAAAAGAAMAAAAEAAQAAAAIAAIAAAAEAAQAAAAMAAIAAAAAAAAAAAANAAIAAAABAAAAAAAOAAIAAAAHAAQAAAAOAAMAAAACAAIAAAANAAMAAAABAAIAAAAMAAMAAAAAAAIAAAAKAAAAAAAAAAQAAAALAAAAAAACAAQAAAAOAP7/AAAEAAQAAAAOAAEAAAAEAAAAAAAFAAAAAAAAAAQAAAAGAAAAAAACAAQAAAA=") +tile_set = SubResource("TileSet_wyq3g") + +[node name="SceneManager" type="Node" parent="."] +unique_name_in_owner = true +script = ExtResource("5_x4qhp") + +[node name="CharacterBody2D" parent="." instance=ExtResource("6_fn0pc")] +position = Vector2(161, 92) + +[node name="Area2D" type="Area2D" parent="."] +position = Vector2(519, 464) +scale = Vector2(10.92, 1) +script = ExtResource("7_sy3hv") +metadata/_edit_group_ = true + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] +shape = SubResource("RectangleShape2D_supj4") +debug_color = Color(0.793021, 0.25626, 0.844091, 0.42) + +[node name="RigidBody2D" parent="." instance=ExtResource("8_sia32")] +position = Vector2(344, -26) + +[node name="RigidBody2D2" parent="." instance=ExtResource("8_sia32")] +position = Vector2(97, 119) + +[node name="RigidBody2D3" parent="." instance=ExtResource("8_sia32")] +position = Vector2(237, 85) +rotation = 1.16823 + +[node name="StaticBody2D" type="StaticBody2D" parent="."] +position = Vector2(486, 164) +metadata/_edit_group_ = true + +[node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D"] +shape = SubResource("WorldBoundaryShape2D_c5gsu") + +[node name="coins" type="Node" parent="."] + +[node name="Coin" parent="coins" instance=ExtResource("9_c3eax")] +position = Vector2(208, 90) + +[node name="Coin2" parent="coins" instance=ExtResource("9_c3eax")] +position = Vector2(273, 58) + +[node name="Coin4" parent="coins" instance=ExtResource("9_c3eax")] +position = Vector2(345, -7) + +[node name="Coin3" parent="coins" instance=ExtResource("9_c3eax")] +position = Vector2(422, 58) + +[node name="enemies" type="Node" parent="."] + +[node name="Area2D2" parent="enemies" instance=ExtResource("10_iodg5")] +position = Vector2(386, 51) +metadata/_edit_group_ = true + +[node name="Area2D3" parent="enemies" instance=ExtResource("10_iodg5")] +position = Vector2(366, -12) +metadata/_edit_group_ = true + +[node name="CanvasLayer" type="CanvasLayer" parent="."] + +[node name="Control" parent="CanvasLayer" instance=ExtResource("11_ufug8")] + +[connection signal="body_entered" from="Area2D" to="Area2D" method="_on_body_entered"] diff --git a/novembergame/scenes/ui.tscn b/novembergame/scenes/ui.tscn new file mode 100644 index 0000000..0fe08e1 --- /dev/null +++ b/novembergame/scenes/ui.tscn @@ -0,0 +1,44 @@ +[gd_scene load_steps=2 format=3 uid="uid://ccepucdoyfi3d"] + +[ext_resource type="Script" path="res://scripts/ui.gd" id="1_qku42"] + +[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_qku42") + +[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"] +layout_mode = 2 +text = "Health : 100" + +[node name="MarginContainer3" type="MarginContainer" parent="VBoxContainer/HBoxContainer"] +layout_mode = 2 + +[node name="timer" type="Label" parent="VBoxContainer/HBoxContainer/MarginContainer3"] +layout_mode = 2 + +[node name="MarginContainer2" type="MarginContainer" parent="VBoxContainer/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="coins" type="Label" parent="VBoxContainer/HBoxContainer/MarginContainer2"] +layout_mode = 2 +text = "Coins : 0" +horizontal_alignment = 2 diff --git a/novembergame/scripts/dudecontroller.gd b/novembergame/scripts/dudecontroller.gd index 12b43df..ca83a40 100644 --- a/novembergame/scripts/dudecontroller.gd +++ b/novembergame/scripts/dudecontroller.gd @@ -9,6 +9,7 @@ const PUSHFORCE = 750 @onready var right_ray: RayCast2D = $RightRay @onready var left_ray: RayCast2D = $LeftRay @onready var playerSprite: AnimatedSprite2D = $AnimatedSprite2D +@onready var gun: Sprite2D = $Gun var faceLeft = false @@ -26,7 +27,6 @@ signal playerDead @onready var left_target: Node2D = $LeftTarget func hurtPlayer(amt): - print("Character knows it should be hurt") animPlaying = "hurt" playerSprite.play("hurt") @@ -35,6 +35,12 @@ func killPlayer(): living = false animPlaying = "death" playerSprite.play(animPlaying) +func gunCollected(): + print("Player knows to show gun") + gun.visible = true + +func gunDrop(): + gun.visible = false func _physics_process(delta: float) -> void: if living and not animPlaying =="hurt": @@ -50,7 +56,6 @@ func _physics_process(delta: float) -> void: # As good practice, you should replace UI actions with custom gameplay actions. var direction := Input.get_axis("ui_left", "ui_right") if Input.is_action_just_pressed("shove") && pushRightEnabled && faceLeft == false: - print("Shove a box") pushTarget.apply_central_impulse(Vector2(1,0) * PUSHFORCE * 2 ) pushRightEnabled = false @@ -59,7 +64,6 @@ func _physics_process(delta: float) -> void: pushLeftEnabled = false if Input.is_action_just_pressed("shoot"): - print("Shoot a bullet") var myBullet = %SceneManager.bulletFactory() if not faceLeft: myBullet.transform = right_target.global_transform @@ -96,7 +100,6 @@ 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: diff --git a/novembergame/scripts/game_controller.gd b/novembergame/scripts/game_controller.gd index 6c3e6b3..7e88336 100644 --- a/novembergame/scripts/game_controller.gd +++ b/novembergame/scripts/game_controller.gd @@ -2,22 +2,49 @@ 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, 30] +var currentLevel = 0 + +var gameSeconds = 0 + +var gotGun = false signal playerHurt(amt) signal playerDeath() +signal coinsUpdate(amt, total) +signal levelComplete(level) +signal tick(seconds) +signal playerOptions(gun) # Called when the node enters the scene tree for the first time. func _ready() -> void: player = load("res://scripts/res/playerstats.tres") - +func setTotalCoins(amt): + totalCoinsLevel = amt + print(str(coinsCollected)+" "+str(totalCoinsLevel) ) + coinsUpdate.emit(coinsCollected, totalCoinsLevel) # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: pass +func gunCollected(): + gotGun = true + 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 +54,19 @@ 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(gotGun) + diff --git a/novembergame/scripts/scene_manager.gd b/novembergame/scripts/scene_manager.gd index 5cb2ba2..fb3a808 100644 --- a/novembergame/scripts/scene_manager.gd +++ b/novembergame/scripts/scene_manager.gd @@ -3,29 +3,57 @@ extends Node var bulletsFiredTotal :=0 var bulletsMadeTotal :=0 var bulletArray:Array = [] +var timer:= Timer.new() + @onready var coins: Node = $"../coins" @onready var enemies: Node = $"../enemies" @onready var player: CharacterBody2D = $"../CharacterBody2D" +@onready var ui: Control = $"../CanvasLayer/Control" +@onready var gun_trigger: Area2D = $"../GunTrigger" 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 enemies.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(showGun) + + gun_trigger.gunCollect.connect(GameController.gunCollected) + gun_trigger.gunCollect.connect(player.gunCollected) player.playerDead.connect(deadPlayer) + + GameController.coinsUpdate.connect(ui.coinsUpdate) + + GameController.setTotalCoins(totalCoins) + + GameController.sendOptions() + func bulletFactory(): print("Make a bullet at the factory") var mybullet @@ -58,4 +86,16 @@ func killPlayer(): func deadPlayer(): GameController.reset() get_tree().reload_current_scene() + +func showGun(gun): + print("Show the gun? "+str(gun) ) + if gun: + player.gunCollected() + else: + player.gunDrop() +func changeLevel(level): + print("Scene Manager should change level") + GameController.reset() + get_tree().change_scene_to_file(level) + diff --git a/novembergame/scripts/trigger.gd b/novembergame/scripts/trigger.gd index ae6fdc5..57ef584 100644 --- a/novembergame/scripts/trigger.gd +++ b/novembergame/scripts/trigger.gd @@ -1,6 +1,6 @@ extends Area2D -var BoxCount = 0 -var MaxBoxes = 3 + +signal gunCollect # Called when the node enters the scene tree for the first time. func _ready() -> void: @@ -14,9 +14,7 @@ func _process(delta: float) -> void: func _on_body_entered(body: Node2D) -> void: print("Trigger saw a thing") - if body.is_in_group("box"): - print("box hit the trigger") - BoxCount +=1 - if BoxCount >= MaxBoxes: - print("YU WUN") + if body.is_in_group("player"): + print("player entered area") + gunCollect.emit() diff --git a/novembergame/scripts/ui.gd b/novembergame/scripts/ui.gd new file mode 100644 index 0000000..c16b923 --- /dev/null +++ b/novembergame/scripts/ui.gd @@ -0,0 +1,19 @@ +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 = 0 +var tempCoinTotal = 0 + +func timerUpdate(amt): + timer.text = "Seconds : "+str(amt) +func healthUpdate(amt): + health.text=("Health : "+str(amt) ) +func coinsUpdate(amt, total): + tempCoinCount = amt + tempCoinTotal = total + if coins: + coins.text = ("Coins : "+str(amt)+" of "+str(total) ) +func _ready() -> void: + coins.text = ("Coins : "+str(tempCoinCount)+" of "+str(tempCoinTotal) )