;
; ------------------------------------------------------------
;
;   PureBasic - Particle
;
;    (c) Fantaisie Software
;
; ------------------------------------------------------------
;

; [F5] = Enable/Disable ParticleEmitter 0
; [F6] = SpeedFactor + for ParticleEmitter 1
; [F7] = SpeedFactor - for ParticleEmitter 1

#CameraSpeed = 1
#MaxSpeedFactor = 10
#MinSpeedFactor = 0

IncludeFile #PB_Compiler_Home + "examples/3d/Screen3DRequester.pb"

Define.f KeyX, KeyY, MouseX, MouseY, speedFactor = 1.0, percent = 0.01

If InitEngine3D()

  Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Textures", #PB_3DArchive_FileSystem)
  
  InitSprite()
  InitKeyboard()
  InitMouse()
  
  If Screen3DRequester()
    
    LoadTexture(0, "flare.png")
    
    CreateMaterial(0, TextureID(0))
      DisableMaterialLighting(0, 1)
      MaterialBlendingMode   (0, #PB_Material_Add)
        
    CreateParticleEmitter(0, 10, 1, 1, 0)
      ParticleMaterial    (0, MaterialID(0))
      ParticleTimeToLive  (0, 2, 2)
      ParticleEmissionRate(0, 20)
      ParticleSize        (0, 30, 30)
      ParticleColorRange  (0, RGB(255,0,0), RGB(255, 0, 255))

    CreateParticleEmitter(1, 10, 1, 1, 0)
      ParticleMaterial    (1, MaterialID(0))
      ParticleTimeToLive  (1, 2, 2)
      ParticleEmissionRate(1, 20)
      ParticleSize        (1, 30, 30)
      ParticleColorRange  (1, RGB(255, 255, 0), RGB(0, 255, 0))

    MoveParticleEmitter(1, -50, 0, 0)
  
    CreateCamera(0, 0, 0, 100, 100)
    MoveCamera(0, 0, 0, 100, #PB_Absolute)
          
    Repeat
      Screen3DEvents()
        
      If ExamineMouse()
        MouseX = -MouseDeltaX() * #CameraSpeed * 0.05
        MouseY = -MouseDeltaY() * #CameraSpeed * 0.05
      EndIf
      
      If ExamineKeyboard()
        
        If KeyboardReleased(#PB_Key_F5)
          Disable = 1 - Disable
          DisableParticleEmitter(0, Disable)
        EndIf
        
        If KeyboardPushed(#PB_Key_F6)
          speedFactor = speedFactor + percent * (#MaxSpeedFactor - speedFactor)
          ParticleSpeedFactor(1, speedFactor)
        EndIf
        
        If KeyboardPushed(#PB_Key_F7)
          speedFactor = speedFactor + percent * (#MinSpeedFactor - speedFactor)
          ParticleSpeedFactor(1, speedFactor)
        EndIf
    
        If KeyboardPushed(#PB_Key_Left)
          KeyX = -#CameraSpeed
        ElseIf KeyboardPushed(#PB_Key_Right)
          KeyX = #CameraSpeed
        Else
          KeyX = 0
        EndIf
        
        If KeyboardPushed(#PB_Key_Up)
          KeyY = -#CameraSpeed
        ElseIf KeyboardPushed(#PB_Key_Down)
          KeyY = #CameraSpeed
        Else
          KeyY = 0
        EndIf

      EndIf
            
      RotateCamera(0, MouseY, MouseX, 0, #PB_Relative)
      MoveCamera  (0, KeyX, 0, KeyY)
    
      RenderWorld()
      FlipBuffers()
    Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
  EndIf
    
Else
  MessageRequester("Error", "The 3D Engine can't be initialized", 0)
EndIf
  
End+