Disk drive shows all disks for now

This commit is contained in:
Raoul Van den Berge
2016-10-23 03:20:47 +02:00
parent 886e855f00
commit ca8a773e77
3 changed files with 50 additions and 8 deletions

View File

@@ -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<EnumFacing, IBakedModel> models = new HashMap<>();
private Map<EnumFacing, List<IBakedModel>> 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<BakedQuad> 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<BakedQuad> 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

View File

@@ -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<BakedQuad> getQuads(IBlockState state, EnumFacing side, long rand) {
// transform quads obtained from parent
ImmutableList.Builder<BakedQuad> builder = ImmutableList.builder();
List<BakedQuad> 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

View File

@@ -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<ResourceLocation> getDependencies() {
@@ -29,14 +30,16 @@ public class ModelDiskDrive implements IModel {
@Override
public IBakedModel bake(IModelState state, VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> 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