Change composite models to fetch quads from submodels using full context (#4809)

This commit is contained in:
Ben Staddon authored and LexManos committed 2018-05-16 23:06:50 -07:00
1 parent fd201fb690
commit e742a3f598
2 files changed
+17 -57

No files matched your search

@@ -131,48 +131,30 @@ public final class MultiLayerModel implements IModel
private final ImmutableMap<TransformType, TRSRTransformation> cameraTransforms;
private final IBakedModel base;
private final IBakedModel missing;
private final ImmutableMap<Optional<EnumFacing>, ImmutableList<BakedQuad>> quads;
public MultiLayerBakedModel(ImmutableMap<Optional<BlockRenderLayer>, IBakedModel> models, IBakedModel missing, ImmutableMap<TransformType, TRSRTransformation> cameraTransforms)
{
this.models = models;
this.cameraTransforms = cameraTransforms;
this.missing = missing;
base = models.getOrDefault(Optional.empty(), missing);
ImmutableMap.Builder<Optional<EnumFacing>, ImmutableList<BakedQuad>> quadBuilder = ImmutableMap.builder();
quadBuilder.put(Optional.empty(), buildQuads(models, Optional.empty()));
for(EnumFacing side: EnumFacing.values())
{
quadBuilder.put(Optional.of(side), buildQuads(models, Optional.of(side)));
}
quads = quadBuilder.build();
}
private static ImmutableList<BakedQuad> buildQuads(ImmutableMap<Optional<BlockRenderLayer>, IBakedModel> models, Optional<EnumFacing> side)
{
ImmutableList.Builder<BakedQuad> builder = ImmutableList.builder();
for(IBakedModel model : models.values())
{
builder.addAll(model.getQuads(null, side.orElse(null), 0));
}
return builder.build();
this.base = models.getOrDefault(Optional.empty(), missing);
}
@Override
public List<BakedQuad> getQuads(@Nullable IBlockState state, @Nullable EnumFacing side, long rand)
{
IBakedModel model;
BlockRenderLayer layer = MinecraftForgeClient.getRenderLayer();
if(layer == null)
if (layer == null)
{
return quads.get(Optional.ofNullable(side));
}
else
{
model = models.getOrDefault(Optional.of(layer), missing);
ImmutableList.Builder<BakedQuad> builder = ImmutableList.builder();
for (IBakedModel model : models.values())
{
builder.addAll(model.getQuads(state, side, rand));
}
return builder.build();
}
// assumes that child model will handle this state properly. FIXME?
return model.getQuads(state, side, rand);
return models.getOrDefault(Optional.of(layer), missing).getQuads(state, side, rand);
}
@Override
@@ -50,7 +50,6 @@ import net.minecraftforge.fml.common.FMLLog;
import org.apache.commons.lang3.tuple.Pair;
import java.util.function.Function;
import java.util.Optional;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
@@ -68,7 +67,6 @@ public final class MultiModel implements IModel
private final ImmutableMap<String, IBakedModel> parts;
private final IBakedModel internalBase;
private ImmutableMap<Optional<EnumFacing>, ImmutableList<BakedQuad>> quads;
private final ImmutableMap<TransformType, Pair<Baked, TRSRTransformation>> transforms;
private final ItemOverrideList overrides = new ItemOverrideList(Lists.newArrayList())
{
@@ -187,36 +185,16 @@ public final class MultiModel implements IModel
@Override
public List<BakedQuad> getQuads(@Nullable IBlockState state, @Nullable EnumFacing side, long rand)
{
if(quads == null)
ImmutableList.Builder<BakedQuad> quads = ImmutableList.builder();
if (base != null)
{
ImmutableMap.Builder<Optional<EnumFacing>, ImmutableList<BakedQuad>> builder = ImmutableMap.builder();
for (EnumFacing face : EnumFacing.values())
{
ImmutableList.Builder<BakedQuad> quads = ImmutableList.builder();
if (base != null)
{
quads.addAll(base.getQuads(state, face, 0));
}
for (IBakedModel bakedPart : parts.values())
{
quads.addAll(bakedPart.getQuads(state, face, 0));
}
builder.put(Optional.of(face), quads.build());
}
ImmutableList.Builder<BakedQuad> quads = ImmutableList.builder();
if (base != null)
{
quads.addAll(base.getQuads(state, null, 0));
}
for (IBakedModel bakedPart : parts.values())
{
quads.addAll(bakedPart.getQuads(state, null, 0));
}
builder.put(Optional.empty(), quads.build());
this.quads = builder.build();
quads.addAll(base.getQuads(state, side, rand));
}
return quads.get(Optional.ofNullable(side));
for (IBakedModel bakedPart : parts.values())
{
quads.addAll(bakedPart.getQuads(state, side, rand));
}
return quads.build();
}
@Override