use of com.ferreusveritas.dynamictrees.systems.GrowSignal in project DynamicTrees-BYG by DynamicTreesTeam.
the class CypressLogic method populateDirectionProbabilityMap.
@Override
public int[] populateDirectionProbabilityMap(GrowthLogicKitConfiguration configuration, DirectionManipulationContext context) {
final int[] probMap = context.probMap();
final GrowSignal signal = context.signal();
Direction originDir = context.signal().dir.getOpposite();
int treeHash = CoordUtils.coordHashCode(signal.rootPos, 2);
probMap[0] = 0;
probMap[1] = context.species().getUpProbability();
probMap[2] = probMap[3] = probMap[4] = probMap[5] = 2;
if (signal.energy > configuration.get(CANOPY_ENERGY)) {
probMap[2] = probMap[3] = probMap[4] = probMap[5] = 0;
if (signal.delta.getY() <= configuration.getLowestBranchHeight(context) + 1) {
probMap[1] += 3;
int sideHash = treeHash % 16;
probMap[2] = sideHash % 2 < 1 ? 1 : 0;
probMap[3] = sideHash % 4 < 2 ? 1 : 0;
probMap[4] = sideHash % 8 < 4 ? 1 : 0;
probMap[5] = sideHash < 8 ? 1 : 0;
}
} else {
// incentivize travelling up in trunk
if (signal.isInTrunk())
probMap[1] += 1;
else if (context.signal().numTurns == 1 && context.signal().delta.distSqr(0, context.signal().delta.getY(), 0, true) <= 1.0)
probMap[1] = 0;
// Ensure that the branch gets out of the trunk at least two blocks so it won't interfere with the main trunk branch
}
probMap[originDir.ordinal()] = 0;
return probMap;
}
use of com.ferreusveritas.dynamictrees.systems.GrowSignal in project DynamicTrees-BYG by DynamicTreesTeam.
the class DiagonalPalmLogic method populateDirectionProbabilityMap.
@Override
public int[] populateDirectionProbabilityMap(GrowthLogicKitConfiguration configuration, DirectionManipulationContext context) {
final Species species = context.species();
final World world = context.world();
final GrowSignal signal = context.signal();
final int[] probMap = context.probMap();
final BlockPos pos = context.pos();
Direction originDir = signal.dir.getOpposite();
// Alter probability map for direction change
// Down is always disallowed for palm
probMap[0] = 0;
probMap[1] = species.getUpProbability();
// Start by disabling probability on the sides
probMap[2] = probMap[3] = probMap[4] = probMap[5] = 0;
int diverge = (int) (4 / configuration.get(CHANCE_TO_DIVERGE));
int split = (int) (1 / configuration.get(CHANCE_TO_SPLIT));
int randCoordCode = Math.abs(CoordUtils.coordHashCode(pos, 2));
int directionSelection = randCoordCode % diverge;
int splitSelection = randCoordCode % split;
if (directionSelection < 4 && signal.energy > 1) {
Direction selectedDir = Direction.values()[2 + directionSelection];
// only do branching if it just grew up (to avoid long sideways branches)
if (originDir == Direction.DOWN) {
probMap[selectedDir.ordinal()] = 10;
// if the chance to split is met, the clockwise direction is also enabled
if (splitSelection == 0 && signal.energy > species.getEnergy(world, signal.rootPos) * Math.max(0, Math.min(1, 1 - configuration.get(SPLIT_MAX_ENERGY_FACTOR)))) {
probMap[selectedDir.getClockWise().ordinal()] = 10;
}
probMap[1] = 0;
}
}
// 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 selectNewDirection.
@Override
public Direction selectNewDirection(GrowthLogicKitConfiguration configuration, DirectionSelectionContext context) {
final Direction newDir = super.selectNewDirection(configuration, context);
final GrowSignal signal = context.signal();
int HBCL = configuration.get(HEIGHT_BETWEEN_CANOPY_LAYERS);
if (signal.delta.getY() % HBCL == 0 && newDir != Direction.UP) {
signal.energy = Math.max(signal.energy, configuration.get(CANOPY_SIDE_ENERGY));
}
return newDir;
}
use of com.ferreusveritas.dynamictrees.systems.GrowSignal in project DynamicTrees-BYG by DynamicTreesTeam.
the class MegaRainbowEucalyptusLogic method populateDirectionProbabilityMap.
@Override
public int[] populateDirectionProbabilityMap(GrowthLogicKitConfiguration configuration, DirectionManipulationContext context) {
final GrowSignal signal = context.signal();
final int[] probMap = context.probMap();
float energy = configuration.getEnergy(context);
if ((signal.delta.getY() > energy * splitHeightFraction && signal.isInTrunk()) || signal.delta.getY() > energy * canopyHeightFraction)
probMap[Direction.UP.ordinal()] = 0;
return probMap;
}
use of com.ferreusveritas.dynamictrees.systems.GrowSignal in project DynamicTrees-BYG by DynamicTreesTeam.
the class PoplarLogic method selectNewDirection.
@Override
public Direction selectNewDirection(GrowthLogicKitConfiguration configuration, DirectionSelectionContext context) {
final GrowSignal signal = context.signal();
final Direction newDir = super.selectNewDirection(configuration, context);
if (signal.isInTrunk() && newDir != Direction.UP) {
// Turned out of trunk
if (signal.energy >= 4f) {
// don't grow branches more than 1 block out from the trunk
signal.energy = 1.8f;
} else if (signal.energy < 5) {
// don't grow branches, only leaves
signal.energy = 0.8f;
} else {
// don't grow branches or leaves
signal.energy = 0;
}
}
return newDir;
}
Aggregations