summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--resources/game_stats_config.tres48
-rw-r--r--scenes/warlock.tscn4
-rw-r--r--scenes/wyvern.tscn4
-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
18 files changed, 148 insertions, 76 deletions
diff --git a/resources/game_stats_config.tres b/resources/game_stats_config.tres
index 5098d3d..1e691dc 100644
--- a/resources/game_stats_config.tres
+++ b/resources/game_stats_config.tres
@@ -9,15 +9,45 @@ starting_morale = 10
max_wave = 3
wave_time = 30.0
wave_targets = [15, 40, 120]
-warlock_damage = 4.0
-warlock_fire_rate = 1.2
-warlock_defender_range = 75.0
-warlock_defender_cost = 10
-wyvern_damage = 2.0
-wyvern_fire_rate = 1.0
-wyvern_damage_tick_rate = 0.25
-wyvern_defender_range = 35.0
-wyvern_defender_cost = 15
+defenders = Dictionary[String, Dictionary]({
+"warlock": {
+"cost": 10,
+"damage": 4.0,
+"fire_rate": 1.2,
+"range": 75.0,
+"sprite_attacking": Vector2i(31, 2),
+"sprite_idle": Vector2i(31, 1),
+"sprite_panel": Vector2i(30, 1)
+},
+"wellspring": {
+"cost": 1,
+"damage": 1.0,
+"fire_rate": 1.0,
+"range": 1.0,
+"sprite_attacking": Vector2i(38, 11),
+"sprite_idle": Vector2i(38, 11),
+"sprite_panel": Vector2i(38, 11)
+},
+"werewolf": {
+"cost": 1,
+"damage": 1.0,
+"fire_rate": 1.0,
+"range": 1.0,
+"sprite_attacking": Vector2i(26, 11),
+"sprite_idle": Vector2i(26, 11),
+"sprite_panel": Vector2i(26, 11)
+},
+"wyvern": {
+"cost": 15,
+"damage": 2.0,
+"damage_tick_rate": 0.25,
+"fire_rate": 1.0,
+"range": 35.0,
+"sprite_attacking": Vector2i(25, 10),
+"sprite_idle": Vector2i(24, 10),
+"sprite_panel": Vector2i(24, 10)
+}
+})
fodder_damage = 1.0
fodder_speed = 40.0
fodder_health = 10.0
diff --git a/scenes/warlock.tscn b/scenes/warlock.tscn
index b4dd6fb..30b88fd 100644
--- a/scenes/warlock.tscn
+++ b/scenes/warlock.tscn
@@ -1,7 +1,6 @@
-[gd_scene load_steps=5 format=3 uid="uid://d27cf3jwfvbqu"]
+[gd_scene load_steps=4 format=3 uid="uid://d27cf3jwfvbqu"]
[ext_resource type="Script" uid="uid://dvhqpgw6vhayu" path="res://scripts/warlock.gd" id="1_6o2jo"]
-[ext_resource type="Script" uid="uid://6i27kmcpl7ix" path="res://scripts/warlock_animation_handler.gd" id="2_smthy"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_wu3n4"]
size = Vector2(16, 16)
@@ -31,7 +30,6 @@ autostart = true
[node name="Sprite2D" type="Sprite2D" parent="."]
region_rect = Rect2(496, 16, 16, 16)
-script = ExtResource("2_smthy")
[connection signal="body_entered" from="Tower" to="." method="_on_tower_body_entered"]
[connection signal="timeout" from="FireTimer" to="." method="_on_fire_timer_timeout"]
diff --git a/scenes/wyvern.tscn b/scenes/wyvern.tscn
index a369573..dca36fd 100644
--- a/scenes/wyvern.tscn
+++ b/scenes/wyvern.tscn
@@ -1,7 +1,6 @@
-[gd_scene load_steps=5 format=3 uid="uid://d37i2dwyynqdw"]
+[gd_scene load_steps=4 format=3 uid="uid://d37i2dwyynqdw"]
[ext_resource type="Script" uid="uid://cfhnd8k1sy116" path="res://scripts/wyvern.gd" id="1_xynyr"]
-[ext_resource type="Script" uid="uid://dl7a53e1auku7" path="res://scripts/wyvern_animation_handler.gd" id="2_wbji5"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_wu3n4"]
size = Vector2(16, 16)
@@ -29,7 +28,6 @@ wait_time = 2.0
[node name="Sprite2D" type="Sprite2D" parent="."]
region_rect = Rect2(496, 16, 16, 16)
-script = ExtResource("2_wbji5")
[connection signal="body_entered" from="Tower" to="." method="_on_tower_body_entered"]
[connection signal="body_exited" from="Tower" to="." method="_on_tower_body_exited"]
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