Search in sources :

Example 6 with GrowSignal

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

Example 7 with GrowSignal

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;
}
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 8 with GrowSignal

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

Example 9 with GrowSignal

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

Example 10 with GrowSignal

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;
}
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