summaryrefslogtreecommitdiffstats
path: root/Map.gd
diff options
context:
space:
mode:
Diffstat (limited to 'Map.gd')
-rw-r--r--Map.gd174
1 files changed, 0 insertions, 174 deletions
diff --git a/Map.gd b/Map.gd
deleted file mode 100644
index 81c5c36..0000000
--- a/Map.gd
+++ /dev/null
@@ -1,174 +0,0 @@
-extends Sprite
-
-signal hex_touched(pos, hex, key)
-
-const MAPH : String = "res://assets/map-h.png"
-const MAPV : String = "res://assets/map-v.png"
-const BLOCK : String = "res://assets/block.png"
-const BLACK : String = "res://assets/black.png"
-const MOVE : String = "res://assets/move.png"
-const SHORT : String = "res://assets/short.png"
-const RED : String = "res://assets/red.png"
-const GREEN : String = "res://assets/green.png"
-const TREE : String = "res://assets/tree.png"
-const CITY : String = "res://assets/city.png"
-const MOUNT : String = "res://assets/mountain.png"
-
-var drag : Sprite
-
-var board : HexBoard
-var prev : Vector2
-var hexes : Dictionary
-var hex_rotation : int
-var p0 : Vector2
-var p1 : Vector2
-var los : Array
-var move : Array
-var short : Array
-var influence : Array
-var unit : Unit
-var show_los : bool
-var show_move : bool
-var show_influence : bool
-
-func _ready():
- drag = null
- unit = Unit.new()
- board = HexBoard.new()
- board.tile_factory_fct = funcref(self, "get_tile")
- board.v = false
- rotate_map()
-
-func reset() -> void:
- los.clear()
- move.clear()
- short.clear()
- influence.clear()
- hexes.clear()
- hexes[-1] = Hex.new() # off map
- p0 = Vector2(0, 0)
- p1 = Vector2(3, 3)
- $Tank.position = board.center_of(p0)
- $Target.position = board.center_of(p1)
- for hex in $Hexes.get_children():
- $Hexes.remove_child(hex)
- hex.queue_free()
- compute()
-
-func rotate_map() -> void:
- texture = load(MAPH if board.v else MAPV)
- configure()
- reset()
-
-func set_mode(l : bool, m : bool, i : bool) -> void:
- show_los = l
- show_move = m
- show_influence = i
- compute()
-
-func configure() -> void:
- var v0 : Vector2 = Vector2(50, 100)
- if centered:
- var ts : Vector2 = texture.get_size()
- if board.v:
- v0.x -= ts.y / 2
- v0.y -= ts.x / 2
- else:
- v0 -= ts / 2
- if board.v:
- hex_rotation = 30
- board.configure(10, 4, 100, v0, false)
- else:
- hex_rotation = 0
- board.configure(10, 7, 100, v0, true)
-
-func texture_size() -> Vector2:
- return texture.get_size()
-
-func center() -> Vector2:
- return Vector2(0, 0) if centered else texture.get_size() / 2
-
-func on_mouse_move() -> void:
- if drag != null:
- drag.position = get_local_mouse_position()
-
-func on_click(pressed : bool) -> bool:
- var pos : Vector2 = get_local_mouse_position()
- var coords : Vector2 = board.to_map(pos)
- if pressed:
- notify(pos, coords)
- prev = coords
- if board.to_map($Tank.position) == coords:
- drag = $Tank
- elif board.to_map($Target.position) == coords:
- drag = $Target
- else:
- return true
- else:
- if drag:
- if board.is_on_map(coords):
- drag.position = board.center_of(coords)
- if drag == $Tank: p0 = coords
- else: p1 = coords
- notify(pos, coords)
- compute()
- else:
- drag.position = board.center_of(prev)
- drag = null
- else:
- if coords == prev and board.is_on_map(coords):
- change_tile(coords, pos)
- return false
-
-func change_tile(coords : Vector2, pos : Vector2) -> void:
- var hex : Hex = board.get_tile(coords)
- hex.change()
- notify(pos, coords)
- compute()
-
-func get_tile(coords : Vector2, k : int) -> Tile:
- if hexes.has(k): return hexes[k]
- var hex : Hex = Hex.new()
- hex.roads = get_road(k)
- hex.rotation_degrees = hex_rotation
- hex.configure(board.center_of(coords), coords, [RED, GREEN, BLACK, CITY, TREE, MOUNT, BLOCK, MOVE, SHORT])
- hexes[k] = hex
- $Hexes.add_child(hex)
- return hex
-
-func get_road(k : int) -> int:
- if not board.v: return 0
- var v : int = 0
- v += (HexBoard.Orientation.E if k in [19,20,21,23,24,42,43,44,45,46,47] else 0)
- v += (HexBoard.Orientation.W if k in [19,20,21,22,24,25,43,44,45,46,47] else 0)
- v += (HexBoard.Orientation.SE if k in [22,32,42,52,62] else 0)
- v += (HexBoard.Orientation.NW if k in [32,42,52,62] else 0)
- v += (HexBoard.Orientation.NE if k in [7,16,25,32] else 0)
- v += (HexBoard.Orientation.SW if k in [7,16,23] else 0)
- return v
-
-func notify(pos : Vector2, coords : Vector2) -> void:
- emit_signal("hex_touched", pos, board.get_tile(coords), (board.key(coords) if board.is_on_map(coords) else -1))
-
-func compute() -> void:
- $Los.visible = false
- for hex in los: hex.show_los(false)
- if show_los:
- $Los.visible = true
- var ct : Vector2 = board.line_of_sight(p0, p1, los)
- $Los.setup($Tank.position, $Target.position, ct)
- for hex in los: hex.show_los(true)
- for hex in move: hex.show_move(false)
- for hex in short: hex.show_short(false)
- if show_move:
- # warning-ignore:return_value_discarded
- board.possible_moves(unit, board.get_tile(p0), move)
- # warning-ignore:return_value_discarded
- board.shortest_path(unit, board.get_tile(p0), board.get_tile(p1), short)
- for hex in move: hex.show_move(true)
- for i in range(1, short.size() -1): short[i].show_short(true)
- for hex in influence: hex.show_influence(false)
- if show_influence:
- # warning-ignore:return_value_discarded
- board.range_of_influence(unit, board.get_tile(p0), 0, influence)
- for hex in influence: hex.show_influence(true)