61 lines
1.9 KiB
GDScript3
61 lines
1.9 KiB
GDScript3
|
extends Control
|
|||
|
|
|||
|
export var cell_size = 100
|
|||
|
export var bgzoom = 50
|
|||
|
|
|||
|
export(Texture) var background
|
|||
|
export(Font) var font
|
|||
|
|
|||
|
var dragging = false
|
|||
|
var origin = Vector2(randf() * -1e4, randf() * -1e4)
|
|||
|
var last_origin = origin
|
|||
|
var last_mouse_pos = Vector2.ZERO
|
|||
|
|
|||
|
func _draw():
|
|||
|
var win_size = get_global_rect().size
|
|||
|
var cols = int(ceil(win_size.x/cell_size))
|
|||
|
var rows = int(ceil(win_size.y/cell_size))
|
|||
|
var xoffset = float(int(origin.x) % cell_size)
|
|||
|
var yoffset = float(int(origin.y) % cell_size)
|
|||
|
draw_texture_rect_region(background, Rect2(Vector2.ZERO, win_size), Rect2(-origin*bgzoom, win_size*bgzoom), Color(0.5,0.5,0.5,1))
|
|||
|
for i in range(0, cols+1):
|
|||
|
draw_line(Vector2(i * cell_size+xoffset, 0), Vector2(i * cell_size+xoffset, win_size.y), Color.white * 0.5)
|
|||
|
for i in range(0, rows):
|
|||
|
draw_line(Vector2(0, i * cell_size+yoffset), Vector2(win_size.x, i * cell_size+yoffset), Color.white * 0.5)
|
|||
|
for x in range(-1, cols+1):
|
|||
|
for y in range(-1, rows+1):
|
|||
|
var real_x = x - int(origin.x/cell_size)
|
|||
|
var real_y = y - int(origin.y/cell_size)
|
|||
|
var sector_name = to_letter(real_x)
|
|||
|
if real_y < 0:
|
|||
|
sector_name += to_letter(real_y)
|
|||
|
else:
|
|||
|
sector_name += str(real_y)
|
|||
|
draw_string(font, Vector2(x * cell_size + 6 + xoffset, y * cell_size + 20 + yoffset), sector_name, Color(1,1,1,0.5))
|
|||
|
|
|||
|
func _input(event):
|
|||
|
if event is InputEventMouseButton:
|
|||
|
dragging = event.pressed
|
|||
|
last_origin = origin
|
|||
|
last_mouse_pos = event.position
|
|||
|
update()
|
|||
|
elif event is InputEventMouseMotion:
|
|||
|
if dragging:
|
|||
|
origin = last_origin + (event.position - last_mouse_pos)
|
|||
|
update()
|
|||
|
|
|||
|
func to_letter(num: int) -> String:
|
|||
|
#var letters = "ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ"
|
|||
|
var letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
|||
|
if num == 0:
|
|||
|
return "Α"
|
|||
|
elif num < 0:
|
|||
|
letters = "αβγδεζηθικλμνξοπρστυφχψω"
|
|||
|
num = abs(num)
|
|||
|
var out = ""
|
|||
|
var base = letters.length()
|
|||
|
while num > 0:
|
|||
|
out += letters.substr(num % base, 1)
|
|||
|
num /= base
|
|||
|
return out
|