added attacks
This commit is contained in:
32
scene/attack.tscn
Normal file
32
scene/attack.tscn
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
[gd_scene load_steps=3 format=3 uid="uid://cq2qq7q4u7mx1"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://scripts/attack.gd" id="1_ag1vs"]
|
||||||
|
|
||||||
|
[sub_resource type="CircleShape2D" id="CircleShape2D_0cret"]
|
||||||
|
radius = 16.0
|
||||||
|
|
||||||
|
[node name="Attack" type="Node2D"]
|
||||||
|
script = ExtResource("1_ag1vs")
|
||||||
|
|
||||||
|
[node name="CPUParticles2D" type="CPUParticles2D" parent="."]
|
||||||
|
emitting = false
|
||||||
|
amount = 120
|
||||||
|
lifetime = 0.25
|
||||||
|
one_shot = true
|
||||||
|
explosiveness = 1.0
|
||||||
|
randomness = 0.05
|
||||||
|
emission_shape = 1
|
||||||
|
emission_sphere_radius = 4.0
|
||||||
|
spread = 180.0
|
||||||
|
gravity = Vector2(0, 0)
|
||||||
|
initial_velocity_min = 56.0
|
||||||
|
initial_velocity_max = 60.0
|
||||||
|
|
||||||
|
[node name="Area2D" type="Area2D" parent="."]
|
||||||
|
collision_layer = 0
|
||||||
|
collision_mask = 2
|
||||||
|
|
||||||
|
[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
|
||||||
|
shape = SubResource("CircleShape2D_0cret")
|
||||||
|
|
||||||
|
[connection signal="finished" from="CPUParticles2D" to="." method="_on_cpu_particles_2d_finished"]
|
||||||
@@ -14,3 +14,6 @@ texture = ExtResource("1_dmyxo")
|
|||||||
|
|
||||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||||
shape = SubResource("RectangleShape2D_miucj")
|
shape = SubResource("RectangleShape2D_miucj")
|
||||||
|
|
||||||
|
[node name="NavigationObstacle2D" type="NavigationObstacle2D" parent="."]
|
||||||
|
vertices = PackedVector2Array(5, 5, -5, 5, -5, -5, 5, -5)
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
radius = 6.0
|
radius = 6.0
|
||||||
|
|
||||||
[node name="Enemy" type="CharacterBody2D"]
|
[node name="Enemy" type="CharacterBody2D"]
|
||||||
|
collision_layer = 2
|
||||||
script = ExtResource("1_a6qhu")
|
script = ExtResource("1_a6qhu")
|
||||||
|
|
||||||
[node name="Sprite2D" type="Sprite2D" parent="."]
|
[node name="Sprite2D" type="Sprite2D" parent="."]
|
||||||
@@ -14,3 +15,9 @@ texture = ExtResource("2_jkluv")
|
|||||||
|
|
||||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||||
shape = SubResource("CircleShape2D_c7wcn")
|
shape = SubResource("CircleShape2D_c7wcn")
|
||||||
|
|
||||||
|
[node name="NavigationAgent2D" type="NavigationAgent2D" parent="."]
|
||||||
|
target_desired_distance = 16.0
|
||||||
|
path_postprocessing = 1
|
||||||
|
avoidance_enabled = true
|
||||||
|
radius = 8.0
|
||||||
|
|||||||
@@ -89,3 +89,20 @@ step = 0.1
|
|||||||
value = 1.0
|
value = 1.0
|
||||||
fill_mode = 3
|
fill_mode = 3
|
||||||
show_percentage = false
|
show_percentage = false
|
||||||
|
|
||||||
|
[node name="EntityCountContainer" type="PanelContainer" parent="."]
|
||||||
|
anchors_preset = 1
|
||||||
|
anchor_left = 1.0
|
||||||
|
anchor_right = 1.0
|
||||||
|
offset_left = -40.0
|
||||||
|
offset_bottom = 40.0
|
||||||
|
grow_horizontal = 0
|
||||||
|
|
||||||
|
[node name="MarginContainer" type="MarginContainer" parent="EntityCountContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
theme_override_constants/margin_left = 8
|
||||||
|
theme_override_constants/margin_right = 8
|
||||||
|
|
||||||
|
[node name="EntityCountLabel" type="Label" parent="EntityCountContainer/MarginContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
text = "Entity Count: 0"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
[gd_scene load_steps=11 format=3 uid="uid://b2amoasy4e08i"]
|
[gd_scene load_steps=24 format=3 uid="uid://b2amoasy4e08i"]
|
||||||
|
|
||||||
[ext_resource type="Texture2D" uid="uid://bsrmtons1ov7x" path="res://assets/maze.png" id="1_jp5wf"]
|
[ext_resource type="Texture2D" uid="uid://bsrmtons1ov7x" path="res://assets/maze.png" id="1_jp5wf"]
|
||||||
[ext_resource type="Script" path="res://scripts/maze.gd" id="1_u2iw0"]
|
[ext_resource type="Script" path="res://scripts/maze.gd" id="1_u2iw0"]
|
||||||
@@ -8,63 +8,168 @@
|
|||||||
[ext_resource type="Resource" uid="uid://bo7k3kmsq57xy" path="res://data/buffs/green_buff.tres" id="5_ho55u"]
|
[ext_resource type="Resource" uid="uid://bo7k3kmsq57xy" path="res://data/buffs/green_buff.tres" id="5_ho55u"]
|
||||||
[ext_resource type="Resource" uid="uid://tiv2o1xk5g7e" path="res://data/buffs/red_buff.tres" id="6_ll7oj"]
|
[ext_resource type="Resource" uid="uid://tiv2o1xk5g7e" path="res://data/buffs/red_buff.tres" id="6_ll7oj"]
|
||||||
|
|
||||||
|
[sub_resource type="NavigationPolygon" id="NavigationPolygon_6s0ud"]
|
||||||
|
vertices = PackedVector2Array(8, 8, 2, 8, 2, 2, 8, 2)
|
||||||
|
polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)])
|
||||||
|
outlines = Array[PackedVector2Array]([PackedVector2Array(2, 2, 8, 2, 8, 8, 2, 8)])
|
||||||
|
source_geometry_group_name = &"navigation_polygon_source_group"
|
||||||
|
agent_radius = 0.0
|
||||||
|
|
||||||
|
[sub_resource type="NavigationPolygon" id="NavigationPolygon_em7y3"]
|
||||||
|
vertices = PackedVector2Array(8, 8, 2, 8, 2, -8, 8, -8)
|
||||||
|
polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)])
|
||||||
|
outlines = Array[PackedVector2Array]([PackedVector2Array(2, -8, 8, -8, 8, 8, 2, 8)])
|
||||||
|
source_geometry_group_name = &"navigation_polygon_source_group"
|
||||||
|
agent_radius = 0.0
|
||||||
|
|
||||||
|
[sub_resource type="NavigationPolygon" id="NavigationPolygon_106v7"]
|
||||||
|
vertices = PackedVector2Array(8, -2, 2, -2, 2, -8, 8, -8)
|
||||||
|
polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)])
|
||||||
|
outlines = Array[PackedVector2Array]([PackedVector2Array(2, -8, 8, -8, 8, -2, 2, -2)])
|
||||||
|
source_geometry_group_name = &"navigation_polygon_source_group"
|
||||||
|
agent_radius = 0.0
|
||||||
|
|
||||||
|
[sub_resource type="NavigationPolygon" id="NavigationPolygon_ywxsi"]
|
||||||
|
vertices = PackedVector2Array(8, 8, -8, 8, -8, 2, 8, 2)
|
||||||
|
polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)])
|
||||||
|
outlines = Array[PackedVector2Array]([PackedVector2Array(-8, 2, 8, 2, 8, 8, -8, 8)])
|
||||||
|
source_geometry_group_name = &"navigation_polygon_source_group"
|
||||||
|
agent_radius = 0.0
|
||||||
|
|
||||||
|
[sub_resource type="NavigationPolygon" id="NavigationPolygon_xtsht"]
|
||||||
|
vertices = PackedVector2Array(8, 8, -8, 8, -8, -8, 8, -8)
|
||||||
|
polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)])
|
||||||
|
outlines = Array[PackedVector2Array]([PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)])
|
||||||
|
source_geometry_group_name = &"navigation_polygon_source_group"
|
||||||
|
agent_radius = 0.0
|
||||||
|
|
||||||
|
[sub_resource type="NavigationPolygon" id="NavigationPolygon_l7kt7"]
|
||||||
|
vertices = PackedVector2Array(8, -2, -8, -2, -8, -8, 8, -8)
|
||||||
|
polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)])
|
||||||
|
outlines = Array[PackedVector2Array]([PackedVector2Array(-8, -8, 8, -8, 8, -2, -8, -2)])
|
||||||
|
source_geometry_group_name = &"navigation_polygon_source_group"
|
||||||
|
agent_radius = 0.0
|
||||||
|
|
||||||
|
[sub_resource type="NavigationPolygon" id="NavigationPolygon_sbwbv"]
|
||||||
|
vertices = PackedVector2Array(-2, 8, -8, 8, -8, 2, -2, 2)
|
||||||
|
polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)])
|
||||||
|
outlines = Array[PackedVector2Array]([PackedVector2Array(-8, 2, -2, 2, -2, 8, -8, 8)])
|
||||||
|
source_geometry_group_name = &"navigation_polygon_source_group"
|
||||||
|
agent_radius = 0.0
|
||||||
|
|
||||||
|
[sub_resource type="NavigationPolygon" id="NavigationPolygon_amdei"]
|
||||||
|
vertices = PackedVector2Array(-2, 8, -8, 8, -8, -8, -2, -8)
|
||||||
|
polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)])
|
||||||
|
outlines = Array[PackedVector2Array]([PackedVector2Array(-8, -8, -2, -8, -2, 8, -8, 8)])
|
||||||
|
source_geometry_group_name = &"navigation_polygon_source_group"
|
||||||
|
agent_radius = 0.0
|
||||||
|
|
||||||
|
[sub_resource type="NavigationPolygon" id="NavigationPolygon_fuoof"]
|
||||||
|
vertices = PackedVector2Array(-2, -2, -8, -2, -8, -8, -2, -8)
|
||||||
|
polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)])
|
||||||
|
outlines = Array[PackedVector2Array]([PackedVector2Array(-8, -8, -2, -8, -2, -2, -8, -2)])
|
||||||
|
source_geometry_group_name = &"navigation_polygon_source_group"
|
||||||
|
agent_radius = 0.0
|
||||||
|
|
||||||
|
[sub_resource type="NavigationPolygon" id="NavigationPolygon_tco5v"]
|
||||||
|
vertices = PackedVector2Array(8, -8, 8, -2, -2, -2, -8, -8, -8, 8, -2, 8)
|
||||||
|
polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3), PackedInt32Array(4, 3, 2, 5)])
|
||||||
|
outlines = Array[PackedVector2Array]([PackedVector2Array(8, -2, -2, -2, -2, 8, -8, 8, -8, -8, 8, -8)])
|
||||||
|
source_geometry_group_name = &"navigation_polygon_source_group"
|
||||||
|
agent_radius = 0.0
|
||||||
|
|
||||||
|
[sub_resource type="NavigationPolygon" id="NavigationPolygon_tvjsp"]
|
||||||
|
vertices = PackedVector2Array(-2, 2, 8, 2, 8, 8, -8, 8, -8, -8, -2, -8)
|
||||||
|
polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3), PackedInt32Array(0, 3, 4, 5)])
|
||||||
|
outlines = Array[PackedVector2Array]([PackedVector2Array(-2, -8, -2, 2, 8, 2, 8, 8, -8, 8, -8, -8)])
|
||||||
|
source_geometry_group_name = &"navigation_polygon_source_group"
|
||||||
|
agent_radius = 0.0
|
||||||
|
|
||||||
|
[sub_resource type="NavigationPolygon" id="NavigationPolygon_pqq6a"]
|
||||||
|
vertices = PackedVector2Array(8, -8, 8, 8, 2, 8, 2, -2, -8, -8, -8, -2)
|
||||||
|
polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3), PackedInt32Array(4, 0, 3, 5)])
|
||||||
|
outlines = Array[PackedVector2Array]([PackedVector2Array(2, 8, 2, -2, -8, -2, -8, -8, 8, -8, 8, 8)])
|
||||||
|
source_geometry_group_name = &"navigation_polygon_source_group"
|
||||||
|
agent_radius = 0.0
|
||||||
|
|
||||||
|
[sub_resource type="NavigationPolygon" id="NavigationPolygon_mlmli"]
|
||||||
|
vertices = PackedVector2Array(8, 8, -8, 8, -8, 2, 2, 2, 8, -8, 2, -8)
|
||||||
|
polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3), PackedInt32Array(4, 0, 3, 5)])
|
||||||
|
outlines = Array[PackedVector2Array]([PackedVector2Array(-8, 2, 2, 2, 2, -8, 8, -8, 8, 8, -8, 8)])
|
||||||
|
source_geometry_group_name = &"navigation_polygon_source_group"
|
||||||
|
agent_radius = 0.0
|
||||||
|
|
||||||
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_e47fw"]
|
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_e47fw"]
|
||||||
texture = ExtResource("1_jp5wf")
|
texture = ExtResource("1_jp5wf")
|
||||||
0:0/0 = 0
|
0:0/0 = 0
|
||||||
0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
||||||
0:0/0/physics_layer_0/angular_velocity = 0.0
|
0:0/0/physics_layer_0/angular_velocity = 0.0
|
||||||
0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(8, -8, 8, -6, -6, -6, -6, 8, -8, 8, -8, -8)
|
0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(8, -8, 8, -6, -6, -6, -6, 8, -8, 8, -8, -8)
|
||||||
|
0:0/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_6s0ud")
|
||||||
1:0/0 = 0
|
1:0/0 = 0
|
||||||
1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
||||||
1:0/0/physics_layer_0/angular_velocity = 0.0
|
1:0/0/physics_layer_0/angular_velocity = 0.0
|
||||||
1:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(8, -8, 8, -6, -8, -6, -8, -8)
|
1:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(8, -8, 8, -6, -8, -6, -8, -8)
|
||||||
|
1:0/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_ywxsi")
|
||||||
2:0/0 = 0
|
2:0/0 = 0
|
||||||
2:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
2:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
||||||
2:0/0/physics_layer_0/angular_velocity = 0.0
|
2:0/0/physics_layer_0/angular_velocity = 0.0
|
||||||
2:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(8, 8, 6, 8, 6, -6, -8, -6, -8, -8, 8, -8)
|
2:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(8, 8, 6, 8, 6, -6, -8, -6, -8, -8, 8, -8)
|
||||||
|
2:0/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_sbwbv")
|
||||||
0:1/0 = 0
|
0:1/0 = 0
|
||||||
0:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
0:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
||||||
0:1/0/physics_layer_0/angular_velocity = 0.0
|
0:1/0/physics_layer_0/angular_velocity = 0.0
|
||||||
0:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, -6, -8, -6, 8, -8, 8)
|
0:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, -6, -8, -6, 8, -8, 8)
|
||||||
|
0:1/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_em7y3")
|
||||||
1:1/0 = 0
|
1:1/0 = 0
|
||||||
1:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
1:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
||||||
1:1/0/physics_layer_0/angular_velocity = 0.0
|
1:1/0/physics_layer_0/angular_velocity = 0.0
|
||||||
|
1:1/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_xtsht")
|
||||||
2:1/0 = 0
|
2:1/0 = 0
|
||||||
2:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
2:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
||||||
2:1/0/physics_layer_0/angular_velocity = 0.0
|
2:1/0/physics_layer_0/angular_velocity = 0.0
|
||||||
2:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(8, -8, 6, -8, 6, 8, 8, 8)
|
2:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(8, -8, 6, -8, 6, 8, 8, 8)
|
||||||
|
2:1/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_amdei")
|
||||||
0:2/0 = 0
|
0:2/0 = 0
|
||||||
0:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
0:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
||||||
0:2/0/physics_layer_0/angular_velocity = 0.0
|
0:2/0/physics_layer_0/angular_velocity = 0.0
|
||||||
0:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, -6, -8, -6, 6, 8, 6, 8, 8, -8, 8)
|
0:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, -6, -8, -6, 6, 8, 6, 8, 8, -8, 8)
|
||||||
|
0:2/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_106v7")
|
||||||
1:2/0 = 0
|
1:2/0 = 0
|
||||||
1:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
1:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
||||||
1:2/0/physics_layer_0/angular_velocity = 0.0
|
1:2/0/physics_layer_0/angular_velocity = 0.0
|
||||||
1:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(8, 8, 8, 6, -8, 6, -8, 8)
|
1:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(8, 8, 8, 6, -8, 6, -8, 8)
|
||||||
|
1:2/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_l7kt7")
|
||||||
2:2/0 = 0
|
2:2/0 = 0
|
||||||
2:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
2:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
||||||
2:2/0/physics_layer_0/angular_velocity = 0.0
|
2:2/0/physics_layer_0/angular_velocity = 0.0
|
||||||
2:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 8, -8, 6, 6, 6, 6, -8, 8, -8, 8, 8)
|
2:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 8, -8, 6, 6, 6, 6, -8, 8, -8, 8, 8)
|
||||||
|
2:2/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_fuoof")
|
||||||
3:0/0 = 0
|
3:0/0 = 0
|
||||||
3:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
3:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
||||||
3:0/0/physics_layer_0/angular_velocity = 0.0
|
3:0/0/physics_layer_0/angular_velocity = 0.0
|
||||||
3:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(6, 6, 6, 8, 8, 8, 8, 6)
|
3:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(6, 6, 6, 8, 8, 8, 8, 6)
|
||||||
|
3:0/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_tco5v")
|
||||||
4:1/0 = 0
|
4:1/0 = 0
|
||||||
4:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
4:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
||||||
4:1/0/physics_layer_0/angular_velocity = 0.0
|
4:1/0/physics_layer_0/angular_velocity = 0.0
|
||||||
4:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, -8, -6, -6, -6, -6, -8)
|
4:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, -8, -6, -6, -6, -6, -8)
|
||||||
|
4:1/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_mlmli")
|
||||||
4:0/0 = 0
|
4:0/0 = 0
|
||||||
4:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
4:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
||||||
4:0/0/physics_layer_0/angular_velocity = 0.0
|
4:0/0/physics_layer_0/angular_velocity = 0.0
|
||||||
4:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 6, -8, 8, -6, 8, -6, 6)
|
4:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 6, -8, 8, -6, 8, -6, 6)
|
||||||
|
4:0/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_pqq6a")
|
||||||
3:1/0 = 0
|
3:1/0 = 0
|
||||||
3:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
3:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
||||||
3:1/0/physics_layer_0/angular_velocity = 0.0
|
3:1/0/physics_layer_0/angular_velocity = 0.0
|
||||||
3:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(6, -8, 6, -6, 8, -6, 8, -8)
|
3:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(6, -8, 6, -6, 8, -6, 8, -8)
|
||||||
|
3:1/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_tvjsp")
|
||||||
|
|
||||||
[sub_resource type="TileSet" id="TileSet_dy2x8"]
|
[sub_resource type="TileSet" id="TileSet_dy2x8"]
|
||||||
physics_layer_0/collision_layer = 1
|
physics_layer_0/collision_layer = 1
|
||||||
physics_layer_0/collision_mask = 0
|
physics_layer_0/collision_mask = 0
|
||||||
|
navigation_layer_0/layers = 1
|
||||||
sources/0 = SubResource("TileSetAtlasSource_e47fw")
|
sources/0 = SubResource("TileSetAtlasSource_e47fw")
|
||||||
|
|
||||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_hodhv"]
|
[sub_resource type="RectangleShape2D" id="RectangleShape2D_hodhv"]
|
||||||
@@ -155,3 +260,5 @@ position = Vector2(-8, 344)
|
|||||||
buff = ExtResource("6_ll7oj")
|
buff = ExtResource("6_ll7oj")
|
||||||
|
|
||||||
[node name="HUD" parent="." instance=ExtResource("4_7uel4")]
|
[node name="HUD" parent="." instance=ExtResource("4_7uel4")]
|
||||||
|
|
||||||
|
[node name="EntityContainer" type="Node" parent="."]
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
radius = 6.0
|
radius = 6.0
|
||||||
|
|
||||||
[node name="Player" type="CharacterBody2D"]
|
[node name="Player" type="CharacterBody2D"]
|
||||||
|
collision_layer = 2
|
||||||
script = ExtResource("1_veifk")
|
script = ExtResource("1_veifk")
|
||||||
|
|
||||||
[node name="Sprite2D" type="Sprite2D" parent="."]
|
[node name="Sprite2D" type="Sprite2D" parent="."]
|
||||||
|
|||||||
23
scripts/attack.gd
Normal file
23
scripts/attack.gd
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
extends Node2D
|
||||||
|
class_name Attack
|
||||||
|
|
||||||
|
@onready var cpu_particles_2d: CPUParticles2D = $CPUParticles2D
|
||||||
|
@onready var area_2d: Area2D = $Area2D
|
||||||
|
|
||||||
|
var initiator: Entity
|
||||||
|
|
||||||
|
func set_initiator(entity: Entity) -> void:
|
||||||
|
position = entity.position
|
||||||
|
initiator = entity
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
cpu_particles_2d.emitting = true
|
||||||
|
cpu_particles_2d.color = initiator.color
|
||||||
|
|
||||||
|
func _on_cpu_particles_2d_finished() -> void:
|
||||||
|
var collisions := area_2d.get_overlapping_bodies()
|
||||||
|
for object in collisions:
|
||||||
|
if object is Entity and object != initiator:
|
||||||
|
object.hit()
|
||||||
|
print("attack hit %s" % collisions.size())
|
||||||
|
queue_free()
|
||||||
@@ -1,23 +1,20 @@
|
|||||||
extends CharacterBody2D
|
extends Entity
|
||||||
class_name Enemy
|
class_name Enemy
|
||||||
|
|
||||||
@onready var sprite_2d: Sprite2D = $Sprite2D
|
@onready var sprite_2d: Sprite2D = $Sprite2D
|
||||||
|
@onready var nav_agent: NavigationAgent2D = $NavigationAgent2D
|
||||||
|
|
||||||
var color := Color.WHITE
|
var vision: int = 100
|
||||||
@export var speed = 100
|
|
||||||
var lives: int = 1
|
|
||||||
|
|
||||||
func _physics_process(delta: float) -> void:
|
func _physics_process(delta: float) -> void:
|
||||||
velocity = Vector2.ZERO
|
if nav_agent.is_navigation_finished():
|
||||||
if Input.is_action_pressed("ui_down"):
|
call_deferred("new_target_point")
|
||||||
velocity += Vector2.DOWN
|
return
|
||||||
if Input.is_action_pressed("ui_up"):
|
|
||||||
velocity += Vector2.UP
|
var current_agent_position: Vector2 = global_position
|
||||||
if Input.is_action_pressed("ui_left"):
|
var next_path_position: Vector2 = nav_agent.get_next_path_position()
|
||||||
velocity += Vector2.LEFT
|
|
||||||
if Input.is_action_pressed("ui_right"):
|
velocity = current_agent_position.direction_to(next_path_position) * speed
|
||||||
velocity += Vector2.RIGHT
|
|
||||||
velocity = velocity.normalized() * speed
|
|
||||||
move_and_slide()
|
move_and_slide()
|
||||||
for i in range(get_slide_collision_count()):
|
for i in range(get_slide_collision_count()):
|
||||||
var collision := get_slide_collision(i)
|
var collision := get_slide_collision(i)
|
||||||
@@ -35,3 +32,19 @@ func _physics_process(delta: float) -> void:
|
|||||||
speed += 12
|
speed += 12
|
||||||
color.b -= 0.25
|
color.b -= 0.25
|
||||||
sprite_2d.modulate = color
|
sprite_2d.modulate = color
|
||||||
|
|
||||||
|
func new_target_point():
|
||||||
|
# Wait for the first physics frame so the NavigationServer can sync.
|
||||||
|
await get_tree().physics_frame
|
||||||
|
|
||||||
|
var target_point := Vector2.from_angle(randf_range(0.0, TAU)) * vision
|
||||||
|
var map := get_world_2d().navigation_map
|
||||||
|
var closest_point := NavigationServer2D.map_get_closest_point(map, global_position + target_point)
|
||||||
|
var point_delta := closest_point - target_point
|
||||||
|
var is_on_map = point_delta.is_zero_approx() # Answer to original question!
|
||||||
|
#if not is_on_map:
|
||||||
|
## Wasn't on the map, so push in from edge. If you have thin sections on
|
||||||
|
## your navmesh, this could push it back off the navmesh!
|
||||||
|
#point_delta = point_delta.normalized()
|
||||||
|
#closest_point += point_delta * 32
|
||||||
|
nav_agent.target_position = closest_point
|
||||||
|
|||||||
14
scripts/entity.gd
Normal file
14
scripts/entity.gd
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
extends CharacterBody2D
|
||||||
|
class_name Entity
|
||||||
|
|
||||||
|
signal death
|
||||||
|
|
||||||
|
var color := Color.WHITE
|
||||||
|
@export var speed = 100
|
||||||
|
var lives: int = 1
|
||||||
|
|
||||||
|
func hit() -> void:
|
||||||
|
lives -= 1
|
||||||
|
if lives <= 0:
|
||||||
|
death.emit()
|
||||||
|
queue_free()
|
||||||
@@ -6,6 +6,7 @@ class_name HUD
|
|||||||
@onready var progress_bar_blue: ProgressBar = $PanelContainer/MarginContainer/VBoxContainer/HBoxContainer/PanelContainerBlue/ProgressBar
|
@onready var progress_bar_blue: ProgressBar = $PanelContainer/MarginContainer/VBoxContainer/HBoxContainer/PanelContainerBlue/ProgressBar
|
||||||
@onready var texture_rect: TextureRect = $PanelContainer/MarginContainer/VBoxContainer/TextureRect
|
@onready var texture_rect: TextureRect = $PanelContainer/MarginContainer/VBoxContainer/TextureRect
|
||||||
@onready var lives_container: GridContainer = $PanelContainer/MarginContainer/VBoxContainer/LivesContainer
|
@onready var lives_container: GridContainer = $PanelContainer/MarginContainer/VBoxContainer/LivesContainer
|
||||||
|
@onready var entity_count_label: Label = $EntityCountContainer/MarginContainer/EntityCountLabel
|
||||||
const HEART = preload("res://assets/heart.png")
|
const HEART = preload("res://assets/heart.png")
|
||||||
|
|
||||||
func _on_player_color_changed(color: Color) -> void:
|
func _on_player_color_changed(color: Color) -> void:
|
||||||
@@ -23,3 +24,6 @@ func _on_player_lives_changed(lives: int) -> void:
|
|||||||
lives_container.add_child(life)
|
lives_container.add_child(life)
|
||||||
elif heart_containers.size() > lives:
|
elif heart_containers.size() > lives:
|
||||||
heart_containers.pop_back().queue_free()
|
heart_containers.pop_back().queue_free()
|
||||||
|
|
||||||
|
func update_entity_count(count: int):
|
||||||
|
entity_count_label.text = "Entity Count: %s" % count
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ var spawn_locations: Array[Vector2] = []
|
|||||||
|
|
||||||
@onready var hud: HUD = $HUD
|
@onready var hud: HUD = $HUD
|
||||||
@onready var spawn_zones: Node2D = $SpawnZones
|
@onready var spawn_zones: Node2D = $SpawnZones
|
||||||
|
@onready var entity_container: Node = $EntityContainer
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
var spawn_zone_array := spawn_zones.get_children()
|
var spawn_zone_array := spawn_zones.get_children()
|
||||||
@@ -17,6 +18,7 @@ func _ready() -> void:
|
|||||||
for x in range(zone.shape.size.x / 16):
|
for x in range(zone.shape.size.x / 16):
|
||||||
for y in range(zone.shape.size.y / 16):
|
for y in range(zone.shape.size.y / 16):
|
||||||
spawn_locations.append(top_left + Vector2(x * 16, y * 16))
|
spawn_locations.append(top_left + Vector2(x * 16, y * 16))
|
||||||
|
hud.update_entity_count(spawn_locations.size())
|
||||||
var player_loc: Vector2 = spawn_locations.pick_random()
|
var player_loc: Vector2 = spawn_locations.pick_random()
|
||||||
for spawn in spawn_locations:
|
for spawn in spawn_locations:
|
||||||
var entity
|
var entity
|
||||||
@@ -27,4 +29,9 @@ func _ready() -> void:
|
|||||||
else:
|
else:
|
||||||
entity = ENEMY.instantiate()
|
entity = ENEMY.instantiate()
|
||||||
entity.position = spawn
|
entity.position = spawn
|
||||||
add_child(entity)
|
entity.death.connect(_on_entity_death)
|
||||||
|
entity_container.add_child(entity)
|
||||||
|
|
||||||
|
func _on_entity_death():
|
||||||
|
var entities = entity_container.get_child_count()
|
||||||
|
hud.update_entity_count(entities)
|
||||||
|
|||||||
@@ -1,14 +1,12 @@
|
|||||||
extends CharacterBody2D
|
extends Entity
|
||||||
class_name Player
|
class_name Player
|
||||||
|
|
||||||
signal color_changed(color: Color)
|
signal color_changed(color: Color)
|
||||||
signal lives_changed(lives: int)
|
signal lives_changed(lives: int)
|
||||||
|
|
||||||
@onready var sprite_2d: Sprite2D = $Sprite2D
|
@onready var sprite_2d: Sprite2D = $Sprite2D
|
||||||
|
const ATTACK := preload("res://scene/attack.tscn")
|
||||||
|
|
||||||
var color := Color.WHITE
|
|
||||||
@export var speed = 100
|
|
||||||
var lives: int = 1
|
|
||||||
|
|
||||||
func _physics_process(delta: float) -> void:
|
func _physics_process(delta: float) -> void:
|
||||||
var input_direction = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
|
var input_direction = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
|
||||||
@@ -33,3 +31,8 @@ func _physics_process(delta: float) -> void:
|
|||||||
color.b -= 0.25
|
color.b -= 0.25
|
||||||
sprite_2d.modulate = color
|
sprite_2d.modulate = color
|
||||||
color_changed.emit(color)
|
color_changed.emit(color)
|
||||||
|
|
||||||
|
if Input.is_action_just_pressed("ui_accept"):
|
||||||
|
var attack: Attack = ATTACK.instantiate()
|
||||||
|
attack.set_initiator(self)
|
||||||
|
get_parent().add_sibling(attack)
|
||||||
|
|||||||
Reference in New Issue
Block a user