void Resource<Dim, Type, Data>::move(Direction<Dim> _dir, double _time) { if(_time < 0.) { logger(Logger::WARNING) << "Negative time, fix to 0"; _time = 0.; } Coordonate<Dim, Type> tcoord = Object<Dim, Type>::coord; // New position on the specified direction tcoord[_dir.getValue().first] += _dir.getValue().second*(velocity*_time); if(true) // TEST IN SPACE + NOT COLLIDING Object<Dim, Type>::coord = tcoord; }
/** * Eine Figur verschieben. Dabei werden die Zellenrahmen beachtet. * @param figure Die zu verschiebende Figur. * @param direction Richtung, in die die Figur verschoben werden soll. */ void GameController::move(Figure* figure, Direction& direction) { unsigned int x = figure->getX(); unsigned int y = figure->getY(); if (field->allowsBorderMovement(x, y, direction)) { switch (direction.getValue()) { case Direction::UP: y--; break; case Direction::LEFT: x--; break; case Direction::DOWN: y++; break; case Direction::RIGHT: x++; break; } } // Durch einen Tunnel verlassen -> auf dem anderen Ende wieder einsetzen x = (x + Field::FIELD_WIDTH) % Field::FIELD_WIDTH; y = (y + Field::FIELD_HEIGHT) % Field::FIELD_HEIGHT; figure->setX(x); figure->setY(y); figure->setDirection(direction); // Wenn Pacman bewegt wurde: Nachsehen, ob sich auf dem neuen // Feld Essen befindet. if (figure == pacman) { if (field->getCell(pacman->getX(), pacman->getY())->isFood()) { points += DOT_POINTS; foodCount--; } field->getCell(pacman->getX(), pacman->getY())->setFood(false); } }