diff options
| author | Japa | 2010-05-04 10:54:06 +0000 |
|---|---|---|
| committer | Japa | 2010-05-04 10:54:06 +0000 |
| commit | 4a51199a91b37a97edca760ffa22629499fd8d83 (patch) | |
| tree | a84f3f5d37263034d38b347ed5d48a28319c6497 /GroundMaterialConfiguration.cpp | |
| parent | 6f188cc32530c8a422f1223741acb81ae7535c4d (diff) | |
| download | stonesense-4a51199a91b37a97edca760ffa22629499fd8d83.tar.gz stonesense-4a51199a91b37a97edca760ffa22629499fd8d83.tar.bz2 stonesense-4a51199a91b37a97edca760ffa22629499fd8d83.tar.xz | |
updated to the latest DFhack, added the functionality to have seperate sprites for blocks, boulders, etc.
Diffstat (limited to 'GroundMaterialConfiguration.cpp')
| -rw-r--r-- | GroundMaterialConfiguration.cpp | 72 |
1 files changed, 58 insertions, 14 deletions
diff --git a/GroundMaterialConfiguration.cpp b/GroundMaterialConfiguration.cpp index fff969d..3eb92c2 100644 --- a/GroundMaterialConfiguration.cpp +++ b/GroundMaterialConfiguration.cpp @@ -8,16 +8,25 @@ TerrainMaterialConfiguration::TerrainMaterialConfiguration()
{
- defaultSprite.fileIndex=INVALID_INDEX;
- defaultSprite.sheetIndex=UNCONFIGURED_INDEX;
+ overridingMaterials.resize(NUM_FORMS);
+ defaultSprite.resize(NUM_FORMS);
+ for(int i = 0; i < NUM_FORMS; i++)
+ {
+ defaultSprite[i].fileIndex=INVALID_INDEX;
+ defaultSprite[i].sheetIndex=UNCONFIGURED_INDEX;
+ }
//dont really care about the rest of the sprite right now.
}
TerrainConfiguration::TerrainConfiguration()
{
- defaultSprite.fileIndex=INVALID_INDEX;
- defaultSprite.sheetIndex=UNCONFIGURED_INDEX;
+ defaultSprite.resize(NUM_FORMS);
+ for(int i = 0; i < NUM_FORMS; i++)
+ {
+ defaultSprite[i].fileIndex=INVALID_INDEX;
+ defaultSprite[i].sheetIndex=UNCONFIGURED_INDEX;
+ }
//dont really care about the rest of the sprite right now.
}
@@ -36,8 +45,8 @@ TerrainConfiguration::~TerrainConfiguration() void DumpInorganicMaterialNamesToDisk(){
FILE* fp = fopen("dump.txt", "w");
if(!fp) return;
- for(uint32_t j=0; j < contentLoader.inorganicMaterials.size(); j++){
- fprintf(fp, "%i:%s\n",j, contentLoader.inorganicMaterials[j].id);
+ for(uint32_t j=0; j < contentLoader.Mats->inorganic.size(); j++){
+ fprintf(fp, "%i:%s\n",j, contentLoader.Mats->inorganic[j].id);
}
fclose(fp);
}
@@ -254,6 +263,27 @@ void parseWallFloorSpriteElement( TiXmlElement* elemWallFloorSprite, vector<Terr if (elems == 0)
return; //nothing to link to
+ vector<bool> formToggle;
+ formToggle.resize(NUM_FORMS);
+ // parse weather tile is for a block, log, etc
+ TiXmlElement* elemForm = elemWallFloorSprite->FirstChildElement("form");
+ if(elemForm == NULL)
+ {
+ formToggle[0] = true;
+ }
+ for( ;elemForm;elemForm = elemForm->NextSiblingElement("form"))
+ {
+ const char * strForm = elemForm->Attribute("value");
+
+ if( strcmp(strForm, "bar") == 0)
+ formToggle[FORM_BAR] = true;
+ if( strcmp(strForm, "block") == 0)
+ formToggle[FORM_BLOCK] = true;
+ if( strcmp(strForm, "boulder") == 0)
+ formToggle[FORM_BOULDER] = true;
+ if( strcmp(strForm, "log") == 0)
+ formToggle[FORM_LOG] = true;
+ }
// parse material elements
TiXmlElement* elemMaterial = elemWallFloorSprite->FirstChildElement("material");
if (elemMaterial == NULL)
@@ -264,9 +294,13 @@ void parseWallFloorSpriteElement( TiXmlElement* elemWallFloorSprite, vector<Terr TerrainConfiguration *tConfig = configTable[lookupKeys[i]];
// if that was null we have *really* screwed up earlier
// only update if not by previous configs
- if (tConfig->defaultSprite.sheetIndex == UNCONFIGURED_INDEX)
+ for( int i = 0; i < NUM_FORMS; i++)
{
- tConfig->defaultSprite = sprite;
+ if(formToggle[i])
+ if (tConfig->defaultSprite[i].sheetIndex == UNCONFIGURED_INDEX)
+ {
+ tConfig->defaultSprite[i] = sprite;
+ }
}
}
}
@@ -302,9 +336,13 @@ void parseWallFloorSpriteElement( TiXmlElement* elemWallFloorSprite, vector<Terr tConfig->terrainMaterials[elemIndex] = new TerrainMaterialConfiguration();
}
// only update if not set by earlier configs
- if (tConfig->terrainMaterials[elemIndex]->defaultSprite.sheetIndex == UNCONFIGURED_INDEX)
+ for( int i = 0; i < NUM_FORMS; i++)
{
- tConfig->terrainMaterials[elemIndex]->defaultSprite = sprite;
+ if(formToggle[i])
+ if (tConfig->terrainMaterials[elemIndex]->defaultSprite[i].sheetIndex == UNCONFIGURED_INDEX)
+ {
+ tConfig->terrainMaterials[elemIndex]->defaultSprite[i] = sprite;
+ }
}
}
}
@@ -336,11 +374,17 @@ void parseWallFloorSpriteElement( TiXmlElement* elemWallFloorSprite, vector<Terr tConfig->terrainMaterials[elemIndex] = new TerrainMaterialConfiguration();
}
// add to map (if not already present)
- map<int,t_SpriteWithOffset>::iterator it = tConfig->terrainMaterials[elemIndex]->overridingMaterials.find(subtypeId);
- if (it == tConfig->terrainMaterials[elemIndex]->overridingMaterials.end())
+ for( int i = 0; i < NUM_FORMS; i++)
{
- tConfig->terrainMaterials[elemIndex]->overridingMaterials[subtypeId]=sprite;
- }
+ if(formToggle[i])
+ {
+ map<int,t_SpriteWithOffset>::iterator it = tConfig->terrainMaterials[elemIndex]->overridingMaterials[i].find(subtypeId);
+ if (it == tConfig->terrainMaterials[elemIndex]->overridingMaterials[i].end())
+ {
+ tConfig->terrainMaterials[elemIndex]->overridingMaterials[i][subtypeId]=sprite;
+ }
+ }
+ }
}
}
}
|
