int Weapon::setWeaponPosition(df::Position pos, Direction direction) { df::WorldManager &wm = df::WorldManager::getInstance(); if (direction == NORTH) { df::Position new_pos = df::Position(pos.getX() + 1, pos.getY() - 2); setSpriteIndex(0); wm.moveObject(this, new_pos); return 0; } if (direction == EAST) { df::Position new_pos = df::Position(pos.getX() + 3, pos.getY()); setSpriteIndex(1); wm.moveObject(this, new_pos); return 0; } if (direction == SOUTH) { df::Position new_pos = df::Position(pos.getX() + 1, pos.getY() + 3); setSpriteIndex(2); wm.moveObject(this, new_pos); return 0; } if (direction == WEST) { df::Position new_pos = df::Position(pos.getX() - 2, pos.getY()); setSpriteIndex(3); wm.moveObject(this, new_pos); return 0; } return -1; }
// Draw single sprite frame. // Drawing accounts for: centering, slowdown, advancing Sprite Frame. void df::Object::draw(){ // If sprite not defined, don’t continue further. if (p_sprite == NULL) return; int index = getSpriteIndex(); // Ask graphics manager to draw current frame. df::GraphicsManager::getInstance().drawFrame(pos, p_sprite->getFrame(index), sprite_center, p_sprite->getColor()); // If slowdown is 0, then animation is frozen. if (getSpriteSlowdown() == 0) return; // Increment counter. int count = getSpriteSlowdownCount(); count++; // Advance sprite index, if appropriate. if (count >= getSpriteSlowdown()){ count = 0; // Reset counter. index++; // Advance frame. // If at last frame, loop to beginning. if (index >= p_sprite->getFrameCount()) index = 0; setSpriteIndex(index); // Set index for next draw(). } setSpriteSlowdownCount(count); // Set counter for next draw(). }
void Object::draw() { if (isActive()) { auto& gfxMgr = GraphicsManager::getInstance(); int index = getSpriteIndex(); int count = getSpriteSlowdownCount(); gfxMgr.drawFrame(pos, p_sprite->getFrame(index), isCentered(), getTransparency(), p_sprite->getColor()); if (sprite_slowdown == 0) { return; } else { count++; if (count >= sprite_slowdown) { count = 0; ++index %= (p_sprite->getFrameCount()); } } setSpriteSlowdownCount(count); setSpriteIndex(index); } }