From 83c73cb1c8fbea872eb719fa29561fff3b70221a Mon Sep 17 00:00:00 2001 From: iam4722202468 Date: Thu, 18 Aug 2022 04:03:17 -0400 Subject: [PATCH] Move pivot to true bone pivot --- .../multipart/animations/ModelAnimation.java | 2 -- .../worldseed/multipart/parser/ModelParser.java | 16 ++++------------ 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/src/main/java/net/worldseed/multipart/animations/ModelAnimation.java b/src/main/java/net/worldseed/multipart/animations/ModelAnimation.java index 46ac3e9..c02d884 100644 --- a/src/main/java/net/worldseed/multipart/animations/ModelAnimation.java +++ b/src/main/java/net/worldseed/multipart/animations/ModelAnimation.java @@ -76,8 +76,6 @@ public ModelAnimation(String modelName, String animationName, ModelBone bone, Js transform.put(0.0, point); } - System.out.println("[AnimationLoader] Generating cache for " + bone.getName() + "/" + animationName); - if (this.type == AnimationLoader.AnimationType.ROTATION) { found = calculateAllTransforms(animationTime, transform); AnimationLoader.addToRotationCache(modelName, bone.getName() + "/" + animationName, found); diff --git a/src/main/java/net/worldseed/multipart/parser/ModelParser.java b/src/main/java/net/worldseed/multipart/parser/ModelParser.java index f5fc57d..e0bbbe0 100644 --- a/src/main/java/net/worldseed/multipart/parser/ModelParser.java +++ b/src/main/java/net/worldseed/multipart/parser/ModelParser.java @@ -159,6 +159,7 @@ private static void createFiles(@NotNull String modelName, Path modelPath, Path for (JsonElement bone : bonesJson) { if (!bone.getAsJsonObject().has("cubes")) continue; String name = bone.getAsJsonObject().get("name").getAsString(); + Point bonePivot = ModelEngine.getPos(bone.getAsJsonObject().get("pivot").getAsJsonArray()).orElse(Vec.ZERO); List cubes = new ArrayList<>(); for (JsonElement cubeJson : bone.getAsJsonObject().get("cubes").getAsJsonArray()) { @@ -182,7 +183,7 @@ private static void createFiles(@NotNull String modelName, Path modelPath, Path } if (cubes.size() > 0) { - bones.add(new Bone(name, cubes)); + bones.add(new Bone(name, cubes, bonePivot)); } } @@ -219,24 +220,15 @@ private static void createFiles(@NotNull String modelName, Path modelPath, Path double cubeMinY = 100000; double cubeMinZ = 100000; - double cubeMaxX = -100000; - double cubeMaxY = -100000; - double cubeMaxZ = -100000; - for (Cube cube : bone.cubes) { Point cubeOrigin = cube.origin; - Point cubeSize = cube.size; cubeMinX = Math.min(cubeMinX, cubeOrigin.x()); cubeMinY = Math.min(cubeMinY, cubeOrigin.y()); cubeMinZ = Math.min(cubeMinZ, cubeOrigin.z()); - - cubeMaxX = Math.max(cubeMaxX, cubeOrigin.x() + cubeSize.x()); - cubeMaxY = Math.max(cubeMaxY, cubeOrigin.y() + cubeSize.y()); - cubeMaxZ = Math.max(cubeMaxZ, cubeOrigin.z() + cubeSize.z()); } - final Point cubeMid = new Vec((cubeMaxX + cubeMinX) / 2 - 8, (cubeMaxY + cubeMinY) / 2 - 8, (cubeMaxZ + cubeMinZ) / 2 - 8); + final Point cubeMid = bone.pivot.mul(-1, 1, 1).sub(8, 8, 8); final Point cubeDiff = new Vec(cubeMid.x() - cubeMinX + 16, cubeMid.y() - cubeMinY + 16, cubeMid.z() - cubeMinZ + 16); for (Cube cube : bone.cubes()) { @@ -391,7 +383,7 @@ private static JsonElement elementsToJson(List elements) { } record Cube(Point origin, Point size, Point pivot, Point rotation, Map uv) {} - record Bone(String name, List cubes) {} + record Bone(String name, List cubes, Point pivot) {} record ItemId(String name, String bone, Point offset, Point diff, int id) {} record MappingEntry(Map map, Point offset, Point diff) {