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

#pragma once
#include "../libs.h"
#include "../engine/engine.h"
#include "../locale/language.h"

/** Describes the current game */
#if SETTING_GAME == SETTING_GAME_POKER
  #include "poker/game.h"
  typedef pokergame_t game_t;
  #define GAME_INIT pokerGameInit
  #define GAME_UPDATE pokerGameUpdate
  #define GAME_DISPOSE pokerGameDispose

#elif SETTING_GAME == SETTING_GAME_DAWN
  #include "dawn/dawngame.h"
  typedef dawngame_t game_t;
  #define GAME_INIT dawnGameInit
  #define GAME_UPDATE dawnGameUpdate
  #define GAME_DISPOSE dawnGameDispose

#elif SETTING_GAME == SETTING_GAME_SANDBOX
  #include "sandbox/sandboxscene.h"
  typedef sandboxscene_t game_t;
  #define GAME_INIT sandboxSceneInit
  #define GAME_UPDATE sandboxSceneUpdate
  #define GAME_DISPOSE sandboxSceneDispose
  
#endif

/**
 * Initialize the game context.
 * 
 * @return True if successful, otherwise false.
 */
bool gameInit(game_t *game);

/**
 * Tick the main game loop.
 * 
 * @param platformDelta The platform tick delta between the last render.
 * @return True if successful, false if safe exit requested..
 */
bool gameUpdate(game_t *game, float platformDelta);

/**
 * Cleanup the game instance.
 */
void gameDispose(game_t *game);