pacman::pacman(sf::Texture spr) { //ctor xpos = 250; ypos = 500; xvel = 0; yvel = 0; text = spr; upan.setSpriteSheet(text); upan.addFrame(sf::IntRect(0, 0, 25, 25)); upan.addFrame(sf::IntRect(75, 0, 25, 25)); downan.setSpriteSheet(text); downan.addFrame(sf::IntRect(0, 0, 25, 25)); downan.addFrame(sf::IntRect(25, 0, 25, 25)); leftan.setSpriteSheet(text); leftan.addFrame(sf::IntRect(0, 0, 25, 25)); leftan.addFrame(sf::IntRect(100, 0, 25, 25)); rightan.setSpriteSheet(text); rightan.addFrame(sf::IntRect(0, 0, 25, 25)); rightan.addFrame(sf::IntRect(50, 0, 25, 25)); currentanim = &leftan; anspr = AnimatedSprite(sf::seconds(.2f), false, true); anspr.setPosition(sf::Vector2f(xpos, ypos)); //std::cout << "1 pacman" << std::endl; anspr.play(*currentanim); //sprite.setPosition(xpos, ypos); collision_box = sprite.getGlobalBounds(); dir = 3; }
void pacman::set_curr_anim(int d){ if (d == 0){ currentanim = &upan; } else if (d == 1){ currentanim = &downan; } else if (d == 2){ currentanim = &rightan; } else { currentanim = &leftan; } anspr.play(*currentanim); }
AnimatedSprite *StatusEffect::getIcon() { if (mIcon.empty()) return NULL; else { AnimatedSprite *sprite = AnimatedSprite::load( "graphics/sprites/" + mIcon); if (false && sprite) { sprite->play(ACTION_DEFAULT); sprite->reset(); } return sprite; } }
void VisibilityEnabler2D::_change_node_state(Node *p_node, bool p_enabled) { ERR_FAIL_COND(!nodes.has(p_node)); { RigidBody2D *rb = Object::cast_to<RigidBody2D>(p_node); if (rb) { rb->set_sleeping(!p_enabled); } } { AnimationPlayer *ap = Object::cast_to<AnimationPlayer>(p_node); if (ap) { ap->set_active(p_enabled); } } { AnimatedSprite *as = Object::cast_to<AnimatedSprite>(p_node); if (as) { if (p_enabled) as->play(); else as->stop(); } } { Particles2D *ps = Object::cast_to<Particles2D>(p_node); if (ps) { ps->set_emitting(p_enabled); } } }
MainMenu() : system(TextureManager::instance().getTexture("assets/rticle.png")) { pointer.setTexture(TextureManager::instance().getTexture("assets/two_pointer.png")); //pointer.setPosition(1183, 427); //system = new thor::ParticleSystem(); emitter.setEmissionRate(0.5f); emitter.setParticleLifetime( sf::seconds(40) ); emitter.setParticleRotation( thor::Distributions::uniform(0.f, 360.f) ); emitter.setParticlePosition( sf::Vector2f(1260,740) ); emitter.setParticleScale(sf::Vector2f(0.1,0.1)); system.addEmitter(thor::refEmitter(emitter)); thor::ColorGradient gradient; gradient[0.0f] = sf::Color::Magenta; gradient[0.1f] = sf::Color::Red; gradient[0.2f] = sf::Color::Blue; gradient[0.3f] = sf::Color::Cyan; gradient[0.4f] = sf::Color::Green; gradient[0.5f] = sf::Color::Red; gradient[0.6f] = sf::Color::Magenta; gradient[0.7f] = sf::Color::Cyan; gradient[0.8f] = sf::Color::Red; gradient[0.9f] = sf::Color::Blue; gradient[1.0f] = sf::Color::Red; thor::ColorAnimation colorizer(gradient); thor::FadeAnimation fader(0.1f, 0.1f); system.addAffector( thor::ScaleAffector(sf::Vector2f(0.1f,0.1))); system.addAffector( thor::AnimationAffector(fader) ); system.addAffector( thor::AnimationAffector(colorizer) ); sprite = AnimatedSprite(sf::seconds(0.3)); v.setTexture(TextureManager::instance().getTexture("assets/one_upper.png")); back2.setTexture(TextureManager::instance().getTexture("assets/two_menu.png")); logo.setTexture(TextureManager::instance().getTexture("assets/one_logo.png")); press.setTexture(TextureManager::instance().getTexture("assets/one_anybutton.png")); anim.setSpriteSheet(TextureManager::instance().getTexture("assets/one_animooted.jpg")); for (int i = 0; i < 5; i++) { anim.addFrame(sf::IntRect(0, 800 * i, WIDTH, HEIGHT)); } sprite.setAnimation(anim); sprite.setLooped(true); sprite.play(); logo.setColor(sf::Color(255,255,255,0)); press.setColor(sf::Color(255,255,255,0)); pointer.setColor(sf::Color(255,255,255,0)); press.setPosition(WIDTH/2 - press.getTextureRect().width/2, HEIGHT/2 - press.getTextureRect().height/2 + 100); pressFading = true; newLogoY = 800; oTweener.addTween(&CDBTweener::TWEQ_BACK, CDBTweener::TWEA_INOUT, 2.f, &newLogoY, 0.0f); first = true; pressFactor = 0.2; transition = false; check = false; sm.init(sf::Vector2f(WIDTH, HEIGHT)); rt.create(WIDTH, HEIGHT); MusicManager::instance().playMusicFast("low"); selection = 1; };
int main() { //Initalize Variables and Settings const sf::Vector2i screenDimensions(800, 600); FloatRect playerMoveSpace = sf::FloatRect(100, 100, screenDimensions.x - 100, screenDimensions.y - 320); RenderWindow window(VideoMode(screenDimensions.x, screenDimensions.y), "Donkey Island", Style::Titlebar | Style::Close); window.setFramerateLimit(60); CircleShape shape(100.f); shape.setFillColor(Color::Green); Texture MenuBGTex; Sprite MenuBackground; Texture PlayerTex; AnimatedSprite PlayerImage; sf::Time actionTimer; int loadedLevelIndex = 0; GameScene* levels[] = { new LakeGrass(), new flower(), new House() }; GameScene* loadedLevel = levels[loadedLevelIndex]; tinyxml2::XMLElement* levelElement = NULL; static bool dragging = false; sf::Vector2f Target1; Inventory::item *draggeditem = NULL; bool clicked = false; if (MenuBGTex.loadFromFile("resources/menubackground.jpg")) { MenuBackground.setTexture(MenuBGTex); MenuBackground.setPosition(0.0f, 460.0f); } // load a new inventory. The inventory is kept across scenes. Inventory* playerInventory = new Inventory(); // load a new quest journal. Each level, this variable is recreated with the right quests for that current level Quests* playerQuests = new Quests(loadedLevel); if (!PlayerTex.loadFromFile("resources/donkeyMovement.png")) { std::cout << "Failed to load player spritesheet!" << std::endl; return 1; } Animation walkingAnimationRight; walkingAnimationRight.setSpriteSheet(PlayerTex); walkingAnimationRight.addFrame(sf::IntRect(200, 0, 200, 200)); walkingAnimationRight.addFrame(sf::IntRect(400, 0, 200, 200)); walkingAnimationRight.addFrame(sf::IntRect(600, 0, 200, 200)); walkingAnimationRight.addFrame(sf::IntRect(0, 0, 200, 200)); Animation walkingAnimationLeft; walkingAnimationLeft.setSpriteSheet(PlayerTex); walkingAnimationLeft.addFrame(sf::IntRect(200, 200, 200, 200)); walkingAnimationLeft.addFrame(sf::IntRect(400, 200, 200, 200)); walkingAnimationLeft.addFrame(sf::IntRect(600, 200, 200, 200)); walkingAnimationLeft.addFrame(sf::IntRect(0, 200, 200, 200)); Animation walkingAnimationIdle; walkingAnimationIdle.setSpriteSheet(PlayerTex); walkingAnimationIdle.addFrame(sf::IntRect(200, 400, 200, 200)); walkingAnimationIdle.addFrame(sf::IntRect(400, 400, 200, 200)); walkingAnimationIdle.addFrame(sf::IntRect(600, 400, 200, 200)); walkingAnimationIdle.addFrame(sf::IntRect(0, 400, 200, 200)); Animation* currentAnimation = &walkingAnimationLeft; PlayerImage = AnimatedSprite(sf::seconds(0.1), true, false); PlayerImage.setPosition(sf::Vector2f(screenDimensions / 3)); sf::Clock frameClock; float speed = 160.f; bool noKeyWasPressed = true; // ------------------------ // Initialization ends here // Our GAMELOOP starts here while (window.isOpen()) { Event event; while (window.pollEvent(event)) { if (event.type == Event::Closed) { window.close(); } if (event.type == Event::MouseButtonReleased) { playerInventory->refreshItems(); dragging = false; clicked = false; } } sf::Time frameTime = frameClock.restart(); // if a key was pressed set the correct animation and move correctly sf::Vector2f movement(0.f, 0.f); if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up)) { movement.y -= speed; noKeyWasPressed = false; } if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down)) { movement.y += speed; noKeyWasPressed = false; } if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) { currentAnimation = &walkingAnimationLeft; movement.x -= speed; noKeyWasPressed = false; } if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) { currentAnimation = &walkingAnimationRight; movement.x += speed; noKeyWasPressed = false; } PlayerImage.play(*currentAnimation); PlayerImage.move(movement * frameTime.asSeconds()); // if no key was pressed stop the animation if (noKeyWasPressed) { //PlayerImage.stop(); PlayerImage.setFrameTime(sf::seconds(0.4)); currentAnimation = &walkingAnimationIdle; } if (!noKeyWasPressed) { PlayerImage.setFrameTime(sf::seconds(0.1)); } noKeyWasPressed = true; // update AnimatedSprite PlayerImage.update(frameTime); // constatly check if the player completed the quest playerQuests->checkQuests(draggeditem, playerInventory, PlayerImage); window.clear(); if (loadedLevel) { // draw the level background window.draw(loadedLevel->bgSprite); } // draw the menubackground (bottom part of screen) window.draw(MenuBackground); for (auto && entity : loadedLevel->currentEntities) { // draw all active entities in the level window.draw(entity.Sprite); } // Show text of talking NPCs if (playerQuests->triggerShowText) { if (playerQuests->clock.getElapsedTime().asSeconds() < 10) window.draw(playerQuests->talkText); if (playerQuests->clock.getElapsedTime().asSeconds() > 10) playerQuests->triggerShowText = false; } window.draw(PlayerImage); window.draw(playerQuests->currentQuestText); for (auto && item : playerInventory->currentItems) { // draw all items in the player invneotry window.draw(item.itemIconSprite); } // initiate the final draw call window.display(); // Switch level, if 5 tasks have been accomplished in every map if (playerQuests->currentQuestId > 5 && loadedLevelIndex <= 3) { delete loadedLevel; delete playerQuests; loadedLevelIndex++; loadedLevel = levels[loadedLevelIndex]; playerQuests = new Quests(loadedLevel); PlayerImage.setPosition(0.0f, 100.0f); } // Execute the Game Loop in each individual level constantly loadedLevel->Update(playerQuests->currentQuestId); //Check for left mouse clicks if (sf::Mouse::isButtonPressed(sf::Mouse::Left)) { sf::Vector2i localPosition = sf::Mouse::getPosition(window); sf::Vector2f worldPos = window.mapPixelToCoords(localPosition); // Move player, if cursor is in game world if (localPosition.y < 380 && !dragging) { Target1.x = worldPos.x - 100; Target1.y = worldPos.y - 100; } // Use item and init dragging, if cursor is in menu (bottom screen part) if (localPosition.y > 380 && !dragging) { for (auto && item : playerInventory->currentItems) { if (localPosition.y < item.itemIconSprite.getPosition().y + item.itemIconSprite.getGlobalBounds().height && localPosition.y > item.itemIconSprite.getPosition().y && localPosition.x < item.itemIconSprite.getPosition().x + item.itemIconSprite.getGlobalBounds().width && localPosition.x > item.itemIconSprite.getPosition().x) { item.itemIconSprite.setPosition(localPosition.x - 32, localPosition.y - 32); dragging = true; draggeditem = &item; } } } if (draggeditem) { if (dragging) { //Set the item position to the mouse cursor position if the user is dragging it draggeditem->itemIconSprite.setPosition(localPosition.x - 32, localPosition.y - 32); } } // MOVE TO POINT via CURSOR float k = 1; // Speed Constant float px = PlayerImage.getPosition().x; float py = PlayerImage.getPosition().y; float ex = Target1.x; float ey = Target1.y; // "clicked" is used to not allow the player to just drag his charachter across the screen, // but instead the player has to confirm each charachter movement by mouse click. if (!clicked) { PlayerImage.setPosition(Target1.x, Target1.y); } clicked = true; } } return 0; }