Search in sources :

Example 26 with GrowSignal

use of com.ferreusveritas.dynamictrees.systems.GrowSignal in project DynamicTrees-BYG by DynamicTreesTeam.

the class MegaPineLogic method populateDirectionProbabilityMap.

@Override
public int[] populateDirectionProbabilityMap(GrowthLogicKitConfiguration configuration, DirectionManipulationContext context) {
    final GrowSignal signal = context.signal();
    final int[] probMap = context.probMap();
    final BlockPos pos = context.pos();
    Direction originDir = signal.dir.getOpposite();
    int absDistance = Math.max(Math.abs(signal.delta.getX()), Math.abs(signal.delta.getZ()));
    if (signal.isInTrunk()) {
        probMap[0] = 0;
        probMap[1] = context.species().getUpProbability();
        probMap[2] = probMap[3] = probMap[4] = probMap[5] = signal.numSteps % 3 == 1 && context.radius() > 1 ? 1 : 0;
    } else {
        if (absDistance == 1) {
            int[] prob = new int[] { 0, 0, 0, 0, 0, 0 };
            prob[signal.dir.ordinal()] = 1;
            return prob;
        }
        boolean isBranchAbove = TreeHelper.isBranch(context.world().getBlockState(pos.above())) || Math.abs(CoordUtils.coordHashCode(pos, 2)) % 4 == 0;
        probMap[1] = 0;
        probMap[0] = !isBranchAbove ? 1 : 0;
        probMap[2] = probMap[3] = probMap[4] = probMap[5] = isBranchAbove ? 1 : 0;
    }
    // Disable the direction we came from
    probMap[originDir.ordinal()] = 0;
    return probMap;
}
Also used : GrowSignal(com.ferreusveritas.dynamictrees.systems.GrowSignal) BlockPos(net.minecraft.util.math.BlockPos) Direction(net.minecraft.util.Direction)

Example 27 with GrowSignal

use of com.ferreusveritas.dynamictrees.systems.GrowSignal in project DynamicTrees-BYG by DynamicTreesTeam.

the class PineLogic method populateDirectionProbabilityMap.

@Override
public int[] populateDirectionProbabilityMap(GrowthLogicKitConfiguration configuration, DirectionManipulationContext context) {
    final int[] probMap = context.probMap();
    final GrowSignal signal = context.signal();
    // Alter probability map for direction change
    // Down is always disallowed for spruce
    probMap[0] = 0;
    probMap[1] = signal.isInTrunk() ? context.species().getUpProbability() : 0;
    probMap[2] = probMap[3] = probMap[4] = // Only allow turns when we aren't in the trunk(or the branch is not a twig and step is odd)
    probMap[5] = !signal.isInTrunk() || (signal.isInTrunk() && context.radius() > 1) ? 2 : 0;
    if (signal.isInTrunk())
        for (Direction dir : CoordUtils.HORIZONTALS) if (TreeHelper.isBranch(context.world().getBlockState(context.pos().offset(dir.getNormal())))) {
            probMap[2] = probMap[3] = probMap[4] = probMap[5] = 0;
            probMap[dir.ordinal()] = 2;
            break;
        }
    // Disable the direction we came from
    probMap[signal.dir.getOpposite().ordinal()] = 0;
    // Favor current travel direction
    probMap[signal.dir.ordinal()] += signal.isInTrunk() ? 0 : signal.numTurns == 1 ? 2 : 1;
    return probMap;
}
Also used : GrowSignal(com.ferreusveritas.dynamictrees.systems.GrowSignal) Direction(net.minecraft.util.Direction)

Example 28 with GrowSignal

use of com.ferreusveritas.dynamictrees.systems.GrowSignal in project DynamicTrees-BYG by DynamicTreesTeam.

the class PoplarLogic method populateDirectionProbabilityMap.

@Override
public int[] populateDirectionProbabilityMap(GrowthLogicKitConfiguration configuration, DirectionManipulationContext context) {
    final int[] probMap = context.probMap();
    final GrowSignal signal = context.signal();
    Direction originDir = signal.dir.getOpposite();
    // Alter probability map for direction change
    probMap[0] = signal.isInTrunk() ? 0 : 1;
    probMap[1] = signal.isInTrunk() ? 4 : 1;
    probMap[2] = probMap[3] = probMap[4] = probMap[5] = (((signal.isInTrunk() && signal.numSteps % 2 == 0) || !signal.isInTrunk()) && signal.energy < 8) ? 2 : 0;
    // Disable the direction we came from
    probMap[originDir.ordinal()] = 0;
    // Favor current travel direction
    probMap[signal.dir.ordinal()] += (signal.isInTrunk() ? 0 : signal.numTurns == 1 ? 2 : 1);
    return probMap;
}
Also used : GrowSignal(com.ferreusveritas.dynamictrees.systems.GrowSignal) Direction(net.minecraft.util.Direction)

Example 29 with GrowSignal

use of com.ferreusveritas.dynamictrees.systems.GrowSignal in project DynamicTrees-BYG by DynamicTreesTeam.

the class RedwoodLogic 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 int radius = context.radius();
    final BlockPos pos = context.pos();
    Direction originDir = signal.dir.getOpposite();
    int treeHash = CoordUtils.coordHashCode(signal.rootPos, 2);
    // Alter probability map for direction change
    // Down is always disallowed for spruce
    probMap[0] = 0;
    probMap[1] = signal.isInTrunk() ? species.getUpProbability() : 0;
    boolean branchOut = (signal.numSteps + treeHash) % 5 == 0;
    // Only allow turns when we aren't in the trunk(or the branch is not a twig)
    int sideTurn = !signal.isInTrunk() || (signal.isInTrunk() && branchOut && radius > 1) ? 2 : 0;
    int canopyHeight = species.getLowestBranchHeight() + treeHash % 8 + configuration.get(HEIGHT_OF_CANOPY);
    if (signal.delta.getY() < canopyHeight) {
        probMap[2] = probMap[3] = probMap[4] = probMap[5] = 0;
        probMap[2 + getHashedVariation(world, pos, 4)] = sideTurn;
    } else {
        probMap[2] = probMap[3] = probMap[4] = // Only allow turns when we aren't in the trunk(or the branch is not a twig and step is odd)
        probMap[5] = !signal.isInTrunk() || (signal.isInTrunk() && signal.numSteps % 4 == 1 && radius > 1) ? 2 : 0;
    }
    // Disable the direction we came from
    probMap[originDir.ordinal()] = 0;
    // Favor current travel direction
    probMap[signal.dir.ordinal()] += signal.isInTrunk() ? 0 : signal.numTurns == 1 ? 2 : 1;
    if (!signal.isInTrunk() && signal.numTurns == 1 && signal.delta.distSqr(0, signal.delta.getY(), 0, false) <= 1.5) {
        // disable left and right if we JUST turned out of the trunk, this is to prevent branches from interfering with the other sides
        probMap[signal.dir.getClockWise().ordinal()] = probMap[signal.dir.getCounterClockWise().ordinal()] = 0;
    }
    return probMap;
}
Also used : GrowSignal(com.ferreusveritas.dynamictrees.systems.GrowSignal) BlockPos(net.minecraft.util.math.BlockPos) World(net.minecraft.world.World) Species(com.ferreusveritas.dynamictrees.trees.Species) Direction(net.minecraft.util.Direction)

Example 30 with GrowSignal

use of com.ferreusveritas.dynamictrees.systems.GrowSignal in project DynamicTrees-BYG by DynamicTreesTeam.

the class SmallRedwoodLogic method populateDirectionProbabilityMap.

// *-*-*-*-*-*-*-*- %2 < 1
// **--**--**--**-- %4 < 2
// ****----****---- %8 < 4
// ********-------- %16< 8
@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();
    int treeHash = CoordUtils.coordHashCode(signal.rootPos, 2);
    // Alter probability map for direction change
    // Down is always disallowed for spruce
    probMap[0] = 0;
    probMap[1] = signal.isInTrunk() ? species.getUpProbability() : 0;
    int canopyHeight = species.getLowestBranchHeight() + 4;
    if (signal.delta.getY() == species.getLowestBranchHeight()) {
        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 if (signal.delta.getY() < canopyHeight) {
        probMap[2] = probMap[3] = probMap[4] = probMap[5] = 0;
    } else {
        probMap[2] = probMap[3] = probMap[4] = // Only allow turns when we aren't in the trunk(or the branch is not a twig and step is odd)
        probMap[5] = !signal.isInTrunk() || (signal.isInTrunk() && signal.numSteps % 2 == 1 && context.radius() > 1) ? 2 : 0;
    }
    // Disable the direction we came from
    probMap[originDir.ordinal()] = 0;
    // Favor current travel direction
    probMap[signal.dir.ordinal()] += signal.isInTrunk() ? 0 : signal.numTurns == 1 ? 2 : 1;
    return probMap;
}
Also used : GrowSignal(com.ferreusveritas.dynamictrees.systems.GrowSignal) Species(com.ferreusveritas.dynamictrees.trees.Species) 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