use of com.ferreusveritas.dynamictrees.systems.GrowSignal in project DynamicTrees-BYG by DynamicTreesTeam.
the class AraucariaLogic method populateDirectionProbabilityMap.
@Override
public int[] populateDirectionProbabilityMap(GrowthLogicKitConfiguration configuration, DirectionManipulationContext context) {
final GrowSignal signal = context.signal();
final int[] probMap = context.probMap();
// Alter probability map for direction change
float energy = context.species().getEnergy(context.world(), signal.rootPos);
float splitCanopyHeight = energy * configuration.get(SPLIT_HEIGHT_FACTOR);
if ((signal.delta.getY() > splitCanopyHeight && signal.isInTrunk()) || signal.delta.getY() > energy * configuration.get(CANOPY_HEIGHT_FACTOR))
probMap[Direction.UP.ordinal()] = 0;
if (signal.delta.getY() < splitCanopyHeight) {
// Ensure that the branch doesn't go up after turning out of trunk so it won't interfere with it
if (signal.numTurns == 1 && signal.delta.distSqr(0, signal.delta.getY(), 0, true) <= 1.0) {
probMap[Direction.UP.ordinal()] = 0;
}
if (signal.isInTrunk()) {
probMap[Direction.UP.ordinal()] *= 10;
}
}
return probMap;
}
use of com.ferreusveritas.dynamictrees.systems.GrowSignal in project DynamicTrees-BYG by DynamicTreesTeam.
the class AspenLogic method populateDirectionProbabilityMap.
@Override
public int[] populateDirectionProbabilityMap(GrowthLogicKitConfiguration configuration, DirectionManipulationContext context) {
final GrowSignal signal = context.signal();
final int[] probMap = context.probMap();
final int radius = context.radius();
Direction originDir = signal.dir.getOpposite();
// Alter probability map for direction change
probMap[0] = signal.isInTrunk() ? 0 : 1;
probMap[1] = signal.isInTrunk() ? 4 : 1;
// Set all side probabilities to 0 to start out
probMap[2] = probMap[3] = probMap[4] = probMap[5] = 0;
// Allow for turning if in trunk, otherwise reinforce current travel direction
if (signal.isInTrunk()) {
// Make it so every 2 blocks the trunk has a higher chance of branching out, except at the tip
if (radius > 1) {
// Choose a random direction to do the branch
int directionSelection = Math.abs(CoordUtils.coordHashCode(context.pos(), 2)) % 4;
probMap[2 + directionSelection] = (signal.numSteps % 2 == 0) ? 3 : 0;
}
} else {
// If we're twig or small branch, don't grow up or down
if (radius < 3) {
probMap[0] = 0;
probMap[1] = 0;
}
// Reinforce current travel direction
probMap[signal.dir.ordinal()] += (signal.numTurns == 1 ? 2 : 1);
}
// Disable the direction we came from
probMap[originDir.ordinal()] = 0;
return probMap;
}
use of com.ferreusveritas.dynamictrees.systems.GrowSignal in project DynamicTrees-BYG by DynamicTreesTeam.
the class EbonyLogic method populateDirectionProbabilityMap.
@Override
public int[] populateDirectionProbabilityMap(GrowthLogicKitConfiguration configuration, DirectionManipulationContext context) {
final Species species = context.species();
final GrowSignal signal = context.signal();
final int[] probMap = context.probMap();
Direction originDir = signal.dir.getOpposite();
probMap[0] = species.getUpProbability();
probMap[1] = signal.isInTrunk() && signal.energy > configuration.getLowestBranchHeight(context) ? 0 : probMap[0];
probMap[2] = probMap[3] = probMap[4] = probMap[5] = 4;
if (!signal.isInTrunk())
probMap[signal.dir.ordinal()] += 2;
// Disable the direction we came from
probMap[originDir.ordinal()] = 0;
return probMap;
}
use of com.ferreusveritas.dynamictrees.systems.GrowSignal in project DynamicTrees-BYG by DynamicTreesTeam.
the class EtherTreeLogic method populateDirectionProbabilityMap.
@Override
public int[] populateDirectionProbabilityMap(GrowthLogicKitConfiguration configuration, DirectionManipulationContext context) {
final World world = context.world();
final BlockPos pos = context.pos();
final GrowSignal signal = context.signal();
final int[] probMap = context.probMap();
float maxEnergy = configuration.getEnergy(context);
int HBCL = configuration.get(HEIGHT_BETWEEN_CANOPY_LAYERS);
// int layers = ((int)maxEnergy - HBCL) % HBCL;
if (signal.delta.getY() % HBCL == 0) {
probMap[0] = configuration.get(DOWN_PROBABILITY);
probMap[1] = TreeHelper.isBranch(world.getBlockState(pos.below())) ? context.species().getUpProbability() : 0;
probMap[2] = probMap[3] = probMap[4] = probMap[5] = 1;
// Disable the direction we came from
probMap[signal.dir.getOpposite().ordinal()] = 0;
return probMap;
} else
return super.populateDirectionProbabilityMap(configuration, context);
}
use of com.ferreusveritas.dynamictrees.systems.GrowSignal in project DynamicTrees-BYG by DynamicTreesTeam.
the class MapleLogic method populateDirectionProbabilityMap.
@Override
public int[] populateDirectionProbabilityMap(GrowthLogicKitConfiguration configuration, DirectionManipulationContext context) {
final GrowSignal signal = context.signal();
final int[] probMap = context.probMap();
int lowestBranch = configuration.getLowestBranchHeight(context);
int deltaYFromLowest = signal.delta.getY() - lowestBranch;
int branchingHeight = configuration.get(BRANCHING_HEIGHT);
// disable down direction
probMap[0] = 0;
if (!signal.isInTrunk() && deltaYFromLowest >= 0 && deltaYFromLowest <= branchingHeight) {
boolean evenEnergy = signal.energy % 2 == 0 || CoordUtils.coordHashCode(context.pos(), 2) % configuration.get(ZIGZAG_UP_CHANCE) == 0;
probMap[1] = evenEnergy ? 1 : 0;
probMap[2] = probMap[3] = probMap[4] = probMap[5] = evenEnergy ? 0 : 1;
} else {
// disable up in the trunk if the signal is above the branching height, to force branching
probMap[1] = (signal.isInTrunk() && deltaYFromLowest >= 0) || (deltaYFromLowest >= branchingHeight + configuration.get(CANOPY_DEPTH)) ? 0 : context.species().getUpProbability();
probMap[2] = probMap[3] = probMap[4] = probMap[5] = 3;
// If we're not in the trunk, have a small chance of growing up and never grow down
if (!signal.isInTrunk() && signal.dir != Direction.UP) {
// Reinforce current growth direction
// Makes branches more straight to start out with, and then twistier
int increase = signal.numTurns > 2 ? 0 : 2;
probMap[signal.dir.ordinal()] += increase;
}
}
// Disable the direction we came from
Direction originDir = signal.dir.getOpposite();
probMap[originDir.ordinal()] = 0;
return probMap;
}
Aggregations