diff options
-rw-r--r-- | resources/game_stats_config.tres | 32 | ||||
-rw-r--r-- | scripts/base_defender.gd | 2 | ||||
-rw-r--r-- | scripts/game_stats_config.gd | 21 | ||||
-rw-r--r-- | scripts/tower_manager.gd | 2 | ||||
-rw-r--r-- | scripts/ui.gd | 1 | ||||
-rw-r--r-- | scripts/ui_panel.gd | 5 |
6 files changed, 50 insertions, 13 deletions
diff --git a/resources/game_stats_config.tres b/resources/game_stats_config.tres index bf5571d..8495fab 100644 --- a/resources/game_stats_config.tres +++ b/resources/game_stats_config.tres @@ -4,7 +4,7 @@ [resource] script = ExtResource("1_t0c0a") -starting_life = 50 +starting_life = 20 starting_morale = 10 wave_data = [{ 15: { @@ -21,16 +21,26 @@ wave_data = [{ 5: { "fodder": 6 }, -15: { -"soldier": 3 +10: { +"soldier": 2 }, 20: { -"fodder": 10, +"fodder": 5, "soldier": 6 }, 30: { -"fodder": 5, -"gnome": 1 +"fodder": 5 +} +}, { +7: { +"gnome": 10 +}, +14: { +"soldier": 4 +}, +30: { +"gnome": 6, +"soldier": 8 } }] defenders = Array[Dictionary]([{ @@ -39,6 +49,7 @@ defenders = Array[Dictionary]([{ "damage": 4.0, "desc": "Warlock", "fire_rate": 1.2, +"is_valid": true, "max_projectile_lifetime": 7.5, "projectile_speed": 125, "range": 75.0, @@ -49,6 +60,7 @@ defenders = Array[Dictionary]([{ "cost": 9999, "desc": "Phoenix (DMG)", "effects": {}, +"is_valid": false, "sprite_panel": Vector2i(32, 5) }, { "cost": 15, @@ -60,11 +72,13 @@ defenders = Array[Dictionary]([{ "sprite_attacking": Vector2i(31, 2), "sprite_idle": Vector2i(31, 1) }, +"is_valid": true, "sprite_panel": Vector2i(34, 4) }, { "cost": 9999, "desc": "Sparrow (DUP)", "effects": {}, +"is_valid": false, "sprite_panel": Vector2i(35, 5) }] }, { @@ -74,6 +88,7 @@ defenders = Array[Dictionary]([{ "damage_tick_rate": 0.25, "desc": "Wyvern", "fire_delay": 1.0, +"is_valid": true, "projectile_range": 45.0, "range": 40.0, "sprite_attacking": Vector2i(25, 10), @@ -85,6 +100,7 @@ defenders = Array[Dictionary]([{ "effects": { "fire_delay": 0.1 }, +"is_valid": true, "sprite_panel": Vector2i(28, 12) }, { "cost": 30.0, @@ -96,11 +112,13 @@ defenders = Array[Dictionary]([{ "projectile_range": 70.0, "range": 55.0 }, +"is_valid": true, "sprite_panel": Vector2i(31, 12) }, { "cost": 9999, "desc": "Twizzlers (DUP)", "effects": {}, +"is_valid": false, "sprite_panel": Vector2i(27, 12) }] }, { @@ -108,6 +126,7 @@ defenders = Array[Dictionary]([{ "damage": 1.0, "desc": "Werewolf", "fire_rate": 1.0, +"is_valid": false, "range": 1.0, "sprite_attacking": Vector2i(26, 11), "sprite_idle": Vector2i(26, 11), @@ -118,6 +137,7 @@ defenders = Array[Dictionary]([{ "damage": 1.0, "desc": "Wellspring", "fire_rate": 1.0, +"is_valid": false, "range": 1.0, "sprite_attacking": Vector2i(38, 11), "sprite_idle": Vector2i(38, 11), diff --git a/scripts/base_defender.gd b/scripts/base_defender.gd index a10c4b6..0f1003b 100644 --- a/scripts/base_defender.gd +++ b/scripts/base_defender.gd @@ -15,7 +15,7 @@ var _attack_texture : Texture func set_tower_stats(tower_index : int): var collision_shape = $Tower/CollisionShape2D collision_shape.shape = CircleShape2D.new() - tower_data = game_stats_config.defenders[tower_index].duplicate() + tower_data = game_stats_config.defenders[tower_index].duplicate(true) tower_key = tower_data["desc"] reset_tower_range() diff --git a/scripts/game_stats_config.gd b/scripts/game_stats_config.gd index 8b2e544..3b19b69 100644 --- a/scripts/game_stats_config.gd +++ b/scripts/game_stats_config.gd @@ -14,9 +14,14 @@ class_name GameStatsConfig }, { 5: {"fodder": 6}, - 15: {"soldier": 3}, - 20: {"fodder": 10, "soldier": 6}, - 30: {"fodder": 5, "gnome": 1}, + 10: {"soldier": 2}, + 20: {"fodder": 5, "soldier": 6}, + 30: {"fodder": 5}, + }, + { + 7: {"gnome": 10}, + 14: {"soldier": 4}, + 30: {"gnome": 6, "soldier": 8} } ] @@ -25,6 +30,7 @@ enum defenders_index {WARLOCK, WYVERN, WEREWOLF, WELLSPRING} @export var defenders : Array[Dictionary] = [ { "desc": "Warlock", + "is_valid": true, "damage" : 4.0, "fire_rate" : 1.2, "range": 75.0, @@ -38,6 +44,7 @@ enum defenders_index {WARLOCK, WYVERN, WEREWOLF, WELLSPRING} "upgrades": [ { "desc": "Phoenix (DMG)", + "is_valid": false, "sprite_panel": Vector2i(32, 5), "cost": 9999, "effects": { @@ -45,6 +52,7 @@ enum defenders_index {WARLOCK, WYVERN, WEREWOLF, WELLSPRING} }, { "desc": "Falcon (RNGE)", + "is_valid": true, "sprite_panel": Vector2i(34, 4), "cost": 15, "effects": { @@ -57,6 +65,7 @@ enum defenders_index {WARLOCK, WYVERN, WEREWOLF, WELLSPRING} }, { "desc": "Sparrow (DUP)", + "is_valid": false, "sprite_panel": Vector2i(35, 5), "cost": 9999, "effects": { @@ -66,6 +75,7 @@ enum defenders_index {WARLOCK, WYVERN, WEREWOLF, WELLSPRING} }, { "desc": "Wyvern", + "is_valid": true, "damage" : 1.0, "fire_delay" : 1.0, "range": 40.0, @@ -80,6 +90,7 @@ enum defenders_index {WARLOCK, WYVERN, WEREWOLF, WELLSPRING} "upgrades": [ { "desc": "Skittles (SPD)", + "is_valid": true, "sprite_panel": Vector2i(28, 12), "cost": 7, "effects": { @@ -88,6 +99,7 @@ enum defenders_index {WARLOCK, WYVERN, WEREWOLF, WELLSPRING} }, { "desc": "Pop Rocks (RNGE)", + "is_valid": true, "sprite_panel": Vector2i(31, 12), "cost": 30.0, "effects": { @@ -100,6 +112,7 @@ enum defenders_index {WARLOCK, WYVERN, WEREWOLF, WELLSPRING} }, { "desc": "Twizzlers (DUP)", + "is_valid": false, "sprite_panel": Vector2i(27, 12), "cost": 9999, "effects": { @@ -110,6 +123,7 @@ enum defenders_index {WARLOCK, WYVERN, WEREWOLF, WELLSPRING} # TODO { "desc": "Werewolf", + "is_valid": false, "damage": 1.0, "fire_rate": 1.0, "range": 1.0, @@ -121,6 +135,7 @@ enum defenders_index {WARLOCK, WYVERN, WEREWOLF, WELLSPRING} }, { "desc": "Wellspring", + "is_valid": false, "damage": 1.0, "fire_rate": 1.0, "range": 1.0, diff --git a/scripts/tower_manager.gd b/scripts/tower_manager.gd index 89f037d..808052e 100644 --- a/scripts/tower_manager.gd +++ b/scripts/tower_manager.gd @@ -31,7 +31,7 @@ func _handle_upgrade(upgrade_index : int, tower : StaticBody2D): if GameData.get_life() >= upgrade_cost: GameData.subtract_life(upgrade_cost) tower.apply_upgrade(upgrades[upgrade_index]["effects"]) - upgrades.remove_at(upgrade_index) + upgrades[upgrade_index]["is_valid"] = false func _handle_place_tower(tower_index : int, tile_position : Vector2i): if _tower_data.size() > tower_index: diff --git a/scripts/ui.gd b/scripts/ui.gd index 031236b..e450581 100644 --- a/scripts/ui.gd +++ b/scripts/ui.gd @@ -30,5 +30,6 @@ func _update_options(data): var option = ui_option.instantiate() option.desc = i["desc"] option.cost = i["cost"] + option.is_valid = i["is_valid"] option.sprite_atlas = i["sprite_panel"] options_container.add_child(option) diff --git a/scripts/ui_panel.gd b/scripts/ui_panel.gd index 3786410..e32115c 100644 --- a/scripts/ui_panel.gd +++ b/scripts/ui_panel.gd @@ -4,6 +4,7 @@ extends Panel @export var desc: String @export var cost: int +@export var is_valid : bool @export var sprite_atlas : Vector2i func _ready(): @@ -11,7 +12,7 @@ func _ready(): $HBoxContainer/Texture.texture = texture $HBoxContainer/Texture.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED $HBoxContainer/VBoxContainer/Label.text = desc - $HBoxContainer/VBoxContainer/Label2.text = str(cost) + $HBoxContainer/VBoxContainer/Label2.text = str(cost) if is_valid else "-" $ColorRect.color = get_theme_stylebox("panel").bg_color $ColorRect.modulate.a = 0.0 @@ -19,7 +20,7 @@ func _ready(): _update_affordability() func _update_affordability(): - if (GameData.get_life() >= cost): + if (GameData.get_life() >= cost && is_valid): $ColorRect.modulate.a = 0.0 else: $ColorRect.modulate.a = 0.75 |