Animation* AnimationFactory::GetTextAnimation(Entity* target, std::string text, sf::Color color, float xTranslate, float yTranslate ) { if(target->GetNode() == nullptr) { //If there is no Node, animation can not be displayed return nullptr; } sf::FloatRect startPos = target->GetNode()->getGlobalBoundingBox(); sf::Transform startTransform; startTransform.translate(startPos.left + xTranslate, startPos.top + yTranslate); Animation* ret; ret = new Animation(0.2f); AnimationPartText* part = new AnimationPartText(text, color, 12); sf::FloatRect bounds = part->GetText()->getLocalBounds(); startTransform.translate((startPos.width - bounds.width) / 2, - bounds.height / 2); part->SetTiming(0.0f, 0.2f); part->SetStartTransform(startTransform); part->SetTranslation(-3.0f, - 10.0f); part->SetScaling(1.5f); ret->AddStep(part); return ret; }
Animation* AnimationFactory::GetAnimation(AnimationList anim, sf::FloatRect startPos) { //play the animation at a given Position sf::Transform startTransform; startTransform.translate(startPos.left, startPos.top); Animation* ret; switch(anim) { case Fireball: { ret = new Animation(0.2f); AnimationPartSprite* part = new AnimationPartSprite(TextureList::FireballAnimation); sf::FloatRect spriteBounds = part->GetSprite()->getLocalBounds(); startTransform.translate((startPos.width - spriteBounds.width) / 2, (startPos.height - spriteBounds.height) / 2); part->SetTiming(0.0f, 0.2f); part->SetStartTransform(startTransform); part->SetScaling(3.0f); ret->AddStep(part); SoundController::GetInstance()->PlaySound(SoundController::Fire); return ret; } break; case Water: { float yMovement = 50.0f; ret = new Animation(0.2f); AnimationPartSprite* part = new AnimationPartSprite(TextureList::WaterAnimation); sf::FloatRect spriteBounds = part->GetSprite()->getLocalBounds(); startTransform.translate((startPos.width - spriteBounds.width) / 2, (startPos.height - spriteBounds.height) / 2 - yMovement); part->SetTiming(0.0f, 0.2f); part->SetStartTransform(startTransform); part->SetTranslation(0.0f, yMovement); ret->AddStep(part); SoundController::GetInstance()->PlaySound(SoundController::Water); return ret; } case Earth: { float yMovement = 75.0f; ret = new Animation(0.2f); AnimationPartSprite* part = new AnimationPartSprite(TextureList::EarthAnimation); sf::FloatRect spriteBounds = part->GetSprite()->getLocalBounds(); startTransform.translate((startPos.width - spriteBounds.width) / 2, (startPos.height - spriteBounds.height) / 2 - yMovement); part->SetTiming(0.0f, 0.2f); part->SetStartTransform(startTransform); part->SetTranslation(0.0f, yMovement); ret->AddStep(part); SoundController::GetInstance()->PlaySound(SoundController::Earth); return ret; } case Air: { float xMovement = -30.0f; ret = new Animation(0.2f); AnimationPartSprite* part = new AnimationPartSprite(TextureList::AirAnimation); sf::FloatRect spriteBounds = part->GetSprite()->getLocalBounds(); startTransform.translate((startPos.width - spriteBounds.width) / 2 - xMovement, (startPos.height - spriteBounds.height) / 2); part->SetTiming(0.0f, 0.2f); part->SetStartTransform(startTransform); part->SetTranslation(xMovement, 0.0f); ret->AddStep(part); SoundController::GetInstance()->PlaySound(SoundController::Wind); return ret; } case Sword: { float yMovement = 75.0f; ret = new Animation(0.2f); AnimationPartSprite* part = new AnimationPartSprite(TextureList::SwordAnimation); sf::FloatRect spriteBounds = part->GetSprite()->getLocalBounds(); startTransform.translate((startPos.width - spriteBounds.width) / 2, (startPos.height - spriteBounds.height) / 2 - yMovement); part->SetTiming(0.0f, 0.2f); part->SetStartTransform(startTransform); part->SetTranslation(0.0f, yMovement); ret->AddStep(part); SoundController::GetInstance()->PlaySound(SoundController::Hit); return ret; } default: return nullptr; } }