I did this for an intro screen where the camera flies around earth and picks up lens flare when the sun comes into view. The earth passes between the camera and the sun.
I used the sc_raycast command in Sparky's Collision plugin. It worked great.
if object exist(Sun.objid) and dFPS > 30
set vector2 SunVector, object screen x(Sun.objid), object screen y(Sun.objid)
set vector2 CenterVector, (sw/2)-x vector2(SunVector), (sh/2)-y vector2(SunVector)
col = sc_Raycast(0, camera position x(0), camera position y(0), camera position z(0), object position x(Sun.objid), object position y(Sun.objid), object position z(Sun.objid), 0)
lf = 0
for flarex = st to en
inc lf
set vector2 FlareLine, x vector2(CenterVector), y vector2(CenterVector)
Length# = length vector2(CenterVector)
Percent# = Length# / (sh/2)
normalize vector2 FlareLine, FlareLine
vecscale# = lensflare(lf) * Percent#
scale vector2 FlareLine, FlareLine, vecscale#
add vector2 FlareLine, FlareLine, SunVector
if object in screen(Sun.objid) = 1 and col = 0 and (100 * Percent#) < 160
LensFade# = LensFade# + (8 * factor#)
if LensFade# > 130 then LensFade# = 130
else
LensFade# = LensFade# - (8 * factor#)
if LensFade# < 0 then LensFade# = 0
endif
set sprite alpha Lens(flarex).spriteID, int(LensFade#)
paste sprite Lens(flarex).spriteID, x vector2(FlareLine)-Lens(flarex).size, y vector2(FlareLine)-Lens(flarex).size
next fx
endif
Not the most elegant code, but it works.