Skip to content

Commit

Permalink
Don't use MCMP method for testing collisions, it creates wayyyyy to m…
Browse files Browse the repository at this point in the history
…any objects when used like this.
  • Loading branch information
AlgorithmX2 committed Jul 3, 2018
1 parent d91f5ce commit bbafcab
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 6 deletions.
@@ -1,9 +1,12 @@
package mod.chiselsandbits.chiseledblock.data;

import net.minecraft.util.math.AxisAlignedBB;

public class BitCollisionIterator extends BitIterator
{

public final static float One16thf = 1.0f / VoxelBlob.dim;
public final static AxisAlignedBB[] cachedBoxes = new AxisAlignedBB[VoxelBlob.full_size];

public float physicalX;
public float physicalY;
Expand Down Expand Up @@ -40,4 +43,14 @@ protected void zPlus()
physicalYp1 = physicalY + One16thf;
}

public AxisAlignedBB getBoundingBox()
{
AxisAlignedBB box = cachedBoxes[bit];

if ( box == null )
box = cachedBoxes[bit] = new AxisAlignedBB( this.physicalX, this.physicalY, this.physicalZ, this.physicalX + BitCollisionIterator.One16thf, this.physicalYp1, this.physicalZp1 );

return box;
}

}
Expand Up @@ -20,7 +20,7 @@ public class BitIterator
private int yOffset = 0;
private int combined = 0;

private int bit;
protected int bit;

// read-only outputs.
public int x = -1;
Expand Down
@@ -1,7 +1,9 @@
package mod.chiselsandbits.integration.mcmultipart;

import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.function.Predicate;
import java.util.stream.Collectors;

import org.apache.commons.lang3.tuple.Pair;

Expand All @@ -10,7 +12,7 @@
import mcmultipart.api.container.IPartInfo;
import mcmultipart.api.multipart.IMultipartTile;
import mcmultipart.api.multipart.MultipartHelper;
import mcmultipart.api.multipart.MultipartOcclusionHelper;
import mcmultipart.api.slot.IPartSlot;
import mcmultipart.multipart.PartInfo;
import mcmultipart.util.MCMPWorldWrapper;
import mod.chiselsandbits.chiseledblock.TileEntityBlockChiseled;
Expand Down Expand Up @@ -131,15 +133,25 @@ public void populateBlobWithUsedSpace(
if ( mc.isPresent() )
{
final IMultipartContainer mcc = mc.get();
Predicate<IPartSlot> ignoreMe = which -> MultiPartSlots.BITS == which;

List<AxisAlignedBB> partBoxes = mcc.getParts().values().stream().filter( i -> !ignoreMe.test( i.getSlot() ) ).map( i -> i.getPart().getOcclusionBoxes( i ) ).flatMap( List::stream ).collect( Collectors.toList() );

if ( partBoxes.isEmpty() )
return;

final BitCollisionIterator bci = new BitCollisionIterator();
while ( bci.hasNext() )
{
final AxisAlignedBB aabb = new AxisAlignedBB( bci.physicalX, bci.physicalY, bci.physicalZ, bci.physicalX + BitCollisionIterator.One16thf, bci.physicalYp1, bci.physicalZp1 );
AxisAlignedBB bitBox = bci.getBoundingBox();

if ( MultipartOcclusionHelper.testContainerBoxIntersection( mcc, Collections.singleton( aabb ), which -> MultiPartSlots.BITS == which ) )
for ( AxisAlignedBB b : partBoxes )
{
bci.setNext( vb, 1 );
if ( b.intersectsWith( bitBox ) )
{
bci.setNext( vb, 1 );
break;
}
}
}
}
Expand Down

0 comments on commit bbafcab

Please sign in to comment.