summaryrefslogtreecommitdiff
path: root/Game.gd
blob: 4f2106a4d1fb4d979f73a20f0469b51b2390da8f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
extends Node


signal mode_changed
signal path_grid_changed

var debug = false

enum Mode {
	DEFAULT,
	BUILD,
}

var mode: Mode = Mode.DEFAULT :
	set(value):
		mode = value
		mode_changed.emit()


var score: int :
	set(value):
		score = value
		get_tree().current_scene.get_node("%Score").text = str(score)


var path_grid: AStarGrid2D
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.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
		#))


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
	get_tree().current_scene.get_node("Towers").add_child(tower)
	
	Game.score += 1
	
	path_grid_changed.emit()

func remove_tower(tower: Tower):
	destroy_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)
	
	tower.queue_free()
	
	path_grid_changed.emit()

func select_tower(tower: Tower):
	tower.is_selected = true

func deselect_tower():
	if Tower.selected_tower:
		Tower.selected_tower.is_selected = false
		get_tree().current_scene.get_node("%Tower").text = ""


func spawn_mob(mob: Mob, spawn: Spawn):
	mob.global_position = spawn.global_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))
	
	return mob