59 lines
1.4 KiB
GDScript3
59 lines
1.4 KiB
GDScript3
|
extends Control
|
||
|
|
||
|
onready var map_menu = $menu/menubar/MapMenu.get_popup()
|
||
|
onready var map_node = $map
|
||
|
|
||
|
const MAP_SCALE_MAX = 8
|
||
|
const MAP_SCALE_MIN = 0.25
|
||
|
|
||
|
func _ready():
|
||
|
pass
|
||
|
|
||
|
# Prevent input handler from running when other dialogs/actions are focused
|
||
|
var input_lock = false
|
||
|
|
||
|
# Drag variables
|
||
|
var dragging = false
|
||
|
var view_origin = Vector2.ZERO
|
||
|
var mouse_origin = Vector2.ZERO
|
||
|
|
||
|
func _input(ev: InputEvent):
|
||
|
if input_lock:
|
||
|
return
|
||
|
|
||
|
if ev is InputEventMouseMotion:
|
||
|
if dragging:
|
||
|
map_node.position = view_origin - (mouse_origin - ev.global_position)
|
||
|
else:
|
||
|
# Map cursor location to grid
|
||
|
var mouseOffset = ev.global_position - map_node.global_position
|
||
|
|
||
|
|
||
|
if ev is InputEventMouseButton:
|
||
|
var mouse = ev as InputEventMouseButton
|
||
|
if mouse.pressed:
|
||
|
match ev.button_index:
|
||
|
BUTTON_WHEEL_UP:
|
||
|
# Zoom in
|
||
|
if map_node.scale.x < MAP_SCALE_MAX:
|
||
|
if map_node.scale.x < 1:
|
||
|
map_node.scale *= 2
|
||
|
else:
|
||
|
map_node.scale += Vector2.ONE
|
||
|
BUTTON_WHEEL_DOWN:
|
||
|
# Zoom out
|
||
|
if map_node.scale.x > MAP_SCALE_MIN:
|
||
|
if map_node.scale.x <= 1:
|
||
|
map_node.scale /= 2
|
||
|
else:
|
||
|
map_node.scale -= Vector2.ONE
|
||
|
BUTTON_MIDDLE:
|
||
|
view_origin = map_node.position
|
||
|
mouse_origin = ev.global_position
|
||
|
dragging = true
|
||
|
else:
|
||
|
match ev.button_index:
|
||
|
BUTTON_MIDDLE:
|
||
|
dragging = false
|
||
|
map_node.position = view_origin - (mouse_origin - ev.global_position)
|