#include "animating.h" #include "game.h" #include "components/animatable.h" #include "components/transformable.h" void AnimatingSystem::tick(double) { std::set spriteEntities = game_.getEntityManager().getEntitiesWithComponents(); for (id_type entity : spriteEntities) { auto& sprite = game_.getEntityManager(). getComponent(entity); sprite.setCountdown(sprite.getCountdown() + 1); const Animation& anim = sprite.getAnimation(); if (sprite.getCountdown() >= anim.getDelay()) { sprite.setFrame(sprite.getFrame() + 1); sprite.setCountdown(0); if (sprite.getFrame() >= anim.getFirstFrame() + anim.getNumFrames()) { sprite.setFrame(anim.getFirstFrame()); } } } } void AnimatingSystem::render(Texture& texture) { std::set spriteEntities = game_.getEntityManager().getEntitiesWithComponents< AnimatableComponent, TransformableComponent>(); for (id_type entity : spriteEntities) { auto& sprite = game_.getEntityManager(). getComponent(entity); auto& transform = game_.getEntityManager(). getComponent(entity); Rectangle dstrect { static_cast(transform.getX()), static_cast(transform.getY()), transform.getW(), transform.getH()}; const AnimationSet& aset = sprite.getAnimationSet(); texture.blit( aset.getTexture(), aset.getFrameRect(sprite.getFrame()), dstrect); } } void AnimatingSystem::startAnimation(id_type entity, std::string animation) { auto& sprite = game_.getEntityManager(). getComponent(entity); sprite.setAnimation(animation); sprite.setFrame(sprite.getAnimation().getFirstFrame()); }