From a677a3e8ed63241e7931265941d562284a15d16a Mon Sep 17 00:00:00 2001 From: bd Date: Fri, 23 May 2025 11:44:21 -0400 Subject: Move enemy logic to base_crawler, add crawler flip animation --- scenes/fodder.tscn | 23 +++++++++++++++++++++++ scenes/soldier.tscn | 23 ----------------------- scripts/base_crawler.gd | 44 ++++++++++++++++++++++++++++++++++++++++++++ scripts/base_crawler.gd.uid | 1 + scripts/fodder.gd | 11 +++++++++++ scripts/fodder.gd.uid | 1 + scripts/game_stats_config.gd | 4 ++++ scripts/soldier.gd | 27 --------------------------- scripts/soldier.gd.uid | 1 - scripts/wave_spawner.gd | 2 +- 10 files changed, 85 insertions(+), 52 deletions(-) create mode 100644 scenes/fodder.tscn delete mode 100644 scenes/soldier.tscn create mode 100644 scripts/base_crawler.gd create mode 100644 scripts/base_crawler.gd.uid create mode 100644 scripts/fodder.gd create mode 100644 scripts/fodder.gd.uid delete mode 100644 scripts/soldier.gd delete mode 100644 scripts/soldier.gd.uid diff --git a/scenes/fodder.tscn b/scenes/fodder.tscn new file mode 100644 index 0000000..05813e6 --- /dev/null +++ b/scenes/fodder.tscn @@ -0,0 +1,23 @@ +[gd_scene load_steps=5 format=3 uid="uid://rp5orgc6ae7j"] + +[ext_resource type="Script" uid="uid://gn1504blq1pf" path="res://scripts/fodder.gd" id="1_4lnnv"] +[ext_resource type="Texture2D" uid="uid://di2vybjsniag4" path="res://assets/tilemap.png" id="2_eps3e"] + +[sub_resource type="CircleShape2D" id="CircleShape2D_220eh"] +radius = 8.06226 + +[sub_resource type="Curve2D" id="Curve2D_q2rr1"] + +[node name="CrawlerFodder" type="CharacterBody2D"] +script = ExtResource("1_4lnnv") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource("CircleShape2D_220eh") + +[node name="Sprite2D" type="Sprite2D" parent="."] +texture = ExtResource("2_eps3e") +region_enabled = true +region_rect = Rect2(432, 0, 16, 16) + +[node name="Node2D" type="Path2D" parent="."] +curve = SubResource("Curve2D_q2rr1") diff --git a/scenes/soldier.tscn b/scenes/soldier.tscn deleted file mode 100644 index d6aae63..0000000 --- a/scenes/soldier.tscn +++ /dev/null @@ -1,23 +0,0 @@ -[gd_scene load_steps=5 format=3 uid="uid://rp5orgc6ae7j"] - -[ext_resource type="Script" uid="uid://gn1504blq1pf" path="res://scripts/soldier.gd" id="1_q2rr1"] -[ext_resource type="Texture2D" uid="uid://di2vybjsniag4" path="res://assets/tilemap.png" id="2_2oslh"] - -[sub_resource type="CircleShape2D" id="CircleShape2D_220eh"] -radius = 8.06226 - -[sub_resource type="Curve2D" id="Curve2D_q2rr1"] - -[node name="CrawlerSoldier" type="CharacterBody2D"] -script = ExtResource("1_q2rr1") - -[node name="CollisionShape2D" type="CollisionShape2D" parent="."] -shape = SubResource("CircleShape2D_220eh") - -[node name="Sprite2D" type="Sprite2D" parent="."] -texture = ExtResource("2_2oslh") -region_enabled = true -region_rect = Rect2(432, 0, 16, 16) - -[node name="Node2D" type="Path2D" parent="."] -curve = SubResource("Curve2D_q2rr1") diff --git a/scripts/base_crawler.gd b/scripts/base_crawler.gd new file mode 100644 index 0000000..3525e97 --- /dev/null +++ b/scripts/base_crawler.gd @@ -0,0 +1,44 @@ +extends CharacterBody2D + +@onready var sprite_node = $Sprite2D + +var damage : int +var speed : float +var max_health : float +var worth : int + +var _health : float +var _timer : Timer + +func _ready() -> void: + _health = max_health + + _timer = Timer.new() + _timer.wait_time = speed / 60 + _timer.autostart = true + _timer.connect("timeout", Callable(self, "_on_animate_timeout")) + add_child(_timer) + + +func _process(delta): + get_parent().set_progress(get_parent().get_progress() + speed * delta) + if get_parent().get_progress_ratio() == 1: + GameData.subtract_morale(damage) + queue_free() + +func deal_damage(tower_damage): + _health -= tower_damage + if _health <= 0: + GameData.add_life(worth) + queue_free() + else: + _update_color() + +func _update_color(): + var ratio : float = _health / max_health + var target_color = Color(1, ratio, ratio) + + sprite_node.modulate = target_color + +func _on_animate_timeout(): + sprite_node.scale.x = -sprite_node.scale.x diff --git a/scripts/base_crawler.gd.uid b/scripts/base_crawler.gd.uid new file mode 100644 index 0000000..a520313 --- /dev/null +++ b/scripts/base_crawler.gd.uid @@ -0,0 +1 @@ +uid://cc77hhy8s2pe diff --git a/scripts/fodder.gd b/scripts/fodder.gd new file mode 100644 index 0000000..3c1dd22 --- /dev/null +++ b/scripts/fodder.gd @@ -0,0 +1,11 @@ +extends "res://scripts/base_crawler.gd" + +var game_stats_config = preload("res://resources/game_stats_config.tres") + +func _ready() -> void: + damage = game_stats_config.fodder_damage + speed = game_stats_config.fodder_speed + max_health = game_stats_config.fodder_health + worth = game_stats_config.fodder_worth + + super() diff --git a/scripts/fodder.gd.uid b/scripts/fodder.gd.uid new file mode 100644 index 0000000..917b467 --- /dev/null +++ b/scripts/fodder.gd.uid @@ -0,0 +1 @@ +uid://gn1504blq1pf diff --git a/scripts/game_stats_config.gd b/scripts/game_stats_config.gd index 671e146..ce71b74 100644 --- a/scripts/game_stats_config.gd +++ b/scripts/game_stats_config.gd @@ -1,9 +1,11 @@ extends Resource class_name GameStatsConfig +# game stats @export var starting_life : int = 20 @export var starting_morale : int = 10 +# defenders @export var warlock_damage : float = 5.0 @export var warlock_fire_rate : float = 1.0 @export var warlock_defender_range : float = 75.0 @@ -15,6 +17,8 @@ class_name GameStatsConfig @export var wyvern_defender_range : float = 35.0 @export var wyvern_defender_cost : int = 15 +# crawlers @export var fodder_damage : float = 1.0 @export var fodder_speed : float = 30.0 @export var fodder_health : float = 25.0 +@export var fodder_worth : float = 2.0 diff --git a/scripts/soldier.gd b/scripts/soldier.gd deleted file mode 100644 index d373237..0000000 --- a/scripts/soldier.gd +++ /dev/null @@ -1,27 +0,0 @@ -extends CharacterBody2D - -@export var worth : int = 5 -@export var damage : int = 1 -@export var speed : float = 50.0 -@export var max_health : float = 30.0 -var _health : float = max_health - -func _process(delta): - get_parent().set_progress(get_parent().get_progress() + speed * delta) - if get_parent().get_progress_ratio() == 1: - GameData.subtract_morale(damage) - queue_free() - -func deal_damage(tower_damage): - _health -= tower_damage - if _health <= 0: - GameData.add_life(worth) - queue_free() - else: - _update_color() - -func _update_color(): - var ratio : float = _health / max_health - var target_color = Color(1, ratio, ratio) - - $Sprite2D.modulate = target_color diff --git a/scripts/soldier.gd.uid b/scripts/soldier.gd.uid deleted file mode 100644 index 917b467..0000000 --- a/scripts/soldier.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://gn1504blq1pf diff --git a/scripts/wave_spawner.gd b/scripts/wave_spawner.gd index 7c54dfc..0b4ca2e 100644 --- a/scripts/wave_spawner.gd +++ b/scripts/wave_spawner.gd @@ -1,7 +1,7 @@ extends Node2D @onready var map_config = preload("res://resources/map_generator_resource.tres") -@onready var fodder_enemy = preload("res://scenes/soldier.tscn") +@onready var fodder_enemy = preload("res://scenes/fodder.tscn") @onready var map = get_node("../Map") var curve : Curve2D -- cgit v1.2.3