diff options
author | Daniel Weipert <git@mail.dweipert.de> | 2024-08-31 21:19:36 +0200 |
---|---|---|
committer | Daniel Weipert <git@mail.dweipert.de> | 2024-08-31 21:19:36 +0200 |
commit | 14e51610a66099af5cba7cb92876e691fe017216 (patch) | |
tree | 5bbb252c0170b00e25cb66e38980bcd505c5aad2 /Game.gd | |
parent | cf4f54f8e43d1deb03e1b644f6a374530efa11e3 (diff) |
next commit
Diffstat (limited to 'Game.gd')
-rw-r--r-- | Game.gd | 70 |
1 files changed, 40 insertions, 30 deletions
@@ -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 |