Skip to content

Instantly share code, notes, and snippets.

@m0r13
Created February 4, 2015 00:26
Show Gist options
  • Select an option

  • Save m0r13/aae661965ccc9edb9be6 to your computer and use it in GitHub Desktop.

Select an option

Save m0r13/aae661965ccc9edb9be6 to your computer and use it in GitHub Desktop.
#include "../mapcraftercore/mc/world.h"
#include "../mapcraftercore/mc/worldcache.h"
#include "../mapcraftercore/renderer/blockimages.h"
#include "../mapcraftercore/renderer/image.h"
#include "../mapcraftercore/renderer/rendermode.h"
#include "../mapcraftercore/renderer/renderview.h"
#include "../mapcraftercore/renderer/tilerenderer.h"
#include "../mapcraftercore/renderer/tileset.h"
#include "../mapcraftercore/renderer/rendermodes/lighting.h"
#include "../mapcraftercore/util.h"
#include <string>
using namespace mapcrafter;
using namespace mapcrafter::renderer;
int main(int argc, char** argv) {
std::string view_name = "topdown";
RenderView* view = createRenderView(view_name);
BlockImageTextureResources resources;
resources.setTextureSize(16, 0);
resources.loadAll(util::findTextureDir().string());
BlockImages* images = view->createBlockImages();
images->loadBlocks(resources);
mc::World world(argv[1]);
world.load();
mc::WorldCache world_cache(world);
TileSet* tile_set = view->createTileSet(1);
tile_set->scan(world);
RenderMode* render_mode = new LightingRenderMode(true, 1.0, false);
TileRenderer* tile_renderer = view->createTileRenderer(images, 1, &world_cache, render_mode);
TilePos tiles_min, tiles_max, tiles_offset;
auto tiles = tile_set->getRequiredRenderTiles();
for (auto it = tiles.begin(); it != tiles.end(); ++it) {
if (it == tiles.begin())
tiles_min = tiles_max = *it;
tiles_min = TilePos(std::min(tiles_min.getX(), it->getX()), std::min(tiles_min.getY(), it->getY()));
tiles_max = TilePos(std::max(tiles_max.getX(), it->getX()), std::max(tiles_max.getY(), it->getY()));
}
int tile_size = tile_renderer->getTileSize();
RGBAImage image((tiles_max.getX() - tiles_min.getX() + 1) * tile_size,
(tiles_max.getY() - tiles_min.getY() + 1) * tile_size);
for (auto it = tiles.begin(); it != tiles.end(); ++it) {
LOG(INFO) << *it;
RGBAImage tile;
tile_renderer->renderTile(*it, tile);
TilePos image_tile = *it - tiles_min;
image.simpleAlphaBlit(tile, image_tile.getX() * tile_size, image_tile.getY() * tile_size);
}
image.writePNG(view_name + ".png");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment