/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.pepsoft.worldpainter.gardenofeden;
import java.util.Set;
import org.pepsoft.worldpainter.Dimension;
import org.pepsoft.worldpainter.Tile;
import org.pepsoft.worldpainter.exporting.MinecraftWorld;
/**
*
* @author pepijn
*/
public class GardenExporter {
/**
* First pass, executed after all the second pass exporters for other layers
* have executed, meant for building exteriors of buildings, etc.
*
* @param dimension
* @param tile
* @param minecraftWorld
*/
public void firstPass(Dimension dimension, Tile tile, MinecraftWorld minecraftWorld, Set<Seed> processedSeeds) {
// Process the seed. If it has a parent, process it first, etc.,
// regardless of whether the ancestors are in this tile.
// If the seed is already processed then all its ancestors are also
// already processed.
tile.getSeeds().stream()
.filter(seed -> !processedSeeds.contains(seed))
.forEach(seed -> processSeedFirstPass(seed, processedSeeds, dimension, tile, minecraftWorld));
}
/**
* Second pass, executed after the first pass has finished, meant for
* building interiors of buildings, for instance.
*
* @param dimension
* @param tile
* @param minecraftWorld
*/
public void secondPass(Dimension dimension, Tile tile, MinecraftWorld minecraftWorld, Set<Seed> processedSeeds) {
// Process the seed. If it has a parent, process it first, etc.,
// regardless of whether the ancestors are in this tile.
// If the seed is already processed then all its ancestors are also
// already processed.
tile.getSeeds().stream()
.filter(seed -> !processedSeeds.contains(seed))
.forEach(seed -> processSeedSecondPass(seed, processedSeeds, dimension, tile, minecraftWorld));
}
private void processSeedFirstPass(Seed seed, Set<Seed> processedSeeds, Dimension dimension, Tile tile, MinecraftWorld world) {
if ((seed.parent != null) && (! processedSeeds.contains(seed.parent))) {
processSeedFirstPass(seed.parent, processedSeeds, dimension, tile, world);
}
if (seed.isSprouted()) {
// System.out.println("Building " + seed.getClass().getSimpleName() + " at " + seed.location.x + "," + seed.location.y);
seed.buildFirstPass(dimension, tile, world);
processedSeeds.add(seed);
}
}
private void processSeedSecondPass(Seed seed, Set<Seed> processedSeeds, Dimension dimension, Tile tile, MinecraftWorld world) {
if ((seed.parent != null) && (! processedSeeds.contains(seed.parent))) {
processSeedSecondPass(seed.parent, processedSeeds, dimension, tile, world);
}
if (seed.isSprouted()) {
// System.out.println("Building " + seed.getClass().getSimpleName() + " at " + seed.location.x + "," + seed.location.y);
seed.buildSecondPass(dimension, tile, world);
processedSeeds.add(seed);
}
}
}