int main() { ResourceManager resourceManager = ResourceManager(); resourceManager.addResourceDirectory("res/"); sf::RenderWindow window(sf::VideoMode(WINDOW_X, WINDOW_Y), "ECS Test"); EntityManager entityManager = EntityManager(&window, 100); for (int i = 1; i < 10000; ++i) { int temp = entityManager.createEntity(sf::Vector2f(WINDOW_X * float(rand()) / RAND_MAX, WINDOW_Y * float(rand()) / RAND_MAX)); entityManager.attachComponent(temp, RenderComponent(resourceManager.getTexture("player.png"))); entityManager.attachComponent(temp, PhysicsComponent(sf::Vector2f(100 * (float(rand()) / RAND_MAX - 0.5), 100 * (float(rand()) / RAND_MAX - 0.5)))); } // Remove some entities. for (int i = 1; i < 3; ++i) { entityManager.destroyEntity(i); } // Remove some components. for (int i = 3; i < 10; ++i) { entityManager.detachComponent(i, RENDER); } sf::Clock clock; while (window.isOpen()) { // Handle events. sf::Event event; while (window.pollEvent(event)) { if(event.type == sf::Event::Closed) { window.close(); } } float frametime = clock.restart().asSeconds(); std::cout << (1 / frametime) << std::endl; window.clear(sf::Color::White); entityManager.update(frametime); window.display(); } }
Cursor::Cursor(ResourceManager& resourceManager, const sf::RenderWindow& screen) : m_screen(screen) { auto sheet = resourceManager.getSpriteSheet(SHEET_NAME); auto iconSprite = sheet->get(SPRITE_NAME); m_sprite.setTexture(*resourceManager.getTexture(sheet->getTextureName())); m_sprite.setTextureRect(sf::IntRect(iconSprite.x, iconSprite.y, iconSprite.width, iconSprite.height)); }
Tutorial::Tutorial(sf::RenderWindow& window, ResourceManager& resourceManager, SoundManager& soundManager) : loopState(WAIT) , firstFadingFrame(false) , fadeIndexA(0) , fadeIndexB(1) , ANIMATION_SPEED(350) , TIME_TO_WAIT_TILL_NEXT_SWITCH(8.f) // in seconds , alpha1(255) , alpha2(0) , window(&window) , resourceManager(&resourceManager) , soundManager(&soundManager) , goToMenu(false) , leftMouseClicked(false) , rightMouseClicked(false) { initBackground(); background[0].setTexture(resourceManager.getTexture(ResourceManager::SPLASH_SCREEN)); background[1].setTexture(resourceManager.getTexture(ResourceManager::TUT1)); background[2].setTexture(resourceManager.getTexture(ResourceManager::TUT2)); background[3].setTexture(resourceManager.getTexture(ResourceManager::TUT3)); background[4].setTexture(resourceManager.getTexture(ResourceManager::TUT4)); background[5].setTexture(resourceManager.getTexture(ResourceManager::TUT5)); background[6].setTexture(resourceManager.getTexture(ResourceManager::TUT6)); background[7].setTexture(resourceManager.getTexture(ResourceManager::TUT7)); background[8].setTexture(resourceManager.getTexture(ResourceManager::TUT8)); background[9].setTexture(resourceManager.getTexture(ResourceManager::TUT9)); skipToMenuButton.setPosition(WINDOW_WIDTH_TO_CALCULATE - 250.f, 15.f); skipToMenuButton.setSize(sf::Vector2f(338.f * 0.7f , 73.f * 0.7f)); skipToMenuButton.setTexture(resourceManager.getTexture(ResourceManager::TEXT_SPRITE)); skipToMenuButton.setTextureRect(resourceManager.getTextureRect(ResourceManager::TEXT_SKIP_TO_MENU)); skipToMenuButton.setFillColor(sf::Color::Black); }
void LevelManager::preloadBackgrounds(){ tinyxml2::XMLElement *elm = mDoc->FirstChildElement("Layers")->FirstChildElement(); while (elm != 0){ ResourceManager* resourceManager = &ResourceManager::getInst(); std::string layerType = elm->FirstChildElement("Layer")->GetText(); if(layerType == "static"){ const tinyxml2::XMLElement *img = elm->FirstChildElement("Images")->FirstChildElement(); while(img != 0){ resourceManager->getTexture(img->GetText()); img = img->NextSiblingElement(); } } elm = elm->NextSiblingElement(); } }
void SfxMutebox::init(ResourceManager &resourceManager, SoundManager &soundManager) { this->soundManager = &soundManager; const sf::IntRect sfxPlayRect = resourceManager.getTextureRect(resourceManager.SND_EFFECTS_PLAY); const sf::IntRect sfxMuteRect = resourceManager.getTextureRect(resourceManager.SND_EFFECTS_MUTE); this->shape->setTexture(resourceManager.getTexture(resourceManager.SOUND_SPRITE)); this->shape->setPosition(sf::Vector2f(1307.5f, 127.5f)); this->shape->setSize(sf::Vector2f(75.0f, 75.0f)); this->shape->setOrigin(sf::Vector2f(37.5f, 37.5f)); this->textureRect->left = sfxPlayRect.left; this->textureRect->top = sfxPlayRect.top; this->textureRect->width = sfxPlayRect.width; this->textureRect->height = sfxPlayRect.height; this->textureCheckedRect->left = sfxMuteRect.left; this->textureCheckedRect->top = sfxMuteRect.top; this->textureCheckedRect->width = sfxMuteRect.width; this->textureCheckedRect->height = sfxMuteRect.height; fitStateToVolume(); }
std::vector<sf::Sprite*> LevelFinished::loadAnimals(std::vector<std::string> animalvector){ ResourceManager *resourceManager = &ResourceManager::getInst(); std::vector<sf::Sprite*>spriteVector; for(std::vector<std::string>::iterator i = animalvector.begin(); i != animalvector.end(); i++){ tinyxml2::XMLDocument doc; doc.LoadFile((*i).c_str()); tinyxml2::XMLElement *elm = doc.FirstChildElement("Animal")->FirstChildElement("Images"); tinyxml2::XMLElement *elmf = doc.FirstChildElement("Animal")->FirstChildElement("ImageAttr"); sf::Texture* tex = resourceManager->getTexture(elm->GetText()); sf::Sprite *sprite = new sf::Sprite(); sprite->setTexture(*tex); sprite->setTextureRect(sf::IntRect(0,0, tex->getSize().x/elmf->IntAttribute("frames"), tex->getSize().y/2)); sprite->setScale(0.75f,0.75f); spriteVector.push_back(sprite); } return spriteVector; }
std::vector<Layer*> LevelManager::loadLayers(){ std::vector<Layer*> layers; tinyxml2::XMLElement *elm = mDoc->FirstChildElement("Layers")->FirstChildElement(); while (elm != 0){ std::cout << elm->Name() << std::endl; Layer *layer; ResourceManager* resourceManager = &ResourceManager::getInst(); std::string layerType = elm->FirstChildElement("Layer")->GetText(); std::cout << layerType << std::endl; if(layerType == "static"){ const tinyxml2::XMLElement *img = elm->FirstChildElement("Images")->FirstChildElement(); std::vector<sf::Sprite*> spriteVector; while(img != 0){ sf::Texture* tex = resourceManager->getTexture(img->GetText()); sf::Sprite *sprite = new sf::Sprite(); sprite->setTexture(*tex); spriteVector.push_back(sprite); img = img->NextSiblingElement(); } float speed = elm->FirstChildElement("Stats")->FloatAttribute("speed"); std::cout << speed << std::endl; layer = new StaticLayer(spriteVector, speed); } if(layerType == "active"){ std::vector<Entity*> entityVector(placedAnimals); int minDistance = mDoc->FirstChildElement("Obstacles")->FloatAttribute("minDistance"); int maxDistance = mDoc->FirstChildElement("Obstacles")->FloatAttribute("maxDistance"); std::map<std::string, int> mChanceMap; tinyxml2::XMLElement *obst = mDoc->FirstChildElement("Obstacles")->FirstChildElement(); int totalChanceValue = 0; while(obst != 0){ const tinyxml2::XMLAttribute *atr = obst->FirstAttribute(); totalChanceValue += atr->IntValue(); mChanceMap[obst->Name()] = atr->IntValue(); obst = obst->NextSiblingElement(); } mLevellength = mDoc->FirstChildElement("Level")->FloatAttribute("length"); float x = 1280 + rand()%100; int minDistanceFromGoal = 250; while(x < mLevellength - minDistanceFromGoal){ std::string name; int randNumber = rand()%totalChanceValue; int currentNumber = 0; for(std::map<std::string,int>::iterator i = mChanceMap.begin(); i != mChanceMap.end(); i++){ currentNumber += i->second; if (currentNumber > randNumber){ name = i->first; break; } } obst = mDoc->FirstChildElement("Obstacles")->FirstChildElement(name.c_str()); float speedMod = obst->FloatAttribute("speedMod"); float y = obst->FloatAttribute("y"); int xframes = obst->FloatAttribute("numberOfFrames"); float frameTime = obst->FloatAttribute("frameTime"); std::string id = obst->Name(); sf::Vector2f pos = sf::Vector2f(x,y); sf::Texture* tex = ResourceManager::getInst().getTexture(obst->GetText()); Animation* animation = new Animation(tex,200,xframes,1); Obstacle* obstacle = new Obstacle(animation, pos, speedMod, id); entityVector.push_back(obstacle); x += minDistance + rand() % (maxDistance - minDistance); } //skapar elden float fireSpeed = mDoc->FirstChildElement("Fire")->FloatAttribute("speed"); entityVector.push_back(new Fire(sf::Vector2f(-150,0),fireSpeed)); ActiveLayer* activeLayer = new ActiveLayer(entityVector, mLevellength); layer = activeLayer; mActiveLayer = activeLayer; } layers.push_back(layer); elm = elm->NextSiblingElement(); } return layers; }
void Missile::init(ResourceManager& resources) { sprite.setTexture(resources.getTexture("assets/tileset.png")); sprite.setTextureRect({0, 0, 5, 20}); }
Game::Game(sf::RenderWindow& window, Player* _players[2], bool noAIsim, ResourceManager& resourceManager, SoundManager& soundManager) : window(&window) , noAIsim(noAIsim) , resourceManager(&resourceManager) , soundManager(&soundManager) , textManager(new RTextManager(resourceManager)) , gameMenu(new RGameMenu(resourceManager,soundManager,*textManager)) , background(new RBackground(resourceManager, *_players[0], *_players[1])) , backgroundMusic(nullptr) , activePlayerIndex(1) , logicalBoard(new Board()) , board(new RBoard(*resourceManager.getTexture(ResourceManager::BOARD_TEX), *resourceManager.getTexture(ResourceManager::FIELD_TEX), *resourceManager.getTexture(ResourceManager::FIELD_TEX))) , meeplesToDrawAndSort() , HOVERED_MEEPLE_GLOW_COLOR(sf::Color::Yellow) , SELECTED_MEEPLE_GLOW_COLOR(sf::Color::Red) , particleSystem( new ParticleSystem(*resourceManager.getTexture(ResourceManager::PARTICLE_SPRITE), sf::Vector2u(4, 2)) ) , dustBuilder( new ParticleBuilder( { 300, 300 }, { 5, 30 }) ) , mouseCursorParticleBuilder( new ParticleBuilder({ 300, 300 }, { 5, 30 }) ) , endScreenParticleBuilder( new ParticleBuilder({ 0, static_cast<float>(WINDOW_HEIGHT_TO_CALCULATE) }, { 10, 30 }) ) , selectedMeeple(nullptr) , selectedBoardPos() , firstFrameOfState(false) , hoveredMeeple(nullptr) , draggingMeeple(false) , draggedMeepleMouseOffset() , originalMeeplePosition() , MOVE_MEEPLE_ANIMATION_SPEED(800.f) , MOVE_MEEPLE_ANIMATION_MAX_LIFT_DISTANCE({ 5.f, 12.f }) , initialPosition() , targetPosition() , moveMeepleAnimationDistance(0) , moveMeepleAnimationProgress(0) , moveMeepleAnimationMaxLiftDistance(0) , remainingThinkTime(0) { assert(_players[0] != _players[1]); //hehehe, that won't crash this game players[0] = _players[0]; players[0]->logicalMeepleBag = new MeepleBag(MeepleColor::WHITE); players[0]->rbag = new RBag(); players[1] = _players[1]; players[1]->logicalMeepleBag = new MeepleBag(MeepleColor::BLACK); players[1]->rbag = new RBag(); gameStates[0] = new GameState(players[0]->logicalMeepleBag, players[1]->logicalMeepleBag, logicalBoard); gameStates[1] = new GameState(players[1]->logicalMeepleBag, players[0]->logicalMeepleBag, logicalBoard); initMeeples(); //Init Particle systems: dustBuilder->setSprites({ 2, 3 }, { 0, 1 }) ->setPath({ 30, 110 }, { 270, 340 }) ->setGravity(65.f, 90) ->setRotation() ->setFadeoutSpeed({ 300, 500 }); mouseCursorParticleBuilder->setSprites({ 0, 3 }, { 0, 1 }) ->setPath({ 100, 300 }, { 180, 360 }) ->setGravity(200, 800) ->setRotation({ 0, 600 }, { 0.1, 3.5 }); endScreenParticleBuilder->setSprites({ 0, 2 }, { 0, 2 }) ->setDynamicColor() ->setPath({ 10, 200 }, { 275, 350 }) ->setGravity(0) ->setRotation({ 100, 600 }, { -1, 3 }) ->setFadeoutSpeed({ 35, 55 }); }
RTextManager::RTextManager(ResourceManager& resourceManager) : chooseX(145.f), arrowX(120.f), selectX(120.f), positionX(180.f), meepleX(170.f) { player1.setTexture(resourceManager.getTexture(ResourceManager::TEXT_SPRITE)); player1.setTextureRect(resourceManager.getTextureRect(ResourceManager::TEXT_PLAYER_1)); player1.setSize(sf::Vector2f(762.f *SIZE_FAKTOR_END, 212.f *SIZE_FAKTOR_END)); player1.setOrigin(player1.getSize().x / 2.f, player1.getSize().y / 2.f); player1.setPosition(440.f, 250.f); player2.setTexture(resourceManager.getTexture(ResourceManager::TEXT_SPRITE)); player2.setTextureRect(resourceManager.getTextureRect(ResourceManager::TEXT_PLAYER_2)); player2.setSize(sf::Vector2f(762.f *SIZE_FAKTOR_END, 212.f *SIZE_FAKTOR_END)); player2.setOrigin(player2.getSize().x / 2.f, player2.getSize().y / 2.f); player2.setPosition(440.f, 250.f); wins.setTexture(resourceManager.getTexture(ResourceManager::TEXT_SPRITE)); wins.setTextureRect(resourceManager.getTextureRect(ResourceManager::TEXT_WINS)); wins.setSize(sf::Vector2f(581.f *SIZE_FAKTOR_END, 210.f * SIZE_FAKTOR_END)); wins.setOrigin(wins.getSize().x / 2.f, wins.getSize().y / 2.f); wins.setPosition(1010.f, 235.f); tie.setTexture(resourceManager.getTexture(ResourceManager::TEXT_SPRITE)); tie.setTextureRect(resourceManager.getTextureRect(ResourceManager::TEXT_TIE)); tie.setSize(sf::Vector2f(441.f *SIZE_FAKTOR_END, 210.f * SIZE_FAKTOR_END)); tie.setOrigin(tie.getSize().x / 2.f, 0.f); tie.setPosition(WINDOW_WIDTH_TO_CALCULATE / 2.f, 200.f); pause.setTexture(resourceManager.getTexture(ResourceManager::TEXT_SPRITE)); pause.setTextureRect(resourceManager.getTextureRect(ResourceManager::TEXT_PAUSE)); pause.setSize(sf::Vector2f(612.f *SIZE_FAKTOR_END, 210.f *SIZE_FAKTOR_END)); pause.setOrigin(pause.getSize().x / 2.f, pause.getSize().y / 2.f); pause.setPosition(WINDOW_WIDTH_TO_CALCULATE / 2.f, 200.f); arrowUp.setTexture(resourceManager.getTexture(ResourceManager::TEXT_SPRITE)); arrowUp.setTextureRect(resourceManager.getTextureRect(ResourceManager::ARROW_UP)); arrowUp.setSize(sf::Vector2f(131.f *SIZE_FAKTOR, 243.f *SIZE_FAKTOR)); arrowUp.setOrigin(arrowUp.getSize().x / 2.f, arrowUp.getSize().y / 2.f); choose.setTexture(resourceManager.getTexture(ResourceManager::TEXT_SPRITE)); choose.setTextureRect(resourceManager.getTextureRect(ResourceManager::TEXT_CHOOSE)); choose.setSize(sf::Vector2f(241.f *SIZE_FAKTOR, 73.f *SIZE_FAKTOR)); choose.setOrigin(choose.getSize().x / 2.f, choose.getSize().y / 2.f); meeple.setTexture(resourceManager.getTexture(ResourceManager::TEXT_SPRITE)); meeple.setTextureRect(resourceManager.getTextureRect(ResourceManager::TEXT_A_MEEPLE)); meeple.setFillColor(sf::Color::Black); //meeple.setOutlineColor(sf::Color::Red); //meeple.setOutlineThickness(5.f); meeple.setSize(sf::Vector2f(291.f *SIZE_FAKTOR, 73.f *SIZE_FAKTOR)); meeple.setOrigin(meeple.getSize().x / 2.f, meeple.getSize().y / 2.f); select.setTexture(resourceManager.getTexture(ResourceManager::TEXT_SPRITE)); select.setTextureRect(resourceManager.getTextureRect(ResourceManager::TEXT_SELECT)); select.setSize(sf::Vector2f(203.f *SIZE_FAKTOR, 73.f *SIZE_FAKTOR)); select.setOrigin(select.getSize().x / 2.f, select.getSize().y / 2.f); position.setTexture(resourceManager.getTexture(ResourceManager::TEXT_SPRITE)); position.setTextureRect(resourceManager.getTextureRect(ResourceManager::TEXT_A_POSITION)); position.setSize(sf::Vector2f(324.f *SIZE_FAKTOR, 73.f *SIZE_FAKTOR)); position.setOrigin(position.getSize().x / 2.f, position.getSize().y / 2.f); ANIMATIONSPEED = 3.f;// 3.f; for (uint8_t i = 0; i < 2; i++) { wobbleNR = 0.f; wobbleSin[i] = 0.f; } }