summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/cursor.gd6
-rw-r--r--scripts/map_generator.gd46
-rw-r--r--scripts/path_generator.gd16
-rw-r--r--scripts/path_spawner.gd7
-rw-r--r--scripts/wave_spawner.gd35
-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