Search in sources :

Example 1 with GrowSignal

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

Example 2 with GrowSignal

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

Example 3 with GrowSignal

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

Example 4 with GrowSignal

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

Example 5 with GrowSignal

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