void Movement::update() { int x = _data.player().getX(); int y = _data.player().getY(); bool moved = _oldx != x || _oldy != y; if (_path && _pathi == _path->size() && moved) { _releaseKeys(); delete _path; _path = NULL; } else if (_path && _pathi < _path->size() && (_pathi == 1 || moved)) { int dx = (*_path)[_pathi]->x - x; int dy = (*_path)[_pathi]->y - y; EKey k; _releaseKeys(); if (!dx) k = dy < 0 ? KEY_UP : KEY_DOWN; else k = dx < 0 ? KEY_LEFT : KEY_RIGHT; sdlSetButton(k, true); _pathi++; } _oldx = x; _oldy = y; }
void Bot::clear() { _queue.clear(); for (uint8_t i = KEY_LEFT; i < KEY_BUTTON_SPEED; i++) sdlSetButton((EKey) i, false); }
void sdlReleaseButton(EKey key) { sdlSetButton(key, false); }
void sdlPressButton(EKey key) { sdlSetButton(key, true); }
void Movement::_releaseKeys() { for (uint8_t i = KEY_LEFT; i <= KEY_DOWN; i++) sdlSetButton((EKey) i, false); }