terom@25: terom@25: #include "Graphics.hh" terom@25: terom@25: Graphics::Graphics (Engine &engine, GameState &state) : terom@25: engine(engine), terom@25: state(state), terom@25: update_timer(GRAPHICS_UPDATE_INTERVAL_MS), terom@25: win(GRAPHICS_WINDOW_TITLE, MAP_DIM_W, MAP_DIM_H), terom@25: keyboard(win.get_ic()->get_keyboard()) { terom@25: terom@25: // connect timer signal terom@25: slots.connect(update_timer.sig_timer(), this, &Graphics::on_update); terom@25: terom@25: // enable terom@25: update_timer.enable(); terom@25: } terom@25: terom@25: void Graphics::check_input (void) { terom@25: LocalPlayer *player; terom@25: int dx = 0, dy = 0; terom@25: terom@25: // stop on escape terom@25: if (keyboard.get_keycode(CL_KEY_ESCAPE)) { terom@25: engine.stop(); terom@25: terom@25: return; terom@25: } terom@25: terom@25: // ignore if we don't have a local player terom@25: if ((player = state.getLocalPlayer()) == NULL) terom@25: return; terom@25: terom@25: // handle up/down/left/right terom@25: if (keyboard.get_keycode(CL_KEY_UP)) terom@25: dy -= 3; terom@25: terom@25: if (keyboard.get_keycode(CL_KEY_DOWN)) terom@25: dy += 3; terom@25: terom@25: if (keyboard.get_keycode(CL_KEY_LEFT)) terom@25: dx -= 3; terom@25: terom@25: if (keyboard.get_keycode(CL_KEY_RIGHT)) terom@25: dx += 3; terom@25: terom@25: // apply movement if applicable terom@25: if (dx || dy) terom@25: player->move(PositionDelta(dx, dy)); terom@25: } terom@25: terom@25: void Graphics::do_redraw (void) { terom@25: CL_GraphicContext *gc = win.get_gc(); terom@25: terom@25: // white background terom@25: gc->clear(CL_Color::white); terom@25: terom@25: // draw players terom@25: for (std::list::iterator it = state.player_list.begin(); it != state.player_list.end(); it++) { terom@25: Player *p = *it; terom@25: terom@25: // draw square terom@25: gc->fill_rect( terom@25: CL_Rect( terom@25: p->getPosition().x - 5, p->getPosition().y - 5, terom@25: p->getPosition().x + 5, p->getPosition().y + 5 terom@25: ), CL_Color::black terom@25: ); terom@25: } terom@25: terom@25: // flip window buffer, LIEK NAO terom@25: win.flip(0); terom@25: } terom@25: terom@25: void Graphics::on_update (void) { terom@25: // check keyboard input terom@25: check_input(); terom@25: terom@25: // redraw display terom@25: do_redraw(); terom@25: }