text: /*******************************************************************************************
  *
  *   raylib [models] example - Load 3d model with animations and play them
  *
  *   This example has been created using raylib 2.5 (www.raylib.com)
  *   raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
  *
  *   Example contributed by Culacant (@culacant) and reviewed by Ramon Santamaria (@raysan5)
  *
  *   Copyright (c) 2019 Culacant (@culacant) and Ramon Santamaria (@raysan5)
  *
  ********************************************************************************************
  *
  * To export a model from blender, make sure it is not posed, the vertices need to be in the 
  * same position as they would be in edit mode.
  * and that the scale of your models is set to 0. Scaling can be done from the export menu.
  *
  ********************************************************************************************/
  
  #include "raylib.h"
  
  #include <stdlib.h>
  
  
  int main(void)
  {
      // Initialization
      //--------------------------------------------------------------------------------------
      const int screenWidth = 800;
      const int screenHeight = 450;
  
      InitWindow(screenWidth, screenHeight, "raylib [models] example - model animation");
  
      // Define the camera to look into our 3d world
      Camera camera = { 0 };
      camera.position = (Vector3){ 10.0f, 10.0f, 10.0f }; // Camera position
      camera.target = (Vector3){ 0.0f, 0.0f, 0.0f };      // Camera looking at point
      camera.up = (Vector3){ 0.0f, 1.0f, 0.0f };          // Camera up vector (rotation towards target)
      camera.fovy = 45.0f;                                // Camera field-of-view Y
      camera.type = CAMERA_PERSPECTIVE;                   // Camera mode type
  
      Model model = LoadModel("resources/guy/guy.iqm");               // Load the animated model mesh and basic data
      Texture2D texture = LoadTexture("resources/guy/guytex.png");    // Load model texture and set material
      SetMaterialTexture(&model.materials[0], MAP_DIFFUSE, texture);  // Set model material map texture
  
      Vector3 position = { 0.0f, 0.0f, 0.0f };            // Set model position
  
      // Load animation data
      int animsCount = 0;
      ModelAnimation *anims = LoadModelAnimations("resources/guy/guyanim.iqm", &animsCount);
      int animFrameCounter = 0;
  
      SetCameraMode(camera, CAMERA_FREE); // Set free camera mode
  
      SetTargetFPS(60);                   // Set our game to run at 60 frames-per-second
      //--------------------------------------------------------------------------------------
  
      // Main game loop
      while (!WindowShouldClose())        // Detect window close button or ESC key
      {
          // Update
          //----------------------------------------------------------------------------------
          UpdateCamera(&camera);
  
          // Play animation when spacebar is held down
          if (IsKeyDown(KEY_SPACE))
          {
              animFrameCounter++;
              UpdateModelAnimation(model, anims[0], animFrameCounter);
              if (animFrameCounter >= anims[0].frameCount) animFrameCounter = 0;
          }
          //----------------------------------------------------------------------------------
  
          // Draw
          //----------------------------------------------------------------------------------
          BeginDrawing();
  
              ClearBackground(RAYWHITE);
  
              BeginMode3D(camera);
  
                  DrawModelEx(model, position, (Vector3){ 1.0f, 0.0f, 0.0f }, -90.0f, (Vector3){ 1.0f, 1.0f, 1.0f }, WHITE);
  
                  for (int i = 0; i < model.boneCount; i++)
                  {
                      DrawCube(anims[0].framePoses[animFrameCounter][i].translation, 0.2f, 0.2f, 0.2f, RED);
                  }
  
                  DrawGrid(10, 1.0f);         // Draw a grid
  
              EndMode3D();
  
              DrawText("PRESS SPACE to PLAY MODEL ANIMATION", 10, 10, 20, MAROON);
              DrawText("(c) Guy IQM 3D model by @culacant", screenWidth - 200, screenHeight - 20, 10, GRAY);
  
          EndDrawing();
          //----------------------------------------------------------------------------------
      }
  
      // De-Initialization
      //--------------------------------------------------------------------------------------
      UnloadTexture(texture);     // Unload texture
      
      // Unload model animations data
      for (int i = 0; i < animsCount; i++) UnloadModelAnimation(anims[i]);
      RL_FREE(anims);
  
      UnloadModel(model);         // Unload model
  
      CloseWindow();              // Close window and OpenGL context
      //--------------------------------------------------------------------------------------
  
      return 0;
  }
  