summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/base_defender.gd27
-rw-r--r--scripts/game_data.gd5
-rw-r--r--scripts/player.gd24
-rw-r--r--scripts/tower_manager.gd6
4 files changed, 50 insertions, 12 deletions
diff --git a/scripts/base_defender.gd b/scripts/base_defender.gd
index 782fd2a..7f13a0f 100644
--- a/scripts/base_defender.gd
+++ b/scripts/base_defender.gd
@@ -4,6 +4,9 @@ extends StaticBody2D
@onready var util = preload("res://scripts/util.gd")
@onready var game_stats_config = preload("res://resources/game_stats_config.tres")
+@onready var _collision_shape = $Tower/CollisionShape2D
+@onready var _visual_shape = $Tower/Line2D
+
var tower_data : Dictionary
var tower_key : String
@@ -13,15 +16,18 @@ var _idle_texture : Texture
var _attack_texture : Texture
func set_tower_stats(tower_index : int):
- var collision_shape = $Tower/CollisionShape2D
- collision_shape.shape = CircleShape2D.new()
+ _collision_shape.shape = CircleShape2D.new()
tower_data = game_stats_config.defenders[tower_index].duplicate(true)
tower_key = tower_data["desc"]
+ _visual_shape.width = 1.0
+ _visual_shape.closed = true
+ _visual_shape.set_default_color(Color("#0f6b8a"))
reset_tower_range()
func reset_tower_range():
$Tower/CollisionShape2D.shape.radius = tower_data["range"]
+ _update_visual_circle()
func reset_tower_sprite():
_idle_texture = util.get_tile_texture(tower_data["sprite_idle"])
@@ -76,6 +82,23 @@ func apply_upgrade(effects: Dictionary):
reset_tower_range()
reset_tower_sprite()
+func _update_visual_circle() -> void:
+ var radius = _collision_shape.shape.radius
+ var points = []
+ var segments = 36 # Number of segments to approximate the circle
+ for i in range(segments):
+ var angle = (i / float(segments)) * 2 * PI
+ var x = radius * cos(angle)
+ var y = radius * sin(angle)
+ points.append(Vector2(x, y))
+ _visual_shape.points = points
+
+func hide_collision() -> void:
+ _visual_shape.hide()
+
+func show_collision() -> void:
+ _visual_shape.show()
+
# extending classes should override below
func _on_fire_timer_timeout() -> void:
pass
diff --git a/scripts/game_data.gd b/scripts/game_data.gd
index 1c788ae..d050e25 100644
--- a/scripts/game_data.gd
+++ b/scripts/game_data.gd
@@ -48,8 +48,9 @@ func get_is_spawning() -> bool:
return _is_spawning
func start_spawning():
- if !_is_spawning && _current_wave < game_stats_config.wave_data.size():
- _current_wave += 1
+ if !_is_spawning:
+ _current_wave += 1
+ if _current_wave < game_stats_config.wave_data.size():
_is_spawning = true
emit_signal("wave_started", _current_wave)
diff --git a/scripts/player.gd b/scripts/player.gd
index 4a37965..3289796 100644
--- a/scripts/player.gd
+++ b/scripts/player.gd
@@ -7,6 +7,8 @@ var game_stats_config = preload("res://resources/game_stats_config.tres")
var _max_x : int
var _max_y : int
+var _hovered_tower : StaticBody2D
+
var dirs = {
"move_right": Vector2.RIGHT,
"move_left": Vector2.LEFT,
@@ -40,7 +42,7 @@ func _unhandled_input(event):
_tm.handle_tower_key(tower_ids[id], global_position)
if event.is_action_pressed("advance_wave"):
GameData.start_spawning()
- emit_signal("curr_tile", _get_tile_state())
+ _update_ui()
func handle_move(dir):
position += dir * map_config.tile_size
@@ -49,13 +51,25 @@ func handle_move(dir):
position.x = min(position.x, _max_x - (map_config.tile_size / 2))
position.y = min(position.y, _max_y - (map_config.tile_size / 2))
+func _update_ui():
+ var curr_hovered = _tm.get_tower_at(position)
+ if curr_hovered != _hovered_tower:
+ if _hovered_tower:
+ _hovered_tower.hide_collision()
+ _hovered_tower = curr_hovered
+ if _hovered_tower:
+ _hovered_tower.show_collision()
+
+ emit_signal("curr_tile", _get_tile_upgrades())
+
+
# this method of getting uniform menu for the panel
# was specifically designed that way in game stats config
-# it may be inefficient and is somewhat messy
-func _get_tile_state():
+# it is somewhat unconventional
+func _get_tile_upgrades():
var tile_info = null
- if _tm.is_tile_occupied(position):
- tile_info = _tm.get_upgrades_at(position)
+ if _hovered_tower:
+ tile_info = _hovered_tower.tower_data["upgrades"]
elif _tm.is_valid_placement_tile(position):
tile_info = game_stats_config.defenders
return tile_info
diff --git a/scripts/tower_manager.gd b/scripts/tower_manager.gd
index 808052e..4fbebf6 100644
--- a/scripts/tower_manager.gd
+++ b/scripts/tower_manager.gd
@@ -44,10 +44,10 @@ func _handle_place_tower(tower_index : int, tile_position : Vector2i):
tmp.global_position = tile_position
_occupy_tile(tile_position, tmp)
-func get_upgrades_at(tile_position : Vector2i) -> Array:
+func get_tower_at(tile_position : Vector2i):
if _towers.has(tile_position):
- return _towers[tile_position].tower_data["upgrades"]
- return []
+ return _towers[tile_position]
+ return null
func is_valid_placement_tile(tile_position : Vector2i):
var tile_coords = _tiles.get_cell_atlas_coords(_tiles.local_to_map(tile_position))