/**
 * Copyright (c) 2021 Dominic Masters
 * 
 * This software is released under the MIT License.
 * https://opensource.org/licenses/MIT
 */

#include "game.h"

bool gameInit(game_t *game) {
  // Init the engine and the rendering pipeline
  engineInit(&game->engine);

  cameraLookAt(&game->camera, 3,3,3, 0,0,0);
  cameraPerspective(&game->camera, 45.0f, 16.0f/9.0f, 0.001f, 1000.0f);
  quadInit(&game->quad, 0.0f, 0.0f,0.0f,0.0f,0.0f, 1.0f,1.0f,1.0f,1.0f);

  shaderInit(&game->shader,
    assetStringLoad("shaders/textured.vert"),
    assetStringLoad("shaders/textured.frag")
  );

  game->owner = assetManagerHolderCreate(&game->engine.assetManager);
  game->item = assetManagerLoadScaledTexture(
    &game->engine.assetManager, game->owner, "textures", "test_texture"
  );

  return true;
}

bool doneResize = false;

bool gameUpdate(game_t *game, float delta) {
  // Let the engine do its thing.
  engineUpdateStart(&game->engine, delta);

  if(game->engine.time.current > 4.0f && !doneResize) {
    printf("Resizing");
    // saveManagerSetUint8(&game->engine.save, SAVE_KEY_TEXTURE_SCALE, 0x03);
    // assetManagerScaledTextureRescaleAll(&game->engine.assetManager);
    doneResize = true;
  }

  if(game->item->state == ASSET_MANAGER_STATE_SYNC_DONE) {
    shaderUse(&game->shader);
    shaderUseCamera(&game->shader, &game->camera);
    shaderUsePosition(&game->shader, 0,0,0, 0,0,0);
    shaderUseTexture(&game->shader,  &game->item->data.scaledTexture.texture);
    primitiveDraw(&game->quad, 0, -1);
  }


  // Hand back to the engine.
  return engineUpdateEnd(&game->engine);
}

void gameDispose(game_t *game) {
  // Cleanup the game

  engineDispose(&game->engine);
}