2020-08-17 19:54:33 +00:00
|
|
|
extends Node2D
|
|
|
|
|
|
|
|
|
|
|
|
var isometric_polylines := [] # An array of PoolVector2Arrays
|
|
|
|
|
|
|
|
|
|
|
|
func _draw() -> void:
|
|
|
|
if Global.draw_grid:
|
|
|
|
draw_grid(Global.grid_type)
|
|
|
|
|
|
|
|
|
|
|
|
func draw_grid(grid_type : int) -> void:
|
2020-11-13 18:12:20 +00:00
|
|
|
var size : Vector2 = Global.transparent_checker.rect_size
|
2020-08-17 19:54:33 +00:00
|
|
|
if grid_type == Global.Grid_Types.CARTESIAN || grid_type == Global.Grid_Types.ALL:
|
|
|
|
for x in range(Global.grid_width, size.x, Global.grid_width):
|
2021-01-06 15:11:50 +00:00
|
|
|
draw_line(Vector2(x, 0), Vector2(x, size.y), Global.grid_color, true)
|
2020-08-17 19:54:33 +00:00
|
|
|
|
|
|
|
for y in range(Global.grid_height, size.y, Global.grid_height):
|
2021-01-06 15:11:50 +00:00
|
|
|
draw_line(Vector2(0, y), Vector2(size.x, y), Global.grid_color, true)
|
2020-08-17 19:54:33 +00:00
|
|
|
|
|
|
|
if grid_type == Global.Grid_Types.ISOMETRIC || grid_type == Global.Grid_Types.ALL:
|
|
|
|
var i := 0
|
2020-08-19 21:12:07 +00:00
|
|
|
for x in range(Global.grid_isometric_cell_size, size.x + 2, Global.grid_isometric_cell_size * 2):
|
|
|
|
for y in range(0, size.y + 1, Global.grid_isometric_cell_size):
|
2020-08-17 19:54:33 +00:00
|
|
|
draw_isometric_tile(i, Vector2(x, y))
|
|
|
|
i += 1
|
|
|
|
|
|
|
|
|
2020-08-19 21:12:07 +00:00
|
|
|
func draw_isometric_tile(i : int, origin := Vector2.RIGHT, cell_size : int = Global.grid_isometric_cell_size) -> void:
|
2020-08-17 19:54:33 +00:00
|
|
|
# A random value I found by trial and error, I have no idea why it "works"
|
|
|
|
var diff = 1.11754
|
|
|
|
var approx_30_degrees = deg2rad(26.565)
|
|
|
|
|
|
|
|
var pool := PoolVector2Array()
|
|
|
|
if i < isometric_polylines.size():
|
|
|
|
pool = isometric_polylines[i]
|
|
|
|
else:
|
2020-08-19 21:12:07 +00:00
|
|
|
var a = origin - Vector2(0, 0.5)
|
|
|
|
var b = a + Vector2(cos(approx_30_degrees), sin(approx_30_degrees)) * cell_size * diff
|
|
|
|
var c = a + Vector2.DOWN * cell_size
|
|
|
|
var d = c - Vector2(cos(approx_30_degrees), sin(approx_30_degrees)) * cell_size * diff
|
2020-08-17 19:54:33 +00:00
|
|
|
pool.append(a)
|
|
|
|
pool.append(b)
|
|
|
|
pool.append(c)
|
|
|
|
pool.append(d)
|
|
|
|
pool.append(a)
|
|
|
|
isometric_polylines.append(pool)
|
|
|
|
|
|
|
|
if pool.size() > 2:
|
|
|
|
draw_polyline(pool, Global.grid_color)
|