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):
|
||||
if body.is_in_group("Enemy"):
|
||||
body.hit(damage)
|
||||
body.get_parent().hit(damage)
|
||||
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-1.gd" id="2_2ldr2"]
|
||||
[ext_resource type="Script" path="res://scripts/enemies/enemy.gd" id="1_oeuts"]
|
||||
[ext_resource type="Texture2D" uid="uid://b046l0oy0hyj2" path="res://assets/spritesheets/enemy-1.png" id="2_ndkpn"]
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_17kv3"]
|
||||
|
@ -82,23 +81,22 @@ height = 39.999
|
|||
[node name="PathFollow2D" type="PathFollow2D"]
|
||||
rotation = 0.00699289
|
||||
loop = false
|
||||
script = ExtResource("1_ic50n")
|
||||
script = ExtResource("1_oeuts")
|
||||
|
||||
[node name="enemy" type="CharacterBody2D" parent="." groups=["Enemy"]]
|
||||
script = ExtResource("2_2ldr2")
|
||||
[node name="Enemy" type="CharacterBody2D" parent="." groups=["Enemy"]]
|
||||
|
||||
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="enemy"]
|
||||
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="Enemy"]
|
||||
position = Vector2(9.15527e-05, 0.00012207)
|
||||
scale = Vector2(0.176347, 0.175058)
|
||||
sprite_frames = SubResource("SpriteFrames_kipn1")
|
||||
autoplay = "default"
|
||||
frame_progress = 0.735051
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="enemy"]
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="Enemy"]
|
||||
position = Vector2(-0.992983, 1.00696)
|
||||
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)
|
||||
offset_left = -15.1814
|
||||
offset_top = -25.8945
|
||||
|
@ -106,7 +104,3 @@ offset_right = 86.8186
|
|||
offset_bottom = 1.10553
|
||||
scale = Vector2(0.3, 0.3)
|
||||
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="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="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://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="."]
|
||||
curve = SubResource("Curve2D_csucy")
|
||||
script = ExtResource("3_wqx3u")
|
||||
enemy = ExtResource("4_iivll")
|
||||
|
||||
[node name="Timer" type="Timer" parent="Path2D"]
|
||||
one_shot = true
|
||||
|
||||
[node name="CanvasLayer" type="CanvasLayer" parent="."]
|
||||
|
||||
|
@ -559,3 +560,5 @@ position = Vector2(676, 192)
|
|||
|
||||
[node name="placement3" parent="Placements" instance=ExtResource("8_ftqhi")]
|
||||
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
|
||||
|
||||
var game = {
|
||||
"spawn_timer": 3.0,
|
||||
"offset": [-30.0, 30.0]
|
||||
}
|
||||
|
||||
var menu = [
|
||||
{
|
||||
"name": "Cannon",
|
||||
|
@ -85,3 +90,13 @@ var tower = [
|
|||
"damage": 40
|
||||
}
|
||||
]
|
||||
|
||||
var enemy = [
|
||||
{
|
||||
"name": "Demon",
|
||||
"asset": "preload()",
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1
|
||||
}
|
||||
]
|
||||
|
|
|
@ -1,24 +1,28 @@
|
|||
extends Path2D
|
||||
|
||||
var timer = 0
|
||||
@export var spawnTime = 3
|
||||
@onready var timer = $Timer
|
||||
|
||||
var config_path = "res://scripts/stages/stage 1/Config.gd"
|
||||
var config = load(config_path).new()
|
||||
|
||||
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():
|
||||
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 _process(delta):
|
||||
timer += delta
|
||||
func summon():
|
||||
var rng = RandomNumberGenerator.new()
|
||||
|
||||
if spawn_first:
|
||||
add_child(enemy.instantiate())
|
||||
spawn_first = false
|
||||
|
||||
if timer > spawnTime:
|
||||
add_child(enemy.instantiate())
|
||||
timer = 0
|
||||
var enemy_instance = enemy.instantiate()
|
||||
add_child(enemy_instance)
|
||||
enemy_instance.set_config(config_path)
|
||||
enemy_instance.set_enemy(0)
|
||||
enemy_instance.set_v_offset(rng.randf_range(config.game['offset'][0], config.game['offset'][1]))
|
||||
|
|
|
@ -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…
Reference in a new issue