Add new level, collapsable component, knockback component

This commit is contained in:
2024-12-31 02:51:07 +01:00
parent 529dc0f5dc
commit 366c269817
17 changed files with 647 additions and 31 deletions

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=8 format=3 uid="uid://bqi5s710xb1ju"] [gd_scene load_steps=11 format=3 uid="uid://bqi5s710xb1ju"]
[ext_resource type="Script" path="res://scripts/player.gd" id="1_8j4h4"] [ext_resource type="Script" path="res://scripts/player.gd" id="1_8j4h4"]
[ext_resource type="Texture2D" uid="uid://b7gp0gqvkv8j4" path="res://sprites/MrBrick_base.png" id="2_bc55y"] [ext_resource type="Texture2D" uid="uid://b7gp0gqvkv8j4" path="res://sprites/MrBrick_base.png" id="2_bc55y"]
@@ -6,6 +6,9 @@
[ext_resource type="Texture2D" uid="uid://iiawtnwmeny3" path="res://sprites/right_eye.png" id="4_ccn81"] [ext_resource type="Texture2D" uid="uid://iiawtnwmeny3" path="res://sprites/right_eye.png" id="4_ccn81"]
[ext_resource type="Script" path="res://scripts/components/flip_player.gd" id="5_geu10"] [ext_resource type="Script" path="res://scripts/components/flip_player.gd" id="5_geu10"]
[ext_resource type="Script" path="res://scripts/components/score.gd" id="6_fowa2"] [ext_resource type="Script" path="res://scripts/components/score.gd" id="6_fowa2"]
[ext_resource type="Script" path="res://scripts/components/health.gd" id="7_tqjk8"]
[ext_resource type="Script" path="res://scripts/components/player_death.gd" id="8_1v23d"]
[ext_resource type="Script" path="res://scripts/components/knockback.gd" id="9_rjyu4"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_hdsg1"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_hdsg1"]
size = Vector2(16, 31) size = Vector2(16, 31)
@@ -46,3 +49,18 @@ player_controller = NodePath("..")
[node name="ScoreComponent" type="Node" parent="."] [node name="ScoreComponent" type="Node" parent="."]
script = ExtResource("6_fowa2") script = ExtResource("6_fowa2")
[node name="HealthComponent" type="Node" parent="."]
script = ExtResource("7_tqjk8")
[node name="PlayerDeathComponent" type="Node" parent="."]
process_mode = 3
script = ExtResource("8_1v23d")
[node name="KnockbackComponent" type="Node" parent="." node_paths=PackedStringArray("character_body")]
script = ExtResource("9_rjyu4")
character_body = NodePath("..")
knockback_force = 1500.0
[connection signal="on_death" from="HealthComponent" to="PlayerDeathComponent" method="_on_health_component_on_death"]
[connection signal="on_health_change" from="HealthComponent" to="KnockbackComponent" method="_on_health_component_on_health_change"]

View File

@@ -1,10 +1,14 @@
[gd_scene load_steps=3 format=3 uid="uid://ct8fim6mduyl3"] [gd_scene load_steps=5 format=3 uid="uid://ct8fim6mduyl3"]
[ext_resource type="Texture2D" uid="uid://djifxc5x0dyrw" path="res://sprites/ppc_tileset.png" id="1_rka1x"] [ext_resource type="Texture2D" uid="uid://djifxc5x0dyrw" path="res://sprites/ppc_tileset.png" id="1_rka1x"]
[ext_resource type="Script" path="res://scripts/components/collapsable.gd" id="2_3vvum"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_l44jt"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_l44jt"]
size = Vector2(16, 4) size = Vector2(16, 4)
[sub_resource type="RectangleShape2D" id="RectangleShape2D_sfbe2"]
size = Vector2(16, 2)
[node name="Collapsing Bridge" type="StaticBody2D"] [node name="Collapsing Bridge" type="StaticBody2D"]
[node name="CollisionShape2D" type="CollisionShape2D" parent="."] [node name="CollisionShape2D" type="CollisionShape2D" parent="."]
@@ -17,3 +21,30 @@ texture = ExtResource("1_rka1x")
hframes = 12 hframes = 12
vframes = 12 vframes = 12
frame = 56 frame = 56
[node name="Collapsable detector" type="Area2D" parent="."]
collision_mask = 4
[node name="CollisionShape2D" type="CollisionShape2D" parent="Collapsable detector"]
position = Vector2(0, -8)
shape = SubResource("RectangleShape2D_sfbe2")
[node name="ToCollapseTimer" type="Timer" parent="."]
wait_time = 0.5
[node name="ResetTimer" type="Timer" parent="."]
[node name="CollapsableComponent" type="Node" parent="." node_paths=PackedStringArray("to_collapse_timer", "reset_timer", "sprite2d", "collision_shape")]
script = ExtResource("2_3vvum")
to_collapse_timer = NodePath("../ToCollapseTimer")
reset_timer = NodePath("../ResetTimer")
sprite2d = NodePath("../Sprite2D")
collision_shape = NodePath("../CollisionShape2D")
collapse_time = 2.0
reset_time = 3.0
anim_time = 0.5
[connection signal="body_entered" from="Collapsable detector" to="CollapsableComponent" method="_on_collapsable_detector_body_entered"]
[connection signal="body_exited" from="Collapsable detector" to="CollapsableComponent" method="_on_collapsable_detector_body_exited"]
[connection signal="timeout" from="ToCollapseTimer" to="CollapsableComponent" method="_on_to_collapse_timer_timeout"]
[connection signal="timeout" from="ResetTimer" to="CollapsableComponent" method="_on_reset_timer_timeout"]

23
objects/damage_test.tscn Normal file
View File

@@ -0,0 +1,23 @@
[gd_scene load_steps=4 format=3 uid="uid://dmvipsoauefs3"]
[ext_resource type="Script" path="res://scripts/components/damage.gd" id="1_qhm3r"]
[ext_resource type="Texture2D" uid="uid://djifxc5x0dyrw" path="res://sprites/ppc_tileset.png" id="1_yevdj"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_pn1xh"]
size = Vector2(8, 16)
[node name="Damage" type="Area2D"]
collision_mask = 5
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
shape = SubResource("RectangleShape2D_pn1xh")
[node name="Sprite2D" type="Sprite2D" parent="."]
texture = ExtResource("1_yevdj")
hframes = 12
vframes = 12
frame = 59
[node name="DamageComponent" type="Node" parent="." node_paths=PackedStringArray("area2d")]
script = ExtResource("1_qhm3r")
area2d = NodePath("..")

24
objects/level/level1.tscn Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,118 @@
[gd_scene load_steps=4 format=4 uid="uid://bcw0oy0r2x0eq"]
[ext_resource type="Texture2D" uid="uid://djifxc5x0dyrw" path="res://sprites/ppc_tileset.png" id="1_6a3fc"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_cagp7"]
texture = ExtResource("1_6a3fc")
0:0/0 = 0
1:0/0 = 0
2:0/0 = 0
3:0/0 = 0
4:0/0 = 0
5:0/0 = 0
6:0/0 = 0
7:0/0 = 0
8:0/0 = 0
9:0/0 = 0
10:0/0 = 0
11:0/0 = 0
0:1/0 = 0
1:1/0 = 0
2:1/0 = 0
3:1/0 = 0
4:1/0 = 0
5:1/0 = 0
6:1/0 = 0
7:1/0 = 0
8:1/0 = 0
9:1/0 = 0
10:1/0 = 0
11:1/0 = 0
0:2/0 = 0
1:2/0 = 0
2:2/0 = 0
3:2/0 = 0
4:2/0 = 0
5:2/0 = 0
6:2/0 = 0
7:2/0 = 0
8:2/0 = 0
9:2/0 = 0
10:2/0 = 0
11:2/0 = 0
0:3/0 = 0
1:3/0 = 0
2:3/0 = 0
3:3/0 = 0
4:3/0 = 0
5:3/0 = 0
6:3/0 = 0
7:3/0 = 0
8:3/0 = 0
9:3/0 = 0
10:3/0 = 0
11:3/0 = 0
0:4/0 = 0
1:4/0 = 0
2:4/0 = 0
3:4/0 = 0
4:4/0 = 0
5:4/0 = 0
6:4/0 = 0
7:4/0 = 0
8:4/0 = 0
9:4/0 = 0
10:4/0 = 0
11:4/0 = 0
0:5/0 = 0
1:5/0 = 0
2:5/0 = 0
3:5/0 = 0
4:5/0 = 0
5:5/0 = 0
6:5/0 = 0
7:5/0 = 0
8:5/0 = 0
9:5/0 = 0
10:5/0 = 0
11:5/0 = 0
0:6/0 = 0
1:6/0 = 0
2:6/0 = 0
3:6/0 = 0
4:6/0 = 0
5:6/0 = 0
6:6/0 = 0
7:6/0 = 0
8:6/0 = 0
9:6/0 = 0
10:6/0 = 0
11:6/0 = 0
0:7/0 = 0
1:7/0 = 0
2:7/0 = 0
3:7/0 = 0
5:7/0 = 0
7:7/0 = 0
8:7/0 = 0
9:7/0 = 0
10:7/0 = 0
11:7/0 = 0
1:8/0 = 0
2:8/0 = 0
3:8/0 = 0
4:8/0 = 0
5:8/0 = 0
6:8/0 = 0
7:8/0 = 0
8:8/0 = 0
9:8/0 = 0
10:8/0 = 0
1:9/0 = 0
[sub_resource type="TileSet" id="TileSet_7ri0q"]
sources/0 = SubResource("TileSetAtlasSource_cagp7")
[node name="Background Layer" type="TileMapLayer"]
tile_map_data = PackedByteArray("AAAKAP7/AAAAAAYAAAAKAP//AAAAAAcAAAALAP7/AAABAAYAAAALAP//AAABAAcAAAALAAAAAAABAAgAAAALAAEAAAABAAkAAAAMAP7/AAACAAYAAAAMAP//AAACAAcAAAAMAAAAAAACAAgAAAATAAAAAAAAAAYAAAATAAEAAAAAAAcAAAAUAAAAAAABAAYAAAAUAAEAAAABAAcAAAAUAAIAAAABAAgAAAAUAAMAAAABAAkAAAAVAAAAAAACAAYAAAAVAAEAAAACAAcAAAAVAAIAAAACAAgAAAAbAPb/AAAAAAYAAAAbAPf/AAAAAAcAAAAcAPb/AAABAAYAAAAcAPf/AAABAAcAAAAcAPj/AAABAAgAAAAcAPn/AAABAAkAAAAdAPb/AAACAAYAAAAdAPf/AAACAAcAAAAdAPj/AAACAAgAAAAPAPb/AAAAAAYAAAAPAPf/AAAAAAcAAAAQAPb/AAABAAYAAAAQAPf/AAABAAcAAAAQAPj/AAABAAgAAAAQAPn/AAABAAkAAAARAPb/AAACAAYAAAARAPf/AAACAAcAAAARAPj/AAACAAgAAAA=")
tile_set = SubResource("TileSet_7ri0q")

View File

@@ -0,0 +1,143 @@
[gd_scene load_steps=7 format=4 uid="uid://dnufqkeiyi5ya"]
[ext_resource type="Texture2D" uid="uid://djifxc5x0dyrw" path="res://sprites/ppc_tileset.png" id="1_51i2x"]
[ext_resource type="PackedScene" uid="uid://54w4wisfj8v8" path="res://objects/coin.tscn" id="2_2l4v1"]
[ext_resource type="PackedScene" uid="uid://ct8fim6mduyl3" path="res://objects/collapsing_bridge.tscn" id="3_ukc1k"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_8idcv"]
texture = ExtResource("1_51i2x")
0:0/0 = 0
1:0/0 = 0
2:0/0 = 0
3:0/0 = 0
4:0/0 = 0
5:0/0 = 0
6:0/0 = 0
7:0/0 = 0
8:0/0 = 0
9:0/0 = 0
10:0/0 = 0
11:0/0 = 0
0:1/0 = 0
1:1/0 = 0
2:1/0 = 0
3:1/0 = 0
4:1/0 = 0
5:1/0 = 0
6:1/0 = 0
7:1/0 = 0
8:1/0 = 0
9:1/0 = 0
10:1/0 = 0
11:1/0 = 0
0:2/0 = 0
1:2/0 = 0
2:2/0 = 0
3:2/0 = 0
4:2/0 = 0
5:2/0 = 0
6:2/0 = 0
7:2/0 = 0
8:2/0 = 0
9:2/0 = 0
10:2/0 = 0
11:2/0 = 0
0:3/0 = 0
1:3/0 = 0
2:3/0 = 0
3:3/0 = 0
4:3/0 = 0
5:3/0 = 0
6:3/0 = 0
7:3/0 = 0
8:3/0 = 0
9:3/0 = 0
10:3/0 = 0
11:3/0 = 0
0:4/0 = 0
1:4/0 = 0
2:4/0 = 0
3:4/0 = 0
4:4/0 = 0
5:4/0 = 0
6:4/0 = 0
7:4/0 = 0
7:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, -4, -8, -4)
7:4/0/physics_layer_0/polygon_0/one_way = true
8:4/0 = 0
8:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, -4, -8, -4)
8:4/0/physics_layer_0/polygon_0/one_way = true
9:4/0 = 0
9:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, -4, -8, -4)
9:4/0/physics_layer_0/polygon_0/one_way = true
10:4/0 = 0
10:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, -4, -8, -4)
10:4/0/physics_layer_0/polygon_0/one_way = true
11:4/0 = 0
0:5/0 = 0
1:5/0 = 0
2:5/0 = 0
3:5/0 = 0
4:5/0 = 0
5:5/0 = 0
6:5/0 = 0
7:5/0 = 0
8:5/0 = 0
9:5/0 = 0
10:5/0 = 0
11:5/0 = 0
0:6/0 = 0
1:6/0 = 0
2:6/0 = 0
3:6/0 = 0
4:6/0 = 0
5:6/0 = 0
6:6/0 = 0
7:6/0 = 0
8:6/0 = 0
9:6/0 = 0
9:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, -4, -8, -4)
9:6/0/physics_layer_0/polygon_0/one_way = true
10:6/0 = 0
10:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, -4, -8, -4)
10:6/0/physics_layer_0/polygon_0/one_way = true
11:6/0 = 0
11:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, -4, -8, -4)
11:6/0/physics_layer_0/polygon_0/one_way = true
0:7/0 = 0
1:7/0 = 0
2:7/0 = 0
3:7/0 = 0
5:7/0 = 0
7:7/0 = 0
7:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, -4, -8, -4)
7:7/0/physics_layer_0/polygon_0/one_way = true
8:7/0 = 0
9:7/0 = 0
10:7/0 = 0
11:7/0 = 0
1:8/0 = 0
2:8/0 = 0
3:8/0 = 0
4:8/0 = 0
5:8/0 = 0
6:8/0 = 0
7:8/0 = 0
8:8/0 = 0
9:8/0 = 0
10:8/0 = 0
1:9/0 = 0
[sub_resource type="TileSetScenesCollectionSource" id="TileSetScenesCollectionSource_v3eon"]
scenes/1/scene = ExtResource("2_2l4v1")
scenes/2/scene = ExtResource("3_ukc1k")
[sub_resource type="TileSet" id="TileSet_yf4x4"]
physics_layer_0/collision_layer = 1
physics_layer_0/collision_mask = 5
sources/0 = SubResource("TileSetAtlasSource_8idcv")
sources/1 = SubResource("TileSetScenesCollectionSource_v3eon")
[node name="Entities layer" type="TileMapLayer"]
tile_map_data = PackedByteArray("AAAJAPz/AAAHAAMAAAAJAP3/AAAHAAQAAAAKAPz/AAAIAAMAAAALAPz/AAAIAAMAAAAMAPz/AAAJAAMAAAANAPz/AAAKAAMAAAANAP3/AAAKAAQAAAAUAPz/AAAGAAMAADAVAPz/AAAGAAMAADAWAPz/AAAGAAMAADAcAAMAAAAGAAMAAGAPAPn/AAADAAYAAAAWAP3/AAALAAQAAAAWAP7/AAALAAQAAAAWAP//AAALAAQAAAAWAAAAAAALAAQAAAAWAAEAAAALAAQAAAAWAAIAAAALAAQAAAAWAAMAAAALAAQAAAAaAAMAAAAGAAQAAAAWAPn/AQAAAAAAAQAXAPn/AQAAAAAAAQAYAPn/AQAAAAAAAQAZAPn/AQAAAAAAAQAaAPn/AQAAAAAAAQAZAPj/AQAAAAAAAQAYAPj/AQAAAAAAAQAXAPj/AQAAAAAAAQAYAPf/AQAAAAAAAQAKAP3/AQAAAAAAAgALAP3/AQAAAAAAAgAMAP3/AQAAAAAAAgA=")
tile_set = SubResource("TileSet_yf4x4")

View File

@@ -0,0 +1,118 @@
[gd_scene load_steps=4 format=4 uid="uid://cd2bf7iwfn4cs"]
[ext_resource type="Texture2D" uid="uid://djifxc5x0dyrw" path="res://sprites/ppc_tileset.png" id="1_11j6n"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_8ljy4"]
texture = ExtResource("1_11j6n")
0:0/0 = 0
1:0/0 = 0
2:0/0 = 0
3:0/0 = 0
4:0/0 = 0
5:0/0 = 0
6:0/0 = 0
7:0/0 = 0
8:0/0 = 0
9:0/0 = 0
10:0/0 = 0
11:0/0 = 0
0:1/0 = 0
1:1/0 = 0
2:1/0 = 0
3:1/0 = 0
4:1/0 = 0
5:1/0 = 0
6:1/0 = 0
7:1/0 = 0
8:1/0 = 0
9:1/0 = 0
10:1/0 = 0
11:1/0 = 0
0:2/0 = 0
1:2/0 = 0
2:2/0 = 0
3:2/0 = 0
4:2/0 = 0
5:2/0 = 0
6:2/0 = 0
7:2/0 = 0
8:2/0 = 0
9:2/0 = 0
10:2/0 = 0
11:2/0 = 0
0:3/0 = 0
1:3/0 = 0
2:3/0 = 0
3:3/0 = 0
4:3/0 = 0
5:3/0 = 0
6:3/0 = 0
7:3/0 = 0
8:3/0 = 0
9:3/0 = 0
10:3/0 = 0
11:3/0 = 0
0:4/0 = 0
1:4/0 = 0
2:4/0 = 0
3:4/0 = 0
4:4/0 = 0
5:4/0 = 0
6:4/0 = 0
7:4/0 = 0
8:4/0 = 0
9:4/0 = 0
10:4/0 = 0
11:4/0 = 0
0:5/0 = 0
1:5/0 = 0
2:5/0 = 0
3:5/0 = 0
4:5/0 = 0
5:5/0 = 0
6:5/0 = 0
7:5/0 = 0
8:5/0 = 0
9:5/0 = 0
10:5/0 = 0
11:5/0 = 0
0:6/0 = 0
1:6/0 = 0
2:6/0 = 0
3:6/0 = 0
4:6/0 = 0
5:6/0 = 0
6:6/0 = 0
7:6/0 = 0
8:6/0 = 0
9:6/0 = 0
10:6/0 = 0
11:6/0 = 0
0:7/0 = 0
1:7/0 = 0
2:7/0 = 0
3:7/0 = 0
5:7/0 = 0
7:7/0 = 0
8:7/0 = 0
9:7/0 = 0
10:7/0 = 0
11:7/0 = 0
1:8/0 = 0
2:8/0 = 0
3:8/0 = 0
4:8/0 = 0
5:8/0 = 0
6:8/0 = 0
7:8/0 = 0
8:8/0 = 0
9:8/0 = 0
10:8/0 = 0
1:9/0 = 0
[sub_resource type="TileSet" id="TileSet_r3m5w"]
sources/0 = SubResource("TileSetAtlasSource_8ljy4")
[node name="Foreground layer" type="TileMapLayer"]
tile_map_data = PackedByteArray("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")
tile_set = SubResource("TileSet_r3m5w")

View File

@@ -0,0 +1,19 @@
[gd_scene load_steps=4 format=4 uid="uid://brbhd2m4vj6gn"]
[ext_resource type="Texture2D" uid="uid://dxvevrm15uus1" path="res://sprites/flowers_tileset.png" id="1_nofui"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_eoyis"]
texture = ExtResource("1_nofui")
texture_region_size = Vector2i(8, 8)
0:0/0 = 0
1:0/0 = 0
2:0/0 = 0
3:0/0 = 0
[sub_resource type="TileSet" id="TileSet_fpn3g"]
tile_size = Vector2i(8, 8)
sources/1 = SubResource("TileSetAtlasSource_eoyis")
[node name="Small Foreground layer" type="TileMapLayer"]
tile_map_data = PackedByteArray("AAD7//3/AQABAAAAAAD8//3/AQAAAAAAAAD+//3/AQABAAAAAAD///3/AQAAAAAAAAABAP3/AQADAAAAAAAFAP3/AQAAAAAAAAAEAP3/AQAAAAAAAAACAP3/AQABAAAAAAAJAPX/AQACAAAAAAANAPf/AQAAAAAAAAARAPn/AQAAAAAAAAAaAAEAAQACAAAAAAAdAAEAAQADAAAAAAAeAAEAAQABAAAAAAAfAAEAAQADAAAAAAAgAAEAAQADAAAAAAAiAAEAAQADAAAAAAAjAAEAAQABAAAAAAAkAAEAAQADAAAAAAAcAPP/AQACAAAAAAAgAPP/AQACAAAAAAAhAPP/AQACAAAAAAAiAPP/AQABAAAAAAAkAPP/AQADAAAAAAAlAPP/AQAAAAAAAAAmAPP/AQACAAAAAAAoAPP/AQABAAAAAAApAPP/AQAAAAAAAAAtAPP/AQACAAAAAAAvAPP/AQADAAAAAAAwAPP/AQADAAAAAAAxAPP/AQAAAAAAAAAzAPP/AQACAAAAAAA0APP/AQACAAAAAAA1APP/AQADAAAAAAA3APP/AQADAAAAAAA4APP/AQADAAAAAAA5APP/AQACAAAAAAA6APP/AQACAAAAAAAmAAcAAQAAAAAAAAAnAAcAAQABAAAAAAAoAAcAAQADAAAAAAApAAcAAQABAAAAAAAqAAcAAQADAAAAAAArAAcAAQACAAAAAAAsAAcAAQABAAAAAAAtAAcAAQABAAAAAAAuAAcAAQABAAAAAAAvAAcAAQACAAAAAAAwAAcAAQACAAAAAAAyAAcAAQAAAAAAAAA1AAcAAQACAAAAAAA3AAcAAQAAAAAAAAAZAAMAAQACAAAAAAAXAAMAAQABAAAAAAAWAAMAAQABAAAAAAAUAAMAAQADAAAAAAA=")
tile_set = SubResource("TileSet_fpn3g")

File diff suppressed because one or more lines are too long

View File

@@ -1,10 +1,12 @@
[gd_scene load_steps=17 format=4 uid="uid://h60obxmju6mo"] [gd_scene load_steps=19 format=4 uid="uid://h60obxmju6mo"]
[ext_resource type="Texture2D" uid="uid://djifxc5x0dyrw" path="res://sprites/ppc_tileset.png" id="1_5lb42"] [ext_resource type="Texture2D" uid="uid://djifxc5x0dyrw" path="res://sprites/ppc_tileset.png" id="1_5lb42"]
[ext_resource type="TileSet" uid="uid://cl4bn8lofqvky" path="res://tileset/village/tileset_village.tres" id="1_d680t"] [ext_resource type="TileSet" uid="uid://cl4bn8lofqvky" path="res://tileset/village/tileset_village.tres" id="1_d680t"]
[ext_resource type="Texture2D" uid="uid://dxvevrm15uus1" path="res://sprites/flowers_tileset.png" id="3_235u2"] [ext_resource type="Texture2D" uid="uid://dxvevrm15uus1" path="res://sprites/flowers_tileset.png" id="3_235u2"]
[ext_resource type="PackedScene" uid="uid://54w4wisfj8v8" path="res://objects/coin.tscn" id="3_ygehw"] [ext_resource type="PackedScene" uid="uid://54w4wisfj8v8" path="res://objects/coin.tscn" id="3_ygehw"]
[ext_resource type="PackedScene" uid="uid://bqi5s710xb1ju" path="res://objects/brick_player.tscn" id="4_hetw8"] [ext_resource type="PackedScene" uid="uid://bqi5s710xb1ju" path="res://objects/brick_player.tscn" id="4_hetw8"]
[ext_resource type="PackedScene" uid="uid://ct8fim6mduyl3" path="res://objects/collapsing_bridge.tscn" id="6_84ckv"]
[ext_resource type="PackedScene" uid="uid://dmvipsoauefs3" path="res://objects/damage_test.tscn" id="7_a6wgf"]
[sub_resource type="Gradient" id="Gradient_anvhr"] [sub_resource type="Gradient" id="Gradient_anvhr"]
offsets = PackedFloat32Array(1) offsets = PackedFloat32Array(1)
@@ -250,6 +252,7 @@ texture = ExtResource("1_5lb42")
[sub_resource type="TileSetScenesCollectionSource" id="TileSetScenesCollectionSource_v3eon"] [sub_resource type="TileSetScenesCollectionSource" id="TileSetScenesCollectionSource_v3eon"]
scenes/1/scene = ExtResource("3_ygehw") scenes/1/scene = ExtResource("3_ygehw")
scenes/2/scene = ExtResource("6_84ckv")
[sub_resource type="TileSet" id="TileSet_yf4x4"] [sub_resource type="TileSet" id="TileSet_yf4x4"]
physics_layer_0/collision_layer = 1 physics_layer_0/collision_layer = 1
@@ -396,7 +399,7 @@ tile_map_data = PackedByteArray("AAD8////AAABAAAAAAD9////AAABAAAAAAD+////AAABAAA
tile_set = ExtResource("1_d680t") tile_set = ExtResource("1_d680t")
[node name="Entities layer" type="TileMapLayer" parent="."] [node name="Entities layer" type="TileMapLayer" parent="."]
tile_map_data = PackedByteArray("AAAJAPz/AAAHAAMAAAAJAP3/AAAHAAQAAAAKAPz/AAAIAAMAAAAKAP3/AAAIAAQAAAALAP3/AAAIAAQAAAALAPz/AAAIAAMAAAAMAPz/AAAJAAMAAAAMAP3/AAAJAAQAAAANAPz/AAAKAAMAAAANAP3/AAAKAAQAAAAUAPz/AAAGAAMAADAVAPz/AAAGAAMAADAWAPz/AAAGAAMAADAcAAMAAAAGAAMAAGAPAPn/AAADAAYAAAAWAP3/AAALAAQAAAAWAP7/AAALAAQAAAAWAP//AAALAAQAAAAWAAAAAAALAAQAAAAWAAEAAAALAAQAAAAWAAIAAAALAAQAAAAWAAMAAAALAAQAAAAaAAMAAAAGAAQAAAAWAPn/AQAAAAAAAQAXAPn/AQAAAAAAAQAYAPn/AQAAAAAAAQAZAPn/AQAAAAAAAQAaAPn/AQAAAAAAAQAZAPj/AQAAAAAAAQAYAPj/AQAAAAAAAQAXAPj/AQAAAAAAAQAYAPf/AQAAAAAAAQA=") tile_map_data = PackedByteArray("AAAJAPz/AAAHAAMAAAAJAP3/AAAHAAQAAAAKAPz/AAAIAAMAAAALAPz/AAAIAAMAAAAMAPz/AAAJAAMAAAANAPz/AAAKAAMAAAANAP3/AAAKAAQAAAAUAPz/AAAGAAMAADAVAPz/AAAGAAMAADAWAPz/AAAGAAMAADAcAAMAAAAGAAMAAGAPAPn/AAADAAYAAAAWAP3/AAALAAQAAAAWAP7/AAALAAQAAAAWAP//AAALAAQAAAAWAAAAAAALAAQAAAAWAAEAAAALAAQAAAAWAAIAAAALAAQAAAAWAAMAAAALAAQAAAAaAAMAAAAGAAQAAAAWAPn/AQAAAAAAAQAXAPn/AQAAAAAAAQAYAPn/AQAAAAAAAQAZAPn/AQAAAAAAAQAaAPn/AQAAAAAAAQAZAPj/AQAAAAAAAQAYAPj/AQAAAAAAAQAXAPj/AQAAAAAAAQAYAPf/AQAAAAAAAQAKAP3/AQAAAAAAAgALAP3/AQAAAAAAAgAMAP3/AQAAAAAAAgA=")
tile_set = SubResource("TileSet_yf4x4") tile_set = SubResource("TileSet_yf4x4")
[node name="Foreground layer" type="TileMapLayer" parent="."] [node name="Foreground layer" type="TileMapLayer" parent="."]
@@ -413,3 +416,6 @@ metadata/_edit_group_ = true
[node name="Camera2D" type="Camera2D" parent="."] [node name="Camera2D" type="Camera2D" parent="."]
position = Vector2(237, -100) position = Vector2(237, -100)
[node name="Damage" parent="." instance=ExtResource("7_a6wgf")]
position = Vector2(64, -89)

View File

@@ -0,0 +1,55 @@
class_name CollapsableComponent
extends Node
@export var to_collapse_timer: Timer
@export var reset_timer: Timer
@export var sprite2d: Sprite2D
@export var collision_shape: CollisionShape2D
@export var collapse_time: float = 0.5
@export var reset_time: float = 1.0
@export var anim_time: float = 0.25
func _ready() -> void:
reset_timers()
func _on_to_collapse_timer_timeout() -> void:
collapse_bridge()
func _on_reset_timer_timeout() -> void:
reactivate_bridge()
func collapse_bridge():
to_collapse_timer.stop()
to_collapse_timer.wait_time = collapse_time
var bridge_tween = create_tween()
bridge_tween.tween_property(sprite2d, "modulate:a", 0, anim_time)
await bridge_tween.finished
collision_shape.disabled = true
reset_timer.start()
func reactivate_bridge():
reset_timer.stop()
reset_timer.wait_time = reset_time
var bridge_tween = create_tween()
bridge_tween.tween_property(sprite2d, "modulate:a", 1, anim_time)
await bridge_tween.finished
collision_shape.disabled = false
func _on_collapsable_detector_body_entered(_body: Node2D) -> void:
to_collapse_timer.start()
func reset_timers():
to_collapse_timer.stop()
to_collapse_timer.wait_time = collapse_time
func _on_collapsable_detector_body_exited(_body: Node2D) -> void:
var collapse_time_left: float = abs(to_collapse_timer.time_left - collapse_time)
if collapse_time_left < (0.1 * collapse_time):
reset_timers()

View File

@@ -1,7 +1,20 @@
class_name DamageComponent class_name DamageComponent
extends Node2D extends Node
@export var damage: float = 0.25 @export var damage: float = 0.25
@export var area2d: Area2D
func _ready() -> void:
if not area2d:
printerr("No area2d assigned!")
return
area2d.body_entered.connect(on_area2d_body_entered)
func deal_damage(target: HealthComponent): func deal_damage(target: HealthComponent):
target.decrease_health(damage) target.decrease_health(damage)
func on_area2d_body_entered(body: Node2D):
if body.has_node("HealthComponent"):
var health_component: HealthComponent = body.get_node("HealthComponent")
deal_damage(health_component)

View File

@@ -1,10 +1,10 @@
class_name HealthComponent class_name HealthComponent
extends Node2D extends Node
@export var health: float = 1.0 @export var health: float = 1.0
@export var max_health: float = 1.0 @export var max_health: float = 1.0
signal on_health_change(delta: float) signal on_health_change(delta: float, total_health: float)
signal on_death signal on_death
func _get_delta(value: float) -> float: func _get_delta(value: float) -> float:
@@ -16,7 +16,7 @@ func set_health(new_value: float):
if new_value >= max_health: if new_value >= max_health:
health = max_health health = max_health
on_health_change.emit(delta) on_health_change.emit(delta, health)
return return
health = new_value health = new_value
@@ -25,7 +25,7 @@ func set_health(new_value: float):
on_death.emit() on_death.emit()
return return
on_health_change.emit(delta) on_health_change.emit(delta, health)
func decrease_health(value: float): func decrease_health(value: float):
var delta = _get_delta(value) var delta = _get_delta(value)
@@ -36,7 +36,7 @@ func decrease_health(value: float):
on_death.emit() on_death.emit()
return return
on_health_change.emit(delta) on_health_change.emit(delta, health)
func increase_health(value: float): func increase_health(value: float):
var delta = _get_delta(value) var delta = _get_delta(value)
@@ -45,9 +45,9 @@ func increase_health(value: float):
if health >= max_health: if health >= max_health:
health = max_health health = max_health
on_health_change.emit(delta) on_health_change.emit(delta, health)
return return
health += value health += value
on_health_change.emit(delta) on_health_change.emit(delta, health)

View File

@@ -0,0 +1,32 @@
class_name KnockbackComponent
extends Node
@export var character_body: CharacterBody2D
@export var knockback_force: float = 25.0
var knockback_mode: bool = false
var knockback_frames: int = 0
func apply_knockback(force: float, delta: float) -> void:
var velocity = character_body.velocity.normalized()
var knockback_dir = Vector2(sign(velocity.x) * 1.0, 0.4)
var knockback_vector = -knockback_dir * force * delta
character_body.velocity += knockback_vector
func _on_health_component_on_health_change(delta: float, total_health: float) -> void:
if total_health <= 0.0 and delta < 0.0:
return
knockback_mode = true
func _process(_delta: float) -> void:
if knockback_mode:
knockback_frames += 1
if knockback_frames > 1:
knockback_mode = false
knockback_frames = 0
func _physics_process(delta: float) -> void:
if knockback_mode:
apply_knockback(knockback_force, delta)

View File

@@ -0,0 +1,9 @@
class_name PlayerDeathComponent
extends Node
func reset_scene() -> void:
get_tree().reload_current_scene()
func _on_health_component_on_death() -> void:
# todo: play audio on death
call_deferred("reset_scene")