use of com.ferreusveritas.dynamictrees.systems.GrowSignal in project DynamicTrees-BYG by DynamicTreesTeam.
the class TwistingTreeLogic method populateDirectionProbabilityMap.
@Override
public int[] populateDirectionProbabilityMap(GrowthLogicKitConfiguration configuration, DirectionManipulationContext context) {
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();
int count = 0;
for (Direction direction : Direction.values()) {
int rad = TreeHelper.getRadius(world, pos.offset(direction.getNormal()));
if (rad > 0)
count++;
probMap[direction.ordinal()] = rad + (world.getRandom().nextFloat() < configuration.get(CHANCE_TO_SPLIT) ? 1 : 0);
}
// If there are not enough valid branches, just allow any direction except up
if (count <= 1 || (configuration.get(SPLIT_ENDS) && signal.energy < 3)) {
probMap[0] = configuration.get(DOWN_PROBABILITY);
probMap[1] = context.species().getUpProbability();
probMap[2] = probMap[3] = probMap[4] = probMap[5] = 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 WillowLogic method populateDirectionProbabilityMap.
@Override
public int[] populateDirectionProbabilityMap(GrowthLogicKitConfiguration configuration, DirectionManipulationContext context) {
final GrowSignal signal = context.signal();
final int[] probMap = context.probMap();
final Direction originDir = signal.dir.getOpposite();
probMap[Direction.DOWN.ordinal()] = 2;
int lowestBranch = configuration.getLowestBranchHeight(context);
if (signal.delta.getY() >= lowestBranch + configuration.get(CANOPY_DEPTH))
probMap[Direction.UP.ordinal()] = 0;
probMap[originDir.ordinal()] = 0;
return probMap;
}
use of com.ferreusveritas.dynamictrees.systems.GrowSignal in project DynamicTrees-BYG by DynamicTreesTeam.
the class AraucariaLogic method selectNewDirection.
@Override
public Direction selectNewDirection(GrowthLogicKitConfiguration configuration, DirectionSelectionContext context) {
final GrowSignal signal = context.signal();
Direction newDir = super.selectNewDirection(configuration, context);
float energy = context.species().getEnergy(context.world(), signal.rootPos);
// if signal just turned out of trunk under the split height
if (signal.isInTrunk() && newDir != Direction.UP && signal.delta.getY() < energy * configuration.get(SPLIT_HEIGHT_FACTOR)) {
signal.energy = Math.min(2.5f, signal.energy);
}
return newDir;
}
use of com.ferreusveritas.dynamictrees.systems.GrowSignal in project DynamicTrees-BYG by DynamicTreesTeam.
the class AspenLogic method selectNewDirection.
@Override
public Direction selectNewDirection(GrowthLogicKitConfiguration configuration, DirectionSelectionContext context) {
final GrowSignal signal = context.signal();
Direction newDir = super.selectNewDirection(configuration, context);
// Turned out of trunk
if (signal.isInTrunk() && newDir != Direction.UP) {
// Reduce the energy so branches don't expand too much
// Branches can have 1-3 energy
float energyAddition = ((CoordUtils.coordHashCode(signal.rootPos.offset(signal.delta), 1) % 1000) / 1000.f) * 2.f;
signal.energy = 1 + energyAddition;
}
return newDir;
}
use of com.ferreusveritas.dynamictrees.systems.GrowSignal in project DynamicTrees-BYG by DynamicTreesTeam.
the class BaobabLogic method populateDirectionProbabilityMap.
@Override
public int[] populateDirectionProbabilityMap(GrowthLogicKitConfiguration configuration, DirectionManipulationContext context) {
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();
if (!signal.isInTrunk()) {
Direction relativePosToRoot = Direction.fromNormal(signal.delta.getX(), 0, signal.delta.getY());
if (relativePosToRoot != null) {
if (signal.energy > 2) {
// Flaring at end points, higher min energy means more flaring
probMap[Direction.DOWN.ordinal()] = 0;
for (Direction dir : CoordUtils.HORIZONTALS) {
probMap[dir.ordinal()] = 0;
}
}
boolean isBranchUp = world.getBlockState(pos.offset(relativePosToRoot.getNormal())).getBlock() instanceof BranchBlock;
boolean isBranchSide = world.getBlockState(pos.above()).getBlock() instanceof BranchBlock;
probMap[Direction.UP.ordinal()] = isBranchUp && !isBranchSide ? 0 : 2;
probMap[relativePosToRoot.ordinal()] = isBranchSide && !isBranchUp ? 0 : 3;
}
}
probMap[originDir.ordinal()] = 0;
return probMap;
}
Aggregations