--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/Graphics.cc Wed Dec 03 19:16:32 2008 +0000
@@ -0,0 +1,87 @@
+
+#include "Graphics.hh"
+#include "Physics.hh"
+#include "GameState.hh"
+#include <cmath>
+
+Graphics::Graphics (Engine &engine, GameState &state) :
+ engine(engine),
+ state(state),
+ update_timer(GRAPHICS_UPDATE_INTERVAL_MS),
+ win(GRAPHICS_WINDOW_TITLE, GRAPHICS_RESOLUTION_WIDTH, GRAPHICS_RESOLUTION_HEIGHT),
+ keyboard(win.get_ic()->get_keyboard()) {
+
+ // connect timer signal
+ slots.connect(update_timer.sig_timer(), this, &Graphics::on_update);
+
+ // enable
+ update_timer.enable();
+}
+
+void Graphics::check_input (void) {
+ LocalPlayer *player;
+ PlayerInput_Move input_move = 0;
+
+ // stop on escape
+ if (keyboard.get_keycode(CL_KEY_ESCAPE)) {
+ engine.stop();
+
+ return;
+ }
+
+ // ignore if we don't have a local player
+ if ((player = state.getLocalPlayer()) == NULL)
+ return;
+
+ // handle movement
+ if (keyboard.get_keycode(CL_KEY_LEFT))
+ input_move |= INPUT_MOVE_LEFT;
+
+ if (keyboard.get_keycode(CL_KEY_RIGHT))
+ input_move |= INPUT_MOVE_RIGHT;
+
+ if (keyboard.get_keycode(CL_KEY_UP))
+ input_move |= INPUT_MOVE_UP;
+
+ if (keyboard.get_keycode(CL_KEY_DOWN))
+ input_move |= INPUT_MOVE_DOWN;
+
+ if (keyboard.get_keycode(CL_KEY_RSHIFT))
+ input_move |= INPUT_MOVE_JUMP;
+
+ if (keyboard.get_keycode(CL_KEY_I))
+ player->debugInfo();
+
+ if (keyboard.get_keycode(CL_KEY_F)) {
+ Engine::log(DEBUG, "Graphics.check_input") << "Fire!";
+ input_move |= INPUT_SHOOT;
+ }
+
+ if (keyboard.get_keycode(CL_KEY_M))
+ input_move |= INPUT_MOVE_DIG;
+
+ // apply movement if applicable
+ if (input_move)
+ player->handleMove(input_move);
+}
+
+void Graphics::do_redraw (void) {
+ CL_GraphicContext *gc = win.get_gc();
+
+ // White background
+ gc->clear(CL_Color::white);
+
+ // Draw terrain
+ state.draw(gc);
+
+ // Flip window buffer, sync
+ win.flip(1);
+}
+
+void Graphics::on_update (void) {
+ // check keyboard input
+ check_input();
+
+ // redraw display
+ do_redraw();
+}