void init() { m_first_trip = false; m_current_state = IDLE; getBody()->GetFixtureList()->SetUserData("Checkpoint"); getBody()->SetUserData(this); //Load Texture s_texture = "Assets/Game/cp_ps.png"; m_text_size = sf::Vector2u(42, 94); m_sprite.setTexture(ResourceManager<sf::Texture>::instance()->get(s_texture)); m_sprite.setOrigin(m_text_size.x / 2, m_text_size.y / 2); m_sprite.setPosition(vHelper::toSF(getBody()->GetPosition())); addFrames(frame_idle, 0, 0, 1, 42, 94, 1.0f); addFrames(frame_trip, 1, 0, 5, 42, 94, 1.0f); addFrames(frame_active, 2, 0, 3, 42, 94, 1.0f); m_animator.addAnimation(IDLE, frame_idle, sf::seconds(1.0f)); m_animator.addAnimation(TRIP, frame_trip, sf::seconds(0.4f)); m_animator.addAnimation(ACTIVE, frame_active, sf::seconds(0.3f)); //Load Audio s_noise = "Assets/Audio/Game/cp.wav"; m_noise.setBuffer(ResourceManager<sf::SoundBuffer>::instance()->get(s_noise)); }
nsresult txStylesheet::addFrames(txListIterator& aInsertIter) { ImportFrame* frame = static_cast<ImportFrame*>(aInsertIter.current()); nsresult rv = NS_OK; txListIterator iter(&frame->mToplevelItems); txToplevelItem* item; while ((item = static_cast<txToplevelItem*>(iter.next()))) { if (item->getType() == txToplevelItem::import) { txImportItem* import = static_cast<txImportItem*>(item); import->mFrame->mFirstNotImported = static_cast<ImportFrame*>(aInsertIter.next()); rv = aInsertIter.addBefore(import->mFrame); NS_ENSURE_SUCCESS(rv, rv); import->mFrame.forget(); aInsertIter.previous(); rv = addFrames(aInsertIter); NS_ENSURE_SUCCESS(rv, rv); aInsertIter.previous(); } } return NS_OK; }
nsresult txStylesheet::doneCompiling() { nsresult rv = NS_OK; // Collect all importframes into a single ordered list txListIterator frameIter(&mImportFrames); rv = frameIter.addAfter(mRootFrame); NS_ENSURE_SUCCESS(rv, rv); mRootFrame = nullptr; frameIter.next(); rv = addFrames(frameIter); NS_ENSURE_SUCCESS(rv, rv); // Loop through importframes in decreasing-precedence-order and process // all items frameIter.reset(); ImportFrame* frame; while ((frame = static_cast<ImportFrame*>(frameIter.next()))) { nsTArray<txStripSpaceTest*> frameStripSpaceTests; txListIterator itemIter(&frame->mToplevelItems); itemIter.resetToEnd(); txToplevelItem* item; while ((item = static_cast<txToplevelItem*>(itemIter.previous()))) { switch (item->getType()) { case txToplevelItem::attributeSet: { rv = addAttributeSet(static_cast<txAttributeSetItem*> (item)); NS_ENSURE_SUCCESS(rv, rv); break; } case txToplevelItem::dummy: case txToplevelItem::import: { break; } case txToplevelItem::output: { mOutputFormat.merge(static_cast<txOutputItem*>(item)->mFormat); break; } case txToplevelItem::stripSpace: { rv = addStripSpace(static_cast<txStripSpaceItem*>(item), frameStripSpaceTests); NS_ENSURE_SUCCESS(rv, rv); break; } case txToplevelItem::templ: { rv = addTemplate(static_cast<txTemplateItem*>(item), frame); NS_ENSURE_SUCCESS(rv, rv); break; } case txToplevelItem::variable: { rv = addGlobalVariable(static_cast<txVariableItem*> (item)); NS_ENSURE_SUCCESS(rv, rv); break; } } delete item; itemIter.remove(); //remove() moves to the previous itemIter.next(); } if (!mStripSpaceTests.AppendElements(frameStripSpaceTests)) { return NS_ERROR_OUT_OF_MEMORY; } frameStripSpaceTests.Clear(); } if (!mDecimalFormats.get(txExpandedName())) { nsAutoPtr<txDecimalFormat> format(new txDecimalFormat); NS_ENSURE_TRUE(format, NS_ERROR_OUT_OF_MEMORY); rv = mDecimalFormats.add(txExpandedName(), format); NS_ENSURE_SUCCESS(rv, rv); format.forget(); } return NS_OK; }
MainCharacter::MainCharacter() : _velocity(0.0f), _maxVelocity(450.0f), _gravity(2.0f), _ySpeed(0.0f), _maxYSpeed(475.0f) { Load("Sprites/Lug2.png"); assert(IsLoaded()); cameraPosition.reset(sf::FloatRect(0, 0, 1920, 1080)); // Specify static subrect which is shown unless an other animation is active thor::FrameAnimation defaultAnim; addFrames(defaultAnim, 0,0,7); // Create first animation: Attack thor::FrameAnimation attack; //for (unsigned int i = 0; i < 3; ++i) addFrames(attack, 0, 0, 7); addFrames(attack, 0, 0, 7); addFrames(attack, 0, 0, 7); addFrames(attack, 0, 0, 7); addFrames(attack, 0, 0, 7); addFrames(attack, 0, 0, 7); addFrames(attack, 0, 0, 7); // Create second animation: Attack thor::FrameAnimation attack2; //for (unsigned int i = 0; i < 3; ++i) addFrames(attack2, 0, 6, 0); addFrames(attack2, 0, 6, 0); addFrames(attack2, 0, 6, 0); addFrames(attack2, 0, 6, 0); addFrames(attack2, 0, 6, 0); // Register animations with their corresponding durations animator.addAnimation("defaultAnim", defaultAnim, sf::seconds(1.0f)); animator.addAnimation("attack", attack, sf::seconds(0.5f)); animator.addAnimation("attack2", attack2, sf::seconds(0.5f)); //GetSprite().setOrigin(GetSprite().getLocalBounds().width /2, GetSprite().getLocalBounds().height / 2); }
K3b::Msf& K3b::Msf::operator+=( int i ) { addFrames(i); return *this; }
int main() { sf::RenderWindow window(sf::VideoMode(300, 200), "Thor Animation"); window.setVerticalSyncEnabled(true); window.setKeyRepeatEnabled(false); sf::Font font; if (!font.loadFromFile("Media/sansation.ttf")) return 1; // Instruction text sf::Text instructions( "W: Play walk animation (loop)\n" "A: Play attack animation\n" "S: Stop current animation\n" "Esc: Quit", font, 14u); sf::Text animationText("", font, 14u); animationText.setPosition(100.f, 150.f); // Load image that contains animation steps sf::Image image; if (!image.loadFromFile("Media/animation.png")) return 1; image.createMaskFromColor(sf::Color::White); // Create texture based on sf::Image sf::Texture texture; if (!texture.loadFromImage(image)) return 1; // Create sprite which is animated sf::Sprite sprite(texture); sprite.setPosition(100.f, 100.f); // Define walk animation thor::FrameAnimation walk; addFrames(walk, 0, 0, 7); // Frames 0..7 Right leg moves forward addFrames(walk, 0, 6, 0); // Frames 6..0 Right leg moves backward // Define attack animation thor::FrameAnimation attack; addFrames(attack, 1, 0, 3); // Frames 0..3 Lift gun addFrames(attack, 1, 4, 4, 5.f); // Frame 4 Aim (5 times normal frame duration) for (int i = 0; i < 3; ++i) addFrames(attack, 1, 5, 7); // Frame 5..7 Fire (repeat 3 times) addFrames(attack, 1, 4, 4, 5.f); // Frame 4 Wait addFrames(attack, 1, 3, 0); // Frame 3..1 Lower gun // Define static frame for stand animation thor::FrameAnimation stand; addFrames(stand, 0, 0, 0); // Register animations with their corresponding durations thor::Animator<sf::Sprite, std::string> animator; animator.addAnimation("walk", walk, sf::seconds(1.f)); animator.addAnimation("stand", stand, sf::seconds(1.f)); animator.addAnimation("attack", attack, sf::seconds(1.f)); // Create clock to measure frame time sf::Clock frameClock; // Main loop for (;;) { // Handle events sf::Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::KeyPressed) { switch (event.key.code) { case sf::Keyboard::W: animator.playAnimation("walk", true); break; case sf::Keyboard::A: animator.playAnimation("attack"); break; case sf::Keyboard::S: animator.stopAnimation(); break; case sf::Keyboard::Escape: return 0; } } else if (event.type == sf::Event::Closed) { return 0; } } // If no other animation is playing, play stand animation if (!animator.isPlayingAnimation()) animator.playAnimation("stand"); // Output playing animation (general case; at the moment an animation is always playing) if (animator.isPlayingAnimation()) animationText.setString("Animation: " + animator.getPlayingAnimation()); else animationText.setString(""); // Update animator and apply current animation state to the sprite animator.update(frameClock.restart()); animator.animate(sprite); // Draw everything window.clear(sf::Color(50, 50, 50)); window.draw(instructions); window.draw(animationText); window.draw(sprite); window.display(); } }