#include "Graphics.hh"
#include "GameState.hh"
#include <cmath>
Graphics::Graphics (Engine &engine, GameState &state) :
CL_DisplayWindow(GRAPHICS_WINDOW_TITLE, GRAPHICS_RESOLUTION_WIDTH, GRAPHICS_RESOLUTION_HEIGHT),
engine(engine),
state(state),
update_timer(GRAPHICS_UPDATE_INTERVAL_MS),
input(get_ic()->get_keyboard()),
simple_font("Font2", engine.getResourceManager())
{
// connect timer signal
slots.connect(update_timer.sig_tick(), this, &Graphics::on_update);
// enable
update_timer.start();
}
void Graphics::check_input (void) {
LocalPlayer *player;
PlayerInput input_mask = 0;
// update gui flags
this->flags = input.readGuiInput();
// quit?
if (flags & GUI_INPUT_QUIT) {
engine.stop();
return;
}
// stop here if we don't have a local player
if ((player = state.getLocalPlayer()) == NULL)
return;
// dump debug info on stderr
if (flags & GUI_INPUT_DEBUG_PLAYER)
player->printDebugInfo();
// build input_mask
input_mask = input.readPlayerInput();
// apply input if there was any
if (input_mask)
player->handleInput(input_mask);
}
void Graphics::do_redraw (void) {
CL_GraphicContext *gc = get_gc();
// White background
gc->clear(CL_Color::white);
// Draw the game
state.draw(this, flags & GUI_INPUT_DISPLAY_WEAPON);
// Flip window buffer, sync
flip(1);
}
void Graphics::on_update (TimeMS tick_length) {
// check keyboard input
check_input();
// redraw display
do_redraw();
}