#include "Include\stddefs.inc"

#include "BloomTypes.inc"

#define FADE_SPEED 0.05

proc SetBloom()
setibloomwhitebase wgBloom.fColourBase, wgBloom.fColourScale,
wgBloom.fIntensityBase, wgBloom.fIntensityScale
setibloomwhitemix  wgBloom.vWhiteMix, 1
setibloomctint     wgBloom.vColourTint, 1
setibloomitint     wgBloom.vIntensityTint, 1

/*
screenprint wgBloomDefault.fColourBase, wgBloomDefault.fColourScale,
wgBloomDefault.fIntensityBase, wgBloomDefault.fIntensityScale
screenprint wgBloomDefault.vWhiteMix
screenprint wgBloomDefault.vColourTint
screenprint wgBloomDefault.fIntensityTint
*/
endproc

strat BloomHandler()
#info
dontshow
#endinfo
public int piBloomType

struct BloomSettings bloom


/******************************************************************/
/*              , paste new defaults here                  */

bloom.fColourBase = 0.5
bloom.fColourScale = 0.5
bloom.fIntensityBase = 0
bloom.fIntensityScale = 0

bloom.vWhiteMix = tovec3(0.36,0.34,0.3)
bloom.vColourTint = tovec3( 1,1,1)
bloom.vIntensityTint = tovec3(0,0,0)

/*              , paste new defaults here                  */
/******************************************************************/

wgBloomDefault = bloom


loop
int type_used = piBloomType
if controller_pad(0) & PAD_R3
type_used = 0
endif

//screenprint "Bloom type set: ";pBloomType
//screenprint "Bloom type used: ";type_used

switch type_used
case BLOOM_GENERIC
screenprint "Generic bloom settings"

bloom.fColourBase = 0
bloom.fColourScale = 0
bloom.fIntensityBase = 0.05
bloom.fIntensityScale = 0.25

bloom.vWhiteMix = tovec3(0.3, 0.56, 0.14)
bloom.vColourTint = tovec3(1.0, 1.0, 1.0)
bloom.vIntensityTint = tovec3(1.0, 1.0, 1.1)
endcase

case EGYPT_CAVES
bloom.fColourBase = 0.5
bloom.fColourScale = 0.12
bloom.fIntensityBase = 0
bloom.fIntensityScale = 0

bloom.vWhiteMix = tovec3(0.36,0.34,0.3)
bloom.vColourTint = tovec3( 1,1,1)
bloom.vIntensityTint = tovec3(0,0,0)
endcase
default
bloom = wgBloomDefault
endcase
endswitch

assert bloom.vWhiteMix.x + bloom.vWhiteMix.y + bloom.vWhiteMix.z =
1, "White mix does not add up to 1 using type ";type_used

wgBloom.fColourBase     = lerp(wgBloom.fColourBase,   
bloom.fColourBase,     FADE_SPEED)
wgBloom.fColourScale    = lerp(wgBloom.fColourScale,  
bloom.fColourScale,    FADE_SPEED)
wgBloom.fIntensityBase  = lerp(wgBloom.fIntensityBase,
bloom.fIntensityBase,  FADE_SPEED)
wgBloom.fIntensityScale = lerp(wgBloom.fIntensityScale,
bloom.fIntensityScale, FADE_SPEED)

wgBloom.vWhiteMix       = lerp(wgBloom.vWhiteMix,     
bloom.vWhiteMix,       FADE_SPEED)
wgBloom.vColourTint     = lerp(wgBloom.vColourTint,   
bloom.vColourTint,     FADE_SPEED)
wgBloom.vIntensityTint  = lerp(wgBloom.vIntensityTint,
bloom.vIntensityTint,  FADE_SPEED)

SetBloom

piBloomType = 0
endloop
endstrat


strat BloomRegion(int bloom_type)
#info
//group = "Effects"
dontshow
bloom_type "Type:#BloomTypes.inc#" = 0
#endinfo
wait 2 // wait for BloomHandler to be spawned

strat bloom_handler = first_strat("BloomHandler")

ifnot bloom_handler
print "No bloom handler found"
remove
endif

loop
whilenot inside_region(wgsThisPlayer)
endwhile

bloom_handler.piBloomType = bloom_type
while inside_region(wgsThisPlayer)
endwhile
bloom_handler.piBloomType = 0
endloop
endstrat