Optimize enemy script
This commit is contained in:
parent
091a96f6ed
commit
8158c96dad
8 changed files with 79 additions and 62 deletions
|
@ -13,5 +13,5 @@ func _on_VisibilityNotifier2D_screen_exited():
|
||||||
|
|
||||||
func _on_Bullet_body_entered(body):
|
func _on_Bullet_body_entered(body):
|
||||||
if body.is_in_group("Enemy"):
|
if body.is_in_group("Enemy"):
|
||||||
body.hit(damage)
|
body.get_parent().hit(damage)
|
||||||
queue_free()
|
queue_free()
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
[gd_scene load_steps=15 format=3 uid="uid://clceqphyig48x"]
|
[gd_scene load_steps=14 format=3 uid="uid://bdkpehb7sykww"]
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://scripts/stages/stage 1/walk.gd" id="1_ic50n"]
|
[ext_resource type="Script" path="res://scripts/enemies/enemy.gd" id="1_oeuts"]
|
||||||
[ext_resource type="Script" path="res://scripts/enemies/enemy-1.gd" id="2_2ldr2"]
|
|
||||||
[ext_resource type="Texture2D" uid="uid://b046l0oy0hyj2" path="res://assets/spritesheets/enemy-1.png" id="2_ndkpn"]
|
[ext_resource type="Texture2D" uid="uid://b046l0oy0hyj2" path="res://assets/spritesheets/enemy-1.png" id="2_ndkpn"]
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id="AtlasTexture_17kv3"]
|
[sub_resource type="AtlasTexture" id="AtlasTexture_17kv3"]
|
||||||
|
@ -82,23 +81,22 @@ height = 39.999
|
||||||
[node name="PathFollow2D" type="PathFollow2D"]
|
[node name="PathFollow2D" type="PathFollow2D"]
|
||||||
rotation = 0.00699289
|
rotation = 0.00699289
|
||||||
loop = false
|
loop = false
|
||||||
script = ExtResource("1_ic50n")
|
script = ExtResource("1_oeuts")
|
||||||
|
|
||||||
[node name="enemy" type="CharacterBody2D" parent="." groups=["Enemy"]]
|
[node name="Enemy" type="CharacterBody2D" parent="." groups=["Enemy"]]
|
||||||
script = ExtResource("2_2ldr2")
|
|
||||||
|
|
||||||
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="enemy"]
|
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="Enemy"]
|
||||||
position = Vector2(9.15527e-05, 0.00012207)
|
position = Vector2(9.15527e-05, 0.00012207)
|
||||||
scale = Vector2(0.176347, 0.175058)
|
scale = Vector2(0.176347, 0.175058)
|
||||||
sprite_frames = SubResource("SpriteFrames_kipn1")
|
sprite_frames = SubResource("SpriteFrames_kipn1")
|
||||||
autoplay = "default"
|
autoplay = "default"
|
||||||
frame_progress = 0.735051
|
frame_progress = 0.735051
|
||||||
|
|
||||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="enemy"]
|
[node name="CollisionShape2D" type="CollisionShape2D" parent="Enemy"]
|
||||||
position = Vector2(-0.992983, 1.00696)
|
position = Vector2(-0.992983, 1.00696)
|
||||||
shape = SubResource("CapsuleShape2D_5hy1j")
|
shape = SubResource("CapsuleShape2D_5hy1j")
|
||||||
|
|
||||||
[node name="HealthBar" type="ProgressBar" parent="enemy"]
|
[node name="HealthBar" type="ProgressBar" parent="Enemy"]
|
||||||
modulate = Color(0.431373, 0.815686, 0, 1)
|
modulate = Color(0.431373, 0.815686, 0, 1)
|
||||||
offset_left = -15.1814
|
offset_left = -15.1814
|
||||||
offset_top = -25.8945
|
offset_top = -25.8945
|
||||||
|
@ -106,7 +104,3 @@ offset_right = 86.8186
|
||||||
offset_bottom = 1.10553
|
offset_bottom = 1.10553
|
||||||
scale = Vector2(0.3, 0.3)
|
scale = Vector2(0.3, 0.3)
|
||||||
show_percentage = false
|
show_percentage = false
|
||||||
|
|
||||||
[node name="_Timer_66182" type="Timer" parent="."]
|
|
||||||
wait_time = 0.2
|
|
||||||
one_shot = true
|
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
[gd_scene load_steps=12 format=3 uid="uid://btdewn34d67m"]
|
[gd_scene load_steps=11 format=3 uid="uid://btdewn34d67m"]
|
||||||
|
|
||||||
[ext_resource type="Texture2D" uid="uid://cnxj0mf3luxo" path="res://assets/tileset/ashlands/tf_A5_ashlands_3.png" id="1_rhsei"]
|
[ext_resource type="Texture2D" uid="uid://cnxj0mf3luxo" path="res://assets/tileset/ashlands/tf_A5_ashlands_3.png" id="1_rhsei"]
|
||||||
[ext_resource type="Script" path="res://scripts/stages/stage 1/GameManager.gd" id="1_yugmb"]
|
[ext_resource type="Script" path="res://scripts/stages/stage 1/GameManager.gd" id="1_yugmb"]
|
||||||
[ext_resource type="Texture2D" uid="uid://danbfdqmqu23q" path="res://assets/tileset/ashlands/tf_B_ashlands_3.png" id="2_ao304"]
|
[ext_resource type="Texture2D" uid="uid://danbfdqmqu23q" path="res://assets/tileset/ashlands/tf_B_ashlands_3.png" id="2_ao304"]
|
||||||
[ext_resource type="Script" path="res://scripts/stages/stage 1/summon.gd" id="3_wqx3u"]
|
[ext_resource type="Script" path="res://scripts/stages/stage 1/summon.gd" id="3_wqx3u"]
|
||||||
[ext_resource type="PackedScene" uid="uid://clceqphyig48x" path="res://scenes/enemies/enemy-1.tscn" id="4_iivll"]
|
|
||||||
[ext_resource type="PackedScene" uid="uid://cd5r1v6f8hahx" path="res://scenes/ui/tower-menu.tscn" id="6_p2t31"]
|
[ext_resource type="PackedScene" uid="uid://cd5r1v6f8hahx" path="res://scenes/ui/tower-menu.tscn" id="6_p2t31"]
|
||||||
[ext_resource type="PackedScene" uid="uid://bvoenhbaqiqj2" path="res://scenes/towers/placement/placement.tscn" id="8_ftqhi"]
|
[ext_resource type="PackedScene" uid="uid://bvoenhbaqiqj2" path="res://scenes/towers/placement/placement.tscn" id="8_ftqhi"]
|
||||||
|
|
||||||
|
@ -542,7 +541,9 @@ layer_1/tile_data = PackedInt32Array(196628, 262146, 6, 131089, 2, 13, 720899, 3
|
||||||
[node name="Path2D" type="Path2D" parent="."]
|
[node name="Path2D" type="Path2D" parent="."]
|
||||||
curve = SubResource("Curve2D_csucy")
|
curve = SubResource("Curve2D_csucy")
|
||||||
script = ExtResource("3_wqx3u")
|
script = ExtResource("3_wqx3u")
|
||||||
enemy = ExtResource("4_iivll")
|
|
||||||
|
[node name="Timer" type="Timer" parent="Path2D"]
|
||||||
|
one_shot = true
|
||||||
|
|
||||||
[node name="CanvasLayer" type="CanvasLayer" parent="."]
|
[node name="CanvasLayer" type="CanvasLayer" parent="."]
|
||||||
|
|
||||||
|
@ -559,3 +560,5 @@ position = Vector2(676, 192)
|
||||||
|
|
||||||
[node name="placement3" parent="Placements" instance=ExtResource("8_ftqhi")]
|
[node name="placement3" parent="Placements" instance=ExtResource("8_ftqhi")]
|
||||||
position = Vector2(844, 393)
|
position = Vector2(844, 393)
|
||||||
|
|
||||||
|
[connection signal="timeout" from="Path2D/Timer" to="Path2D" method="_on_timer_timeout"]
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
extends CharacterBody2D
|
|
||||||
|
|
||||||
@export var health : int = 100
|
|
||||||
|
|
||||||
func _process(delta):
|
|
||||||
update_healthbar()
|
|
||||||
if health <= 0:
|
|
||||||
queue_free()
|
|
||||||
|
|
||||||
func update_healthbar():
|
|
||||||
$HealthBar.value = health
|
|
||||||
|
|
||||||
if health >= 100:
|
|
||||||
$HealthBar.visible = false
|
|
||||||
else:
|
|
||||||
$HealthBar.visible = true
|
|
||||||
|
|
||||||
func hit(damage : int):
|
|
||||||
health = health - damage
|
|
31
scripts/enemies/enemy.gd
Normal file
31
scripts/enemies/enemy.gd
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
extends PathFollow2D
|
||||||
|
|
||||||
|
var config = null
|
||||||
|
var enemy_id: int = 0
|
||||||
|
var health: int = 0
|
||||||
|
var speed: int = 0
|
||||||
|
|
||||||
|
func set_config(config_path):
|
||||||
|
config = load(config_path).new()
|
||||||
|
|
||||||
|
func set_enemy(id: int):
|
||||||
|
enemy_id = id
|
||||||
|
health = config.enemy[enemy_id]['health']
|
||||||
|
speed = config.enemy[enemy_id]['speed']
|
||||||
|
|
||||||
|
func _process(delta):
|
||||||
|
update_healthbar()
|
||||||
|
if health <= 0:
|
||||||
|
queue_free()
|
||||||
|
set_progress(get_progress() + speed * delta)
|
||||||
|
|
||||||
|
func update_healthbar():
|
||||||
|
$Enemy/HealthBar.value = health
|
||||||
|
|
||||||
|
if health >= 100:
|
||||||
|
$Enemy/HealthBar.visible = false
|
||||||
|
else:
|
||||||
|
$Enemy/HealthBar.visible = true
|
||||||
|
|
||||||
|
func hit(damage : int):
|
||||||
|
health = health - damage
|
|
@ -2,6 +2,11 @@ extends Node
|
||||||
|
|
||||||
class_name Config
|
class_name Config
|
||||||
|
|
||||||
|
var game = {
|
||||||
|
"spawn_timer": 3.0,
|
||||||
|
"offset": [-30.0, 30.0]
|
||||||
|
}
|
||||||
|
|
||||||
var menu = [
|
var menu = [
|
||||||
{
|
{
|
||||||
"name": "Cannon",
|
"name": "Cannon",
|
||||||
|
@ -85,3 +90,13 @@ var tower = [
|
||||||
"damage": 40
|
"damage": 40
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
var enemy = [
|
||||||
|
{
|
||||||
|
"name": "Demon",
|
||||||
|
"asset": "preload()",
|
||||||
|
"health": 100,
|
||||||
|
"speed": 30,
|
||||||
|
"damage": 1
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
|
@ -1,24 +1,28 @@
|
||||||
extends Path2D
|
extends Path2D
|
||||||
|
|
||||||
var timer = 0
|
@onready var timer = $Timer
|
||||||
@export var spawnTime = 3
|
|
||||||
|
var config_path = "res://scripts/stages/stage 1/Config.gd"
|
||||||
|
var config = load(config_path).new()
|
||||||
|
|
||||||
var spawn_first: bool = true
|
var spawn_first: bool = true
|
||||||
|
|
||||||
@export var enemy: PackedScene = null
|
var enemy: PackedScene = preload("res://scenes/enemies/enemy-1.tscn")
|
||||||
|
|
||||||
# Called when the node enters the scene tree for the first time.
|
|
||||||
func _ready():
|
func _ready():
|
||||||
pass # Replace with function body.
|
summon()
|
||||||
|
timer.wait_time = config.game['spawn_timer']
|
||||||
|
timer.start()
|
||||||
|
|
||||||
|
func _on_timer_timeout():
|
||||||
|
summon()
|
||||||
|
timer.start()
|
||||||
|
|
||||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
func summon():
|
||||||
func _process(delta):
|
var rng = RandomNumberGenerator.new()
|
||||||
timer += delta
|
|
||||||
|
|
||||||
if spawn_first:
|
var enemy_instance = enemy.instantiate()
|
||||||
add_child(enemy.instantiate())
|
add_child(enemy_instance)
|
||||||
spawn_first = false
|
enemy_instance.set_config(config_path)
|
||||||
|
enemy_instance.set_enemy(0)
|
||||||
if timer > spawnTime:
|
enemy_instance.set_v_offset(rng.randf_range(config.game['offset'][0], config.game['offset'][1]))
|
||||||
add_child(enemy.instantiate())
|
|
||||||
timer = 0
|
|
||||||
|
|
|
@ -1,11 +0,0 @@
|
||||||
extends PathFollow2D
|
|
||||||
|
|
||||||
@export var speed = 30
|
|
||||||
|
|
||||||
func _ready():
|
|
||||||
var rng = RandomNumberGenerator.new()
|
|
||||||
set_v_offset(rng.randf_range(-30.0, 30.0))
|
|
||||||
|
|
||||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
|
||||||
func _process(delta):
|
|
||||||
set_progress(get_progress() + speed * delta)
|
|
Loading…
Add table
Reference in a new issue