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

;Speed animation = PageUp and PageDown 

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

Define.f KeyX, KeyY, MouseX, MouseY, Speed = 0.3
Define.f x1, y1, z1, x2, y2, z2
Define Color = RGB(255, 0, 0)

If InitEngine3D()
  
    
  Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Textures", #PB_3DArchive_FileSystem)
  Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Models", #PB_3DArchive_FileSystem)
  Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Scripts", #PB_3DArchive_FileSystem)
  Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Packs/desert.zip", #PB_3DArchive_Zip)
  Parse3DScripts()
  
  InitSprite()
  InitKeyboard()
  InitMouse()
  
  If Screen3DRequester()
    
    ; Сущность (Entity)
    ;
    CreateEntity(1, LoadMesh(1, "robot.mesh"), #PB_Material_None)

    ; Анимация
    ;
    StartEntityAnimation(1, "Walk", #PB_EntityAnimation_Manual)
    
    ; Скайбокс (SkyBox)
    ;
    SkyBox("Desert07.jpg")
    
    ; Камера
    ;
    CreateCamera(0, 0, 0, 100, 100)
    MoveCamera(0, 50, 100, 80, #PB_Absolute)
    CameraLookAt(0, EntityX(1), EntityY(1) + 40, EntityZ(1))
    
    CreateLight(0, RGB(255, 255, 255), -40, 100, 80)
    AmbientColor(RGB(80, 80, 80))
    KeyboardMode(#PB_Keyboard_International)
        
    Repeat
      Screen3DEvents()
      
      If ExamineMouse()
        MouseX = -MouseDeltaX()/10 
        MouseY = -MouseDeltaY()/10
      EndIf
      
          
      If ExamineKeyboard()
      
        If KeyboardPushed(#PB_Key_Left)
          KeyX = -1
        ElseIf KeyboardPushed(#PB_Key_Right)
          KeyX = 1
        Else
          KeyX = 0
        EndIf
        
        If KeyboardPushed(#PB_Key_Up)
          KeyY = -1
        ElseIf KeyboardPushed(#PB_Key_Down)
          KeyY = 1
        Else
          KeyY = 0
        EndIf
        
        If KeyboardPushed(#PB_Key_PageUp) And Speed < 2.0
          Speed + 0.05
        ElseIf KeyboardPushed(#PB_Key_PageDown) And Speed > 0.1 
          Speed - 0.05
        EndIf
                
      EndIf

      AddEntityAnimationTime(1, "Walk", TimeSinceLastFrame * Speed)
                
      RotateCamera(0, MouseY, MouseX, 0, #PB_Relative)
      MoveCamera  (0, KeyX, 0, KeyY)
      
      TimeSinceLastFrame = RenderWorld()
      RotateEntity(1, 0, 1, 0, #PB_Relative)
      
      ; Ограничительная коробка (BoudingBox)
      x1 = EntityBoundingBox(1, #PB_Entity_MinBoundingBoxX)
      y1 = EntityBoundingBox(1, #PB_Entity_MinBoundingBoxY)
      z1 = EntityBoundingBox(1, #PB_Entity_MinBoundingBoxZ)
      x2 = EntityBoundingBox(1, #PB_Entity_MaxBoundingBoxX)
      y2 = EntityBoundingBox(1, #PB_Entity_MaxBoundingBoxY)
      z2 = EntityBoundingBox(1, #PB_Entity_MaxBoundingBoxZ)
      
      ; Низ
      CreateLine3D(10, x1, y1, z1, Color, x2, y1, z1, Color)
      CreateLine3D(11, x2, y1, z1, Color, x2, y1, z2, Color)
      CreateLine3D(12, x2, y1, z2, Color, x1, y1, z2, Color)
      CreateLine3D(13, x1, y1, z2, Color, x1, y1, z1, Color)
      ; Верх
      CreateLine3D(14, x1, y2, z1, Color, x2, y2, z1, Color)
      CreateLine3D(15, x2, y2, z1, Color, x2, y2, z2, Color)
      CreateLine3D(16, x2, y2, z2, Color, x1, y2, z2, Color)
      CreateLine3D(17, x1, y2, z2, Color, x1, y2, z1, Color)
      ; Край
      CreateLine3D(18, x1, y1, z1, Color, x1, y2, z1, Color)
      CreateLine3D(19, x2, y1, z1, Color, x2, y2, z1, Color)    
      CreateLine3D(20, x2, y1, z2, Color, x2, y2, z2, Color)
      CreateLine3D(21, x1, y1, z2, Color, x1, y2, z2, Color)
 
      
      FlipBuffers()
    Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
  EndIf
    
Else
  MessageRequester("Ошибка", "3D Движок не может быть инициализирован",0)
EndIf
  
End