diff options
| author | Simon Robertshaw <simon@hardwired.org.uk> | 2012-11-12 10:22:16 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2012-11-12 10:22:16 (GMT) |
| commit | 29189693b381ce7b31095fb2ae2ffb01bd8a221e (patch) | |
| tree | 7448f71a551365459d68dcaec60ba9ffbb9bfa46 /src/client | |
| parent | 4192a5714661dfc9c04552957f3dd36e5c902f37 (diff) | |
| download | powder-29189693b381ce7b31095fb2ae2ffb01bd8a221e.zip powder-29189693b381ce7b31095fb2ae2ffb01bd8a221e.tar.gz | |
Element palette for automatic element ID/mod mapping
Diffstat (limited to 'src/client')
| -rw-r--r-- | src/client/GameSave.cpp | 34 | ||||
| -rw-r--r-- | src/client/GameSave.h | 4 |
2 files changed, 36 insertions, 2 deletions
diff --git a/src/client/GameSave.cpp b/src/client/GameSave.cpp index 9072921..0b94c1f 100644 --- a/src/client/GameSave.cpp +++ b/src/client/GameSave.cpp @@ -23,7 +23,8 @@ airMode(save.airMode), signs(save.signs), expanded(save.expanded), hasOriginalData(save.hasOriginalData), -originalData(save.originalData) +originalData(save.originalData), +palette(save.palette) { blockMap = NULL; blockMapPtr = NULL; @@ -659,6 +660,25 @@ void GameSave::readOPS(char * data, int dataLength) fprintf(stderr, "Wrong type for %s\n", bson_iterator_key(&iter)); } } + else if(strcmp(bson_iterator_key(&iter), "palette")==0) + { + palette.clear(); + if(bson_iterator_type(&iter)==BSON_ARRAY) + { + bson_iterator subiter; + bson_iterator_subiterator(&iter, &subiter); + while(bson_iterator_next(&subiter)) + { + if(bson_iterator_type(&subiter)==BSON_INT) + { + std::string id = std::string(bson_iterator_key(&subiter)); + int num = bson_iterator_int(&subiter); + palette.push_back(PaletteItem(id, num)); + printf("R P: %s %d\n", id.c_str(), num); + } + } + } + } } //Read wall and fan data @@ -1622,7 +1642,7 @@ char * GameSave::serialiseOPS(int & dataLength) int x, y, i, wallDataFound = 0; int posCount, signsCount; bson b; - + std::fill(elementCount, elementCount+PT_NUM, 0); //Get coords in blocks @@ -1939,6 +1959,16 @@ char * GameSave::serialiseOPS(int & dataLength) bson_append_binary(&b, "fanMap", BSON_BIN_USER, (const char *)fanData, fanDataLen); if(soapLinkData) bson_append_binary(&b, "soapLinks", BSON_BIN_USER, (const char *)soapLinkData, soapLinkDataLen); + if(partsData && palette.size()) + { + bson_append_start_array(&b, "palette"); + for(std::vector<PaletteItem>::iterator iter = palette.begin(), end = palette.end(); iter != end; ++iter) + { + bson_append_int(&b, (*iter).first.c_str(), (*iter).second); + printf("W P: %s %d\n", (*iter).first.c_str(), (*iter).second); + } + bson_append_finish_array(&b); + } signsCount = 0; for(i = 0; i < signs.size(); i++) { diff --git a/src/client/GameSave.h b/src/client/GameSave.h index 62adc17..8ac1fce 100644 --- a/src/client/GameSave.h +++ b/src/client/GameSave.h @@ -55,6 +55,10 @@ public: //Signs std::vector<sign> signs; + + //Element palette + typedef std::pair<std::string, int> PaletteItem; + std::vector<PaletteItem> palette; GameSave(); GameSave(GameSave & save); |
