Kermer icon

Intersection inside rectangle

Kermer | PRO | 01/31/17 04:29:57 PM UTC | 0 ⭐ | 202 👁️ | Never ⏰ | []
Python |

1.01 KB

|

None

|

0 👍

/

0 👎

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