void metasprites::load(FILE*fp,uint32_t version){ if(version>=8){ char firstC=fgetc(fp); if(firstC){ name.clear(); do{ name.push_back(firstC); }while((firstC=fgetc(fp))); }else name.assign(defMDesc); uint32_t amt; fread(&amt,sizeof(uint32_t),1,fp); sps.clear(); sps.resize(amt,sprites(prj)); for(uint32_t i=0;i<amt;++i) sps[i].load(fp,version); }else{ name.assign(defMDesc); sps.clear(); sps.resize(1,sprites(prj)); sps[0].load(fp,version); } }
sanguis::client::draw2d::scene::world::batch_grid sanguis::client::draw2d::scene::world::generate_batches( fcppt::log::context &_log_context, sanguis::random_generator &_random_generator, sanguis::client::draw::debug const _debug, sanguis::creator::grid const &_grid, sanguis::creator::background_grid const &_background_grid, sanguis::client::load::tiles::context &_tiles, sanguis::client::draw2d::scene::world::sprite::buffers &_sprite_buffers ) { sanguis::tiles::log const tiles_log{ _log_context }; sanguis::creator::pos const batch_dim_pos( fcppt::math::vector::fill< sanguis::creator::pos >( sanguis::client::draw2d::scene::world::batch_size::value ) ); return sanguis::client::draw2d::scene::world::batch_grid( fcppt::math::map< sanguis::creator::grid::dim >( _grid.size(), []( sanguis::creator::grid::dim::value_type const _value ) { return fcppt::math::ceil_div( _value, fcppt::cast::size< sanguis::creator::grid::dim::value_type >( sanguis::client::draw2d::scene::world::batch_size::value ) ); } ), [ &_random_generator, _debug, &_grid, &_background_grid, &_tiles, &_sprite_buffers, batch_dim_pos, &tiles_log ]( sanguis::creator::pos const _pos ) { sanguis::creator::min const min( _pos * batch_dim_pos ); sanguis::creator::sup const sup( min.get() + batch_dim_pos + // TODO: Why? fcppt::math::vector::fill< sanguis::creator::pos >( 1u ) ); sanguis::client::draw2d::scene::world::sprite::container sprites( fcppt::algorithm::map_optional< sanguis::client::draw2d::scene::world::sprite::container >( sanguis::tiles::draw( tiles_log, _grid, _background_grid, _tiles.collection(), min, sup ), [ &_random_generator, _debug, &_tiles ]( sanguis::tiles::cell const &_cell ) { return sanguis::client::draw2d::scene::world::make_sprite( _random_generator, _debug, _tiles, _cell ); } ) ); return sanguis::client::draw2d::scene::world::batch( sge::sprite::geometry::sort_and_update( sge::sprite::geometry::make_random_access_range( sprites ), sanguis::client::draw2d::scene::world::sprite::compare(), _sprite_buffers ) ); } ); }
metasprites::metasprites(Project*prj){ this->prj=prj; sps.emplace_back(sprites(prj)); name.assign(defMDesc); }
int main(int, char const**) { int width = 1000; int height = 600; char buff[15]; srand(time(NULL)); sf::Clock clock; sf::ContextSettings settings; settings.antialiasingLevel = 8; // Create the main window sf::RenderWindow window(sf::VideoMode(width, height), "My First SFML example", sf::Style::Default, settings); window.setFramerateLimit(60); sf::Font font; if (!font.loadFromFile("sansation.ttf")) { return EXIT_FAILURE; } sf::Text text; text.setFont(font); text.setString("Hello Benchmark!"); text.setCharacterSize(24); int text_x = (width - (text.getCharacterSize() * 5)) / 2; text.setPosition(text_x, 0); text.setColor(sf::Color::White); sf::Text fps; fps.setFont(font); fps.setCharacterSize(20); fps.setColor(sf::Color::Black); sf::Texture barrel; if (!barrel.loadFromFile("barrel.png")) { return EXIT_FAILURE; } std::vector<sf::Sprite> sprites(MAX_SPRITES); for (int i=0; i<MAX_SPRITES; i++) { sprites[i].setTexture(barrel); int x = rand() % width; int y = rand() % height; sprites[i].setPosition(x, y); } // Box2D b2Vec2 gravity(0.0f, 10.0f); b2World world(gravity); createGround(world); /** Prepare textures */ sf::Texture GroundTexture; sf::Texture BoxTexture; GroundTexture.loadFromFile("ground.png"); BoxTexture.loadFromFile("box.png"); createBox(world, 300, 0); createBox(world, 300, 20); while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::Closed) window.close(); } // window.clear(sf::Color::Black); sprintf(buff, "FPS: %3.2f", framesPerSecond(clock)); fps.setString(sf::String(buff)); // //for (int i=0; i<MAX_SPRITES; i++) { // // sf::Sprite s = sprites[i]; // // s.setScale(rand() % 2 + 1, 2); // // s.setRotation((rand() % 720) - 360); // // window.draw(s); // //} // window.draw(text); // window.display(); //} if (sf::Mouse::isButtonPressed(sf::Mouse::Left)) { int MouseX = sf::Mouse::getPosition(window).x; int MouseY = sf::Mouse::getPosition(window).y; createBox(world, MouseX, MouseY); } world.Step(1.0f/60.f, 8, 3); window.clear(sf::Color::White); int BodyCount = 0; for (b2Body* BodyIterator = world.GetBodyList(); BodyIterator != 0; BodyIterator = BodyIterator->GetNext()) { if (BodyIterator->GetType() == b2_dynamicBody) { sf::Sprite Sprite; Sprite.setTexture(BoxTexture); Sprite.setOrigin(0.5f * SCALE, 0.5f * SCALE); Sprite.setPosition(SCALE * BodyIterator->GetPosition().x, SCALE * BodyIterator->GetPosition().y); Sprite.setRotation(BodyIterator->GetAngle() * 180/b2_pi); window.draw(Sprite); ++BodyCount; } else { sf::Sprite GroundSprite; GroundSprite.setTexture(GroundTexture); GroundSprite.setColor(sf::Color::Red); GroundSprite.setOrigin(40.0f * SCALE, 1.0f * SCALE); GroundSprite.setPosition(SCALE * BodyIterator->GetPosition().x, SCALE * BodyIterator->GetPosition().y); GroundSprite.setRotation(180/b2_pi * BodyIterator->GetAngle()); window.draw(GroundSprite); } } window.draw(fps); window.display(); } return 0; }