func _ready(): var viewport_size = Vector2(X,Y) var rect = Rect2(Vector2(),viewport_size) # intersect() probably will support rect position (as offset) later on var pos = Vector2(x,y) # first dot position var vec = -Vector2(-32,-16) # your vector, but negated var second_pos = intersect(rect,pos,vec) # do something with this second pos func intersect(rect,pos,vec): if rect.size==Vector2() or vec==Vector2(): return pos var intersect = pos var v = vec.normalized() if (sign(v.x) == 0): if (sign(v.y) == -1): intersect.y = 0 else: intersect.y = rect.size.y elif (sign(v.y) == 0): if (sign(v.x) == -1): intersect.x = 0 else: intersect.x = rect.size.x else: var vmax = Vector2() if sign(v.x) == -1: vmax.x = (0-pos.x) / v.x else: vmax.x = (rect.size.x-pos.x) / v.x if sign(v.y) == -1: vmax.y = (0-pos.y) / v.y else: vmax.y = (rect.size.y-pos.y) / v.y if abs(vmax.x) < abs(vmax.y): intersect += v * vmax.x else: intersect += v * vmax.y return intersect
Comments