Fixed cable connections rendering, other fixes

- Fixed cable connections rendering to parts and other tiles.
- Fixed facade & anchors rendering.
- Many other parts related bug fixes.
This commit is contained in:
elix-x
2016-08-20 17:15:02 +02:00
parent d109878821
commit 3b7d1685c5
28 changed files with 166 additions and 200 deletions
+1 -1
View File
@@ -369,7 +369,7 @@ public abstract class AEBasePart implements IPart, IGridProxyable, IActionHost,
}
@Override
public int getCableConnectionLength()
public float getCableConnectionLength( AECableType cable )
{
return 3;
}
@@ -80,7 +80,7 @@ public class CableBusContainer extends CableBusStorage implements AEMultiTile, I
private final EnumSet<LayerFlags> myLayerFlags = EnumSet.noneOf( LayerFlags.class );
private YesNo hasRedstone = YesNo.UNDECIDED;
private IPartHost tcb;
//TODO 1.10.2-R - does somebody seriously want to make parts TESR??? Hope not.
// TODO 1.10.2-R - does somebody seriously want to make parts TESR??? Hope not.
private boolean requiresDynamicRender = false;
private boolean inWorld = false;
@@ -179,7 +179,7 @@ public class CableBusContainer extends CableBusStorage implements AEMultiTile, I
}
@Override
public AEPartLocation addPart( ItemStack is, final AEPartLocation side, final @Nullable EntityPlayer player, final @Nullable EnumHand hand )
public AEPartLocation addPart( ItemStack is, final AEPartLocation side, final @Nullable EntityPlayer player, final @Nullable EnumHand hand )
{
if( this.canAddPart( is, side ) )
{
@@ -710,6 +710,12 @@ public class CableBusContainer extends CableBusStorage implements AEMultiTile, I
return AECableType.NONE;
}
@Override
public float getCableConnectionLength( AECableType cable )
{
return getPart( AEPartLocation.INTERNAL ) instanceof IPartCable ? getPart( AEPartLocation.INTERNAL ).getCableConnectionLength( cable ) : -1;
}
@Override
public void securityBreak()
{
@@ -53,6 +53,7 @@ import appeng.api.parts.IPart;
import appeng.api.parts.IPartCollisionHelper;
import appeng.api.parts.IPartHost;
import appeng.api.storage.data.IAEItemStack;
import appeng.api.util.AECableType;
import appeng.api.util.AEPartLocation;
import appeng.core.settings.TickRates;
import appeng.core.sync.packets.PacketTransitionEffect;
@@ -208,7 +209,7 @@ public class PartAnnihilationPlane extends PartBasicState implements IGridTickab
}
@Override
public int getCableConnectionLength()
public float getCableConnectionLength( AECableType cable )
{
return 1;
}
@@ -49,6 +49,7 @@ import appeng.api.parts.IPartCollisionHelper;
import appeng.api.storage.IMEInventory;
import appeng.api.storage.IMEMonitor;
import appeng.api.storage.data.IAEItemStack;
import appeng.api.util.AECableType;
import appeng.core.AELog;
import appeng.core.settings.TickRates;
import appeng.core.sync.GuiBridge;
@@ -184,7 +185,7 @@ public class PartExportBus extends PartSharedItemBus implements ICraftingRequest
}
@Override
public int getCableConnectionLength()
public float getCableConnectionLength( AECableType cable )
{
return 5;
}
@@ -67,6 +67,7 @@ import appeng.api.storage.IMEInventoryHandler;
import appeng.api.storage.StorageChannel;
import appeng.api.storage.data.IAEItemStack;
import appeng.api.storage.data.IItemList;
import appeng.api.util.AECableType;
import appeng.api.util.AEPartLocation;
import appeng.api.util.IConfigManager;
import appeng.core.AEConfig;
@@ -274,7 +275,7 @@ public class PartFormationPlane extends PartUpgradeable implements ICellContaine
}
@Override
public int getCableConnectionLength()
public float getCableConnectionLength( AECableType cable )
{
return 1;
}
@@ -42,6 +42,7 @@ import appeng.api.parts.IPartCollisionHelper;
import appeng.api.storage.IMEInventory;
import appeng.api.storage.IMEMonitor;
import appeng.api.storage.data.IAEItemStack;
import appeng.api.util.AECableType;
import appeng.core.settings.TickRates;
import appeng.core.sync.GuiBridge;
import appeng.helpers.Reflected;
@@ -95,7 +96,7 @@ public class PartImportBus extends PartSharedItemBus implements IInventoryDestin
}
@Override
public int getCableConnectionLength()
public float getCableConnectionLength( AECableType cable )
{
return 5;
}
@@ -425,7 +425,7 @@ public class PartLevelEmitter extends PartUpgradeable implements IEnergyWatcherH
}
@Override
public int getCableConnectionLength()
public float getCableConnectionLength( AECableType cable )
{
return 16;
}
@@ -20,6 +20,7 @@ package appeng.parts.misc;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
@@ -35,6 +36,7 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.World;
@@ -48,7 +50,10 @@ import appeng.api.parts.IPart;
import appeng.api.parts.IPartCollisionHelper;
import appeng.api.parts.IPartHost;
import appeng.api.parts.PartItemStack;
import appeng.api.util.AECableType;
import appeng.api.util.AEPartLocation;
import appeng.client.render.model.ModelsCache;
import appeng.core.AppEng;
public class PartCableAnchor implements IPart
@@ -210,7 +215,7 @@ public class PartCableAnchor implements IPart
}
@Override
public int getCableConnectionLength()
public float getCableConnectionLength( AECableType cable )
{
return 0;
}
@@ -237,7 +242,7 @@ public class PartCableAnchor implements IPart
@SideOnly( Side.CLIENT )
public List<BakedQuad> getOrBakeQuads( BakingPipeline<BakedQuad, BakedQuad> rotatingPipeline, IBlockState state, EnumFacing side, long rand )
{
return null;
return rotatingPipeline.pipe( ModelsCache.INSTANCE.getOrLoadBakedModel( new ResourceLocation( AppEng.MOD_ID, "part/cable_anchor" ) ).getQuads( state, side, rand ), null, state, mySide.getFacing(), rand );
}
}
@@ -55,6 +55,7 @@ import appeng.api.storage.IMEMonitor;
import appeng.api.storage.IStorageMonitorable;
import appeng.api.storage.data.IAEFluidStack;
import appeng.api.storage.data.IAEItemStack;
import appeng.api.util.AECableType;
import appeng.api.util.IConfigManager;
import appeng.core.sync.GuiBridge;
import appeng.helpers.DualityInterface;
@@ -138,7 +139,7 @@ public class PartInterface extends PartBasicState implements IGridTickable, ISto
}
@Override
public int getCableConnectionLength()
public float getCableConnectionLength( AECableType cable )
{
return 4;
}
@@ -61,6 +61,7 @@ import appeng.api.storage.IMEMonitorHandlerReceiver;
import appeng.api.storage.StorageChannel;
import appeng.api.storage.data.IAEItemStack;
import appeng.api.storage.data.IItemList;
import appeng.api.util.AECableType;
import appeng.api.util.AEPartLocation;
import appeng.api.util.IConfigManager;
import appeng.core.settings.TickRates;
@@ -265,7 +266,7 @@ public class PartStorageBus extends PartUpgradeable implements IGridTickable, IC
}
@Override
public int getCableConnectionLength()
public float getCableConnectionLength( AECableType cable )
{
return 4;
}
@@ -159,7 +159,7 @@ public class PartToggleBus extends PartBasicState
}
@Override
public int getCableConnectionLength()
public float getCableConnectionLength( AECableType cable )
{
return 5;
}
@@ -36,6 +36,7 @@ import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.common.model.TRSRTransformation;
import net.minecraftforge.fml.relauncher.Side;
@@ -51,6 +52,7 @@ import appeng.api.networking.IGridConnection;
import appeng.api.networking.IGridHost;
import appeng.api.networking.IGridNode;
import appeng.api.parts.BusSupport;
import appeng.api.parts.ICustomCableConnection;
import appeng.api.parts.IPart;
import appeng.api.parts.IPartCollisionHelper;
import appeng.api.parts.IPartHost;
@@ -104,6 +106,23 @@ public class PartCable extends AEBasePart implements IPartCable
return AECableType.GLASS;
}
@Override
public float getCableConnectionLength( AECableType cable )
{
if( cable == this.getCableConnectionType() )
{
return 4;
}
else if( cable.ordinal() >= this.getCableConnectionType().ordinal() )
{
return -1;
}
else
{
return 8;
}
}
@Override
public boolean changeColor( final AEColor newColor, final EntityPlayer who )
{
@@ -199,7 +218,7 @@ public class PartCable extends AEBasePart implements IPartCable
final IPart p = ph.getPart( dir );
if( p instanceof IGridHost )
{
final double dist = p.getCableConnectionLength();
final double dist = p.getCableConnectionLength( this.getCableConnectionType() );
if( dist > 8 )
{
@@ -396,16 +415,24 @@ public class PartCable extends AEBasePart implements IPartCable
elements.addAll( ModelsCache.INSTANCE.getOrLoadModel( withProperties( getCableConnectionType().getModel(), propertiesForModel( null ) ), getCableConnectionType().getModel(), propertyTextureGetter( propertiesForModel( null ) ) ).getQuads( state, side, rand ) );
for( EnumFacing facing : EnumFacing.values() )
{
if( isConnected( facing ) )
if( isConnected( facing ) || getHost().getPart( facing ) != null )
{
elements.addAll( rotatingPipeline.pipe( ModelsCache.INSTANCE.getOrLoadModel( withProperties( getCableConnectionType().getConnectionModel(), propertiesForModel( facing ) ), getCableConnectionType().getConnectionModel(), propertyTextureGetter( propertiesForModel( facing ) ) ).getQuads( state, side, rand ), null, state, facing, rand ) );
}
else if( getHost().getPart( facing ) != null )
{
IPart part = getHost().getPart( facing );
if( part.getCableConnectionLength() != -1 )
float f = 4;
if( getHost().getPart( facing ) != null )
{
elements.addAll( new BakingPipeline( TypeTransformer.quads2vecs, new MatVecApplicator( TRSRTransformation.toVecmath( new Matrix4f().scale( new Vector3f( 1, 1, part.getCableConnectionLength() / 4f ) ) ) ), new FacingQuadRotator( facing ), TypeTransformer.vecs2quads ).pipe( ModelsCache.INSTANCE.getOrLoadModel( withProperties( getCableConnectionType().getConnectionModel(), propertiesForModel( facing ) ), getCableConnectionType().getConnectionModel(), propertyTextureGetter( propertiesForModel( facing ) ) ).getQuads( state, side, rand ), null, state, facing, rand ) );
f = getHost().getPart( facing ).getCableConnectionLength( this.getCableConnectionType() );
}
else
{
TileEntity to = getHost().getTile().getWorld().getTileEntity( getHost().getTile().getPos().offset( facing ) );
if( to instanceof ICustomCableConnection )
{
f = ( (ICustomCableConnection) to ).getCableConnectionLength( this.getCableConnectionType() );
}
}
if( f != -1 )
{
elements.addAll( new BakingPipeline( TypeTransformer.quads2vecs, new MatVecApplicator( TRSRTransformation.toVecmath( new Matrix4f().scale( new Vector3f( 1, 1, f / 4f ) ) ) ), new FacingQuadRotator( facing ), TypeTransformer.vecs2quads ).pipe( ModelsCache.INSTANCE.getOrLoadModel( withProperties( getCableConnectionType().getConnectionModel(), propertiesForModel( facing ) ), getCableConnectionType().getConnectionModel(), propertyTextureGetter( propertiesForModel( facing ) ) ).getQuads( state, side, rand ), null, state, facing, rand ) );
}
}
}
@@ -422,12 +449,18 @@ public class PartCable extends AEBasePart implements IPartCable
}
if( !b && sides.size() == 2 )
{
return ( sides.contains( AEPartLocation.EAST ) && sides.contains( AEPartLocation.WEST ) ) || ( sides.contains( AEPartLocation.NORTH ) && sides.contains( AEPartLocation.SOUTH ) ) || ( sides.contains( AEPartLocation.UP ) && sides.contains( AEPartLocation.DOWN ) );
}
else
{
return false;
AEPartLocation[] sa = sides.toArray( new AEPartLocation[0] );
if( sa[0] == sa[1].getOpposite() )
{
for( AEPartLocation side : sides )
{
TileEntity to = host.getTile().getWorld().getTileEntity( host.getTile().getPos().offset( side.getFacing() ) );
b |= to instanceof IPartHost && ( (IPartHost) to ).getPart( AEPartLocation.INTERNAL ) instanceof IPartCable && ( (IPartCable) ( (IPartHost) to ).getPart( AEPartLocation.INTERNAL ) ).getCableConnectionType() == getCableConnectionType();
}
return !b;
}
}
return false;
}
int getChannelsOnSide( final int i )
@@ -110,7 +110,7 @@ public class PartQuartzFiber extends AEBasePart implements IEnergyGridProvider
}
@Override
public int getCableConnectionLength()
public float getCableConnectionLength( AECableType cable )
{
return 16;
}
@@ -45,6 +45,7 @@ import appeng.api.parts.IPart;
import appeng.api.parts.IPartCollisionHelper;
import appeng.api.parts.IPartItem;
import appeng.api.parts.PartItemStack;
import appeng.api.util.AECableType;
import appeng.api.util.AEPartLocation;
import appeng.core.AEConfig;
import appeng.me.GridAccessException;
@@ -149,7 +150,7 @@ public abstract class PartP2PTunnel<T extends PartP2PTunnel> extends PartBasicSt
}
@Override
public int getCableConnectionLength()
public float getCableConnectionLength( AECableType cable )
{
return 1;
}