diff options
author | bd <bdunahu@operationnull.com> | 2025-05-24 11:53:57 -0400 |
---|---|---|
committer | bd <bdunahu@operationnull.com> | 2025-05-24 11:53:57 -0400 |
commit | 4948e4e35dadc749026a83d0a8402436a4b2ac44 (patch) | |
tree | d9438a5967ded43a9b13f84a924dc02c08c4e29a /scripts | |
parent | 0e7519444d9a3cb83d260e02eb6daea66dbf6e6b (diff) |
Separate cursor and tower placement logic
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/player.gd | 55 | ||||
-rw-r--r-- | scripts/player.gd.uid | 1 | ||||
-rw-r--r-- | scripts/tower_manager.gd | 30 | ||||
-rw-r--r-- | scripts/tower_manager.gd.uid | 1 |
4 files changed, 87 insertions, 0 deletions
diff --git a/scripts/player.gd b/scripts/player.gd new file mode 100644 index 0000000..c890542 --- /dev/null +++ b/scripts/player.gd @@ -0,0 +1,55 @@ +extends Node2D + +var game_stats_config = preload("res://resources/game_stats_config.tres") +@onready var map_config = preload("res://resources/map_generator_resource.tres") +@onready var _tm = get_node("../Defenders") + +var _max_x : int +var _max_y : int + +var dirs = {"move_right": Vector2.RIGHT, + "move_left": Vector2.LEFT, + "move_up": Vector2.UP, + "move_down": Vector2.DOWN} + +var towers : Dictionary[String, Dictionary] = { + "place_warlock": { + "scene": preload("res://scenes/warlock.tscn"), + "cost": game_stats_config.defenders["warlock"]["cost"], + }, + "place_wyvern": { + "scene": preload("res://scenes/wyvern.tscn"), + "cost": game_stats_config.defenders["wyvern"]["cost"], + }, + #"place_werewolf": { + #"scene": preload("res://scenes/werewolf.tscn"), + #"cost": game_stats_config.defenders["werewolf"]["cost"], + #}, + #"place_wellspring": { + #"scene": preload("res://scenes/wellspring.tscn"), + #"cost": game_stats_config.defenders["werewolf"]["cost"], + #}, +} + +func _ready(): + _max_x = map_config.grid_width * map_config.tile_size + _max_y = map_config.grid_height * map_config.tile_size + position = position.snapped(Vector2.ONE * map_config.tile_size) + position += Vector2.ONE * map_config.tile_size / 2 + +func _unhandled_input(event): + for dir in dirs.keys(): + if event.is_action_pressed(dir): + handle_move(dirs[dir]) + return + for tower in towers.keys(): + if event.is_action_pressed(tower): + _tm.place_tower(towers[tower], position) + return + +func handle_move(dir): + position += dir * map_config.tile_size + position.x = max(position.x, map_config.tile_size / 2) + position.y = max(position.y, map_config.tile_size / 2) + position.x = min(position.x, _max_x - (map_config.tile_size / 2)) + position.y = min(position.y, _max_y - (map_config.tile_size / 2)) diff --git a/scripts/player.gd.uid b/scripts/player.gd.uid new file mode 100644 index 0000000..015cefa --- /dev/null +++ b/scripts/player.gd.uid @@ -0,0 +1 @@ +uid://bwiimenoyb5og diff --git a/scripts/tower_manager.gd b/scripts/tower_manager.gd new file mode 100644 index 0000000..250b66b --- /dev/null +++ b/scripts/tower_manager.gd @@ -0,0 +1,30 @@ +extends Node + +@onready var _tiles : TileMapLayer = get_node("../Map/TileMapLayer") +var _towers : Dictionary + +func _ready(): + _towers = {} + +func place_tower(tower : Dictionary, tile_position : Vector2i): + var tower_cost = tower["cost"] + if is_valid_placement_tile(tile_position) && GameData.get_life() >= tower_cost: + var tmp = tower["scene"].instantiate() + var path = get_tree().get_root().get_node("Main/Defenders") + path.add_child(tmp) + tmp.global_position = tile_position + occupy_tile(tile_position) + GameData.subtract_life(tower_cost) + +func is_valid_placement_tile(tile_position : Vector2i): + var tile_coords = _tiles.get_cell_atlas_coords(tile_position) + return (tile_coords == (Vector2i(-1, -1))) && (!is_tile_occupied(tile_position)) + +func is_tile_occupied(tile_position : Vector2i): + return _towers.has(tile_position) + +func occupy_tile(tile_position): + _towers[tile_position] = true + +func free_tile(tile_position): + _towers.erase(tile_position) diff --git a/scripts/tower_manager.gd.uid b/scripts/tower_manager.gd.uid new file mode 100644 index 0000000..7daf23f --- /dev/null +++ b/scripts/tower_manager.gd.uid @@ -0,0 +1 @@ +uid://bxnjjp3at6ht3 |