Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Facade render rework #3695

Merged
Prev Previous commit
Next Next commit
First formatting pass.
  • Loading branch information
covers1624 committed Aug 27, 2018
commit a08bc7523d9ebaf867365d9c7f726c34079f777b
77 changes: 38 additions & 39 deletions src/main/java/appeng/block/networking/BlockCableBus.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,8 @@
import java.util.EnumSet;
import java.util.List;
import java.util.Random;

import javax.annotation.Nullable;

import appeng.api.parts.IFacadeContainer;
import appeng.api.parts.IFacadePart;
import appeng.api.util.AEPartLocation;
import appeng.integration.abstraction.IAEFacade;
import net.minecraft.block.Block;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.state.BlockStateContainer;
Expand Down Expand Up @@ -65,10 +60,12 @@
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;

import appeng.api.AEApi;
import appeng.api.parts.IFacadeContainer;
import appeng.api.parts.IFacadePart;
import appeng.api.parts.PartItemStack;
import appeng.api.parts.SelectedPart;
import appeng.api.util.AEColor;
import appeng.api.util.AEPartLocation;
import appeng.block.AEBaseTileBlock;
import appeng.client.UnlistedProperty;
import appeng.client.render.cablebus.CableBusBakedModel;
Expand All @@ -78,6 +75,7 @@
import appeng.core.sync.network.NetworkHandler;
import appeng.core.sync.packets.PacketClick;
import appeng.helpers.AEGlassMaterial;
import appeng.integration.abstraction.IAEFacade;
import appeng.parts.ICableBusContainer;
import appeng.parts.NullCableBusContainer;
import appeng.tile.AEBaseTile;
Expand Down Expand Up @@ -126,8 +124,8 @@ protected BlockStateContainer createBlockState()
public IBlockState getExtendedState( IBlockState state, IBlockAccess world, BlockPos pos )
{
CableBusRenderState renderState = this.cb( world, pos ).getRenderState();
renderState.setWorld(world);
renderState.setPos(pos);
renderState.setWorld( world );
renderState.setPos( pos );
return ( (IExtendedBlockState) state ).withProperty( RENDER_STATE_PROPERTY, renderState );
}

Expand Down Expand Up @@ -328,8 +326,7 @@ public boolean addDestroyEffects( final World world, final BlockPos pos, final P
double d0 = (double) pos.getX() + ( (double) j + 0.5D ) / 4.0D;
double d1 = (double) pos.getY() + ( (double) k + 0.5D ) / 4.0D;
double d2 = (double) pos.getZ() + ( (double) l + 0.5D ) / 4.0D;
ParticleDigging particle = new DestroyFX( world, d0, d1, d2, d0 - (double) pos.getX() - 0.5D, d1 - (double) pos
.getY() - 0.5D, d2 - (double) pos.getZ() - 0.5D, this.getDefaultState() ).setBlockPos( pos );
ParticleDigging particle = new DestroyFX( world, d0, d1, d2, d0 - (double) pos.getX() - 0.5D, d1 - (double) pos.getY() - 0.5D, d2 - (double) pos.getZ() - 0.5D, this.getDefaultState() ).setBlockPos( pos );
particle.setParticleTexture( texture );
effectRenderer.addEffect( particle );
}
Expand Down Expand Up @@ -362,19 +359,19 @@ private ICableBusContainer cb( final IBlockAccess w, final BlockPos pos )
return out == null ? NULL_CABLE_BUS : out;
}

@Nullable
private IFacadeContainer fc(final IBlockAccess w, final BlockPos pos)
{
final TileEntity te = w.getTileEntity( pos );
IFacadeContainer out = null;
@Nullable
private IFacadeContainer fc( final IBlockAccess w, final BlockPos pos )
{
final TileEntity te = w.getTileEntity( pos );
IFacadeContainer out = null;

if( te instanceof TileCableBus )
{
out = ( (TileCableBus) te ).getCableBus().getFacadeContainer();
}
if( te instanceof TileCableBus )
{
out = ( (TileCableBus) te ).getCableBus().getFacadeContainer();
}

return out;
}
return out;
}

@Override
public void onBlockClicked( World worldIn, BlockPos pos, EntityPlayer playerIn )
Expand All @@ -388,9 +385,7 @@ public void onBlockClicked( World worldIn, BlockPos pos, EntityPlayer playerIn )

if( this.cb( worldIn, pos ).clicked( playerIn, EnumHand.MAIN_HAND, hitVec ) )
{
NetworkHandler.instance()
.sendToServer(
new PacketClick( pos, rtr.sideHit, (float) hitVec.x, (float) hitVec.y, (float) hitVec.z, EnumHand.MAIN_HAND, true ) );
NetworkHandler.instance().sendToServer( new PacketClick( pos, rtr.sideHit, (float) hitVec.x, (float) hitVec.y, (float) hitVec.z, EnumHand.MAIN_HAND, true ) );
}
}
}
Expand Down Expand Up @@ -456,24 +451,28 @@ private static void setupTesr()
@Override
public boolean canRenderInLayer( IBlockState state, BlockRenderLayer layer )
{
return true;
return true;
}

@Override
public IBlockState getFacadeState(IBlockAccess world, BlockPos pos, EnumFacing side) {
if(side != null) {
IFacadeContainer container = fc(world, pos);
if(container != null) {
IFacadePart facade = container.getFacade(AEPartLocation.fromFacing(side));
if (facade != null) {
return facade.getBlockState();
}
}
}
return world.getBlockState(pos);
}
@Override
public IBlockState getFacadeState( IBlockAccess world, BlockPos pos, EnumFacing side )
{
if( side != null )
{
IFacadeContainer container = fc( world, pos );
if( container != null )
{
IFacadePart facade = container.getFacade( AEPartLocation.fromFacing( side ) );
if( facade != null )
{
return facade.getBlockState();
}
}
}
return world.getBlockState( pos );
}

public static Class<? extends AEBaseTile> getNoTesrTile()
public static Class<? extends AEBaseTile> getNoTesrTile()
{
return noTesrTile;
}
Expand Down
96 changes: 54 additions & 42 deletions src/main/java/appeng/client/render/FacadeBakedItemModel.java
Original file line number Diff line number Diff line change
@@ -1,55 +1,67 @@
package appeng.client.render;

import appeng.client.render.cablebus.FacadeBuilder;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.annotation.Nullable;

import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.renderer.block.model.IBakedModel;
import net.minecraft.client.renderer.block.model.ItemOverrideList;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;

import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import appeng.client.render.cablebus.FacadeBuilder;


/**
* Created by covers1624 on 14/08/18.
* This model used the provided FacadeBuilder to "slice" the item quads for the facade provided.
*
* @author covers1624
*/
public class FacadeBakedItemModel extends DelegateBakedModel {

private final ItemStack textureStack;
private final FacadeBuilder facadeBuilder;

protected FacadeBakedItemModel(IBakedModel base, ItemStack textureStack, FacadeBuilder facadeBuilder) {
super(base);
this.textureStack = textureStack;
this.facadeBuilder = facadeBuilder;
}

@Override
public List<BakedQuad> getQuads(@Nullable IBlockState state, @Nullable EnumFacing side, long rand) {
if(side != null) {
return Collections.emptyList();
}
List<BakedQuad> quads = new ArrayList<>();
quads.addAll(facadeBuilder.buildFacadeItemQuads(textureStack, EnumFacing.NORTH));
quads.addAll(getBaseModel().getQuads(state, side, rand));
return quads;
}

@Override
public boolean isGui3d() {
return false;
}

@Override
public boolean isBuiltInRenderer() {
return false;
}

@Override
public ItemOverrideList getOverrides() {
return ItemOverrideList.NONE;
}
public class FacadeBakedItemModel extends DelegateBakedModel
{

private final ItemStack textureStack;
private final FacadeBuilder facadeBuilder;

protected FacadeBakedItemModel( IBakedModel base, ItemStack textureStack, FacadeBuilder facadeBuilder )
{
super( base );
this.textureStack = textureStack;
this.facadeBuilder = facadeBuilder;
}

@Override
public List<BakedQuad> getQuads( @Nullable IBlockState state, @Nullable EnumFacing side, long rand )
{
if( side != null )
{
return Collections.emptyList();
}
List<BakedQuad> quads = new ArrayList<>();
quads.addAll( facadeBuilder.buildFacadeItemQuads( textureStack, EnumFacing.NORTH ) );
quads.addAll( getBaseModel().getQuads( state, side, rand ) );
return quads;
}

@Override
public boolean isGui3d()
{
return false;
}

@Override
public boolean isBuiltInRenderer()
{
return false;
}

@Override
public ItemOverrideList getOverrides()
{
return ItemOverrideList.NONE;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,8 @@

import java.util.Collections;
import java.util.List;

import javax.annotation.Nullable;

import appeng.client.render.cablebus.FacadeBuilder;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.renderer.block.model.IBakedModel;
Expand All @@ -35,6 +33,7 @@
import net.minecraft.util.EnumFacing;
import net.minecraft.world.World;

import appeng.client.render.cablebus.FacadeBuilder;
import appeng.items.parts.ItemFacade;


Expand All @@ -48,12 +47,12 @@ public class FacadeDispatcherBakedModel extends DelegateBakedModel
private final VertexFormat format;
private final FacadeBuilder facadeBuilder;

public FacadeDispatcherBakedModel(IBakedModel baseModel, VertexFormat format, FacadeBuilder facadeBuilder)
public FacadeDispatcherBakedModel( IBakedModel baseModel, VertexFormat format, FacadeBuilder facadeBuilder )
{
super( baseModel );
this.format = format;
this.facadeBuilder = facadeBuilder;
}
this.facadeBuilder = facadeBuilder;
}

// This is never used. See the item override list below.
@Override
Expand Down Expand Up @@ -91,7 +90,7 @@ public IBakedModel handleItemState( IBakedModel originalModel, ItemStack stack,

ItemStack textureItem = itemFacade.getTextureItem( stack );

return new FacadeBakedItemModel(getBaseModel(), textureItem, facadeBuilder);
return new FacadeBakedItemModel( getBaseModel(), textureItem, facadeBuilder );
}
};
}
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/appeng/client/render/FacadeItemModel.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
import java.util.Collections;
import java.util.function.Function;

import appeng.client.render.cablebus.FacadeBuilder;
import net.minecraft.client.renderer.block.model.IBakedModel;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.vertex.VertexFormat;
Expand All @@ -32,6 +31,7 @@
import net.minecraftforge.client.model.ModelLoaderRegistry;
import net.minecraftforge.common.model.IModelState;

import appeng.client.render.cablebus.FacadeBuilder;
import appeng.core.AppEng;


Expand Down Expand Up @@ -72,9 +72,9 @@ public Collection<ResourceLocation> getTextures()
public IBakedModel bake( IModelState state, VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter )
{
IBakedModel bakedBaseModel = this.getBaseModel().bake( state, format, bakedTextureGetter );
FacadeBuilder facadeBuilder = new FacadeBuilder();
FacadeBuilder facadeBuilder = new FacadeBuilder();

return new FacadeDispatcherBakedModel( bakedBaseModel, format, facadeBuilder);
return new FacadeDispatcherBakedModel( bakedBaseModel, format, facadeBuilder );
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import javax.annotation.Nullable;

import net.minecraft.block.state.IBlockState;
Expand Down Expand Up @@ -57,6 +56,7 @@ public class CableBusBakedModel implements IBakedModel
private static final Map<CableBusRenderState, List<BakedQuad>> CABLE_MODEL_CACHE = new HashMap<>();

private final CableBuilder cableBuilder;

private final FacadeBuilder facadeBuilder;

private final Map<ResourceLocation, IBakedModel> partModels;
Expand All @@ -65,11 +65,11 @@ public class CableBusBakedModel implements IBakedModel

private final TextureMap textureMap = Minecraft.getMinecraft().getTextureMapBlocks();

CableBusBakedModel(CableBuilder cableBuilder, FacadeBuilder facadeBuilder, Map<ResourceLocation, IBakedModel> partModels, TextureAtlasSprite particleTexture)
CableBusBakedModel( CableBuilder cableBuilder, FacadeBuilder facadeBuilder, Map<ResourceLocation, IBakedModel> partModels, TextureAtlasSprite particleTexture )
{
this.cableBuilder = cableBuilder;
this.facadeBuilder = facadeBuilder;
this.partModels = partModels;
this.facadeBuilder = facadeBuilder;
this.partModels = partModels;
this.particleTexture = particleTexture;
}

Expand All @@ -88,14 +88,13 @@ public List<BakedQuad> getQuads( @Nullable IBlockState state, @Nullable EnumFaci
List<BakedQuad> quads = new ArrayList<>();

// The core parts of the cable will only be rendered in the CUTOUT layer.
// Facades will add them selves to what ever the block would be rendered with,
// except when transparent facades are enabled, they are forced to TRANSPARENT.
// Facades will add them selves to what ever the block would be rendered with,
// except when transparent facades are enabled, they are forced to TRANSPARENT.
if( layer == BlockRenderLayer.CUTOUT )
{

// First, handle the cable at the center of the cable bus
final List<BakedQuad> cableModel = CABLE_MODEL_CACHE.computeIfAbsent( renderState, k ->
{
final List<BakedQuad> cableModel = CABLE_MODEL_CACHE.computeIfAbsent( renderState, k -> {
final List<BakedQuad> model = new ArrayList<>();
this.addCableQuads( renderState, model );
return model;
Expand Down Expand Up @@ -138,7 +137,7 @@ public List<BakedQuad> getQuads( @Nullable IBlockState state, @Nullable EnumFaci
}
}
}
facadeBuilder.buildFacadeQuads(layer, renderState, rand, quads, partModels::get);
facadeBuilder.buildFacadeQuads( layer, renderState, rand, quads, partModels::get );

return quads;
}
Expand Down
Loading