From ca8a773e77eadd63526d066aff3db0ee4f4f8af5 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 23 Oct 2016 03:20:47 +0200 Subject: [PATCH] Disk drive shows all disks for now --- .../render/BakedModelDiskDrive.java | 42 ++++++++++++++++++- .../refinedstorage/render/BakedModelTRSR.java | 9 ++-- .../refinedstorage/render/ModelDiskDrive.java | 7 +++- 3 files changed, 50 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/render/BakedModelDiskDrive.java b/src/main/java/com/raoulvdberge/refinedstorage/render/BakedModelDiskDrive.java index e4d1b05f6..c3c5ff21e 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/render/BakedModelDiskDrive.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/render/BakedModelDiskDrive.java @@ -8,8 +8,11 @@ import net.minecraft.client.renderer.block.model.ItemCameraTransforms; import net.minecraft.client.renderer.block.model.ItemOverrideList; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.util.EnumFacing; +import net.minecraftforge.common.model.TRSRTransformation; import javax.annotation.Nullable; +import javax.vecmath.Vector3f; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -17,18 +20,53 @@ import java.util.Map; public class BakedModelDiskDrive implements IBakedModel { private IBakedModel base; private Map models = new HashMap<>(); + private Map> disks = new HashMap<>(); - public BakedModelDiskDrive(IBakedModel base) { + public BakedModelDiskDrive(IBakedModel base, IBakedModel disk) { this.base = base; for (EnumFacing facing : EnumFacing.HORIZONTALS) { models.put(facing, new BakedModelTRSR(base, facing)); + + disks.put(facing, new ArrayList<>()); + + for (int y = 0; y < 4; ++y) { + for (int x = 0; x < 2; ++x) { + BakedModelTRSR model = new BakedModelTRSR(disk, facing); + + Vector3f trans = model.transformation.getTranslation(); + + if (facing == EnumFacing.NORTH || facing == EnumFacing.SOUTH) { + trans.x += (((float) x * 7F) / 16F) * (facing == EnumFacing.NORTH ? -1 : 1); + } else if (facing == EnumFacing.EAST || facing == EnumFacing.WEST) { + trans.z += (((float) x * 7F) / 16F) * (facing == EnumFacing.EAST ? -1 : 1); + } + + trans.y -= ((float) y * 3F) / 16F; + + model.transformation = new TRSRTransformation(trans, model.transformation.getLeftRot(), model.transformation.getScale(), model.transformation.getRightRot()); + + disks.get(facing).add(model); + } + } } } @Override public List getQuads(@Nullable IBlockState state, @Nullable EnumFacing side, long rand) { - return state == null ? base.getQuads(state, side, rand) : models.get(state.getValue(BlockBase.DIRECTION)).getQuads(state, side, rand); + if (state == null) { + return base.getQuads(state, side, rand); + } + + EnumFacing facing = state.getValue(BlockBase.DIRECTION); + + List quads = models.get(facing).getQuads(state, side, rand); + + for (int i = 0; i < 8; ++i) { + quads.addAll(disks.get(facing).get(i).getQuads(state, side, rand)); + } + + return quads; } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/render/BakedModelTRSR.java b/src/main/java/com/raoulvdberge/refinedstorage/render/BakedModelTRSR.java index 5252af1e2..795bf0590 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/render/BakedModelTRSR.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/render/BakedModelTRSR.java @@ -19,6 +19,7 @@ import javax.vecmath.Matrix3f; import javax.vecmath.Matrix4f; import javax.vecmath.Vector3f; import javax.vecmath.Vector4f; +import java.util.ArrayList; import java.util.List; /** @@ -26,7 +27,7 @@ import java.util.List; */ public class BakedModelTRSR implements IBakedModel { protected final IBakedModel original; - protected final TRSRTransformation transformation; + public TRSRTransformation transformation; private final TRSROverride override; private final int faceOffset; @@ -71,7 +72,7 @@ public class BakedModelTRSR implements IBakedModel { public List getQuads(IBlockState state, EnumFacing side, long rand) { // transform quads obtained from parent - ImmutableList.Builder builder = ImmutableList.builder(); + List quads = new ArrayList<>(); if (!original.isBuiltInRenderer()) { try { @@ -82,14 +83,14 @@ public class BakedModelTRSR implements IBakedModel { for (BakedQuad quad : original.getQuads(state, side, rand)) { Transformer transformer = new Transformer(transformation, quad.getFormat()); quad.pipe(transformer); - builder.add(transformer.build()); + quads.add(transformer.build()); } } catch (Exception e) { // do nothing. Seriously, why are you using immutable lists?! } } - return builder.build(); + return quads; } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/render/ModelDiskDrive.java b/src/main/java/com/raoulvdberge/refinedstorage/render/ModelDiskDrive.java index 61c4c3728..ff0acd3fb 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/render/ModelDiskDrive.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/render/ModelDiskDrive.java @@ -15,6 +15,7 @@ import java.util.Collections; public class ModelDiskDrive implements IModel { private static final ResourceLocation MODEL_BASE = new ResourceLocation("refinedstorage:block/disk_drive"); + private static final ResourceLocation MODEL_DISK = new ResourceLocation("refinedstorage:block/disk_drive_disk"); @Override public Collection getDependencies() { @@ -29,14 +30,16 @@ public class ModelDiskDrive implements IModel { @Override public IBakedModel bake(IModelState state, VertexFormat format, Function bakedTextureGetter) { IModel baseModel; + IModel diskModel; try { baseModel = ModelLoaderRegistry.getModel(MODEL_BASE); + diskModel = ModelLoaderRegistry.getModel(MODEL_DISK); } catch (Exception e) { - throw new Error("Unable to load disk drive base model", e); + throw new Error("Unable to load disk drive models", e); } - return new BakedModelDiskDrive(baseModel.bake(state, format, bakedTextureGetter)); + return new BakedModelDiskDrive(baseModel.bake(state, format, bakedTextureGetter), diskModel.bake(state, format, bakedTextureGetter)); } @Override