From 31dbb792caee0ecc9bbd880dced129fd5d1987b4 Mon Sep 17 00:00:00 2001 From: Japa Date: Fri, 23 Jun 2017 19:54:22 +0530 Subject: [PATCH] Added a function to get a partial creature raw list. --- plugins/proto/RemoteFortressReader.proto | 6 ++++++ .../remotefortressreader.cpp | 19 ++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/plugins/proto/RemoteFortressReader.proto b/plugins/proto/RemoteFortressReader.proto index 2d53744c5..a1f8e1bdb 100644 --- a/plugins/proto/RemoteFortressReader.proto +++ b/plugins/proto/RemoteFortressReader.proto @@ -774,4 +774,10 @@ message VersionInfo optional string dwarf_fortress_version = 1; optional string dfhack_version = 2; optional string remote_fortress_reader_version = 3; +} + +message ListRequest +{ + optional int32 list_start = 1; + optional int32 list_end = 2; } \ No newline at end of file diff --git a/plugins/remotefortressreader/remotefortressreader.cpp b/plugins/remotefortressreader/remotefortressreader.cpp index ebc643fd5..9e32c1c1d 100644 --- a/plugins/remotefortressreader/remotefortressreader.cpp +++ b/plugins/remotefortressreader/remotefortressreader.cpp @@ -137,6 +137,7 @@ static command_result GetWorldMapCenter(color_ostream &stream, const EmptyMessag static command_result GetRegionMaps(color_ostream &stream, const EmptyMessage *in, RegionMaps *out); static command_result GetRegionMapsNew(color_ostream &stream, const EmptyMessage *in, RegionMaps *out); static command_result GetCreatureRaws(color_ostream &stream, const EmptyMessage *in, CreatureRawList *out); +static command_result GetPartialCreatureRaws(color_ostream &stream, const ListRequest *in, CreatureRawList *out); static command_result GetPlantRaws(color_ostream &stream, const EmptyMessage *in, PlantRawList *out); static command_result CopyScreen(color_ostream &stream, const EmptyMessage *in, ScreenCapture *out); static command_result PassKeyboardEvent(color_ostream &stream, const KeyboardEvent *in); @@ -250,6 +251,7 @@ DFhackCExport RPCService *plugin_rpcconnect(color_ostream &) svc->addFunction("GetRegionMaps", GetRegionMaps); svc->addFunction("GetRegionMapsNew", GetRegionMapsNew); svc->addFunction("GetCreatureRaws", GetCreatureRaws); + svc->addFunction("GetPartialCreatureRaws", GetPartialCreatureRaws); svc->addFunction("GetWorldMapCenter", GetWorldMapCenter); svc->addFunction("GetPlantRaws", GetPlantRaws); svc->addFunction("CopyScreen", CopyScreen); @@ -2259,13 +2261,28 @@ static command_result GetRegionMapsNew(color_ostream &stream, const EmptyMessage } static command_result GetCreatureRaws(color_ostream &stream, const EmptyMessage *in, CreatureRawList *out) +{ + return GetPartialCreatureRaws(stream, NULL, out); +} + +static command_result GetPartialCreatureRaws(color_ostream &stream, const ListRequest *in, CreatureRawList *out) { if (!df::global::world) return CR_FAILURE; df::world * world = df::global::world; - for (int i = 0; i < world->raws.creatures.all.size(); i++) + int list_start = 0; + int list_end = world->raws.creatures.all.size(); + + if (in != nullptr) + { + list_start = in->list_start(); + if(in->list_end() < list_end) + list_end = in->list_end(); + } + + for (int i = list_start; i < list_end; i++) { df::creature_raw * orig_creature = world->raws.creatures.all[i];