diff options
author | bd <bdunahu@operationnull.com> | 2025-05-23 18:06:37 -0400 |
---|---|---|
committer | bd <bdunahu@operationnull.com> | 2025-05-23 18:06:37 -0400 |
commit | 39acc5aff9c7ac75b34364ed4d389d7a6bcfc53d (patch) | |
tree | a50e78c0e5ad0899f2dd369259a806ed3a1ad4d1 /scripts | |
parent | 6d166db85ec2518b3219240f7cbf26221eec1f76 (diff) |
Refactor tower sprites + animation scripts
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/base_animation_handler.gd | 24 | ||||
-rw-r--r-- | scripts/base_animation_handler.gd.uid | 1 | ||||
-rw-r--r-- | scripts/base_defender.gd | 21 | ||||
-rw-r--r-- | scripts/cursor.gd | 4 | ||||
-rw-r--r-- | scripts/game_stats_config.gd | 50 | ||||
-rw-r--r-- | scripts/ui_panel.gd | 16 | ||||
-rw-r--r-- | scripts/ui_panel.gd.uid | 1 | ||||
-rw-r--r-- | scripts/util.gd | 9 | ||||
-rw-r--r-- | scripts/util.gd.uid | 1 | ||||
-rw-r--r-- | scripts/warlock.gd | 14 | ||||
-rw-r--r-- | scripts/warlock_animation_handler.gd | 6 | ||||
-rw-r--r-- | scripts/warlock_animation_handler.gd.uid | 1 | ||||
-rw-r--r-- | scripts/wyvern.gd | 13 | ||||
-rw-r--r-- | scripts/wyvern_animation_handler.gd | 6 | ||||
-rw-r--r-- | scripts/wyvern_animation_handler.gd.uid | 1 |
15 files changed, 107 insertions, 61 deletions
diff --git a/scripts/base_animation_handler.gd b/scripts/base_animation_handler.gd deleted file mode 100644 index c9e7630..0000000 --- a/scripts/base_animation_handler.gd +++ /dev/null @@ -1,24 +0,0 @@ -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/scripts/base_animation_handler.gd.uid b/scripts/base_animation_handler.gd.uid deleted file mode 100644 index 75b9ff2..0000000 --- a/scripts/base_animation_handler.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://cb5we0gjjbcfu diff --git a/scripts/base_defender.gd b/scripts/base_defender.gd index 4ebe417..424ce96 100644 --- a/scripts/base_defender.gd +++ b/scripts/base_defender.gd @@ -1,11 +1,22 @@ extends StaticBody2D @onready var sprite_node = $Sprite2D +@onready var util = preload("res://scripts/util.gd") var defender_range : float var fire_rate : float var damage : float var target : CharacterBody2D +var idle_atlas_coords : Vector2i +var attack_atlas_coords : Vector2i + +var _idle_texture : Texture +var _attack_texture : Texture + +func _ready() -> void: + _idle_texture = util.get_tile_texture(idle_atlas_coords) + _attack_texture = util.get_tile_texture(attack_atlas_coords) + _idle_state() func _on_fire_timer_timeout() -> void: # extending classes override here @@ -36,10 +47,10 @@ func _find_targets() -> Array: func _update_state_machine(curr : PathFollow2D) -> void: if (curr == null): target = null - sprite_node.idle_state() + _idle_state() else: target = curr.get_child(0) - sprite_node.attack_state() + _attack_state() func _on_tower_body_entered(_body: Node2D) -> void: var old_target : CharacterBody2D = target @@ -47,3 +58,9 @@ func _on_tower_body_entered(_body: Node2D) -> void: if old_target == null && old_target != target: $FireTimer.start(fire_rate) _on_fire_timer_timeout() + +func _attack_state(): + sprite_node.texture = _attack_texture + +func _idle_state(): + sprite_node.texture = _idle_texture diff --git a/scripts/cursor.gd b/scripts/cursor.gd index d12f9e0..22c1da1 100644 --- a/scripts/cursor.gd +++ b/scripts/cursor.gd @@ -15,11 +15,11 @@ var dirs = {"move_right": Vector2.RIGHT, var towers : Dictionary[String, Dictionary] = { "place_warlock": { "scene": preload("res://scenes/warlock.tscn"), - "cost": game_stats_config.warlock_defender_cost + "cost": game_stats_config.defenders["warlock"]["cost"] }, "place_wyvern": { "scene": preload("res://scenes/wyvern.tscn"), - "cost": game_stats_config.wyvern_defender_cost + "cost": game_stats_config.defenders["wyvern"]["cost"] } } diff --git a/scripts/game_stats_config.gd b/scripts/game_stats_config.gd index bc79bdd..82ddbd1 100644 --- a/scripts/game_stats_config.gd +++ b/scripts/game_stats_config.gd @@ -13,16 +13,46 @@ class_name GameStatsConfig ] # defenders -@export var warlock_damage : float = 4.0 -@export var warlock_fire_rate : float = 1.2 -@export var warlock_defender_range : float = 75.0 -@export var warlock_defender_cost : int = 10 - -@export var wyvern_damage : float = 2.0 -@export var wyvern_fire_rate : float = 1.0 -@export var wyvern_damage_tick_rate: float = 0.25 -@export var wyvern_defender_range : float = 35.0 -@export var wyvern_defender_cost : int = 15 +@export var defenders : Dictionary[String, Dictionary] = { + "warlock": { + "damage" : 4.0, + "fire_rate" : 1.2, + "range": 75.0, + "sprite_panel": Vector2i(30, 1), + "sprite_attacking": Vector2i(31, 2), + "sprite_idle": Vector2i(31, 1), + "cost": 10 + }, + "wyvern": { + "damage" : 2.0, + "fire_rate" : 1.0, + "range": 35.0, + "sprite_panel": Vector2i(24, 10), + "sprite_attacking": Vector2i(25, 10), + "sprite_idle": Vector2i(24, 10), + "cost": 15, + "damage_tick_rate": 0.25, + }, + # TODO + "werewolf": { + "damage": 1.0, + "fire_rate": 1.0, + "range": 1.0, + "sprite_panel": Vector2i(26, 11), + "sprite_attacking": Vector2i(26, 11), + "sprite_idle": Vector2i(26, 11), + "cost": 1 + }, + "wellspring": { + "damage": 1.0, + "fire_rate": 1.0, + "range": 1.0, + "sprite_panel": Vector2i(38, 11), + "sprite_attacking": Vector2i(38, 11), + "sprite_idle": Vector2i(38, 11), + "cost": 1 + } +} # crawlers @export var fodder_damage : float = 1.0 diff --git a/scripts/ui_panel.gd b/scripts/ui_panel.gd new file mode 100644 index 0000000..31275c6 --- /dev/null +++ b/scripts/ui_panel.gd @@ -0,0 +1,16 @@ +extends Panel + +var tile_set : TileSet = preload("res://resources/tiles.tres") + +@export var texture_atlas_coords: Vector2 +@export var object_name: String +@export var cost: String + +func _ready(): + var source : TileSetAtlasSource = tile_set.get_source(0) + var texture_region : Rect2i = source.get_tile_texture_region(texture_atlas_coords) + var tile_image : Image = source.texture.get_image().get_region(texture_region) + $HBoxContainer/Texture.texture = ImageTexture.create_from_image(tile_image) + $HBoxContainer/Texture.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED + $HBoxContainer/VBoxContainer/Label.text = object_name + $HBoxContainer/VBoxContainer/Label2.text = cost diff --git a/scripts/ui_panel.gd.uid b/scripts/ui_panel.gd.uid new file mode 100644 index 0000000..9f614c1 --- /dev/null +++ b/scripts/ui_panel.gd.uid @@ -0,0 +1 @@ +uid://do8a8uq1jvs7b diff --git a/scripts/util.gd b/scripts/util.gd new file mode 100644 index 0000000..04ccc0d --- /dev/null +++ b/scripts/util.gd @@ -0,0 +1,9 @@ +extends Node + +static var tile_set : TileSet = preload("res://resources/tiles.tres") + +static func get_tile_texture(atlas_coords: Vector2i) -> Texture: + var source : TileSetAtlasSource = tile_set.get_source(0) + var texture_region : Rect2i = source.get_tile_texture_region(atlas_coords) + var tile_image : Image = source.texture.get_image().get_region(texture_region) + return ImageTexture.create_from_image(tile_image) diff --git a/scripts/util.gd.uid b/scripts/util.gd.uid new file mode 100644 index 0000000..8350954 --- /dev/null +++ b/scripts/util.gd.uid @@ -0,0 +1 @@ +uid://qs2dvlijbtkg diff --git a/scripts/warlock.gd b/scripts/warlock.gd index 4048bb0..bad20d3 100644 --- a/scripts/warlock.gd +++ b/scripts/warlock.gd @@ -1,16 +1,22 @@ extends "res://scripts/base_defender.gd" -var game_stats_config = preload("res://resources/game_stats_config.tres") +@onready var game_stats_config = preload("res://resources/game_stats_config.tres") + var projectile: PackedScene = preload("res://scenes/warlock_projectile.tscn") var range_collision : CollisionShape2D func _ready(): - damage = game_stats_config.warlock_damage - fire_rate = game_stats_config.warlock_fire_rate - defender_range = game_stats_config.warlock_defender_range + damage = game_stats_config.defenders["warlock"]["damage"] + fire_rate = game_stats_config.defenders["warlock"]["fire_rate"] + defender_range = game_stats_config.defenders["warlock"]["range"] + idle_atlas_coords = game_stats_config.defenders["warlock"]["sprite_idle"] + attack_atlas_coords = game_stats_config.defenders["warlock"]["sprite_attacking"] + range_collision = $Tower/CollisionShape2D range_collision.shape.radius = defender_range + super() + func _on_fire_timer_timeout(): select_target() if (target != null): diff --git a/scripts/warlock_animation_handler.gd b/scripts/warlock_animation_handler.gd deleted file mode 100644 index f7ac9c3..0000000 --- a/scripts/warlock_animation_handler.gd +++ /dev/null @@ -1,6 +0,0 @@ -extends "res://scripts/base_animation_handler.gd" - -func _ready(): - idle = Rect2(496, 16, 16, 16) - attack = Rect2(496, 32, 16, 16) - update_texture() diff --git a/scripts/warlock_animation_handler.gd.uid b/scripts/warlock_animation_handler.gd.uid deleted file mode 100644 index 4fa3cf7..0000000 --- a/scripts/warlock_animation_handler.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://6i27kmcpl7ix diff --git a/scripts/wyvern.gd b/scripts/wyvern.gd index f90c019..d0bf91e 100644 --- a/scripts/wyvern.gd +++ b/scripts/wyvern.gd @@ -7,13 +7,18 @@ var range_collision : CollisionShape2D var firing : bool = false func _ready(): - damage = game_stats_config.wyvern_damage - fire_rate = game_stats_config.wyvern_fire_rate - damage_tick_rate = game_stats_config.wyvern_damage_tick_rate - defender_range = game_stats_config.wyvern_defender_range + damage = game_stats_config.defenders["wyvern"]["damage"] + fire_rate = game_stats_config.defenders["wyvern"]["fire_rate"] + damage_tick_rate = game_stats_config.defenders["wyvern"]["damage_tick_rate"] + defender_range = game_stats_config.defenders["wyvern"]["range"] + idle_atlas_coords = game_stats_config.defenders["wyvern"]["sprite_idle"] + attack_atlas_coords = game_stats_config.defenders["wyvern"]["sprite_attacking"] + range_collision = $Tower/CollisionShape2D range_collision.shape.radius = defender_range + super() + func _process(_delta): select_target() if firing: diff --git a/scripts/wyvern_animation_handler.gd b/scripts/wyvern_animation_handler.gd deleted file mode 100644 index 8cadc72..0000000 --- a/scripts/wyvern_animation_handler.gd +++ /dev/null @@ -1,6 +0,0 @@ -extends "res://scripts/base_animation_handler.gd" - -func _ready(): - idle = Rect2(384, 160, 16, 16) - attack = Rect2(400, 160, 16, 16) - update_texture() diff --git a/scripts/wyvern_animation_handler.gd.uid b/scripts/wyvern_animation_handler.gd.uid deleted file mode 100644 index 5c8f57b..0000000 --- a/scripts/wyvern_animation_handler.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://dl7a53e1auku7 |