summaryrefslogtreecommitdiff
path: root/GameBuildings.cpp
diff options
context:
space:
mode:
authorJonas Ask2009-10-26 01:10:00 +0000
committerJonas Ask2009-10-26 01:10:00 +0000
commit210597fe0010f98364548e5e3e43aee68e695137 (patch)
tree2ee513ccba119bf881501b82039ad7430570e4c5 /GameBuildings.cpp
parent4e31fb25cf795e21dfb7779bca207f68fcd6ef1d (diff)
downloadstonesense-210597fe0010f98364548e5e3e43aee68e695137.tar.gz
stonesense-210597fe0010f98364548e5e3e43aee68e695137.tar.bz2
stonesense-210597fe0010f98364548e5e3e43aee68e695137.tar.xz
Major rework of how buildings are loaded, displayed and configured.
Added a whole bunch of spritework by kaypy, configs need some more work. MapLoading.cpp: boundary check on cell loading. Introduced a separate header file for types, commonTypes.h.
Diffstat (limited to 'GameBuildings.cpp')
-rw-r--r--GameBuildings.cpp26
1 files changed, 18 insertions, 8 deletions
diff --git a/GameBuildings.cpp b/GameBuildings.cpp
index 00644ae..d209c59 100644
--- a/GameBuildings.cpp
+++ b/GameBuildings.cpp
@@ -44,7 +44,7 @@ int BlockNeighbourhoodType_simple(WorldSegment* segment, Block* b, bool validati
bool blockHasBridge(Block* b){
if(!b) return 0;
- return b->building.type == BUILDINGTYPE_BRIDGE;
+ return b->building.info.type == BUILDINGTYPE_BRIDGE;
}
dirTypes findWallCloseTo(WorldSegment* segment, Block* b){
@@ -96,10 +96,10 @@ void MergeBuildingsToSegment(vector<t_building>* buildings, WorldSegment* segmen
//want hashtable :(
if( b = segment->getBlock( xx, yy, tempbuilding.z) ){
//handle special case where zones overlap buildings, and try to replace them
- if(b->building.type != BUILDINGTYPE_NA && tempbuilding.type == BUILDINGTYPE_ZONE )
+ if(b->building.info.type != BUILDINGTYPE_NA && tempbuilding.type == BUILDINGTYPE_ZONE )
continue;
- b->building = tempbuilding;
+ b->building.info = tempbuilding;
//b->building.x1 = b->building.x2 = xx;
//b->building.y1 = b->building.y2 = yy;
loadSpecialBuildingTypes(segment, b, xx-tempbuilding.x1, yy-tempbuilding.y1, bheight);
@@ -114,20 +114,30 @@ void MergeBuildingsToSegment(vector<t_building>* buildings, WorldSegment* segmen
void loadSpecialBuildingTypes (WorldSegment* segment, Block* b, uint32_t relativex, uint32_t relativey, uint32_t height){
uint32_t i,j;
-
+ bool foundBlockBuildingInfo = false;
for(i = 0; i < buildingTypes.size(); i++){
BuildingConfiguration& conf = buildingTypes[i];
- if(b->building.type != conf.gameID) continue;
+ if(b->building.info.type != conf.gameID) continue;
//check all sprites for one that matches all conditions
for(j = 0; j < conf.sprites.size(); j++){
if(conf.sprites[j].BlockMatches(b)){
- b->overridingBuildingType = conf.sprites[j].spriteIndex;
- return;
+// t_SpriteWithOffset Sprite;
+ b->building.sprites = conf.sprites[j].sprites;
+
+ foundBlockBuildingInfo = true;
+ //b->overridingBuildingType = conf.sprites[j].spriteIndex;
+
+ break;
}
}
-
+ //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){
+ t_SpriteWithOffset unknownBuildingSprite = {SPRITEOBJECT_NA, 0, 0};
+ b->building.sprites.push_back( unknownBuildingSprite );
+ }
+ break;
}
}