summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/base_animation_handler.gd24
-rw-r--r--scripts/base_animation_handler.gd.uid1
-rw-r--r--scripts/base_defender.gd21
-rw-r--r--scripts/cursor.gd4
-rw-r--r--scripts/game_stats_config.gd50
-rw-r--r--scripts/ui_panel.gd16
-rw-r--r--scripts/ui_panel.gd.uid1
-rw-r--r--scripts/util.gd9
-rw-r--r--scripts/util.gd.uid1
-rw-r--r--scripts/warlock.gd14
-rw-r--r--scripts/warlock_animation_handler.gd6
-rw-r--r--scripts/warlock_animation_handler.gd.uid1
-rw-r--r--scripts/wyvern.gd13
-rw-r--r--scripts/wyvern_animation_handler.gd6
-rw-r--r--scripts/wyvern_animation_handler.gd.uid1
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