World coords for dfposition

develop
Petr Mrázek 2011-03-24 06:13:21 +01:00
parent d0a171a350
commit 7c971cd8f1
3 changed files with 44 additions and 13 deletions

@ -575,6 +575,8 @@ namespace DFHack
/// get size of the map in tiles /// get size of the map in tiles
void getSize(uint32_t& x, uint32_t& y, uint32_t& z); void getSize(uint32_t& x, uint32_t& y, uint32_t& z);
/// get the position of the map on world map
void getPosition(int32_t& x, int32_t& y, int32_t& z);
/** /**
* Return false/0 on failure, buffer allocated by client app, 256 items long * Return false/0 on failure, buffer allocated by client app, 256 items long

@ -62,7 +62,7 @@ struct Maps::Private
{ {
uint32_t * block; uint32_t * block;
uint32_t x_block_count, y_block_count, z_block_count; uint32_t x_block_count, y_block_count, z_block_count;
uint32_t regionX, regionY, regionZ; int32_t regionX, regionY, regionZ;
uint32_t worldSizeX, worldSizeY; uint32_t worldSizeX, worldSizeY;
uint32_t maps_module; uint32_t maps_module;
@ -319,9 +319,9 @@ bool Maps::Start()
} }
// read position of the region inside DF world // read position of the region inside DF world
p->readDWord (off.region_x_offset, d->regionX); p->readDWord (off.region_x_offset, (uint32_t &) d->regionX);
p->readDWord (off.region_y_offset, d->regionY); p->readDWord (off.region_y_offset, (uint32_t &) d->regionY);
p->readDWord (off.region_z_offset, d->regionZ); p->readDWord (off.region_z_offset, (uint32_t &) d->regionZ);
// alloc array for pointers to all blocks // alloc array for pointers to all blocks
d->block = new uint32_t[mx*my*mz]; d->block = new uint32_t[mx*my*mz];
@ -355,6 +355,15 @@ void Maps::getSize (uint32_t& x, uint32_t& y, uint32_t& z)
z = d->z_block_count; z = d->z_block_count;
} }
// getter for map position
void Maps::getPosition (int32_t& x, int32_t& y, int32_t& z)
{
MAPS_GUARD
x = d->regionX;
y = d->regionY;
z = d->regionZ;
}
bool Maps::Finish() bool Maps::Finish()
{ {
if (d->block != NULL) if (d->block != NULL)

@ -48,15 +48,19 @@ int main (int argc, char** argv)
} }
DFHack::Gui * Gui = 0; DFHack::Gui * Gui = 0;
DFHack::Maps * Maps = 0;
DFHack::World * World = 0; DFHack::World * World = 0;
DFHack::ContextManager DFMgr("Memory.xml"); DFHack::ContextManager DFMgr("Memory.xml");
DFHack::Context * DF; DFHack::Context * DF;
bool have_maps = false;
try try
{ {
DF = DFMgr.getSingleContext(); DF = DFMgr.getSingleContext();
DF->Attach(); DF->Attach();
Gui = DF->getGui(); Gui = DF->getGui();
Maps = DF->getMaps();
World = DF->getWorld(); World = DF->getWorld();
have_maps = Maps->Start();
} }
catch (exception& e) catch (exception& e)
{ {
@ -77,13 +81,29 @@ int main (int argc, char** argv)
<< " Tick: " << World->ReadCurrentTick() << endl; << " Tick: " << World->ReadCurrentTick() << endl;
if (Gui) if (Gui)
{ {
int32_t x,y,z; int32_t vx,vy,vz;
int32_t cx,cy,cz;
int32_t wx,wy,wz;
int32_t width,height; int32_t width,height;
if(have_maps)
if(Gui->getViewCoords(x,y,z)) {
cout << "view coords: " << x << "/" << y << "/" << z << endl; Maps->getPosition(wx,wy,wz);
if(Gui->getCursorCoords(x,y,z)) cout << "Map world offset: " << wx << "/" << wy << "/" << wz << " embark squares." << endl;
cout << "cursor coords: " << x << "/" << y << "/" << z << endl; }
bool have_cursor = Gui->getCursorCoords(cx,cy,cz);
bool have_view = Gui->getViewCoords(vx,vy,vz);
if(have_view)
{
cout << "view coords: " << vx << "/" << vy << "/" << vz << endl;
if(have_maps)
cout << " world: " << vx+wx*48 << "/" << vy+wy*48 << "/" << vz+wz << endl;
}
if(have_cursor)
{
cout << "cursor coords: " << cx << "/" << cy << "/" << cz << endl;
if(have_maps)
cout << " world: " << cx+wx*48 << "/" << cy+wy*48 << "/" << cz+wz << endl;
}
if(Gui->getWindowSize(width,height)) if(Gui->getWindowSize(width,height))
cout << "window size : " << width << " " << height << endl; cout << "window size : " << width << " " << height << endl;
} }