summaryrefslogtreecommitdiff
path: root/GameBuildings.cpp
diff options
context:
space:
mode:
authorPetr Mrázek2012-02-19 17:58:03 +0100
committerPetr Mrázek2012-02-19 17:58:03 +0100
commitf370a56b150a399c47679135f29b4d5e99b30931 (patch)
tree4db6e818f649cb205146b5cc5729089d8133ea3b /GameBuildings.cpp
parent44f7c01eeb396fadfcf2ddf5b4a6058fa33fcd7f (diff)
downloadstonesense-f370a56b150a399c47679135f29b4d5e99b30931.tar.gz
stonesense-f370a56b150a399c47679135f29b4d5e99b30931.tar.bz2
stonesense-f370a56b150a399c47679135f29b4d5e99b30931.tar.xz
Fix building type matching
Diffstat (limited to 'GameBuildings.cpp')
-rw-r--r--GameBuildings.cpp33
1 files changed, 19 insertions, 14 deletions
diff --git a/GameBuildings.cpp b/GameBuildings.cpp
index c088fd5..ffb0397 100644
--- a/GameBuildings.cpp
+++ b/GameBuildings.cpp
@@ -123,7 +123,6 @@ void MergeBuildingsToSegment(vector<Buildings::t_building>* buildings, WorldSegm
continue;
b->building.index = i;
b->building.info = tempbuilding;
- b->building.custom_building_type = tempbuilding.custom_type;
}
}
}
@@ -150,23 +149,29 @@ void loadBuildingSprites ( Block* b)
WriteErr("Null Block skipped in loadBuildingSprites\n");
return;
}
- uint32_t numBuildings = (uint32_t)contentLoader->buildingConfigs.size();
- for(uint32_t i = 0; i < numBuildings; i++)
+ BuildingConfiguration* generic = NULL, *specific = NULL, *custom = NULL;
+ for(auto iter = contentLoader->buildingConfigs.begin(); iter < contentLoader->buildingConfigs.end(); iter++)
{
- BuildingConfiguration& conf = contentLoader->buildingConfigs[i];
- if(b->building.info.type != conf.game_type ||
- b->building.info.subtype != conf.game_subtype ||
- b->building.info.custom_type != conf.game_custom
- ) continue;
-
- //check all sprites for one that matches all conditions
- if (conf.sprites != NULL && conf.sprites->BlockMatches(b))
+ BuildingConfiguration & conf = *iter;
+ if(b->building.info.type == conf.game_type)
{
- foundBlockBuildingInfo = true;
+ generic = &conf;
+ if(b->building.info.subtype == conf.game_subtype)
+ {
+ specific = &conf;
+ if(b->building.info.custom_type == conf.game_custom)
+ {
+ custom = &conf;
+ }
+ }
}
- break;
}
-
+ BuildingConfiguration * final = custom?custom:(specific?specific:(generic?generic:NULL));
+ //check all sprites for one that matches all conditions
+ if (final && final->sprites != NULL && final->sprites->copyToBlock(b))
+ {
+ foundBlockBuildingInfo = true;
+ }
//add yellow box, if needed. But only if the building was not found (this way we can have blank slots in buildings)
if(b->building.sprites.size() == 0 && foundBlockBuildingInfo == false){
c_sprite unknownBuildingSprite;