obscene
Member
I'm having a little slowdown when using a lot of lensflares partly because I use a lot of lengthdir_x and lengthdir_y calculations.
Basically the lensflares are created out of a dozen or so little sprites that are drawn various distances from the center of the screen out at an angle opposite from the light source. It looks like this...
My only thought is to just reduce the calculations to an alarm every other frame or something... but hoping someone may have a better solution. Also I know I need to change those divisions to multiplications and precalculte some of the recurring math... doing that now.
Basically the lensflares are created out of a dozen or so little sprites that are drawn various distances from the center of the screen out at an angle opposite from the light source. It looks like this...
Code:
// Draw flare
draw_set_blend_mode(bm_add)
draw_sprite_ext(spr_lensflarecrepuscular,-1,px,py,1-distance/1500,1-distance/1500,px*.01+py*.01,c_white,intensity*.5-distance/750)
draw_sprite_ext(spr_lensflare_prime_rays,-1,px,py,1-distance/500,1-distance/500,px*.01+py*.01,c_white,(intensity-distance/750)*.4)
draw_sprite_ext(spr_lensflare_prime_edge,-1,px+lengthdir_x(distance*1.1,angle),py+lengthdir_y(distance*1.1,angle),distance/700,distance/700,angle,color,intensity*(distance/1000)-.1)
draw_sprite_ext(spr_lensflare_prime_orb,-1,px+lengthdir_x(distance*2.5,angle),py+lengthdir_y(distance*2.5,angle),2-distance/1000,2-distance/1000,angle,color,intensity-distance/2500-.5)
draw_sprite_ext(spr_lensflare_prime_circle_blue,-1,px+lengthdir_x(distance*1.12,angle),py+lengthdir_y(distance*1.12,angle),.2+(1-distance/1000)*.1,.2+(1-distance/1000)*.1,angle,color,intensity-distance/4200-.2)
draw_sprite_ext(spr_lensflare_prime_circle_green,-1,px+lengthdir_x(distance*1.13,angle),py+lengthdir_y(distance*1.13,angle),.3+(1-distance/1000)*.2,.3+(1-distance/1000)*.2,angle,color,intensity-distance/3800-.2)
draw_sprite_ext(spr_lensflare_prime_circle_red,-1,px+lengthdir_x(distance*1.15,angle),py+lengthdir_y(distance*1.15,angle),.5+(1-distance/1000)*.3,.5+(1-distance/1000)*.3,angle,color,intensity-distance/3200-.21)
draw_sprite_ext(spr_lensflare_prime_circle_blue,-1,px+lengthdir_x(distance*1.18,angle),py+lengthdir_y(distance*1.18,angle),.8+(1-distance/1000)*.5,.8+(1-distance/1000)*.5,angle,color,intensity-distance/2800-.2)
draw_sprite_ext(spr_lensflare_prime_circle_green,-1,px+lengthdir_x(distance*1.22,angle),py+lengthdir_y(distance*1.22,angle),1.2+(1-distance/1000)*.8,1.2+(1-distance/1000)*.8,angle,color,intensity-distance/2400-.2)
draw_sprite_ext(spr_lensflare_prime_circle_red,-1,px+lengthdir_x(distance*1.26,angle),py+lengthdir_y(distance*1.26,angle),1.6+(1-distance/1000)*1.2,1.6+(1-distance/1000)*1.2,angle,color,intensity-distance/2000-.2)
draw_sprite_ext(spr_lensflareline,-1,px,py,intensity*8,intensity*8*image_yscale,0,color,intensity*.2)
draw_sprite_ext(spr_lensflarehalfcircle,-1,px+lengthdir_x(distance*1.4,angle),py+lengthdir_y(distance*1.4,angle),.7,.7,angle,color,intensity*.1)
draw_sprite_ext(spr_lensflarehalfcircle,-1,px+lengthdir_x(distance*2.5,angle),py+lengthdir_y(distance*2.5,angle),1.7,1.7,angle,c_olive,intensity*.1)
draw_set_blend_mode(bm_normal)
Last edited: