/** * add extra sprites for buildings, trees, etc */ void addSegmentExtras(WorldSegment * segment) { uint32_t numtiles = segment->getNumTiles(); for(uint32_t i=0; i < numtiles; i++) { Tile* b = segment->getTile(i); if(!b || !b->visible) { continue; } if(!ssConfig.show_hidden_tiles && b->designation.bits.hidden) { continue; } //Grass if(b->grasslevel > 0 && ( (b->tileMaterial() == tiletype_material::GRASS_LIGHT) || (b->tileMaterial() == tiletype_material::GRASS_DARK) || (b->tileMaterial() == tiletype_material::GRASS_DEAD) || (b->tileMaterial() == tiletype_material::GRASS_DRY))) { c_tile_tree * vegetationsprite = 0; vegetationsprite = getVegetationTree(contentLoader->grassConfigs,b->grassmat,true,true); if(vegetationsprite) { vegetationsprite->insert_sprites(segment, b->x, b->y, b->z, b); } } //populate trees if(b->tree.index) { c_tile_tree * Tree = GetTreeVegetation(b->tileShape(), b->tileSpecial(), b->tree.index ); Tree->insert_sprites(segment, b->x, b->y, b->z, b); } //setup building sprites if( b->building.type != BUILDINGTYPE_NA && b->building.type != BUILDINGTYPE_BLACKBOX) { loadBuildingSprites( b); } //setup deep water if( b->designation.bits.flow_size == 7 && b->designation.bits.liquid_type == 0) { int topdepth = tileWaterDepth(b->x, b->y, b->z, segment, eAbove); if(topdepth) { b->deepwater = true; } } //setup ramps if(b->tileShapeBasic()==tiletype_shape_basic::Ramp) { b->rampindex = CalculateRampType(b->x, b->y, b->z, segment); } //setup tile borders arrangeTileBorders(segment, b); } }
c_block_tree * GetTreeVegetation( TileShape type, int index) { static c_block_tree * defaultTree = new c_block_tree; int base_sprite = SPRITEOBJECT_BLUEPRINT; vector<VegetationConfiguration>* graphicSet; bool live=true; bool grown=true; switch(type) { case TREE_DEAD: base_sprite = SPRITEOBJECT_TREE_DEAD; graphicSet = &(contentLoader.treeConfigs); live = false; break; case TREE_OK: base_sprite = SPRITEOBJECT_TREE_OK; graphicSet = &(contentLoader.treeConfigs); break; case SAPLING_DEAD: base_sprite = SPRITEOBJECT_SAPLING_DEAD; live = false; grown = false; graphicSet = &(contentLoader.treeConfigs); break; case SAPLING_OK: base_sprite = SPRITEOBJECT_SAPLING_OK; grown = false; graphicSet = &(contentLoader.treeConfigs); break; case SHRUB_DEAD: base_sprite = SPRITEOBJECT_SHRUB_DEAD; live = false; graphicSet = &(contentLoader.shrubConfigs); break; case SHRUB_OK: base_sprite = SPRITEOBJECT_SHRUB_OK; graphicSet = &(contentLoader.shrubConfigs); break; default: defaultTree->set_sheetindex(SPRITEOBJECT_BLANK); return defaultTree; } c_block_tree * configuredTree = getVegetationTree(*graphicSet,index,live,grown); if (configuredTree->get_sheetindex() == -1) { configuredTree->set_fileindex(-1); // should be set already, but... configuredTree->set_sheetindex(base_sprite); } return configuredTree; }