/**
 * 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);
    }
}
Esempio n. 2
0
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;
}