Search in sources :

Example 21 with GrowSignal

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;
}
Also used : GrowSignal(com.ferreusveritas.dynamictrees.systems.GrowSignal)

Example 22 with GrowSignal

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;
}
Also used : GrowSignal(com.ferreusveritas.dynamictrees.systems.GrowSignal) Direction(net.minecraft.util.Direction)

Example 23 with GrowSignal

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;
}
Also used : GrowSignal(com.ferreusveritas.dynamictrees.systems.GrowSignal) Species(com.ferreusveritas.dynamictrees.trees.Species) Direction(net.minecraft.util.Direction)

Example 24 with GrowSignal

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);
}
Also used : GrowSignal(com.ferreusveritas.dynamictrees.systems.GrowSignal) BlockPos(net.minecraft.util.math.BlockPos) World(net.minecraft.world.World)

Example 25 with GrowSignal

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;
}
Also used : GrowSignal(com.ferreusveritas.dynamictrees.systems.GrowSignal) Direction(net.minecraft.util.Direction)

Aggregations

GrowSignal (com.ferreusveritas.dynamictrees.systems.GrowSignal)31 Direction (net.minecraft.util.Direction)26 Species (com.ferreusveritas.dynamictrees.trees.Species)9 BlockPos (net.minecraft.util.math.BlockPos)9 World (net.minecraft.world.World)8 MapSignal (com.ferreusveritas.dynamictrees.api.network.MapSignal)1 BasicBranchBlock (com.ferreusveritas.dynamictrees.blocks.branches.BasicBranchBlock)1 BranchBlock (com.ferreusveritas.dynamictrees.blocks.branches.BranchBlock)1 DynamicLeavesBlock (com.ferreusveritas.dynamictrees.blocks.leaves.DynamicLeavesBlock)1 NodeShrinker (com.ferreusveritas.dynamictrees.systems.nodemappers.NodeShrinker)1