summaryrefslogtreecommitdiff
path: root/Game.gd
diff options
context:
space:
mode:
Diffstat (limited to 'Game.gd')
-rw-r--r--Game.gd70
1 files changed, 40 insertions, 30 deletions
diff --git a/Game.gd b/Game.gd
index 4f2106a..15c92b9 100644
--- a/Game.gd
+++ b/Game.gd
@@ -16,6 +16,7 @@ var mode: Mode = Mode.DEFAULT :
mode = value
mode_changed.emit()
+var current_builder_element
var score: int :
set(value):
@@ -29,35 +30,20 @@ var map: TileMapLayer
func initialize_stage(tilemap: TileMapLayer):
map = tilemap
- var region = map.get_used_rect()
- #region = region.grow_individual(0, 0, region.size.x, region.size.y)
-
path_grid = AStarGrid2D.new()
- path_grid.region = region
- path_grid.cell_size = map.tile_set.tile_size #/ 2
- #path_grid.offset = path_grid.cell_size
- path_grid.diagonal_mode = AStarGrid2D.DIAGONAL_MODE_ONLY_IF_NO_OBSTACLES
+ path_grid.region = map.get_used_rect()
+ path_grid.cell_size = map.tile_set.tile_size
+ path_grid.offset = map.tile_set.tile_size / 2
+ path_grid.diagonal_mode = AStarGrid2D.DIAGONAL_MODE_AT_LEAST_ONE_WALKABLE
path_grid.update()
for tower in get_tree().current_scene.get_node("Towers").get_children():
- path_grid.set_point_solid(map.local_to_map(tower.global_position))
- #var tower_region = tower.get_region().size.snapped(path_grid.cell_size)
- #path_grid.fill_solid_region(Rect2i(
- #map.local_to_map(tower.global_position) + Vector2i(-1,-1),
- #tower_region / path_grid.cell_size
- #))
+ fill_tower_region(tower, true)
func place_tower(tower: Tower, position: Vector2):
- var grid_position = map.local_to_map(position)
- path_grid.set_point_solid(grid_position, true)
- #var tower_region = tower.get_region().size.snapped(path_grid.cell_size)
- #path_grid.fill_solid_region(Rect2i(
- #map.local_to_map(position),
- #tower_region / path_grid.cell_size
- #), true)
-
tower.global_position = position
+ fill_tower_region(tower, true)
get_tree().current_scene.get_node("Towers").add_child(tower)
Game.score += 1
@@ -69,13 +55,7 @@ func remove_tower(tower: Tower):
Game.score -= 1
func destroy_tower(tower: Tower):
- var grid_position = map.local_to_map(tower.global_position)
- path_grid.set_point_solid(grid_position, false)
- #var tower_region = tower.get_region().size.snapped(path_grid.cell_size)
- #path_grid.fill_solid_region(Rect2i(
- #map.local_to_map(tower.global_position),
- #tower_region / path_grid.cell_size,
- #), false)
+ fill_tower_region(tower, false)
tower.queue_free()
@@ -90,11 +70,41 @@ func deselect_tower():
get_tree().current_scene.get_node("%Tower").text = ""
+func fill_tower_region(tower: Tower, solid = true):
+ var region = tower.get_region().size.snapped(path_grid.cell_size)
+ path_grid.fill_solid_region(
+ Rect2i(
+ map.local_to_map(tower.global_position),
+ (region / path_grid.cell_size)
+ ),
+ solid
+ )
+
+
func spawn_mob(mob: Mob, spawn: Spawn):
- mob.global_position = spawn.global_position
+ mob.global_position = spawn.spawn_position
mob.target = spawn.next_node
mob.hp = randi_range(50, 200)
mob.speed = randi_range(50, 150)
- mob.get_node("Sprite2D").modulate = Color(randf_range(0, 1), randf_range(0, 1), randf_range(0, 1))
+ #mob.get_node("Sprite2D").modulate = Color(randf_range(0, 1), randf_range(0, 1), randf_range(0, 1))
return mob
+
+
+func start_build_mode():
+ Game.mode = Game.Mode.BUILD
+ var scene = preload("res://BuilderElement.tscn")
+ var builder_element = scene.instantiate()
+ var tower = preload("res://Tower.tscn").instantiate() as Tower
+ tower.attack_range = [
+ Game.map.tile_set.tile_size.x * 2,
+ Game.map.tile_set.tile_size.x * 3,
+ Game.map.tile_set.tile_size.x * 4,
+ ].pick_random()
+ builder_element.element = tower
+ get_tree().current_scene.add_child(builder_element)
+ current_builder_element = builder_element
+
+func stop_build_mode():
+ current_builder_element.queue_free()
+ Game.mode = Game.Mode.DEFAULT