From c6763afd62107f9fe678e865f848f96d3bacc504 Mon Sep 17 00:00:00 2001 From: Lexi Quinn Date: Mon, 23 Jun 2025 16:33:34 +1000 Subject: [PATCH] fixed some annoying path edit tool bugs --- PCs/PathEditTool/path_edit_tool.gd | 34 +++++++++++++++++------------- Scripts/level.gd | 4 ++-- Scripts/wave_manager.gd | 4 ++-- 3 files changed, 23 insertions(+), 19 deletions(-) diff --git a/PCs/PathEditTool/path_edit_tool.gd b/PCs/PathEditTool/path_edit_tool.gd index af068b2..6a35fbc 100644 --- a/PCs/PathEditTool/path_edit_tool.gd +++ b/PCs/PathEditTool/path_edit_tool.gd @@ -32,13 +32,12 @@ func _ready() -> void: func _process(delta: float) -> void: if !enabled: - ray_collider = null - wall_preview.set_visible(false) + reset() return if interact_key_held: if !interacted_once: - if valid_point and hero.currency >= Data.wall_cost and ray.is_colliding() and point.buildable: + if valid_point and hero.currency >= Data.wall_cost and ray_collider and point.buildable: interact_held_time += delta set_progress_percent(interact_held_time / interact_hold_time) wall_preview.set_float(interact_held_time / interact_hold_time) @@ -46,13 +45,13 @@ func _process(delta: float) -> void: set_progress_percent(0) interacted_once = true build_wall() - elif ray.is_colliding() and ray.get_collider() is TowerBase: + elif ray_collider is TowerBase: interact_held_time += delta set_progress_percent(interact_held_time / interact_hold_time) if interact_held_time >= interact_hold_time: set_progress_percent(0) interacted_once = true - refund_wall(ray.get_collider()) + refund_wall(ray_collider) else: interact_held_time = 0.0 interacted_once = false @@ -75,16 +74,23 @@ func _process(delta: float) -> void: process_looking_at_tower() elif Game.level: process_looking_at_level() - else: - if is_instance_valid(ray_collider) and ray_collider is TowerBase and Game.level.walls.has(ray_collider.point): - Game.level.walls[ray_collider.point].set_float(1.0) - ray_collider = null - delete_tower_preview() - wall_preview.set_visible(false) - clear_previous_point() - last_point = null + elif !interact_key_held: + reset() if !valid_point: wall_preview.set_visible(false) + if point: + wall_preview.global_position = point.global_position + wall_preview.global_rotation = Vector3.ZERO + + +func reset() -> void: + if is_instance_valid(ray_collider) and ray_collider is TowerBase and Game.level.walls.has(ray_collider.point): + Game.level.walls[ray_collider.point].set_float(1.0) + ray_collider = null + delete_tower_preview() + wall_preview.set_visible(false) + clear_previous_point() + last_point = null func process_looking_at_level() -> void: @@ -97,8 +103,6 @@ func process_looking_at_level() -> void: clear_previous_point() last_point = point else: - wall_preview.global_position = point.global_position - wall_preview.global_rotation = Vector3.ZERO if last_point != point: clear_previous_point() last_point = point diff --git a/Scripts/level.gd b/Scripts/level.gd index a8329f7..15d158b 100644 --- a/Scripts/level.gd +++ b/Scripts/level.gd @@ -41,8 +41,8 @@ func enable_non_path_tower_frames() -> void: func disable_path_tower_frames() -> void: for node: FlowNode in tower_frames: - if !node.traversable and flow_field.traversable_after_blocking_point(node): - tower_frames[node].visible = true + if node.traversable and !flow_field.traversable_after_blocking_point(node): + tower_frames[node].visible = false func set_wall(point: FlowNode, caller_id: int) -> void: diff --git a/Scripts/wave_manager.gd b/Scripts/wave_manager.gd index 8028bad..83dd2fe 100644 --- a/Scripts/wave_manager.gd +++ b/Scripts/wave_manager.gd @@ -26,7 +26,7 @@ static func calculate_pot(wave_number: int, number_of_players: int) -> int: ## among the given set of enemy spawners static func generate_wave(spawn_power: int, spawn_pool: Array[Enemy], spawners: Array[EnemySpawner]) -> Wave: var wave: Wave = Wave.new() - + var points: int = spawn_power / 10.0 #print("Generating wave with " + str(points) + " points to spend") while points > 0: @@ -63,7 +63,7 @@ static func generate_wave(spawn_power: int, spawn_pool: Array[Enemy], spawners: #a different enemy and try this process again var enemy_id: int = spawn_pool.find(new_card.enemy) enemy_id -= 1 - if enemy_id <= 0: + if enemy_id < 0: new_card.enemy = spawn_pool[spawn_pool.size() - 1] else: new_card.enemy = spawn_pool[enemy_id]