;
; ------------------------------------------------------------
;
;   PureBasic - NodeAnimation
;
;    (c) Fantaisie Software
;
; ------------------------------------------------------------
;
;An example of using AnimationTracks To make a node smoothly
;follow a predefined path With spline interpolation.

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

Declare AddPath(NodeAnimation)
Define.f Duration = 10000, Time = Duration / 4

If InitEngine3D()
  
  InitSprite()
  InitKeyboard()
  InitMouse()
  
  If Screen3DRequester()
    Add3DArchive(#PB_Compiler_Home + "examples/3d/Data"                , #PB_3DArchive_FileSystem)
    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()
    
    ;- Barrel
    CreateEntity(1, LoadMesh(1, "Barrel.mesh"), #PB_Material_None)
    ScaleEntity(1, 9, 9, 9)
    
    ;- Camera
    CreateCamera(0, 0, 0, 100, 100)
    
    ;- Node
    CreateNode(0)
    AttachNodeObject(0, CameraID(0))
    
    ;- Light
    AmbientColor(RGB(75, 75, 75))
    CreateLight(0, RGB(235, 253, 126), -750, 750, -750)
    
    ;- SkyBox
    SkyBox("desert07.jpg")
    
    ;- NodeAnimation
    NodeAnimation = CreateNodeAnimation(#PB_Any, NodeID(0), Duration, #PB_NodeAnimation_Spline, #PB_NodeAnimation_LinearRotation)
        
    CreateNodeAnimationKeyFrame(NodeAnimation, Time * 0,  200,   0,    0); key 0
    CreateNodeAnimationKeyFrame(NodeAnimation, Time * 1,    0, -50,  100); key 1
    CreateNodeAnimationKeyFrame(NodeAnimation, Time * 2, -500, 100,    0); key 2
    CreateNodeAnimationKeyFrame(NodeAnimation, Time * 3,    0, 200, -300); key 3
    CreateNodeAnimationKeyFrame(NodeAnimation, Time * 4,  200,   0,    0); key 4
    
    StartNodeAnimation(NodeAnimation)
    
    Repeat
      Screen3DEvents()
      
      ExamineKeyboard()
      AddNodeAnimationTime(NodeAnimation, TimeSinceLastFrame)
      CameraLookAt(0, EntityX(1), EntityY(1), EntityZ(1))
      
      TimeSinceLastFrame = RenderWorld()
      FlipBuffers()
      
    Until KeyboardPushed(#PB_Key_Escape)
    
    End
    
  EndIf
Else
  MessageRequester("Error","Can't initialize engine3D")
EndIf