Add new level, collapsable component, knockback component
This commit is contained in:
@@ -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="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="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/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"]
|
||||
size = Vector2(16, 31)
|
||||
@@ -46,3 +49,18 @@ player_controller = NodePath("..")
|
||||
|
||||
[node name="ScoreComponent" type="Node" parent="."]
|
||||
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"]
|
||||
|
@@ -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="Script" path="res://scripts/components/collapsable.gd" id="2_3vvum"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_l44jt"]
|
||||
size = Vector2(16, 4)
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_sfbe2"]
|
||||
size = Vector2(16, 2)
|
||||
|
||||
[node name="Collapsing Bridge" type="StaticBody2D"]
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
@@ -17,3 +21,30 @@ texture = ExtResource("1_rka1x")
|
||||
hframes = 12
|
||||
vframes = 12
|
||||
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
23
objects/damage_test.tscn
Normal 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
24
objects/level/level1.tscn
Normal file
File diff suppressed because one or more lines are too long
118
objects/level/village/background_layer.tscn
Normal file
118
objects/level/village/background_layer.tscn
Normal 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")
|
143
objects/level/village/entities_layer.tscn
Normal file
143
objects/level/village/entities_layer.tscn
Normal 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")
|
118
objects/level/village/foreground_layer.tscn
Normal file
118
objects/level/village/foreground_layer.tscn
Normal 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")
|
19
objects/level/village/small_foreground_layer.tscn
Normal file
19
objects/level/village/small_foreground_layer.tscn
Normal 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")
|
7
objects/level/village/terrain_layer.tscn
Normal file
7
objects/level/village/terrain_layer.tscn
Normal file
File diff suppressed because one or more lines are too long
@@ -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="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="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://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"]
|
||||
offsets = PackedFloat32Array(1)
|
||||
@@ -250,6 +252,7 @@ texture = ExtResource("1_5lb42")
|
||||
|
||||
[sub_resource type="TileSetScenesCollectionSource" id="TileSetScenesCollectionSource_v3eon"]
|
||||
scenes/1/scene = ExtResource("3_ygehw")
|
||||
scenes/2/scene = ExtResource("6_84ckv")
|
||||
|
||||
[sub_resource type="TileSet" id="TileSet_yf4x4"]
|
||||
physics_layer_0/collision_layer = 1
|
||||
@@ -396,7 +399,7 @@ tile_map_data = PackedByteArray("AAD8////AAABAAAAAAD9////AAABAAAAAAD+////AAABAAA
|
||||
tile_set = ExtResource("1_d680t")
|
||||
|
||||
[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")
|
||||
|
||||
[node name="Foreground layer" type="TileMapLayer" parent="."]
|
||||
@@ -413,3 +416,6 @@ metadata/_edit_group_ = true
|
||||
|
||||
[node name="Camera2D" type="Camera2D" parent="."]
|
||||
position = Vector2(237, -100)
|
||||
|
||||
[node name="Damage" parent="." instance=ExtResource("7_a6wgf")]
|
||||
position = Vector2(64, -89)
|
||||
|
55
scripts/components/collapsable.gd
Normal file
55
scripts/components/collapsable.gd
Normal 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()
|
@@ -9,14 +9,14 @@ var root: Node
|
||||
signal collected(amount: int)
|
||||
|
||||
func _ready() -> void:
|
||||
if area2d:
|
||||
area2d.body_entered.connect(_on_area2d_body_entered)
|
||||
else:
|
||||
print("Collectable node missing Area2D child.")
|
||||
if area2d:
|
||||
area2d.body_entered.connect(_on_area2d_body_entered)
|
||||
else:
|
||||
print("Collectable node missing Area2D child.")
|
||||
|
||||
root = get_parent()
|
||||
root = get_parent()
|
||||
|
||||
func _on_area2d_body_entered(body: Node2D) -> void:
|
||||
if body.has_node("CanPickUpComponent"):
|
||||
collected.emit(collectable_data.amount)
|
||||
root.queue_free()
|
||||
if body.has_node("CanPickUpComponent"):
|
||||
collected.emit(collectable_data.amount)
|
||||
root.queue_free()
|
||||
|
@@ -1,7 +1,20 @@
|
||||
class_name DamageComponent
|
||||
extends Node2D
|
||||
extends Node
|
||||
|
||||
@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):
|
||||
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)
|
||||
|
@@ -1,10 +1,10 @@
|
||||
class_name HealthComponent
|
||||
extends Node2D
|
||||
extends Node
|
||||
|
||||
@export var 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
|
||||
|
||||
func _get_delta(value: float) -> float:
|
||||
@@ -16,7 +16,7 @@ func set_health(new_value: float):
|
||||
|
||||
if new_value >= max_health:
|
||||
health = max_health
|
||||
on_health_change.emit(delta)
|
||||
on_health_change.emit(delta, health)
|
||||
return
|
||||
|
||||
health = new_value
|
||||
@@ -25,7 +25,7 @@ func set_health(new_value: float):
|
||||
on_death.emit()
|
||||
return
|
||||
|
||||
on_health_change.emit(delta)
|
||||
on_health_change.emit(delta, health)
|
||||
|
||||
func decrease_health(value: float):
|
||||
var delta = _get_delta(value)
|
||||
@@ -36,7 +36,7 @@ func decrease_health(value: float):
|
||||
on_death.emit()
|
||||
return
|
||||
|
||||
on_health_change.emit(delta)
|
||||
on_health_change.emit(delta, health)
|
||||
|
||||
func increase_health(value: float):
|
||||
var delta = _get_delta(value)
|
||||
@@ -45,9 +45,9 @@ func increase_health(value: float):
|
||||
|
||||
if health >= max_health:
|
||||
health = max_health
|
||||
on_health_change.emit(delta)
|
||||
on_health_change.emit(delta, health)
|
||||
return
|
||||
|
||||
health += value
|
||||
on_health_change.emit(delta)
|
||||
on_health_change.emit(delta, health)
|
||||
|
||||
|
32
scripts/components/knockback.gd
Normal file
32
scripts/components/knockback.gd
Normal 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)
|
||||
|
||||
|
9
scripts/components/player_death.gd
Normal file
9
scripts/components/player_death.gd
Normal 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")
|
@@ -4,17 +4,17 @@ extends Node
|
||||
@onready var game_manager: GM = $"/root/GameManager"
|
||||
|
||||
func _ready():
|
||||
await get_tree().process_frame
|
||||
var coins = get_tree().get_nodes_in_group("coins")
|
||||
|
||||
for coin in coins:
|
||||
coin.connect("collected", on_collected)
|
||||
await get_tree().process_frame
|
||||
var coins = get_tree().get_nodes_in_group("coins")
|
||||
|
||||
for coin in coins:
|
||||
coin.connect("collected", on_collected)
|
||||
|
||||
func on_collected(amount: int) -> void:
|
||||
if not game_manager:
|
||||
return
|
||||
if not game_manager:
|
||||
return
|
||||
|
||||
game_manager.add_coins(amount)
|
||||
print("Coins: ", game_manager.get_coins())
|
||||
# todo: play sound
|
||||
# todo: update ui
|
||||
game_manager.add_coins(amount)
|
||||
print("Coins: ", game_manager.get_coins())
|
||||
# todo: play sound
|
||||
# todo: update ui
|
||||
|
Reference in New Issue
Block a user