From dc46bc748d45346c8062a46121e1d0f13c8af05a Mon Sep 17 00:00:00 2001 From: bd Date: Tue, 20 May 2025 21:01:48 -0400 Subject: Make animations more general --- scenes/defenders/base_animation_handler.gd | 24 +++++++++++++++++++++++ scenes/defenders/base_animation_handler.gd.uid | 1 + scenes/defenders/warlock.gd | 21 +++++++++++--------- scenes/defenders/warlock.tscn | 4 ++-- scenes/defenders/warlock_animation_handler.gd | 6 ++++++ scenes/defenders/warlock_animation_handler.gd.uid | 1 + scenes/defenders/warlock_animator.gd | 18 ----------------- scenes/defenders/warlock_animator.gd.uid | 1 - scenes/defenders/warlock_projectile.gd | 4 ++-- scenes/levels/L1.tscn | 1 + 10 files changed, 49 insertions(+), 32 deletions(-) create mode 100644 scenes/defenders/base_animation_handler.gd create mode 100644 scenes/defenders/base_animation_handler.gd.uid create mode 100644 scenes/defenders/warlock_animation_handler.gd create mode 100644 scenes/defenders/warlock_animation_handler.gd.uid delete mode 100644 scenes/defenders/warlock_animator.gd delete mode 100644 scenes/defenders/warlock_animator.gd.uid diff --git a/scenes/defenders/base_animation_handler.gd b/scenes/defenders/base_animation_handler.gd new file mode 100644 index 0000000..c9e7630 --- /dev/null +++ b/scenes/defenders/base_animation_handler.gd @@ -0,0 +1,24 @@ +extends Sprite2D + +@onready var tile_map = preload("res://assets/tilemap.png") + +var idle : Rect2 +var attack : Rect2 +var is_idle : bool = true + +func _ready(): + update_texture() + +func update_texture(): + var atlas_texture = AtlasTexture.new() + atlas_texture.atlas = tile_map + atlas_texture.region = idle if is_idle else attack + texture = atlas_texture + +func attack_state(): + is_idle = false + update_texture() + +func idle_state(): + is_idle = true + update_texture() diff --git a/scenes/defenders/base_animation_handler.gd.uid b/scenes/defenders/base_animation_handler.gd.uid new file mode 100644 index 0000000..75b9ff2 --- /dev/null +++ b/scenes/defenders/base_animation_handler.gd.uid @@ -0,0 +1 @@ +uid://cb5we0gjjbcfu diff --git a/scenes/defenders/warlock.gd b/scenes/defenders/warlock.gd index b8d143b..fbc6a3f 100644 --- a/scenes/defenders/warlock.gd +++ b/scenes/defenders/warlock.gd @@ -4,7 +4,7 @@ extends StaticBody2D @onready var sprite_node = $Sprite2D var projectile = preload("res://scenes/defenders/warlock_projectile.tscn") -var path_name +var curr func select_target(targets): var tmp = [] @@ -13,29 +13,32 @@ func select_target(targets): tmp.append(i) # this is all to select the furthest target on the track - var curr = null + curr = null for i in tmp: if curr == null: curr = i.get_node("../") else: if i.get_parent().get_progress() > curr.get_progress(): curr = i.get_node("../") - path_name = null if (curr == null) else curr.get_parent().name func _on_tower_body_entered(_body: Node2D): select_target(get_node("Tower").get_overlapping_bodies()) - sprite_node.is_idle = true if (path_name == null) else false - sprite_node.update_texture() + handle_animation() func _on_tower_body_exited(_body: Node2D): select_target(get_node("Tower").get_overlapping_bodies()) - sprite_node.is_idle = true if (path_name == null) else false - sprite_node.update_texture() + handle_animation() func _on_fire_rate_timeout(): - if (path_name != null): + if (curr != null): var tmp_projectile = projectile.instantiate() - tmp_projectile.path_name = path_name + tmp_projectile.curr = curr tmp_projectile.projectile_damage = projectile_damage get_node("ProjectileContainer").call_deferred("add_child", tmp_projectile) tmp_projectile.global_position = $Aim.global_position + +func handle_animation(): + if (curr == null): + sprite_node.idle_state() + else: + sprite_node.attack_state() diff --git a/scenes/defenders/warlock.tscn b/scenes/defenders/warlock.tscn index 3ab694d..d306d41 100644 --- a/scenes/defenders/warlock.tscn +++ b/scenes/defenders/warlock.tscn @@ -1,13 +1,13 @@ [gd_scene load_steps=5 format=3 uid="uid://d27cf3jwfvbqu"] [ext_resource type="Script" uid="uid://dvhqpgw6vhayu" path="res://scenes/defenders/warlock.gd" id="1_rpypk"] -[ext_resource type="Script" uid="uid://6i27kmcpl7ix" path="res://scenes/defenders/warlock_animator.gd" id="2_rpypk"] +[ext_resource type="Script" uid="uid://6i27kmcpl7ix" path="res://scenes/defenders/warlock_animation_handler.gd" id="2_rpypk"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_wu3n4"] size = Vector2(16, 16) [sub_resource type="CircleShape2D" id="CircleShape2D_rpypk"] -radius = 64.0 +radius = 48.0 [node name="Warlock" type="StaticBody2D"] script = ExtResource("1_rpypk") diff --git a/scenes/defenders/warlock_animation_handler.gd b/scenes/defenders/warlock_animation_handler.gd new file mode 100644 index 0000000..49c2b8a --- /dev/null +++ b/scenes/defenders/warlock_animation_handler.gd @@ -0,0 +1,6 @@ +extends "res://scenes/defenders/base_animation_handler.gd" + +func _ready(): + idle = Rect2(496, 16, 16, 16) + attack = Rect2(496, 32, 16, 16) + update_texture() diff --git a/scenes/defenders/warlock_animation_handler.gd.uid b/scenes/defenders/warlock_animation_handler.gd.uid new file mode 100644 index 0000000..4fa3cf7 --- /dev/null +++ b/scenes/defenders/warlock_animation_handler.gd.uid @@ -0,0 +1 @@ +uid://6i27kmcpl7ix diff --git a/scenes/defenders/warlock_animator.gd b/scenes/defenders/warlock_animator.gd deleted file mode 100644 index be14337..0000000 --- a/scenes/defenders/warlock_animator.gd +++ /dev/null @@ -1,18 +0,0 @@ -extends Sprite2D - -@onready var tile_map = preload("res://assets/tilemap.png") - -var idle = Rect2(496, 16, 16, 16) -var attack = Rect2(496, 32, 16, 16) - -var is_idle = true - -func _ready(): - update_texture() - -func update_texture(): - var atlas_texture = AtlasTexture.new() - atlas_texture.atlas = tile_map - atlas_texture.region = idle if is_idle else attack - texture = atlas_texture - print(atlas_texture.region) diff --git a/scenes/defenders/warlock_animator.gd.uid b/scenes/defenders/warlock_animator.gd.uid deleted file mode 100644 index 4fa3cf7..0000000 --- a/scenes/defenders/warlock_animator.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://6i27kmcpl7ix diff --git a/scenes/defenders/warlock_projectile.gd b/scenes/defenders/warlock_projectile.gd index 2757019..2188c38 100644 --- a/scenes/defenders/warlock_projectile.gd +++ b/scenes/defenders/warlock_projectile.gd @@ -2,13 +2,13 @@ extends CharacterBody2D var target var speed = 100 -var path_name = "" +var curr = "" var projectile_damage func _physics_process(_delta: float): var path_spawner_node = get_tree().get_root().get_node("Main/PathSpawner") for i in path_spawner_node.get_child_count(): - if path_spawner_node.get_child(i).name == path_name: + if path_spawner_node.get_child(i).name == curr.get_parent().name: target = path_spawner_node.get_child(i).get_child(0).get_child(0) # another tower destroyed this target diff --git a/scenes/levels/L1.tscn b/scenes/levels/L1.tscn index 323ba6f..1231f7a 100644 --- a/scenes/levels/L1.tscn +++ b/scenes/levels/L1.tscn @@ -13,6 +13,7 @@ curve = SubResource("Curve2D_tjuek") [node name="PathFollow2D" type="PathFollow2D" parent="."] position = Vector2(-8, 168) +rotates = false loop = false [node name="CrawlerSoldier" parent="PathFollow2D" instance=ExtResource("1_mao1c")] -- cgit v1.2.3