diff options
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/cursor.gd | 6 | ||||
-rw-r--r-- | scripts/map_generator.gd | 46 | ||||
-rw-r--r-- | scripts/path_generator.gd | 16 | ||||
-rw-r--r-- | scripts/path_spawner.gd | 7 | ||||
-rw-r--r-- | scripts/wave_spawner.gd | 35 | ||||
-rw-r--r-- | scripts/wave_spawner.gd.uid (renamed from scripts/path_spawner.gd.uid) | 0 |
6 files changed, 72 insertions, 38 deletions
diff --git a/scripts/cursor.gd b/scripts/cursor.gd index 025679b..68e2010 100644 --- a/scripts/cursor.gd +++ b/scripts/cursor.gd @@ -1,7 +1,7 @@ extends Node2D @onready var grid_manager = get_node("../GridManager") -@onready var tilemap = get_node("../L1") +@onready var tilemap = get_node("../Map/TileMapLayer") var tile_size : float var max_x : float @@ -52,9 +52,9 @@ func handle_tower(tower): func handle_move(dir): position += dir * tile_size position.x = max(position.x, tile_size / 2) - position.y = max(position.y, tile_size + tile_size / 2) + position.y = max(position.y, tile_size / 2) position.x = min(position.x, max_x - (tile_size / 2)) - position.y = min(position.y, max_y - (tile_size / 2)) + position.y = min(position.y, max_y - tile_size - (tile_size / 2)) func is_valid_placement_tile(): var tile_coords = tilemap.get_cell_atlas_coords(tilemap.local_to_map(global_position)) diff --git a/scripts/map_generator.gd b/scripts/map_generator.gd index 328bce1..7feb4b7 100644 --- a/scripts/map_generator.gd +++ b/scripts/map_generator.gd @@ -6,10 +6,11 @@ extends Node2D @onready var tile_map : TileMapLayer = $TileMapLayer -var _pg : PathGenerator -var path_straight_atlas_coords : Vector2i = Vector2i(8, 1) -var path_corner_atlas_coords : Vector2i = Vector2i(9, 1) -var path_empty_atlas_coords : Vector2i = Vector2i(0, 0) +var _path_straight_atlas_coords : Vector2i = Vector2i(8, 1) +var _path_corner_atlas_coords : Vector2i = Vector2i(9, 1) +var _path_empty_atlas_coords : Vector2i = Vector2i(0, 0) + +var _path : Array[Vector2i] enum TileTransform { ROTATE_0 = 0, @@ -19,36 +20,39 @@ enum TileTransform { } func _ready() -> void: - _pg = PathGenerator.new(grid_width, grid_height) - _display_path() + _generate_path() + _draw_path() -func _display_path(): - var path : Array[Vector2i] = [] - while path.size() < 35: - path = _pg.generate_path() +func _generate_path(): + var pg : PathGenerator = PathGenerator.new(grid_width, grid_height) + _path = [] + while _path.size() < 35: + _path = pg.generate_path() + _draw_path() - for i in path: - var score : int = _get_tile_score(path, i) +func _draw_path(): + for i in _path: + var score : int = _get_tile_score(_path, i) - var atlas_coords : Vector2i = path_empty_atlas_coords + var atlas_coords : Vector2i = _path_empty_atlas_coords var rot : TileTransform = TileTransform.ROTATE_0 match score: 2, 8, 10: - atlas_coords = path_straight_atlas_coords + atlas_coords = _path_straight_atlas_coords rot = TileTransform.ROTATE_90 1, 4, 5: - atlas_coords = path_straight_atlas_coords + atlas_coords = _path_straight_atlas_coords 3: - atlas_coords = path_corner_atlas_coords + atlas_coords = _path_corner_atlas_coords rot = TileTransform.ROTATE_270 6: - atlas_coords = path_corner_atlas_coords + atlas_coords = _path_corner_atlas_coords 12: - atlas_coords = path_corner_atlas_coords + atlas_coords = _path_corner_atlas_coords rot = TileTransform.ROTATE_90 9: - atlas_coords = path_corner_atlas_coords + atlas_coords = _path_corner_atlas_coords rot = TileTransform.ROTATE_180 _display_tile(atlas_coords, rot, i) @@ -67,3 +71,7 @@ func _get_tile_score(path : Array[Vector2i], tile : Vector2i) -> int: score += 8 if path.has(Vector2i(x - 1, y)) else 0 return score + +func get_enemy_path() -> Array[Vector2i]: + return _path + diff --git a/scripts/path_generator.gd b/scripts/path_generator.gd index 0e9719a..87fedc3 100644 --- a/scripts/path_generator.gd +++ b/scripts/path_generator.gd @@ -5,29 +5,27 @@ class_name PathGenerator var _grid_width : int var _grid_height : int -var _path : Array[Vector2i] - func _init(width:int, height:int): _grid_width = width _grid_height = height -func generate_path(): - _path.clear() +func generate_path() -> Array[Vector2i]: + var path : Array[Vector2i] var x : int = 0 var y : int = randi_range(1, _grid_height-2) while x < _grid_width: - if not _path.has(Vector2i(x,y)): - _path.append(Vector2i(x, y)) + if not path.has(Vector2i(x,y)): + path.append(Vector2i(x, y)) var choice : int = randi_range(0,2) # every even tile goes right to leave room for towers if choice == 0 || x % 2 == 0 || x == _grid_width - 1: x += 1 - elif choice == 1 && y < _grid_height - 2 && !_path.has(Vector2i(x, y + 1)): + elif choice == 1 && y < _grid_height - 2 && !path.has(Vector2i(x, y + 1)): y += 1 - elif choice == 2 && y > 1 && !_path.has(Vector2i(x, y - 1)): + elif choice == 2 && y > 1 && !path.has(Vector2i(x, y - 1)): y -= 1 - return _path + return path diff --git a/scripts/path_spawner.gd b/scripts/path_spawner.gd deleted file mode 100644 index 9b8f663..0000000 --- a/scripts/path_spawner.gd +++ /dev/null @@ -1,7 +0,0 @@ -extends Node2D - -@onready var path = preload("res://scenes/L1.tscn") - -func _on_timer_timeout(): - var tmp = path.instantiate() - add_child(tmp) diff --git a/scripts/wave_spawner.gd b/scripts/wave_spawner.gd new file mode 100644 index 0000000..3f63c71 --- /dev/null +++ b/scripts/wave_spawner.gd @@ -0,0 +1,35 @@ +extends Node2D + +@onready var fodder_enemy = preload("res://scenes/soldier.tscn") +@onready var map = get_node("../Map") + +var curve : Curve2D + +func _ready() -> void: + curve = Curve2D.new() + + var path : Array[Vector2i] = map.get_enemy_path() + + # add off-screen points + path.insert(0, path[0] - Vector2i(1, 0)) + path.append(path[path.size() - 1] + Vector2i(1, 0)) + + # adjust to grid size + for i in map.get_enemy_path(): + curve.add_point(i * 16 + Vector2i.ONE * 8) + +func _on_timer_timeout(): + var path = Path2D.new() + path.curve = curve + + var follow_path = PathFollow2D.new() + follow_path.set_progress(0) + follow_path.rotates = false + follow_path.loop = false + + var enemy = fodder_enemy.instantiate() + + follow_path.add_child(enemy) + path.add_child(follow_path) + + add_child(path) diff --git a/scripts/path_spawner.gd.uid b/scripts/wave_spawner.gd.uid index a6ecd6a..a6ecd6a 100644 --- a/scripts/path_spawner.gd.uid +++ b/scripts/wave_spawner.gd.uid |