From 4056d2651c47ba1fb5df7cd3eb733640d63cee0d Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sat, 11 Jul 2020 17:18:17 +0200 Subject: [PATCH] Move DiskManipulatorBakedModel away from TRSRBakedModel --- .../render/model/DiskDriveBakedModel.java | 10 +- .../model/DiskManipulatorBakedModel.java | 115 ++++++++++-------- .../tile/DiskManipulatorTile.java | 2 +- 3 files changed, 71 insertions(+), 56 deletions(-) diff --git a/src/main/java/com/refinedmods/refinedstorage/render/model/DiskDriveBakedModel.java b/src/main/java/com/refinedmods/refinedstorage/render/model/DiskDriveBakedModel.java index 0f8d272fad..1527cdd7e8 100644 --- a/src/main/java/com/refinedmods/refinedstorage/render/model/DiskDriveBakedModel.java +++ b/src/main/java/com/refinedmods/refinedstorage/render/model/DiskDriveBakedModel.java @@ -134,17 +134,17 @@ private IBakedModel getDiskModel(DiskState diskState) { } private Vector3f getDiskTranslation(Direction facing, int x, int y) { - Vector3f trans = new Vector3f(); + Vector3f translation = new Vector3f(); if (facing == Direction.NORTH || facing == Direction.SOUTH) { - trans.add(((2F / 16F) + ((float) x * 7F) / 16F) * (facing == Direction.NORTH ? -1 : 1), 0, 0); // Add to X + translation.add(((2F / 16F) + ((float) x * 7F) / 16F) * (facing == Direction.NORTH ? -1 : 1), 0, 0); // Add to X } else if (facing == Direction.EAST || facing == Direction.WEST) { - trans.add(0, 0, ((2F / 16F) + ((float) x * 7F) / 16F) * (facing == Direction.EAST ? -1 : 1)); // Add to Y + translation.add(0, 0, ((2F / 16F) + ((float) x * 7F) / 16F) * (facing == Direction.EAST ? -1 : 1)); // Add to Z } - trans.add(0, -((2F / 16F) + ((float) y * 3F) / 16F), 0); // Remove from Y + translation.add(0, -((2F / 16F) + ((float) y * 3F) / 16F), 0); // Remove from Y - return trans; + return translation; } @Nonnull diff --git a/src/main/java/com/refinedmods/refinedstorage/render/model/DiskManipulatorBakedModel.java b/src/main/java/com/refinedmods/refinedstorage/render/model/DiskManipulatorBakedModel.java index 5e6aa6e173..44b9ea945f 100644 --- a/src/main/java/com/refinedmods/refinedstorage/render/model/DiskManipulatorBakedModel.java +++ b/src/main/java/com/refinedmods/refinedstorage/render/model/DiskManipulatorBakedModel.java @@ -8,7 +8,6 @@ import com.refinedmods.refinedstorage.block.DiskManipulatorBlock; import com.refinedmods.refinedstorage.tile.DiskManipulatorTile; 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; @@ -17,7 +16,10 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; public class DiskManipulatorBakedModel extends DelegateBakedModel { private static class CacheKey { @@ -65,21 +67,48 @@ public int hashCode() { } } - private final Map modelsConnected = new HashMap<>(); - private final Map modelsDisconnected = new HashMap<>(); - private final Map>> disks = new HashMap<>(); + private final IBakedModel baseConnected; + private final IBakedModel baseDisconnected; + private final IBakedModel disk; + private final IBakedModel diskNearCapacity; + private final IBakedModel diskFull; + private final IBakedModel diskDisconnected; private final LoadingCache> cache = CacheBuilder.newBuilder().build(new CacheLoader>() { @Override @SuppressWarnings("deprecation") public List load(CacheKey key) { Direction facing = key.state.get(RSBlocks.DISK_MANIPULATOR.getDirection().getProperty()); - - List quads = new ArrayList<>((key.state.get(DiskManipulatorBlock.CONNECTED) ? modelsConnected : modelsDisconnected).get(facing).getQuads(key.state, key.side, key.random)); - + boolean connected = key.state.get(DiskManipulatorBlock.CONNECTED); + + List quads = new ArrayList<>(QuadTransformer.getTransformedQuads( + connected ? baseConnected : baseDisconnected, + facing, + null, + key.state, + key.random, + key.side + )); + + int x = 0, y = 0; for (int i = 0; i < 6; ++i) { if (key.diskState[i] != DiskState.NONE) { - quads.addAll(disks.get(facing).get(key.diskState[i]).get(i).getQuads(key.state, key.side, key.random)); + IBakedModel diskModel = getDiskModel(key.diskState[i]); + + quads.addAll(QuadTransformer.getTransformedQuads( + diskModel, + facing, + getDiskTranslation(facing, x, y), + key.state, + key.random, + key.side + )); + } + + y++; + if ((i + 1) % 3 == 0) { + x++; + y = 0; } } @@ -87,56 +116,42 @@ public List load(CacheKey key) { } }); - public DiskManipulatorBakedModel(IBakedModel baseConnected, - IBakedModel baseDisconnected, - IBakedModel disk, - IBakedModel diskNearCapacity, - IBakedModel diskFull, - IBakedModel diskDisconnected) { + public DiskManipulatorBakedModel(IBakedModel baseConnected, IBakedModel baseDisconnected, IBakedModel disk, IBakedModel diskNearCapacity, IBakedModel diskFull, IBakedModel diskDisconnected) { super(baseDisconnected); - for (Direction facing : Direction.values()) { - if (facing.getHorizontalIndex() == -1) { - continue; - } - - modelsConnected.put(facing, new TRSRBakedModel(baseConnected, facing)); - modelsDisconnected.put(facing, new TRSRBakedModel(baseDisconnected, facing)); - - disks.put(facing, new HashMap<>()); - - disks.get(facing).put(DiskState.NORMAL, new ArrayList<>()); - disks.get(facing).put(DiskState.NEAR_CAPACITY, new ArrayList<>()); - disks.get(facing).put(DiskState.FULL, new ArrayList<>()); - disks.get(facing).put(DiskState.DISCONNECTED, new ArrayList<>()); + this.baseConnected = baseConnected; + this.baseDisconnected = baseDisconnected; + this.disk = disk; + this.diskNearCapacity = diskNearCapacity; + this.diskFull = diskFull; + this.diskDisconnected = diskDisconnected; + } - addDiskModels(disk, DiskState.NORMAL, facing); - addDiskModels(diskNearCapacity, DiskState.NEAR_CAPACITY, facing); - addDiskModels(diskFull, DiskState.FULL, facing); - addDiskModels(diskDisconnected, DiskState.DISCONNECTED, facing); + private IBakedModel getDiskModel(DiskState diskState) { + switch (diskState) { + case DISCONNECTED: + return diskDisconnected; + case NEAR_CAPACITY: + return diskNearCapacity; + case FULL: + return diskFull; + default: + return disk; } } - private void addDiskModels(IBakedModel disk, DiskState type, Direction facing) { - for (int x = 0; x < 2; ++x) { - for (int y = 0; y < 3; ++y) { - TRSRBakedModel model = new TRSRBakedModel(disk, facing); + private Vector3f getDiskTranslation(Direction facing, int x, int y) { + Vector3f translation = new Vector3f(); - Vector3f trans = model.transformation.getTranslation(); - - if (facing == Direction.NORTH || facing == Direction.SOUTH) { - trans.add((2F / 16F + ((float) x * 7F) / 16F) * (facing == Direction.NORTH ? -1 : 1), 0, 0); // Add to X - } else if (facing == Direction.EAST || facing == Direction.WEST) { - trans.add(0, 0, (2F / 16F + ((float) x * 7F) / 16F) * (facing == Direction.EAST ? -1 : 1)); // Add to Z - } + if (facing == Direction.NORTH || facing == Direction.SOUTH) { + translation.add((2F / 16F + ((float) x * 7F) / 16F) * (facing == Direction.NORTH ? -1 : 1), 0, 0); // Add to X + } else if (facing == Direction.EAST || facing == Direction.WEST) { + translation.add(0, 0, (2F / 16F + ((float) x * 7F) / 16F) * (facing == Direction.EAST ? -1 : 1)); // Add to Z + } - trans.add(0, -((6F / 16F) + (3F * y) / 16F), 0); // Remove from Y - - model.transformation = new TransformationMatrix(trans, model.transformation.getRotationLeft(), model.transformation.getScale(), model.transformation.getRightRot()); + translation.add(0, -((6F / 16F) + (3F * y) / 16F), 0); // Remove from Y - disks.get(facing).get(type).add(model); - } - } + return translation; } @Override diff --git a/src/main/java/com/refinedmods/refinedstorage/tile/DiskManipulatorTile.java b/src/main/java/com/refinedmods/refinedstorage/tile/DiskManipulatorTile.java index 5e451db01d..ae5d0568d4 100644 --- a/src/main/java/com/refinedmods/refinedstorage/tile/DiskManipulatorTile.java +++ b/src/main/java/com/refinedmods/refinedstorage/tile/DiskManipulatorTile.java @@ -43,7 +43,7 @@ public class DiskManipulatorTile extends NetworkNodeTile diskCapability = LazyOptional.of(() -> getNode().getDisks()); - private final DiskState[] diskState = new DiskState[8]; + private final DiskState[] diskState = new DiskState[6]; public DiskManipulatorTile() { super(RSTiles.DISK_MANIPULATOR);