Move PortableGridBakedModel away from TRSRBakedModel, remove TRSRBakedModel completely

This commit is contained in:
raoulvdberge
2020-07-11 17:30:12 +02:00
parent 4056d2651c
commit deca667a1c
3 changed files with 45 additions and 185 deletions

View File

@@ -37,29 +37,22 @@ public class PortableGridBakedModel extends DelegateBakedModel {
@Override @Override
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public List<BakedQuad> load(@Nonnull CacheKey key) { public List<BakedQuad> load(@Nonnull CacheKey key) {
List<BakedQuad> quads = new ArrayList<>(); Direction direction = key.state.get(RSBlocks.PORTABLE_GRID.getDirection().getProperty());
boolean active = key.state.get(PortableGridBlock.ACTIVE);
PortableGridDiskState diskState = key.state.get(PortableGridBlock.DISK_STATE);
if (key.active) { List<BakedQuad> quads = new ArrayList<>(QuadTransformer.getTransformedQuads(
quads.addAll(new TRSRBakedModel(baseConnected, key.direction).getQuads(key.state, null, key.random)); active ? baseConnected : baseDisconnected,
} else { direction,
quads.addAll(new TRSRBakedModel(baseDisconnected, key.direction).getQuads(key.state, null, key.random)); null,
} key.state,
key.random,
key.side
));
switch (key.diskState) { IBakedModel diskModel = getDiskModel(diskState);
case NORMAL: if (diskModel != null) {
quads.addAll(new TRSRBakedModel(disk, key.direction).getQuads(key.state, null, key.random)); quads.addAll(QuadTransformer.getTransformedQuads(diskModel, direction, null, key.state, key.random, key.side));
break;
case NEAR_CAPACITY:
quads.addAll(new TRSRBakedModel(diskNearCapacity, key.direction).getQuads(key.state, null, key.random));
break;
case FULL:
quads.addAll(new TRSRBakedModel(diskFull, key.direction).getQuads(key.state, null, key.random));
break;
case DISCONNECTED:
quads.addAll(new TRSRBakedModel(diskDisconnected, key.direction).getQuads(key.state, null, key.random));
break;
case NONE:
break;
} }
return quads; return quads;
@@ -82,6 +75,24 @@ public class PortableGridBakedModel extends DelegateBakedModel {
this.diskDisconnected = diskDisconnected; this.diskDisconnected = diskDisconnected;
} }
@Nullable
private IBakedModel getDiskModel(PortableGridDiskState state) {
switch (state) {
case NORMAL:
return disk;
case NEAR_CAPACITY:
return diskNearCapacity;
case FULL:
return diskFull;
case DISCONNECTED:
return diskDisconnected;
case NONE:
return null;
default:
return null;
}
}
@Override @Override
public ItemOverrideList getOverrides() { public ItemOverrideList getOverrides() {
return itemOverrideList; return itemOverrideList;
@@ -90,11 +101,7 @@ public class PortableGridBakedModel extends DelegateBakedModel {
@Override @Override
public List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction side, Random rand) { public List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction side, Random rand) {
if (state != null) { if (state != null) {
Direction direction = state.get(RSBlocks.PORTABLE_GRID.getDirection().getProperty()); return cache.getUnchecked(new CacheKey(state, side, rand));
boolean active = state.get(PortableGridBlock.ACTIVE);
PortableGridDiskState diskState = state.get(PortableGridBlock.DISK_STATE);
return cache.getUnchecked(new CacheKey(direction, diskState, active, rand, state));
} }
return super.getQuads(state, side, rand); return super.getQuads(state, side, rand);
@@ -106,46 +113,23 @@ public class PortableGridBakedModel extends DelegateBakedModel {
public IBakedModel getModelWithOverrides(IBakedModel model, ItemStack stack, @Nullable World worldIn, @Nullable LivingEntity entityIn) { public IBakedModel getModelWithOverrides(IBakedModel model, ItemStack stack, @Nullable World worldIn, @Nullable LivingEntity entityIn) {
PortableGrid portableGrid = new PortableGrid(null, stack, -1); PortableGrid portableGrid = new PortableGrid(null, stack, -1);
IBakedModel myDisk = null;
switch (portableGrid.getDiskState()) {
case NORMAL:
myDisk = disk;
break;
case NEAR_CAPACITY:
myDisk = diskNearCapacity;
break;
case FULL:
myDisk = diskFull;
break;
case DISCONNECTED:
myDisk = diskDisconnected;
break;
case NONE:
break;
}
if (portableGrid.isGridActive()) { if (portableGrid.isGridActive()) {
return new PortableGridItemBakedModel(baseConnected, myDisk); return new PortableGridItemBakedModel(baseConnected, getDiskModel(portableGrid.getDiskState()));
} else { } else {
return new PortableGridItemBakedModel(baseDisconnected, myDisk); return new PortableGridItemBakedModel(baseDisconnected, getDiskModel(portableGrid.getDiskState()));
} }
} }
} }
private static class CacheKey { private static class CacheKey {
private final Direction direction;
private final PortableGridDiskState diskState;
private final boolean active;
private final Random random;
private final BlockState state; private final BlockState state;
private final Direction side;
private final Random random;
public CacheKey(Direction direction, PortableGridDiskState diskState, boolean active, Random random, BlockState state) { public CacheKey(BlockState state, Direction side, Random random) {
this.direction = direction;
this.diskState = diskState;
this.active = active;
this.random = random;
this.state = state; this.state = state;
this.side = side;
this.random = random;
} }
@Override @Override
@@ -153,14 +137,14 @@ public class PortableGridBakedModel extends DelegateBakedModel {
if (this == o) return true; if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false; if (o == null || getClass() != o.getClass()) return false;
CacheKey cacheKey = (CacheKey) o; CacheKey cacheKey = (CacheKey) o;
return active == cacheKey.active && return state.equals(cacheKey.state) &&
direction == cacheKey.direction && side == cacheKey.side &&
diskState == cacheKey.diskState; random.equals(cacheKey.random);
} }
@Override @Override
public int hashCode() { public int hashCode() {
return Objects.hash(direction, diskState, active); return Objects.hash(state, side, random);
} }
} }
} }

View File

@@ -13,14 +13,10 @@ import net.minecraftforge.client.model.pipeline.TRSRTransformer;
import net.minecraftforge.common.model.TransformationHelper; import net.minecraftforge.common.model.TransformationHelper;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.EnumMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Random; import java.util.Random;
public class QuadTransformer { public final class QuadTransformer {
private static final Map<Direction, TransformationMatrix> SIDE_TRANSFORMS = new EnumMap<>(Direction.class);
public static List<BakedQuad> getTransformedQuads(IBakedModel model, Direction facing, @Nullable Vector3f translation, BlockState state, Random rand, Direction side) { public static List<BakedQuad> getTransformedQuads(IBakedModel model, Direction facing, @Nullable Vector3f translation, BlockState state, Random rand, Direction side) {
double r = Math.PI * (360 - facing.getOpposite().getHorizontalIndex() * 90) / 180d; double r = Math.PI * (360 - facing.getOpposite().getHorizontalIndex() * 90) / 180d;

View File

@@ -1,120 +0,0 @@
package com.refinedmods.refinedstorage.render.model;
import com.google.common.collect.ImmutableList;
import net.minecraft.block.BlockState;
import net.minecraft.client.renderer.TransformationMatrix;
import net.minecraft.client.renderer.Vector3f;
import net.minecraft.client.renderer.model.BakedQuad;
import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.model.ItemCameraTransforms;
import net.minecraft.client.renderer.model.ItemOverrideList;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.util.Direction;
import net.minecraftforge.client.model.data.EmptyModelData;
import net.minecraftforge.client.model.pipeline.BakedQuadBuilder;
import net.minecraftforge.client.model.pipeline.TRSRTransformer;
import net.minecraftforge.common.model.TransformationHelper;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.List;
import java.util.Random;
public class TRSRBakedModel implements IBakedModel {
protected final IBakedModel original;
protected TransformationMatrix transformation;
private final int faceOffset;
public TRSRBakedModel(IBakedModel original, float x, float y, float z, float scale) {
this(original, x, y, z, 0, 0, 0, scale, scale, scale);
}
public TRSRBakedModel(IBakedModel original, float x, float y, float z, float rotX, float rotY, float rotZ, float scale) {
this(original, x, y, z, rotX, rotY, rotZ, scale, scale, scale);
}
public TRSRBakedModel(IBakedModel original, float x, float y, float z, float rotX, float rotY, float rotZ, float scaleX, float scaleY, float scaleZ) {
this(original, new TransformationMatrix(new Vector3f(x, y, z), null, new Vector3f(scaleX, scaleY, scaleZ), TransformationHelper.quatFromXYZ(new Vector3f(rotX, rotY, rotZ), true)));
}
public TRSRBakedModel(IBakedModel original, TransformationMatrix transform) {
this.original = original;
this.transformation = transform;
this.faceOffset = 0;
}
public TRSRBakedModel(IBakedModel original, Direction facing) {
this(original,facing,null);
}
public TRSRBakedModel(IBakedModel original, Direction facing, @Nullable Vector3f translation) {
this.original = original;
double r = Math.PI * (360 - facing.getOpposite().getHorizontalIndex() * 90) / 180d;
this.transformation = new TransformationMatrix(translation, TransformationHelper.quatFromXYZ(new Vector3f(0, (float) r, 0), false), null, null);
this.faceOffset = 4 + Direction.NORTH.getHorizontalIndex() - facing.getHorizontalIndex();
}
@Nonnull
@Override
@SuppressWarnings("deprecation")
public List<BakedQuad> getQuads(BlockState state, Direction side, @Nonnull Random rand) {
ImmutableList.Builder<BakedQuad> quads = ImmutableList.builder();
if (side != null && side.getHorizontalIndex() > -1) {
side = Direction.byHorizontalIndex((side.getHorizontalIndex() + this.faceOffset) % 4);
}
for (BakedQuad quad : original.getQuads(state, side, rand, EmptyModelData.INSTANCE)) {
BakedQuadBuilder builder = new BakedQuadBuilder(quad.func_187508_a());
TRSRTransformer transformer = new TRSRTransformer(builder, transformation.blockCenterToCorner());
quad.pipe(transformer);
quads.add(builder.build());
}
return quads.build();
}
@Override
public boolean isAmbientOcclusion() {
return false;
}
@Override
public boolean isGui3d() {
return original.isGui3d();
}
@Override
public boolean func_230044_c_() {
return original.func_230044_c_();
}
@Override
public boolean isBuiltInRenderer() {
return original.isBuiltInRenderer();
}
@Nonnull
@Override
@SuppressWarnings("deprecation")
public TextureAtlasSprite getParticleTexture() {
return original.getParticleTexture();
}
@Nonnull
@Override
@SuppressWarnings("deprecation")
public ItemCameraTransforms getItemCameraTransforms() {
return original.getItemCameraTransforms();
}
@Nonnull
@Override
public ItemOverrideList getOverrides() {
return original.getOverrides();
}
}