diff --git a/Assets/Enemy/Slime/slime_purple.png b/Assets/Enemy/Slime/slime_purple.png new file mode 100644 index 0000000..76f564e Binary files /dev/null and b/Assets/Enemy/Slime/slime_purple.png differ diff --git a/Assets/Enemy/Slime/slime_purple.png.import b/Assets/Enemy/Slime/slime_purple.png.import new file mode 100644 index 0000000..61f9b1a --- /dev/null +++ b/Assets/Enemy/Slime/slime_purple.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dm8y5y1wgcatm" +path="res://.godot/imported/slime_purple.png-05342f028a3ed4787f049c56662dff25.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Enemy/Slime/slime_purple.png" +dest_files=["res://.godot/imported/slime_purple.png-05342f028a3ed4787f049c56662dff25.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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/Assets/Environment/BG/foreground.png b/Assets/Environment/BG/foreground.png new file mode 100644 index 0000000..74c2746 Binary files /dev/null and b/Assets/Environment/BG/foreground.png differ diff --git a/Assets/Environment/BG/foreground.png.import b/Assets/Environment/BG/foreground.png.import new file mode 100644 index 0000000..9af6cf2 --- /dev/null +++ b/Assets/Environment/BG/foreground.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b73qg48wsqvai" +path="res://.godot/imported/foreground.png-d037a775d391d8a623162bf3c34b45fd.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Environment/BG/foreground.png" +dest_files=["res://.godot/imported/foreground.png-d037a775d391d8a623162bf3c34b45fd.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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/Assets/Environment/BG/midground.png b/Assets/Environment/BG/midground.png new file mode 100644 index 0000000..6202d01 Binary files /dev/null and b/Assets/Environment/BG/midground.png differ diff --git a/Assets/Environment/BG/midground.png.import b/Assets/Environment/BG/midground.png.import new file mode 100644 index 0000000..e7c057d --- /dev/null +++ b/Assets/Environment/BG/midground.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cg22tty2vuet8" +path="res://.godot/imported/midground.png-b73bfa7973b29ce70529610c0fcee36a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Environment/BG/midground.png" +dest_files=["res://.godot/imported/midground.png-b73bfa7973b29ce70529610c0fcee36a.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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/Assets/Environment/BG/sky.png b/Assets/Environment/BG/sky.png new file mode 100644 index 0000000..0be90ee Binary files /dev/null and b/Assets/Environment/BG/sky.png differ diff --git a/Assets/Environment/BG/sky.png.import b/Assets/Environment/BG/sky.png.import new file mode 100644 index 0000000..1ece2aa --- /dev/null +++ b/Assets/Environment/BG/sky.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dca0bekdpu84" +path="res://.godot/imported/sky.png-04be5dec4115e2a8c1565aa6453b467f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Environment/BG/sky.png" +dest_files=["res://.godot/imported/sky.png-04be5dec4115e2a8c1565aa6453b467f.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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/Assets/Environment/Veges/mushroom_32x64.png b/Assets/Environment/Veges/mushroom_32x64.png new file mode 100644 index 0000000..50ddf66 Binary files /dev/null and b/Assets/Environment/Veges/mushroom_32x64.png differ diff --git a/Assets/Environment/Veges/mushroom_32x64.png.import b/Assets/Environment/Veges/mushroom_32x64.png.import new file mode 100644 index 0000000..99fea3b --- /dev/null +++ b/Assets/Environment/Veges/mushroom_32x64.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dl14otm4thnq2" +path="res://.godot/imported/mushroom_32x64.png-e8c947fe836480d74eafa4339d8b25e2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Environment/Veges/mushroom_32x64.png" +dest_files=["res://.godot/imported/mushroom_32x64.png-e8c947fe836480d74eafa4339d8b25e2.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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/Assets/Environment/Veges/veg_32x32.png b/Assets/Environment/Veges/veg_32x32.png new file mode 100644 index 0000000..4e09fa9 Binary files /dev/null and b/Assets/Environment/Veges/veg_32x32.png differ diff --git a/Assets/Environment/Veges/veg_32x32.png.import b/Assets/Environment/Veges/veg_32x32.png.import new file mode 100644 index 0000000..ead4b98 --- /dev/null +++ b/Assets/Environment/Veges/veg_32x32.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c7bikbpg5swtd" +path="res://.godot/imported/veg_32x32.png-33598d1a116938a361ee88ef51853556.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Environment/Veges/veg_32x32.png" +dest_files=["res://.godot/imported/veg_32x32.png-33598d1a116938a361ee88ef51853556.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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/Assets/Pickups/coin.png b/Assets/Pickups/coin.png new file mode 100644 index 0000000..01ae33d Binary files /dev/null and b/Assets/Pickups/coin.png differ diff --git a/Assets/Pickups/coin.png.import b/Assets/Pickups/coin.png.import new file mode 100644 index 0000000..312d8cd --- /dev/null +++ b/Assets/Pickups/coin.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cwwd4so0n5pvj" +path="res://.godot/imported/coin.png-68afc91fbe73f1b68f19b37608cb950d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Pickups/coin.png" +dest_files=["res://.godot/imported/coin.png-68afc91fbe73f1b68f19b37608cb950d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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/Assets/Player/Dead/Player Death 64x64.png b/Assets/Player/Dead/Player Death 64x64.png new file mode 100644 index 0000000..2e6a1ae Binary files /dev/null and b/Assets/Player/Dead/Player Death 64x64.png differ diff --git a/Assets/Player/Dead/Player Death 64x64.png.import b/Assets/Player/Dead/Player Death 64x64.png.import new file mode 100644 index 0000000..ef5e812 --- /dev/null +++ b/Assets/Player/Dead/Player Death 64x64.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dv3636ow2ps4y" +path="res://.godot/imported/Player Death 64x64.png-1d0c7aaeaff12f048994ed26b4b99e61.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Player/Dead/Player Death 64x64.png" +dest_files=["res://.godot/imported/Player Death 64x64.png-1d0c7aaeaff12f048994ed26b4b99e61.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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/Assets/Player/Hurt/Player Hurt 48x48.png b/Assets/Player/Hurt/Player Hurt 48x48.png new file mode 100644 index 0000000..57d8783 Binary files /dev/null and b/Assets/Player/Hurt/Player Hurt 48x48.png differ diff --git a/Assets/Player/Hurt/Player Hurt 48x48.png.import b/Assets/Player/Hurt/Player Hurt 48x48.png.import new file mode 100644 index 0000000..a8de743 --- /dev/null +++ b/Assets/Player/Hurt/Player Hurt 48x48.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://4xlu4usnkkhq" +path="res://.godot/imported/Player Hurt 48x48.png-b7d8d4a9d50a3c32f0eed604c9bb8a60.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Player/Hurt/Player Hurt 48x48.png" +dest_files=["res://.godot/imported/Player Hurt 48x48.png-b7d8d4a9d50a3c32f0eed604c9bb8a60.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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/Scenes/bullet.tscn b/Scenes/bullet.tscn index 5180d12..e17be8c 100644 --- a/Scenes/bullet.tscn +++ b/Scenes/bullet.tscn @@ -20,3 +20,5 @@ position = Vector2(-2.9999998, -1.9999999) rotation = 3.1415927 scale = Vector2(0.08, 0.08) texture = ExtResource("2_oduel") + +[connection signal="area_entered" from="." to="." method="_on_body_entered"] diff --git a/Scenes/coin.gd b/Scenes/coin.gd new file mode 100644 index 0000000..af911f3 --- /dev/null +++ b/Scenes/coin.gd @@ -0,0 +1,7 @@ +class_name Coin extends Area2D +signal coinCollectedSignal(body,coin) + +func _on_body_entered(body: Node2D): + if body is Player: + print("player hit coin") + coinCollectedSignal.emit(body,self) diff --git a/Scenes/coin.gd.uid b/Scenes/coin.gd.uid new file mode 100644 index 0000000..f06afa7 --- /dev/null +++ b/Scenes/coin.gd.uid @@ -0,0 +1 @@ +uid://ckjfv5xy1he2u diff --git a/Scenes/coin.tscn b/Scenes/coin.tscn new file mode 100644 index 0000000..1c0a08b --- /dev/null +++ b/Scenes/coin.tscn @@ -0,0 +1,116 @@ +[gd_scene format=3 uid="uid://0d4qe2gqj0g7"] + +[ext_resource type="Script" uid="uid://ckjfv5xy1he2u" path="res://Scenes/coin.gd" id="1_2qo34"] +[ext_resource type="Texture2D" uid="uid://cwwd4so0n5pvj" path="res://Assets/Pickups/coin.png" id="2_jgi06"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_sgwqp"] +size = Vector2(10, 4) + +[sub_resource type="AtlasTexture" id="AtlasTexture_g537i"] +atlas = ExtResource("2_jgi06") +region = Rect2(0, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_h2p6v"] +atlas = ExtResource("2_jgi06") +region = Rect2(16, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ffmqm"] +atlas = ExtResource("2_jgi06") +region = Rect2(32, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_81h6x"] +atlas = ExtResource("2_jgi06") +region = Rect2(48, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_qbp07"] +atlas = ExtResource("2_jgi06") +region = Rect2(64, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_2l7mo"] +atlas = ExtResource("2_jgi06") +region = Rect2(80, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_q30xt"] +atlas = ExtResource("2_jgi06") +region = Rect2(96, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_7w2r2"] +atlas = ExtResource("2_jgi06") +region = Rect2(112, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_tthw5"] +atlas = ExtResource("2_jgi06") +region = Rect2(128, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_6pu15"] +atlas = ExtResource("2_jgi06") +region = Rect2(144, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_vgc30"] +atlas = ExtResource("2_jgi06") +region = Rect2(160, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_qtgto"] +atlas = ExtResource("2_jgi06") +region = Rect2(176, 0, 16, 16) + +[sub_resource type="SpriteFrames" id="SpriteFrames_oov8j"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_g537i") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_h2p6v") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ffmqm") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_81h6x") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_qbp07") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_2l7mo") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_q30xt") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_7w2r2") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_tthw5") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_6pu15") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_vgc30") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_qtgto") +}], +"loop": 1, +"name": &"coin_twirl", +"speed": 12.0 +}] + +[node name="coin" type="Area2D" unique_id=1463876970] +script = ExtResource("1_2qo34") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=282956551] +scale = Vector2(-1.0499984, 2.3999982) +shape = SubResource("RectangleShape2D_sgwqp") +debug_color = Color(0.9064841, 0.22817236, 0.5106338, 0.41960785) + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="." unique_id=1656877505] +texture_filter = 1 +scale = Vector2(1.0200001, 0.9375) +sprite_frames = SubResource("SpriteFrames_oov8j") +animation = &"coin_twirl" +autoplay = "coin_twirl" + +[connection signal="body_entered" from="." to="." method="_on_body_entered"] diff --git a/Scenes/game.tscn b/Scenes/game.tscn index 0458c6b..eb0710a 100644 --- a/Scenes/game.tscn +++ b/Scenes/game.tscn @@ -1,11 +1,17 @@ [gd_scene format=4 uid="uid://bportqr2j3d7s"] -[ext_resource type="Script" uid="uid://cvrssvw6p8myl" path="res://Scripts/game.gd" id="1_wrm1d"] [ext_resource type="Script" uid="uid://bfh1ec3bb5oki" path="res://Scripts/scene_manager.gd" id="2_3dryh"] +[ext_resource type="Texture2D" uid="uid://dca0bekdpu84" path="res://Assets/Environment/BG/sky.png" id="2_h4fw4"] [ext_resource type="Texture2D" uid="uid://fdttdiukun15" path="res://Assets/Environment/Terrain (32x32).png" id="2_i6g32"] [ext_resource type="PackedScene" uid="uid://dyb6tnhpivflf" path="res://Scenes/trigger.tscn" id="3_i6g32"] +[ext_resource type="Texture2D" uid="uid://cg22tty2vuet8" path="res://Assets/Environment/BG/midground.png" id="3_ldgsr"] +[ext_resource type="Texture2D" uid="uid://c7bikbpg5swtd" path="res://Assets/Environment/Veges/veg_32x32.png" id="3_v158k"] [ext_resource type="PackedScene" uid="uid://b5y6rb2t0eaqr" path="res://Scenes/crate.tscn" id="3_wowpa"] +[ext_resource type="Texture2D" uid="uid://dl14otm4thnq2" path="res://Assets/Environment/Veges/mushroom_32x64.png" id="4_h4fw4"] +[ext_resource type="Texture2D" uid="uid://b73qg48wsqvai" path="res://Assets/Environment/BG/foreground.png" id="4_o5yvi"] [ext_resource type="PackedScene" uid="uid://en40721f6qwj" path="res://Scenes/player.tscn" id="4_wowpa"] +[ext_resource type="PackedScene" uid="uid://0d4qe2gqj0g7" path="res://Scenes/coin.tscn" id="12_rku1e"] +[ext_resource type="PackedScene" uid="uid://cirhfajnm0tgv" path="res://Scenes/slime.tscn" id="13_rfjv2"] [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_1l0tm"] texture = ExtResource("2_i6g32") @@ -356,28 +362,79 @@ texture_region_size = Vector2i(32, 32) 16:4/0/terrains_peering_bit/left_side = 0 16:4/0/terrains_peering_bit/top_side = 0 +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_ldgsr"] +texture = ExtResource("3_v158k") +texture_region_size = Vector2i(32, 32) +0:0/0 = 0 +0:0/0/terrain_set = 0 +0:0/0/terrain = 1 + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_o5yvi"] +texture = ExtResource("4_h4fw4") +texture_region_size = Vector2i(32, 32) +0:0/0 = 0 +0:0/0/terrain_set = 0 +0:0/0/terrains_peering_bit/bottom_side = 1 +0:1/0 = 0 +0:1/0/terrain_set = 0 +0:1/0/terrain = 1 +0:1/0/terrains_peering_bit/top_side = 1 + [sub_resource type="TileSet" id="TileSet_v158k"] tile_size = Vector2i(32, 32) physics_layer_0/collision_layer = 1 terrain_set_0/mode = 0 terrain_set_0/terrain_0/name = "LeafyGreen" terrain_set_0/terrain_0/color = Color(0.5, 0.34375, 0.25, 1) +terrain_set_0/terrain_1/name = "Veg" +terrain_set_0/terrain_1/color = Color(0.5, 0.4375, 0.25, 1) sources/0 = SubResource("TileSetAtlasSource_1l0tm") +sources/1 = SubResource("TileSetAtlasSource_ldgsr") +sources/2 = SubResource("TileSetAtlasSource_o5yvi") [sub_resource type="RectangleShape2D" id="RectangleShape2D_2poj3"] [node name="Game" type="Node2D" unique_id=1651082265] -script = ExtResource("1_wrm1d") + +[node name="bg" type="Node2D" parent="." unique_id=511849296] + +[node name="sky" type="Parallax2D" parent="bg" unique_id=377970151] +repeat_size = Vector2(480, 270) + +[node name="Sprite2D" type="Sprite2D" parent="bg/sky" unique_id=41190636] +texture = ExtResource("2_h4fw4") +offset = Vector2(240, 135) + +[node name="midground" type="Parallax2D" parent="bg" unique_id=727091655] +texture_filter = 1 +scroll_scale = Vector2(1.05, 1) +repeat_size = Vector2(420, 0) + +[node name="Sprite2D" type="Sprite2D" parent="bg/midground" unique_id=348870820] +texture = ExtResource("3_ldgsr") +offset = Vector2(240, 200) + +[node name="foreground" type="Parallax2D" parent="bg" unique_id=1915745737] +texture_filter = 1 +scroll_scale = Vector2(1.5, 1) +repeat_size = Vector2(480, 0) + +[node name="Sprite2D" type="Sprite2D" parent="bg/foreground" unique_id=814408590] +texture = ExtResource("4_o5yvi") +offset = Vector2(240, 260) [node name="TileMapLayer" type="TileMapLayer" parent="." unique_id=1853393222] -tile_map_data = PackedByteArray("AAAOAA4AAAAPAAQAAAAPAA4AAAABAAQAAAAQAA4AAAABAAQAAAARAA4AAAABAAQAAAASAA4AAAAQAAQAAAANABEAAAABAAAAAAAOABEAAAABAAAAAAANABIAAAAHAAAAAAAOABIAAAAGAAAAAAAPABIAAAAGAAAAAAAPABEAAAABAAAAAAALAA8AAAACAAAAAAALABAAAAAGAAEAAAAMABAAAAACAAAAAAAQABEAAAACAAAAAAAQABIAAAAGAAEAAAARABIAAAACAAAAAAATABMAAAAEAAQAAAAVABIAAAAAAAAAAAAWABIAAAAHAAEAAAAWABEAAAAAAAAAAAAVAA4AAAAPAAQAAAAWAA4AAAAKAAQAAAAWAA0AAAAAAAAAAAAXAA0AAAAJAAMAAAAYAA0AAAAQAAQAAAAXAA4AAAACAAIAAAAXABEAAAABAAAAAAAXABIAAAAGAAAAAAAVABMAAAAAAAIAAAAWABMAAAABAAIAAAAXABMAAAABAAIAAAAYABMAAAACAAIAAAAYABIAAAACAAEAAAAYABEAAAAJAAMAAAAZABAAAAAAAAAAAAAaABAAAAAGAAAAAAAZABEAAAAKAAQAAAAaABEAAAACAAIAAAAaAA8AAAAAAAAAAAAbAA8AAAACAAAAAAAbABAAAAACAAIAAAARABMAAAACAAIAAAAQABMAAAABAAIAAAAPABMAAAABAAIAAAAOABMAAAABAAIAAAALABEAAAABAAIAAAAMABEAAAAQAAEAAAAMABIAAAAAAAIAAAANABMAAAAAAAIAAAAKABAAAAAHAAAAAAAKABEAAAAAAAIAAAAJABAAAAAAAAIAAAAKAA8AAAABAAAAAAAJAA8AAAAAAAAAAAA=") +texture_filter = 1 +position = Vector2(-191, -185) +tile_map_data = PackedByteArray("AAAOAA4AAAAPAAQAAAAPAA4AAAABAAQAAAAQAA4AAAABAAQAAAARAA4AAAABAAQAAAASAA4AAAAQAAQAAAANABEAAAABAAAAAAAOABEAAAABAAAAAAANABIAAAAHAAAAAAAOABIAAAAGAAAAAAAPABIAAAAGAAAAAAAPABEAAAABAAAAAAALAA8AAAACAAAAAAALABAAAAAGAAEAAAAMABAAAAACAAAAAAAQABEAAAACAAAAAAAQABIAAAAGAAEAAAARABIAAAACAAAAAAATABMAAAAEAAQAAAAVABIAAAAAAAAAAAAWABIAAAAHAAEAAAAWABEAAAAAAAAAAAAVAA4AAAAPAAQAAAAWAA4AAAAKAAQAAAAWAA0AAAAAAAAAAAAXAA0AAAAJAAMAAAAYAA0AAAAQAAQAAAAXAA4AAAACAAIAAAAXABEAAAABAAAAAAAXABIAAAAGAAAAAAAVABMAAAAAAAIAAAAWABMAAAABAAIAAAAXABMAAAABAAIAAAAYABMAAAACAAIAAAAYABIAAAACAAEAAAAYABEAAAAJAAMAAAAZABAAAAAAAAAAAAAaABAAAAAGAAAAAAAZABEAAAAKAAQAAAAaABEAAAACAAIAAAAaAA8AAAAAAAAAAAAbAA8AAAACAAAAAAAbABAAAAACAAIAAAARABMAAAACAAIAAAAQABMAAAABAAIAAAAPABMAAAABAAIAAAAOABMAAAABAAIAAAALABEAAAABAAIAAAAMABEAAAAQAAEAAAAMABIAAAAAAAIAAAANABMAAAAAAAIAAAAKABAAAAAHAAAAAAAKABEAAAAAAAIAAAAJABAAAAAAAAIAAAAKAA8AAAABAAAAAAAJAA8AAAAAAAAAAAAYAAwAAQAAAAAAAAAPABAAAgAAAAEAAAAKAA4AAQAAAAAAAAAPAA8AAgAAAAAAAAATABIAAQAAAAAAAAA=") tile_set = SubResource("TileSet_v158k") [node name="SceneManager" type="Node2D" parent="." unique_id=1701867043] +position = Vector2(-191, -185) script = ExtResource("2_3dryh") [node name="Floor" type="StaticBody2D" parent="." unique_id=1930890804] -position = Vector2(510, 308) +position = Vector2(319, 123) scale = Vector2(3.880005, 1) metadata/_edit_group_ = true @@ -385,7 +442,7 @@ metadata/_edit_group_ = true shape = SubResource("RectangleShape2D_2poj3") [node name="Floor4" type="StaticBody2D" parent="." unique_id=41291254] -position = Vector2(630, 305) +position = Vector2(439, 120) scale = Vector2(3.880005, 1) metadata/_edit_group_ = true @@ -393,7 +450,7 @@ metadata/_edit_group_ = true shape = SubResource("RectangleShape2D_2poj3") [node name="Floor2" type="StaticBody2D" parent="." unique_id=1987202329] -position = Vector2(818.00006, 256) +position = Vector2(627.00006, 71) scale = Vector2(3.880005, 1) metadata/_edit_group_ = true @@ -401,7 +458,7 @@ metadata/_edit_group_ = true shape = SubResource("RectangleShape2D_2poj3") [node name="Floor3" type="StaticBody2D" parent="." unique_id=1726195228] -position = Vector2(753.99994, 279) +position = Vector2(562.99994, 94) rotation = -0.69889295 scale = Vector2(3.880005, 1) metadata/_edit_group_ = true @@ -410,12 +467,16 @@ metadata/_edit_group_ = true shape = SubResource("RectangleShape2D_2poj3") [node name="Trigger" parent="." unique_id=1055766094 instance=ExtResource("3_i6g32")] -position = Vector2(634, 534) +position = Vector2(449, 311) [node name="Player" parent="." unique_id=478864706 instance=ExtResource("4_wowpa")] -position = Vector2(538.00006, 420) +position = Vector2(347.00006, 235) + +[node name="Camera2D" type="Camera2D" parent="Player" unique_id=1158692498] +offset = Vector2(0, -60) [node name="Crates" type="Node2D" parent="." unique_id=799685623] +position = Vector2(-191, -185) [node name="Crate" parent="Crates" unique_id=38246509 instance=ExtResource("3_wowpa")] position = Vector2(643, 387) @@ -424,6 +485,28 @@ position = Vector2(643, 387) position = Vector2(716, 382) [node name="Crate" parent="." unique_id=990352720 instance=ExtResource("3_wowpa")] -position = Vector2(585, 432) +position = Vector2(394, 247) + +[node name="Coins" type="Node2D" parent="." unique_id=218739547] + +[node name="coin" parent="Coins" unique_id=1463876970 instance=ExtResource("12_rku1e")] +position = Vector2(284, 257) + +[node name="coin2" parent="Coins" unique_id=572764533 instance=ExtResource("12_rku1e")] +position = Vector2(569, 219) + +[node name="coin3" parent="Coins" unique_id=947271598 instance=ExtResource("12_rku1e")] +position = Vector2(534, 350) + +[node name="Enemies" type="Node2D" parent="." unique_id=1647071497] + +[node name="slime" parent="Enemies" unique_id=469808451 instance=ExtResource("13_rfjv2")] +position = Vector2(304, 250) + +[node name="slime2" parent="Enemies" unique_id=1262992036 instance=ExtResource("13_rfjv2")] +position = Vector2(551, 219) + +[node name="slime3" parent="Enemies" unique_id=1319056782 instance=ExtResource("13_rfjv2")] +position = Vector2(554, 348) [connection signal="areaTriggerSignal" from="Trigger" to="." method="_on_trigger"] diff --git a/Scenes/player.tscn b/Scenes/player.tscn index c75bafe..a1c2856 100644 --- a/Scenes/player.tscn +++ b/Scenes/player.tscn @@ -3,8 +3,10 @@ [ext_resource type="Script" uid="uid://cq2vf132xjtli" path="res://Scripts/player.gd" id="1_v0iea"] [ext_resource type="Texture2D" uid="uid://dr3u0hb58tj6x" path="res://Assets/Player/Idle/Player Idle 48x48.png" id="2_cvnsp"] [ext_resource type="Texture2D" uid="uid://edtnvpru6i3b" path="res://Assets/Player/Charging/Player Punch 64x64.png" id="2_fkybt"] +[ext_resource type="Texture2D" uid="uid://dv3636ow2ps4y" path="res://Assets/Player/Dead/Player Death 64x64.png" id="3_3smsa"] [ext_resource type="Texture2D" uid="uid://cl4as81xv56wq" path="res://Assets/Player/Run/player run 48x48.png" id="3_6t5aa"] [ext_resource type="Texture2D" uid="uid://itpuf1wcu10i" path="res://Assets/Player/Jump_Fall/player jump 48x48.png" id="3_vgqql"] +[ext_resource type="Texture2D" uid="uid://4xlu4usnkkhq" path="res://Assets/Player/Hurt/Player Hurt 48x48.png" id="5_8erm5"] [sub_resource type="CircleShape2D" id="CircleShape2D_ebmjs"] @@ -12,10 +14,66 @@ atlas = ExtResource("2_fkybt") region = Rect2(128, 0, 64, 64) +[sub_resource type="AtlasTexture" id="AtlasTexture_y6uwr"] +atlas = ExtResource("3_3smsa") +region = Rect2(0, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_83xs0"] +atlas = ExtResource("3_3smsa") +region = Rect2(48, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ypfnu"] +atlas = ExtResource("3_3smsa") +region = Rect2(96, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_xuaoq"] +atlas = ExtResource("3_3smsa") +region = Rect2(144, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_wohnl"] +atlas = ExtResource("3_3smsa") +region = Rect2(192, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_36dho"] +atlas = ExtResource("3_3smsa") +region = Rect2(240, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_yh6i2"] +atlas = ExtResource("3_3smsa") +region = Rect2(288, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_nv4vc"] +atlas = ExtResource("3_3smsa") +region = Rect2(336, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_8gxox"] +atlas = ExtResource("3_3smsa") +region = Rect2(384, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_11gg7"] +atlas = ExtResource("3_3smsa") +region = Rect2(432, 0, 48, 48) + [sub_resource type="AtlasTexture" id="AtlasTexture_bi64h"] atlas = ExtResource("3_vgqql") region = Rect2(96, 0, 48, 48) +[sub_resource type="AtlasTexture" id="AtlasTexture_qpa8y"] +atlas = ExtResource("5_8erm5") +region = Rect2(0, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_sbwqj"] +atlas = ExtResource("5_8erm5") +region = Rect2(48, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_xwi16"] +atlas = ExtResource("5_8erm5") +region = Rect2(96, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_sweqm"] +atlas = ExtResource("5_8erm5") +region = Rect2(144, 0, 48, 48) + [sub_resource type="AtlasTexture" id="AtlasTexture_6t5aa"] atlas = ExtResource("2_cvnsp") region = Rect2(0, 0, 48, 48) @@ -114,20 +172,72 @@ animations = [{ "duration": 1.0, "texture": SubResource("AtlasTexture_2ijsl") }], -"loop": false, +"loop": 0, "name": &"charging", "speed": 12.0 }, { "frames": [{ "duration": 1.0, +"texture": SubResource("AtlasTexture_y6uwr") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_83xs0") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ypfnu") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_xuaoq") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_wohnl") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_36dho") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_yh6i2") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_nv4vc") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_8gxox") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_11gg7") +}], +"loop": 0, +"name": &"dead", +"speed": 12.0 +}, { +"frames": [{ +"duration": 1.0, "texture": SubResource("AtlasTexture_bi64h") }], -"loop": false, +"loop": 0, "name": &"falling", "speed": 12.0 }, { "frames": [{ "duration": 1.0, +"texture": SubResource("AtlasTexture_qpa8y") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_sbwqj") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_xwi16") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_sweqm") +}], +"loop": 0, +"name": &"hurt", +"speed": 12.0 +}, { +"frames": [{ +"duration": 1.0, "texture": SubResource("AtlasTexture_6t5aa") }, { "duration": 1.0, @@ -157,7 +267,7 @@ animations = [{ "duration": 1.0, "texture": SubResource("AtlasTexture_pu2lt") }], -"loop": true, +"loop": 1, "name": &"idle", "speed": 12.0 }, { @@ -168,7 +278,7 @@ animations = [{ "duration": 1.0, "texture": SubResource("AtlasTexture_wpjfl") }], -"loop": false, +"loop": 0, "name": &"jumping", "speed": 12.0 }, { @@ -197,7 +307,7 @@ animations = [{ "duration": 1.0, "texture": SubResource("AtlasTexture_l6n3p") }], -"loop": true, +"loop": 1, "name": &"running", "speed": 12.0 }, { @@ -211,7 +321,7 @@ animations = [{ "duration": 1.0, "texture": SubResource("AtlasTexture_vfarp") }], -"loop": false, +"loop": 0, "name": &"shoving", "speed": 12.0 }] @@ -232,18 +342,16 @@ target_position = Vector2(17.073172, 0) target_position = Vector2(-17.073172, 0) [node name="RightSpawn" type="Marker2D" parent="." unique_id=1358832037] -position = Vector2(11.585366, -8.536586) +position = Vector2(11.585366, -1.5853653) [node name="LeftSpawn" type="Marker2D" parent="." unique_id=1880777693] -position = Vector2(-12.195123, -8.536585) +position = Vector2(-12.195123, -1.5853643) [node name="PlayerGraphic" type="AnimatedSprite2D" parent="." unique_id=411274624] texture_filter = 1 position = Vector2(0, -6.0975614) sprite_frames = SubResource("SpriteFrames_ukyrk") -animation = &"shoving" +animation = &"dead" autoplay = "idle" -frame = 2 -frame_progress = 1.0 [connection signal="animation_finished" from="PlayerGraphic" to="." method="_on_animation_finished"] diff --git a/Scenes/slime.tscn b/Scenes/slime.tscn new file mode 100644 index 0000000..5d31c9f --- /dev/null +++ b/Scenes/slime.tscn @@ -0,0 +1,74 @@ +[gd_scene format=3 uid="uid://cirhfajnm0tgv"] + +[ext_resource type="Texture2D" uid="uid://dm8y5y1wgcatm" path="res://Assets/Enemy/Slime/slime_purple.png" id="1_jokqx"] +[ext_resource type="Script" uid="uid://0upi64wxvgdi" path="res://Scripts/slime.gd" id="1_swwnm"] + +[sub_resource type="CircleShape2D" id="CircleShape2D_oov8j"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_swwnm"] +atlas = ExtResource("1_jokqx") +region = Rect2(0, 24, 24, 24) + +[sub_resource type="AtlasTexture" id="AtlasTexture_aiwxb"] +atlas = ExtResource("1_jokqx") +region = Rect2(24, 24, 24, 24) + +[sub_resource type="AtlasTexture" id="AtlasTexture_paq7w"] +atlas = ExtResource("1_jokqx") +region = Rect2(48, 24, 24, 24) + +[sub_resource type="AtlasTexture" id="AtlasTexture_f4si1"] +atlas = ExtResource("1_jokqx") +region = Rect2(72, 24, 24, 24) + +[sub_resource type="SpriteFrames" id="SpriteFrames_65ky4"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_swwnm") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_aiwxb") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_paq7w") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_f4si1") +}], +"loop": 1, +"name": &"idle", +"speed": 12.0 +}] + +[node name="slime" type="Area2D" unique_id=469808451 groups=["shootable"]] +script = ExtResource("1_swwnm") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1923400761] +shape = SubResource("CircleShape2D_oov8j") +debug_color = Color(0.98289496, 0, 0.36229762, 0.41960785) + +[node name="slimeGraphic" type="AnimatedSprite2D" parent="." unique_id=1897637737] +texture_filter = 1 +position = Vector2(0, -2) +sprite_frames = SubResource("SpriteFrames_65ky4") +animation = &"idle" +autoplay = "idle" +frame = 1 +frame_progress = 0.5775934 + +[node name="rightCast" type="RayCast2D" parent="." unique_id=543027424] +target_position = Vector2(15, 0) + +[node name="rightDownCast" type="RayCast2D" parent="." unique_id=2087514097] +position = Vector2(9, 0) +target_position = Vector2(0, 15) + +[node name="leftDownCast" type="RayCast2D" parent="." unique_id=1074540411] +position = Vector2(-9, 0) +target_position = Vector2(0, 15) + +[node name="leftCast" type="RayCast2D" parent="." unique_id=994735907] +target_position = Vector2(-15, 0) + +[connection signal="body_entered" from="." to="." method="_on_body_entered"] diff --git a/Scripts/bullet.gd b/Scripts/bullet.gd index 1183316..b7a6e14 100644 --- a/Scripts/bullet.gd +++ b/Scripts/bullet.gd @@ -9,5 +9,5 @@ func _process(delta: float) -> void: position += transform.x * speed * delta func _on_body_entered(body: Node2D) -> void: - if body is Crate: + if body.is_in_group("shootable"): bulletHitSignal.emit(body,self) diff --git a/Scripts/game.gd b/Scripts/game.gd index 7dbb33c..d8c8b95 100644 --- a/Scripts/game.gd +++ b/Scripts/game.gd @@ -1,13 +1,27 @@ class_name GameController extends Node2D signal destroySignal(body) +signal playerHurtSignal(playerHealth,maxHealth) +signal playerDeadSignal var numberOfCrates = 2 +var totalCoinsCollected = 0 + var timer = Timer.new() var timeAvailable = 50 +var currentPlayerHealth = 100 +var startingHealth = 100 +var enemiesDict = {} + +var enemy:CharacterStats +var player:CharacterStats + # Called when the node enters the scene tree for the first time. func _ready() -> void: get_window().grab_focus() + player = load("res://Scripts/rscs/playerStats.tres") + enemy = load("res://Scripts/rscs/slimeStats.tres") + add_child(timer) # time based on seconds timer.wait_time = 1 @@ -16,12 +30,15 @@ func _ready() -> void: timer.connect("timeout", countdown) timer.start() +func reset()->void: + currentPlayerHealth = player.startingHealth + func countdown() -> void: # Reduce time left timeAvailable -= 1 if timeAvailable <= 0 and numberOfCrates > 0: print("LOSER") - get_tree().reload_current_scene() + playerDeadSignal.emit() # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: @@ -32,7 +49,8 @@ func _on_trigger(body: Variant, trigger: Variant, intent:String) -> void: print("Game controller knows trigger fired") match intent: "destroy": - destroySignal.emit(body) + if body is RigidBody2D: + destroySignal.emit(body) func crateTotal(howMany): numberOfCrates = howMany @@ -41,8 +59,45 @@ func crateTotal(howMany): print("YOU WON!!!") get_tree().reload_current_scene() +func coinCollected(body,coin)->void: + print("GC knows coin collected") + totalCoinsCollected +=1 + destroySignal.emit(coin) + +func coinTotal(totalAmount)->void: + print("GC knows total coins "+str(totalAmount)) + +func totalEnemies(numberOfEnemies)->void: + print("GC knows total bad guys "+str(numberOfEnemies)) + +func slimeAttack(body,slime)->void: + print("GC knows slime attack "+str(enemiesDict[slime]["damage"])) + currentPlayerHealth -= enemiesDict[slime]["damage"] + if currentPlayerHealth > 0: + print("ouch") + playerHurtSignal.emit(currentPlayerHealth,startingHealth) + else: + print("ded") + playerDeadSignal.emit() + func bulletDamage(body, _bullet)->void: if body.is_in_group("shootable"): - destroySignal.emit(body) - destroySignal.emit(_bullet) - + if body is Crate: + destroySignal.emit(body) + destroySignal.emit(_bullet) + if body is Slime: + enemiesDict[body]["health"]-=player.rangeDamage + if enemiesDict[body]["health"] <=0: + enemiesDict.erase(body) + destroySignal.emit(body) + destroySignal.emit(_bullet) + +func levelChange()->void: + get_tree().reload_current_scene() + +func addEnemyToLevel(slime)->void: + var stats = { + "health": enemy.startingHealth+randi_range(0,20), + "damage": enemy.meleeDamage+randi_range(0,10) + } + enemiesDict[slime]=stats diff --git a/Scripts/player.gd b/Scripts/player.gd index 25c4815..e67c660 100644 --- a/Scripts/player.gd +++ b/Scripts/player.gd @@ -1,6 +1,7 @@ class_name Player extends CharacterBody2D signal pushSignal(body, direction) signal shootSignal(markerPosition, speed) +signal deathAnimationCompleteSignal const SPEED = 300.0 const JUMP_VELOCITY = -400.0 @@ -18,18 +19,25 @@ var pushTimer = 0 enum FaceDirection {RIGHT,LEFT} var facing:FaceDirection = FaceDirection.RIGHT -enum playerStates {IDLE, RUNNING, JUMPING, FALLING, CHARGING, SHOVING} +enum playerStates {IDLE, RUNNING, JUMPING, FALLING, CHARGING, SHOVING, HURT, DEAD} var current_player_state:playerStates = playerStates.IDLE var upJump = false func _physics_process(delta: float) -> void: + if current_player_state != playerStates.DEAD: + handle_input() handle_movement(delta) - handle_input() handle_states() handle_animation() move_and_slide() handle_collisions() +func hurt(playerHealth, maxHealth)->void: + current_player_state = playerStates.HURT + +func kill()->void: + current_player_state = playerStates.DEAD + func handle_input()->void: # Handle jump. if Input.is_action_just_pressed("ui_accept") and is_on_floor(): @@ -38,7 +46,6 @@ func handle_input()->void: upJump = true #Handle shove target if Input.is_action_just_pressed("shove"): - print("I want to shove") if pushRightEnabled && facing==FaceDirection.RIGHT: current_player_state = playerStates.CHARGING pushTimer = Time.get_ticks_msec() @@ -59,7 +66,6 @@ func handle_input()->void: #Handle Shoot Bullet if Input.is_action_just_pressed("shoot"): - print("Ima shoot a bullet") #marker postion, speed match facing: FaceDirection.RIGHT: @@ -88,7 +94,6 @@ func handle_movement(delta)->void: func handle_collisions()->void: if right_cast.is_colliding(): - print("Right raycast collision") var collider = right_cast.get_collider() if collider is Node: pushRightEnabled = true @@ -97,7 +102,6 @@ func handle_collisions()->void: pushRightEnabled = false if left_cast.is_colliding(): - print("Left raycast collision") var collider = left_cast.get_collider() if collider is Node: pushLeftEnabled = true @@ -115,7 +119,6 @@ func handle_collisions()->void: func handle_states()->void: match current_player_state: playerStates.IDLE when velocity.x != 0: - print("I run") current_player_state = playerStates.RUNNING playerStates.RUNNING when velocity.x == 0: current_player_state = playerStates.IDLE @@ -142,6 +145,10 @@ func handle_animation()->void: player_graphic.play("charging") playerStates.SHOVING: player_graphic.play("shoving") + playerStates.HURT: + player_graphic.play("hurt") + playerStates.DEAD: + player_graphic.play("dead") func _on_animation_finished() -> void: @@ -150,3 +157,7 @@ func _on_animation_finished() -> void: upJump = false playerStates.SHOVING: current_player_state = playerStates.IDLE + playerStates.HURT: + current_player_state = playerStates.IDLE + playerStates.DEAD: + deathAnimationCompleteSignal.emit() diff --git a/Scripts/rscs/characterstats.gd b/Scripts/rscs/characterstats.gd new file mode 100644 index 0000000..ce376de --- /dev/null +++ b/Scripts/rscs/characterstats.gd @@ -0,0 +1,10 @@ +class_name CharacterStats extends Resource + +#health +@export var currentHealth:int = 100 +@export var maxHealth := 150 +@export var startingHealth := 100 + +#damage +@export var meleeDamage := 20 +@export var rangeDamage := 15 diff --git a/Scripts/rscs/characterstats.gd.uid b/Scripts/rscs/characterstats.gd.uid new file mode 100644 index 0000000..45505b5 --- /dev/null +++ b/Scripts/rscs/characterstats.gd.uid @@ -0,0 +1 @@ +uid://b184uwt12pcwt diff --git a/Scripts/rscs/playerStats.tres b/Scripts/rscs/playerStats.tres new file mode 100644 index 0000000..9ae14f0 --- /dev/null +++ b/Scripts/rscs/playerStats.tres @@ -0,0 +1,10 @@ +[gd_resource type="Resource" script_class="CharacterStats" format=3 uid="uid://be2pt870o5sfl"] + +[ext_resource type="Script" uid="uid://b184uwt12pcwt" path="res://Scripts/rscs/characterstats.gd" id="1_eiyfu"] + +[resource] +script = ExtResource("1_eiyfu") +maxHealth = 200 +meleeDamage = 30 +rangeDamage = 20 +metadata/_custom_type_script = "uid://b184uwt12pcwt" diff --git a/Scripts/rscs/slimeStats.tres b/Scripts/rscs/slimeStats.tres new file mode 100644 index 0000000..9c70ef5 --- /dev/null +++ b/Scripts/rscs/slimeStats.tres @@ -0,0 +1,11 @@ +[gd_resource type="Resource" script_class="CharacterStats" format=3 uid="uid://bv3403ln5bjch"] + +[ext_resource type="Script" uid="uid://b184uwt12pcwt" path="res://Scripts/rscs/characterstats.gd" id="1_g41dv"] + +[resource] +script = ExtResource("1_g41dv") +currentHealth = 60 +maxHealth = 80 +startingHealth = 60 +rangeDamage = 0 +metadata/_custom_type_script = "uid://b184uwt12pcwt" diff --git a/Scripts/scene_manager.gd b/Scripts/scene_manager.gd index 8dc10c1..3641583 100644 --- a/Scripts/scene_manager.gd +++ b/Scripts/scene_manager.gd @@ -1,29 +1,42 @@ extends Node2D # hold control and drag + drop -@onready var game:GameController = $".." + @onready var crates: Node2D = $"../Crates" @onready var player: Player = $"../Player" +@onready var coins: Node2D = $"../Coins" +@onready var enemies: Node2D = $"../Enemies" var bullet = preload("res://Scenes/bullet.tscn") var bulletArray:Array[Bullet] = [] var totalAllowedBullets:int = 7 +var coin # Called when the node enters the scene tree for the first time. func _ready() -> void: + Gamecontroller.reset() player.pushSignal.connect(pushTarget) player.shootSignal.connect(makeBullet) + player.deathAnimationCompleteSignal.connect(Gamecontroller.levelChange) #signals from the GameController - game.destroySignal.connect(destroy) + Gamecontroller.destroySignal.connect(destroy) + Gamecontroller.playerHurtSignal.connect(player.hurt) + Gamecontroller.playerDeadSignal.connect(player.kill) + + #signals from pickups + #coin.coinCollectedSignal.connect(Gamecontroller.coinCollected) buildLevel() # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: pass - + func buildLevel() -> void: #tell GC how many crates... updateCrates() + updateCoins() + updateEnemies() + func updateCrates()->void: var totalCrates = 0 if crates: @@ -33,7 +46,31 @@ func updateCrates()->void: obj.tree_exited.connect(updateCrates) totalCrates +=1 - game.crateTotal(totalCrates) + Gamecontroller.crateTotal(totalCrates) + +func updateCoins()->void: + var totalCoins = 0 + if coins: + print("updateCoins called") + for obj in coins.get_children(): + if obj is Coin: + if not obj.tree_exited.is_connected(updateCoins): + obj.tree_exited.connect(updateCoins) + if not obj.coinCollectedSignal.is_connected(Gamecontroller.coinCollected): + obj.coinCollectedSignal.connect(Gamecontroller.coinCollected) + totalCoins +=1 + Gamecontroller.coinTotal(totalCoins) + +func updateEnemies()->void: + var totalEnemies = 0 + if enemies: + for obj in enemies.get_children(): + if obj is Slime: + Gamecontroller.addEnemyToLevel(obj) + obj.slimeDamageSignal.connect(Gamecontroller.slimeAttack) + totalEnemies += 1 + Gamecontroller.totalEnemies(totalEnemies) + func pushTarget(body,pushDirection)->void: if body is RigidBody2D: body.apply_central_impulse(pushDirection) @@ -61,8 +98,8 @@ func bulletFactory()->Bullet: #make a new bullet myBullet = bullet.instantiate() add_sibling(myBullet) - if not myBullet.bulletHitSignal.is_connected(game.bulletDamage): - myBullet.bulletHitSignal.connect(game.bulletDamage) + if not myBullet.bulletHitSignal.is_connected(Gamecontroller.bulletDamage): + myBullet.bulletHitSignal.connect(Gamecontroller.bulletDamage) else: # gets oldest one - pop_back myBullet = bulletArray.pop_back() diff --git a/Scripts/slime.gd b/Scripts/slime.gd new file mode 100644 index 0000000..c1133d1 --- /dev/null +++ b/Scripts/slime.gd @@ -0,0 +1,30 @@ +class_name Slime extends Area2D +@onready var right_cast: RayCast2D = $rightCast +@onready var right_down_cast: RayCast2D = $rightDownCast +@onready var left_down_cast: RayCast2D = $leftDownCast +@onready var left_cast: RayCast2D = $leftCast +@onready var slime_graphic: AnimatedSprite2D = $slimeGraphic + +signal slimeDamageSignal(body,slime) +@export var speed:int = 100 +var direction = 1 + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta: float) -> void: + if not right_down_cast.is_colliding(): + direction = -1 + slime_graphic.flip_h = true + if not left_down_cast.is_colliding(): + direction = 1 + slime_graphic.flip_h = false + if right_cast.is_colliding() && not right_cast.get_collider() is Player: + direction = -1 + slime_graphic.flip_h = true + if left_cast.is_colliding() && not left_cast.get_collider() is Player: + direction = 1 + slime_graphic.flip_h = false + position.x += direction*speed*delta + + +func _on_body_entered(body: Node2D) -> void: + slimeDamageSignal.emit(body,self) diff --git a/Scripts/slime.gd.uid b/Scripts/slime.gd.uid new file mode 100644 index 0000000..2c271f5 --- /dev/null +++ b/Scripts/slime.gd.uid @@ -0,0 +1 @@ +uid://0upi64wxvgdi diff --git a/project.godot b/project.godot index 0263f05..7a2a88d 100644 --- a/project.godot +++ b/project.godot @@ -12,9 +12,21 @@ config_version=5 config/name="CatGame" run/main_scene="uid://bportqr2j3d7s" -config/features=PackedStringArray("4.6", "Forward Plus") +config/features=PackedStringArray("4.7", "Forward Plus") config/icon="res://icon.svg" +[autoload] + +Gamecontroller="*uid://cvrssvw6p8myl" + +[display] + +window/size/viewport_width=480 +window/size/viewport_height=270 +window/size/window_width_override=960 +window/size/window_height_override=540 +window/stretch/mode="viewport" + [input] shove={