Search in sources :

Example 11 with GrowSignal

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

the class RedwoodLogic method selectNewDirection.

@Override
public Direction selectNewDirection(GrowthLogicKitConfiguration configuration, DirectionSelectionContext context) {
    final Species species = context.species();
    final GrowSignal signal = context.signal();
    Direction newDir = super.selectNewDirection(configuration, context);
    int signalY = signal.delta.getY();
    int treeHash = CoordUtils.coordHashCode(signal.rootPos, 2);
    int canopyHeight = species.getLowestBranchHeight() + treeHash % 8 + configuration.get(HEIGHT_OF_CANOPY);
    float bottomSlope = 1 + (treeHash % 10) / (float) 0xFFF;
    if (signal.isInTrunk() && newDir != Direction.UP) {
        // Turned out of trunk
        if (signalY < canopyHeight)
            signal.energy = 3;
        else {
            signal.energy += 2;
            signal.energy /= 3.2f;
            float maxEnergy = Math.max(2, Math.min(8.2f, (signalY - canopyHeight) * bottomSlope));
            signal.energy = Math.min(maxEnergy, signal.energy);
        }
    }
    return newDir;
}
Also used : GrowSignal(com.ferreusveritas.dynamictrees.systems.GrowSignal) Species(com.ferreusveritas.dynamictrees.trees.Species) Direction(net.minecraft.util.Direction)

Example 12 with GrowSignal

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

the class SmallRedwoodLogic 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 && signal.delta.getY() < configuration.getLowestBranchHeight(context) + 3) {
        signal.energy = 2;
    }
    return newDir;
}
Also used : GrowSignal(com.ferreusveritas.dynamictrees.systems.GrowSignal) Direction(net.minecraft.util.Direction)

Example 13 with GrowSignal

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

the class SythianLogic method populateDirectionProbabilityMap.

@Override
public int[] populateDirectionProbabilityMap(GrowthLogicKitConfiguration configuration, DirectionManipulationContext context) {
    final GrowSignal signal = context.signal();
    final int[] probMap = context.probMap();
    Direction originDir = signal.dir.getOpposite();
    // Alter probability map for direction change
    // Down is always disallowed
    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() && signal.numSteps % 2 == 0) ? 1 + (signal.isInTrunk() ? (int) (signal.delta.getY() / (configuration.getEnergy(context) / 4)) : 0) : 0;
    // 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 14 with GrowSignal

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

the class SythianLogic method selectNewDirection.

@Override
public Direction selectNewDirection(GrowthLogicKitConfiguration configuration, DirectionSelectionContext context) {
    final GrowSignal signal = context.signal();
    int threshold = configuration.get(THICKEN_THRESHOLD);
    Direction newDir = super.selectNewDirection(configuration, context);
    if (signal.isInTrunk() && newDir != Direction.UP) {
        // Turned out of trunk
        int y = signal.delta.getY();
        boolean extra = y > threshold && y < configuration.getEnergy(context) - threshold;
        signal.energy = 1.5f + (extra ? 1 : 0);
        signal.energy = 0.5f;
    }
    return newDir;
}
Also used : GrowSignal(com.ferreusveritas.dynamictrees.systems.GrowSignal) Direction(net.minecraft.util.Direction)

Example 15 with GrowSignal

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

the class TaperedWitheredOakLogic 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 jungle
    probMap[0] = 0;
    probMap[1] = signal.isInTrunk() ? species.getUpProbability() : 1;
    probMap[2] = probMap[3] = probMap[4] = probMap[5] = 0;
    int lowestBranch = species.getLowestBranchHeight();
    int height = lowestBranch * 2 + ((treeHash % 7829) % 3);
    if (signal.delta.getY() >= height) {
        probMap[2] = probMap[3] = probMap[4] = // Only allow turns when we aren't in the trunk(or the branch is not a twig)
        probMap[5] = !signal.isInTrunk() || 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;
    } else if (signal.delta.getY() == lowestBranch) {
        if (!signal.isInTrunk()) {
            probMap[1] = (signal.energy >= 2) ? 0 : 1;
            probMap[2] = probMap[3] = probMap[4] = probMap[5] = (signal.energy >= 3) ? 0 : 1;
            probMap[originDir.ordinal()] = 1;
        } else {
            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;
        }
    }
    // 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) BlockPos(net.minecraft.util.math.BlockPos) World(net.minecraft.world.World) 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