public Optional<TRSRTransformation> apply(Optional<? extends IModelPart> part) { // TODO make more use of Optional if(!part.isPresent()) { if(parent != null) { return parent.apply(part); } return Optional.absent(); } if(!(part.get() instanceof NodeJoint)) { return Optional.absent(); } Node<?> node = ((NodeJoint)part.get()).getNode(); TRSRTransformation nodeTransform; if(progress < 1e-5 || frame == nextFrame) { nodeTransform = getNodeMatrix(node, frame); } else if(progress > 1 - 1e-5) { nodeTransform = getNodeMatrix(node, nextFrame); } else { nodeTransform = getNodeMatrix(node, frame); nodeTransform = nodeTransform.slerp(getNodeMatrix(node, nextFrame), progress); } if(parent != null && node.getParent() == null) { return Optional.of(parent.apply(part).or(TRSRTransformation.identity()).compose(nodeTransform)); } return Optional.of(nodeTransform); }
/** * IModelState wrapper for a Clip, sampled at specified time. */ public static Pair<IModelState, Iterable<Event>> apply(final IClip clip, final float lastPollTime, final float time) { return Pair.<IModelState, Iterable<Event>>of(new IModelState() { public Optional<TRSRTransformation> apply(Optional<? extends IModelPart> part) { if(!part.isPresent() || !(part.get() instanceof IJoint)) { return Optional.absent(); } IJoint joint = (IJoint)part.get(); // TODO: Cache clip application? TRSRTransformation jointTransform = clip.apply(joint).apply(time).compose(joint.getInvBindPose()); Optional<? extends IJoint> parent = joint.getParent(); while(parent.isPresent()) { TRSRTransformation parentTransform = clip.apply(parent.get()).apply(time); jointTransform = parentTransform.compose(jointTransform); parent = parent.get().getParent(); } return Optional.of(jointTransform); } }, clip.pastEvents(lastPollTime, time)); }
@Override public IBakedModel bake(IModelState state, VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter) { ImmutableList.Builder<BakedQuad> builder = ImmutableList.builder(); Optional<TRSRTransformation> transform = state.apply(Optional.<IModelPart>absent()); for(int i = 0; i < textures.size(); i++) { ResourceLocation tex = textures.get(i); if(tex.toString().equals("minecraft:missingno")) continue; TextureAtlasSprite sprite = bakedTextureGetter.apply(tex); String breakLocation = new ResourceLocation(Reference.MOD_ID,"items/breakmask").toString(); TextureAtlasSprite breakTemplate = Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(breakLocation); builder.addAll(getQuadsForSprite(i, breakTemplate, sprite, format, transform)); //builder.addAll(ItemTextureQuadConverter.convertTexture(format, transform, breakTemplate, sprite, NORTH_Z + Z_OFFSET * i, EnumFacing.NORTH, 0xffffffff)); // builder.addAll(ItemTextureQuadConverter.convertTexture(format, transform, breakTemplate, sprite, SOUTH_Z - Z_OFFSET * i, EnumFacing.SOUTH, 0xffffffff)); } TextureAtlasSprite particle = bakedTextureGetter.apply(textures.isEmpty() ? new ResourceLocation("missingno") : textures.get(0)); ImmutableMap<ItemCameraTransforms.TransformType, TRSRTransformation> map = IPerspectiveAwareModel.MapWrapper.getTransforms(state); return new BakedItemModel(builder.build(), particle, map, null); }
@Override public Optional<TRSRTransformation> apply(final Optional<? extends IModelPart> part) { if (part.isPresent()) { final UnmodifiableIterator<String> parts = Models.getParts(part.get()); if (parts.hasNext()) { final String name = parts.next(); if (!parts.hasNext() && this.blacklist && this.parts.contains(name) || !this.blacklist && !this.parts.contains(name)) return this.value; } } return Optional.empty(); }
@Override public Optional<TRSRTransformation> apply(Optional<? extends IModelPart> part) { if(part.isPresent()) { // This whole thing is subject to change, but should do for now. UnmodifiableIterator<String> parts = Models.getParts(part.get()); if(parts.hasNext()) { String name = parts.next(); // only interested in the root level if(!parts.hasNext() && hidden.contains(name)) { return value; } } } return Optional.absent(); }
@Override public IBakedModel bake(IModelState state, VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter) { ImmutableMap<ItemCameraTransforms.TransformType, TRSRTransformation> transformMap = IPerspectiveAwareModel.MapWrapper.getTransforms(state); TRSRTransformation transform = state.apply(Optional.<IModelPart>absent()).or(TRSRTransformation.identity()); TextureAtlasSprite base = bakedTextureGetter.apply(new ResourceLocation(nbtFood.defualtIcon)); ImmutableList.Builder<BakedQuad> builder = ImmutableList.builder(); ImmutableList.Builder<ResourceLocation> objectBuilder = ImmutableList.builder(); objectBuilder.add(new ResourceLocation(nbtFood.defualtIcon)); for (String a : nbtFoodAddivites) { try { ResourceLocation r = new ResourceLocation(nbtFood.additives.get(a)); objectBuilder.add(r); } catch (NullPointerException e) { } } IBakedModel model = new ItemLayerModel(objectBuilder.build()).bake(state, format, bakedTextureGetter); builder.addAll(model.getQuads(null, null, 0)); return new BakedNBTFoodModel(this, builder.build(), base, format, transformMap); }
public Optional<TRSRTransformation> apply(Optional<? extends IModelPart> part) { Optional<TRSRTransformation> normal = state.apply(part); Optional<TRSRTransformation> multi = state.apply(Optional.of(new PartPart(model, index, part))); if(normal.isPresent() && multi.isPresent()) { return Optional.of(normal.get().compose(multi.get())); } return normal.or(multi); }
public Optional<TRSRTransformation> apply(Optional<? extends IModelPart> part) { Optional<TRSRTransformation> f = first.apply(part), s = second.apply(part); if(f.isPresent() && s.isPresent()) { return Optional.of(f.get().compose(s.get())); } return f.or(s); }
public IBakedModel bake(IModelState state, final VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter) { ImmutableList.Builder<BakedQuad> builder = ImmutableList.builder(); Optional<TRSRTransformation> transform = state.apply(Optional.<IModelPart>absent()); for(int i = 0; i < textures.size(); i++) { TextureAtlasSprite sprite = bakedTextureGetter.apply(textures.get(i)); builder.addAll(getQuadsForSprite(i, sprite, format, transform)); } TextureAtlasSprite particle = bakedTextureGetter.apply(textures.isEmpty() ? new ResourceLocation("missingno") : textures.get(0)); ImmutableMap<TransformType, TRSRTransformation> map = IPerspectiveAwareModel.MapWrapper.getTransforms(state); return new BakedItemModel(builder.build(), particle, map, overrides, null); }
public Optional<TRSRTransformation> apply(Optional<? extends IModelPart> part) { if(!part.isPresent()) { return def; } if(!map.containsKey(part.get())) { return Optional.absent(); } return Optional.fromNullable(map.get(part.get())); }
public Optional<TRSRTransformation> apply(Optional<? extends IModelPart> part) { Optional<TRSRTransformation> f = first.apply(part), s = second.apply(part); if (f.isPresent() && s.isPresent()) return Optional.of(f.get().compose(s.get())); return f.isPresent() ? f : s; }
@Override public Optional<TRSRTransformation> apply(Optional<? extends IModelPart> part) { if (!part.isPresent() || !(part.get() instanceof TransformType) || !map.containsKey(part.get())) { return defaultTransform; } return Optional.ofNullable(map.get(part.get())); }
@Override public Optional<TRSRTransformation> apply(Optional<? extends IModelPart> part) { if (!part.isPresent()) { return Optional.absent(); } IModelPart modelPart = part.get(); if (modelPart instanceof Bone) { return getTransformForBone((Bone) modelPart); } if (modelPart instanceof TransformType) { return getTransformForView((TransformType) modelPart); } return Optional.absent(); }
@Override public IBakedModel load(final Map<String, Float> key) throws Exception { final IModelState clipTransform = part -> { if (!part.isPresent()) return Optional.empty(); final IModelPart maybeJoint = part.get(); if (!(maybeJoint instanceof IJoint)) return Optional.empty(); final IJoint joint = (IJoint)part.get(); return Optional.of(evaluator.evaluate(joint, key)); }; return bakeModelWithTransform(clipTransform); }
@Override public Optional<TRSRTransformation> apply(Optional<? extends IModelPart> part) { if (parent != null) return parent.apply(part); return Optional.empty(); }
@SuppressWarnings("deprecation") public static Optional<TRSRTransformation> applyTransform(net.minecraft.client.renderer.block.model.ItemTransformVec3f transform, Optional<? extends IModelPart> part) { if(part.isPresent()) return Optional.absent(); return Optional.of(TRSRTransformation.blockCenterToCorner(new TRSRTransformation(transform))); }
public static Optional<TRSRTransformation> applyTransform(Matrix4f matrix, Optional<? extends IModelPart> part) { if(part.isPresent()) return Optional.absent(); return Optional.of(new TRSRTransformation(matrix)); }
public PartPart(IModel model, int index, Optional<? extends IModelPart> part) { this.model = model; this.index = index; this.part = part; }
public Optional<TRSRTransformation> apply(Optional<? extends IModelPart> part) { if (parent != null) return parent.apply(part); return Optional.absent(); }
@Override public IBakedModel bake(IModelState state, VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter) { ImmutableMap<TransformType, TRSRTransformation> transformMap = IPerspectiveAwareModel.MapWrapper.getTransforms(state); // if the fluid is a gas wi manipulate the initial state to be rotated 180? to turn it upside down if (flipGas && fluid != null && fluid.isGaseous()) { state = new ModelStateComposition(state, TRSRTransformation.blockCenterToCorner(new TRSRTransformation(null, new Quat4f(0, 0, 1, 0), null, null))); } TRSRTransformation transform = state.apply(Optional.<IModelPart>absent()).or(TRSRTransformation.identity()); TextureAtlasSprite fluidSprite = null; ImmutableList.Builder<BakedQuad> builder = ImmutableList.builder(); if(fluid != null) { fluidSprite = bakedTextureGetter.apply(fluid.getStill()); } if (baseLocation != null) { // build base (insidest) IBakedModel model = (new ItemLayerModel(ImmutableList.of(baseLocation))).bake(state, format, bakedTextureGetter); builder.addAll(model.getQuads(null, null, 0)); } if (liquidLocation != null && fluidSprite != null) { TextureAtlasSprite liquid = bakedTextureGetter.apply(liquidLocation); // build liquid layer (inside) builder.addAll(ItemTextureQuadConverter.convertTexture(format, transform, liquid, fluidSprite, NORTH_Z_FLUID, EnumFacing.NORTH, fluid.getColor())); builder.addAll(ItemTextureQuadConverter.convertTexture(format, transform, liquid, fluidSprite, SOUTH_Z_FLUID, EnumFacing.SOUTH, fluid.getColor())); } if (coverLocation != null) { // cover (the actual item around the other two) TextureAtlasSprite base = bakedTextureGetter.apply(coverLocation); builder.add(ItemTextureQuadConverter.genQuad(format, transform, 0, 0, 16, 16, NORTH_Z_BASE, base, EnumFacing.NORTH, 0xffffffff)); builder.add(ItemTextureQuadConverter.genQuad(format, transform, 0, 0, 16, 16, SOUTH_Z_BASE, base, EnumFacing.SOUTH, 0xffffffff)); } return new BakedDynBucket(this, builder.build(), fluidSprite, format, Maps.immutableEnumMap(transformMap), Maps.<String, IBakedModel>newHashMap()); }
public Optional<TRSRTransformation> apply(Optional<? extends IModelPart> part) { if(!part.isPresent() || !map.containsKey(part.get())) return def.apply(part); return map.get(part.get()).apply(Optional.<IModelPart>absent()); }
public IBakedModel bake(IModelState state, VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter) { ImmutableMap<TransformType, TRSRTransformation> map = IPerspectiveAwareModel.MapWrapper.getTransforms(state); return new BakedFluid(state.apply(Optional.<IModelPart>absent()), map, format, fluid.getColor(), bakedTextureGetter.apply(fluid.getStill()), bakedTextureGetter.apply(fluid.getFlowing()), fluid.isGaseous(), Optional.<IExtendedBlockState>absent()); }
public SimpleModelState(ImmutableMap<? extends IModelPart, TRSRTransformation> map) { this(map, Optional.<TRSRTransformation>absent()); }
public SimpleModelState(ImmutableMap<? extends IModelPart, TRSRTransformation> map, Optional<TRSRTransformation> def) { this.map = map; this.def = def; }
public Optional<TRSRTransformation> apply(Optional<? extends IModelPart> part) { if (parent != null) return parent.apply(part); return Optional.empty(); }
@Override public Optional<TRSRTransformation> apply(Optional<? extends IModelPart> part) { if (this.parent != null) return parent.apply(part); return Optional.absent(); }
public com.google.common.base.Optional<TRSRTransformation> apply(com.google.common.base.Optional<? extends IModelPart> part) { if (parent != null) return parent.apply(part); return com.google.common.base.Optional.absent(); }
@Override public IBakedModel bake(IModelState state, VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter) { ImmutableMap<TransformType, TRSRTransformation> transformMap = IPerspectiveAwareModel.MapWrapper.getTransforms(state); // if the fluid is a gas wi manipulate the initial state to be rotated 180? to turn it upside down if (flipGas && fluid != null && fluid.isGaseous()) { state = new ModelStateComposition(state, TRSRTransformation.blockCenterToCorner(new TRSRTransformation(null, new Quat4f(0, 0, 1, 0), null, null))); } TRSRTransformation transform = state.apply(Optional.<IModelPart>absent()).or(TRSRTransformation.identity()); TextureAtlasSprite fluidSprite = null; ImmutableList.Builder<BakedQuad> builder = ImmutableList.builder(); if(fluid != null) { fluidSprite = bakedTextureGetter.apply(fluid.getStill()); } if (baseLocation != null) { // build base (insidest) IBakedModel model = (new ItemLayerModel(ImmutableList.of(baseLocation))).bake(state, format, bakedTextureGetter); builder.addAll(model.getQuads(null, null, 0)); } if (liquidLocation != null && fluidSprite != null) { TextureAtlasSprite liquid = bakedTextureGetter.apply(liquidLocation); // build liquid layer (inside) builder.addAll(ItemTextureQuadConverter.convertTexture(format, transform, liquid, fluidSprite, NORTH_Z_FLUID, EnumFacing.NORTH, fluid.getColor())); builder.addAll(ItemTextureQuadConverter.convertTexture(format, transform, liquid, fluidSprite, SOUTH_Z_FLUID, EnumFacing.SOUTH, fluid.getColor())); } if (coverLocation != null) { // cover (the actual item around the other two) TextureAtlasSprite base = bakedTextureGetter.apply(coverLocation); builder.add(ItemTextureQuadConverter.genQuad(format, transform, 0, 0, 16, 16, NORTH_Z_BASE, base, EnumFacing.NORTH, 0xffffffff)); builder.add(ItemTextureQuadConverter.genQuad(format, transform, 0, 0, 16, 16, SOUTH_Z_BASE, base, EnumFacing.SOUTH, 0xffffffff)); } return new BakedDynBucketz(this, builder.build(), fluidSprite, format, Maps.immutableEnumMap(transformMap), Maps.<String, IBakedModel>newHashMap()); }
@Override public Optional<TRSRTransformation> apply(Optional<? extends IModelPart> part) { return parent.apply(part); }