コード例 #1
0
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);
	}
}
コード例 #2
0
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
						)
					);
			}
		);
}
コード例 #3
0
metasprites::metasprites(Project*prj){
	this->prj=prj;
	sps.emplace_back(sprites(prj));
	name.assign(defMDesc);
}
コード例 #4
0
ファイル: main.cpp プロジェクト: satanas/sfml-test
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;
}