it's because you use globalmouseposition so when your camera moves, your 'lastMousePos' that you record when your camera is at previous position isn't correct anymore
use mouse position in viewport instead
currentMousePos = get_viewport().get_mouse_position()
and use onready at variable declaration to prevent getting null mouse position when the game starts
onready var lastMousePos = get_viewport().get_mouse_position()
onready var currentMousePos = lastMousePos
SUGGESTION:
1.reset your 'lastMousePos' every time you begin a new drag so your camera didn't move when you just click
if Input.is_action_just_pressed("cam_drag"):
lastMousePos = get_viewport().get_mouse_position()
2.currently, all your camera drag will round to 30 even if it slightly drag. make you can't drag in small distance.
seperate the case to enable small drag with this
if lastMousePos.distance_to(currentMousePos) < 30:
# SMALL DRAG
self.translate(lastMousePos - currentMousePos)
else :
var diff = (lastMousePos - currentMousePos).normalized()
self.translate(diff * 30)
with all code above, we get this
extends Camera2D
onready var lastMousePos = get_viewport().get_mouse_position()
onready var currentMousePos = lastMousePos
func _process(delta):
if Input.is_action_just_pressed("cam_drag"):
lastMousePos = get_viewport().get_mouse_position()
if Input.is_action_pressed("cam_drag"):
currentMousePos = get_viewport().get_mouse_position()
if lastMousePos.distance_to(currentMousePos) < 30:
# SMALL DRAG
self.translate(lastMousePos - currentMousePos)
else :
var diff = (lastMousePos - currentMousePos).normalized()
self.translate(diff * 30)
lastMousePos = currentMousePos