mirror of
https://github.com/minetest/minetestmapper.git
synced 2024-11-22 07:23:46 +01:00
Added block position decoder.
This commit is contained in:
parent
957a72e2b4
commit
65ae97f54b
@ -22,13 +22,17 @@ TileGenerator::TileGenerator():
|
|||||||
m_drawOrigin(false),
|
m_drawOrigin(false),
|
||||||
m_drawPlayers(false),
|
m_drawPlayers(false),
|
||||||
m_drawScale(false),
|
m_drawScale(false),
|
||||||
m_drawUnderground(false)
|
m_drawUnderground(false),
|
||||||
|
m_db(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
TileGenerator::~TileGenerator()
|
TileGenerator::~TileGenerator()
|
||||||
{
|
{
|
||||||
|
if (m_db != 0) {
|
||||||
|
sqlite3_close(m_db);
|
||||||
|
m_db = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TileGenerator::setBgColor(const std::string &bgColor)
|
void TileGenerator::setBgColor(const std::string &bgColor)
|
||||||
@ -71,10 +75,6 @@ void TileGenerator::setDrawUnderground(bool drawUnderground)
|
|||||||
m_drawUnderground = drawUnderground;
|
m_drawUnderground = drawUnderground;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TileGenerator::generate(const std::string &/*input*/, const std::string &/*output*/)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void TileGenerator::parseColorsFile(const std::string &fileName)
|
void TileGenerator::parseColorsFile(const std::string &fileName)
|
||||||
{
|
{
|
||||||
ifstream in;
|
ifstream in;
|
||||||
@ -108,3 +108,61 @@ void TileGenerator::parseColorsFile(const std::string &fileName)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TileGenerator::generate(const std::string &input, const std::string &/*output*/)
|
||||||
|
{
|
||||||
|
openDb(input);
|
||||||
|
loadBlocks();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TileGenerator::openDb(const std::string &input)
|
||||||
|
{
|
||||||
|
string db_name = input + "map.sqlite";
|
||||||
|
if (sqlite3_open(db_name.c_str(), &m_db) != SQLITE_OK) {
|
||||||
|
throw DbError();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TileGenerator::loadBlocks()
|
||||||
|
{
|
||||||
|
sqlite3_stmt *statement;
|
||||||
|
string sql = "SELECT pos FROM blocks";
|
||||||
|
if (sqlite3_prepare_v2(m_db, sql.c_str(), sql.length(), &statement, 0) == SQLITE_OK) {
|
||||||
|
//int cols = sqlite3_column_count(statement);
|
||||||
|
int result = 0;
|
||||||
|
while (true) {
|
||||||
|
result = sqlite3_step(statement);
|
||||||
|
if(result == SQLITE_ROW) {
|
||||||
|
sqlite3_int64 blocknum = sqlite3_column_int64(statement, 0);
|
||||||
|
decodeBlockPos(blocknum);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
throw DbError();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
inline BlockPos TileGenerator::decodeBlockPos(sqlite3_int64 blockId)
|
||||||
|
{
|
||||||
|
BlockPos pos;
|
||||||
|
pos.x = unsignedToSigned(blockId % 4096, 2048);
|
||||||
|
blockId = blockId / 4096;
|
||||||
|
pos.y = unsignedToSigned(blockId % 4096, 2048);
|
||||||
|
blockId = blockId / 4096;
|
||||||
|
pos.z = unsignedToSigned(blockId % 4096, 2048);
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline int TileGenerator::unsignedToSigned(long i, long max_positive)
|
||||||
|
{
|
||||||
|
if (i < max_positive) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return i - 2l * max_positive;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -10,9 +10,10 @@
|
|||||||
#ifndef TILEGENERATOR_H_JJNUCARH
|
#ifndef TILEGENERATOR_H_JJNUCARH
|
||||||
#define TILEGENERATOR_H_JJNUCARH
|
#define TILEGENERATOR_H_JJNUCARH
|
||||||
|
|
||||||
|
#include <map>
|
||||||
|
#include <sqlite3.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <map>
|
|
||||||
|
|
||||||
struct Color {
|
struct Color {
|
||||||
uint8_t r;
|
uint8_t r;
|
||||||
@ -20,6 +21,15 @@ struct Color {
|
|||||||
uint8_t b;
|
uint8_t b;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct BlockPos {
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
int z;
|
||||||
|
};
|
||||||
|
|
||||||
|
class DbError {
|
||||||
|
};
|
||||||
|
|
||||||
class TileGenerator
|
class TileGenerator
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
@ -36,8 +46,14 @@ public:
|
|||||||
void setDrawPlayers(bool drawPlayers);
|
void setDrawPlayers(bool drawPlayers);
|
||||||
void setDrawScale(bool drawScale);
|
void setDrawScale(bool drawScale);
|
||||||
void setDrawUnderground(bool drawUnderground);
|
void setDrawUnderground(bool drawUnderground);
|
||||||
void generate(const std::string &input, const std::string &output);
|
|
||||||
void parseColorsFile(const std::string &fileName);
|
void parseColorsFile(const std::string &fileName);
|
||||||
|
void generate(const std::string &input, const std::string &output);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void openDb(const std::string &input);
|
||||||
|
void loadBlocks();
|
||||||
|
BlockPos decodeBlockPos(sqlite3_int64 blockId);
|
||||||
|
int unsignedToSigned(long i, long max_positive);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string m_bgColor;
|
std::string m_bgColor;
|
||||||
@ -48,6 +64,7 @@ private:
|
|||||||
bool m_drawPlayers;
|
bool m_drawPlayers;
|
||||||
bool m_drawScale;
|
bool m_drawScale;
|
||||||
bool m_drawUnderground;
|
bool m_drawUnderground;
|
||||||
|
sqlite3 *m_db;
|
||||||
ColorMap m_colors;
|
ColorMap m_colors;
|
||||||
}; /* ----- end of class TileGenerator ----- */
|
}; /* ----- end of class TileGenerator ----- */
|
||||||
|
|
||||||
|
@ -105,4 +105,5 @@ int main(int argc, char *argv[])
|
|||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
generator.generate(input, output);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user