Fixed a tile occupancy problem with teleporting dwarves.

develop
expwnent 2012-09-28 19:06:22 -04:00
parent 79ac1a81b9
commit 1bde32fa5b
1 changed files with 10 additions and 0 deletions

@ -2,6 +2,7 @@
#include "Console.h"
#include "Export.h"
#include "PluginManager.h"
#include "modules/MapCache.h"
#include "DataDefs.h"
#include "df/ui.h"
@ -48,6 +49,7 @@ DFhackCExport command_result plugin_onupdate ( color_ostream &out )
}
}
if ( enable_teledwarf ) {
MapExtras::MapCache *MCache = new MapExtras::MapCache();
for (size_t i = 0; i < world->units.all.size(); i++)
{
df::unit *unit = world->units.all[i];
@ -59,11 +61,19 @@ DFhackCExport command_result plugin_onupdate ( color_ostream &out )
if (unit->relations.following != 0)
continue;
MapExtras::Block* block = MCache->BlockAtTile(unit->pos);
df::coord2d pos(unit->pos.x % 16, unit->pos.y % 16);
df::tile_occupancy occ = block->OccupancyAt(pos);
occ.bits.unit = 0;
block->setOccupancyAt(pos, occ);
//move immediately to destination
unit->pos.x = unit->path.dest.x;
unit->pos.y = unit->path.dest.y;
unit->pos.z = unit->path.dest.z;
}
MCache->WriteAll();
delete MCache;
}
return CR_OK;
}