; ParticleLifetime Example
; ------------------------
; Requires Extended mode.

Graphics3D 640,480,0,2
SetBuffer BackBuffer()

camera=CreateCamera()
PositionEntity camera,0,2,-6
CameraClsColor camera,8,12,24

floor=CreatePlane()
EntityColor floor,30,34,44

; A rocket exhaust plume - lifetime decides how long the trail is
emitter=CreateParticleEmitter(1500)
PositionEntity emitter,0,0.5,0
ParticleEmissionRate emitter,250
ParticleVelocity emitter,0,3,0,0.4,0.3,0.4
ParticleColor emitter,255,220,120,1,255,80,0,0
ParticleSize emitter,0.12,0.03,0.2
EntityBlend emitter,3

life_min#=0.5
life_max#=1.5

While Not KeyDown(1)

    ; [ / ] shrink or stretch the random lifetime range in seconds
    If KeyDown(26) And life_min>0.2 Then
        life_min=life_min-0.02
        life_max=life_max-0.04
    EndIf
    If KeyDown(27) And life_max<5 Then
        life_min=life_min+0.02
        life_max=life_max+0.04
    EndIf

    ; Each new particle lives between life_min and life_max seconds
    ParticleLifetime emitter,life_min,life_max

    ; Arrow keys move the camera
    If KeyDown(200) Then MoveEntity camera,0,0,0.1
    If KeyDown(208) Then MoveEntity camera,0,0,-0.1
    If KeyDown(203) Then TurnEntity camera,0,1,0
    If KeyDown(205) Then TurnEntity camera,0,-1,0

    ; UpdateWorld also advances the particle simulation
    UpdateWorld
    RenderWorld

    Text 0,0,"Arrow keys: move camera   [ / ] : lifetime range   Esc: exit"
    Text 0,20,"ParticleLifetime emitter,"+life_min+","+life_max
    Text 0,40,"Live particles: "+CountParticles(emitter)+" (longer life = taller plume)"

    Flip

Wend

End
