// 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); } }