//
// Deus Hax (working title)
// Copyright (c) 2010 Sam Hocevar <sam@hocevar.net>
//

#if defined HAVE_CONFIG_H
#   include "config.h"
#endif

#include <cstdio>

#include "game.h"
#include "map.h"

/*
 * Game implementation class
 */

class GameData
{
    friend class Game;

private:
    Map *map;
    int x, y;
    int mousex, mousey;
    int done;

    Scene *scene;
};

/*
 * Public Game class
 */

Game::Game(char const *mapname)
{
    data = new GameData();
    data->map = new Map(mapname);
    data->x = data->y = 0;
    data->done = 0;
    data->scene = NULL;
}

Game::~Game()
{
    delete data->map;
    delete data;
}

Asset::Group Game::GetGroup()
{
    return Asset::GetGroup();
}

void Game::TickGame(float delta_time)
{
    Asset::TickGame(delta_time);
}

void Game::TickRender(float delta_time)
{
    Asset::TickRender(delta_time);

    GetScene();

    data->map->Render(data->scene, data->mousex, data->mousey, 0);
    data->scene->Render();

    delete data->scene;
    data->scene = NULL;
}

Scene *Game::GetScene()
{
    if (!data->scene)
        data->scene = new Scene();
    return data->scene;
}

void Game::SetMouse(int x, int y)
{
    data->mousex = x;
    data->mousey = y;
}

void Game::Quit()
{
    data->done = 1;
}

int Game::Finished()
{
    return data->done;
}