Skip to content

Instantly share code, notes, and snippets.

@emlai
Last active March 27, 2024 22:18
Show Gist options
  • Save emlai/ee7a65f45c456e164b135440f8eb826b to your computer and use it in GitHub Desktop.
Save emlai/ee7a65f45c456e164b135440f8eb826b to your computer and use it in GitHub Desktop.
A 2D integer raycasting algorithm in Swift
var dx = abs(endPoint.x - startPoint.x)
var dy = abs(endPoint.y - startPoint.y)
var x = startPoint.x
var y = startPoint.y
var steps = 1 + dx + dy
let incrementX = (endPoint.x > startPoint.x) ? 1 : -1
let incrementY = (endPoint.y > startPoint.y) ? 1 : -1
var error = dx - dy
dx *= 2
dy *= 2
while steps > 0 {
if resultHandler(Vec2(x, y)) {
return true
}
if error > 0 {
x += incrementX
error -= dy
} else {
y += incrementY
error += dx
}
steps -= 1
}
return false
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment