BlockyModelBoundsParser class
Пакет: com.hypixel.hytale.server.core.asset.type.model
Файл: com/hypixel/hytale/server/core/asset/type/model/BlockyModelBoundsParser.java
Поля (44)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
HytaleLogger |
LOGGER |
|
CommonAsset |
var1 |
|
byte[] |
var1 |
|
BsonArray |
var1 |
|
BsonDocument |
var1 |
|
float |
var1 |
|
Vector3f |
var10 |
|
Quaternionf |
var11 |
|
boolean |
var12 |
|
|
var12 |
|
String |
var13 |
|
BsonDocument |
var14 |
|
Vector3f |
var15 |
|
Vector3f |
var16 |
|
float |
var17 |
|
float |
var18 |
|
float |
var19 |
|
BsonDocument |
var2 |
|
float |
var2 |
|
String |
var2 |
|
float |
var2 |
|
BsonValue |
var2 |
|
BsonValue |
var2 |
|
Vector3f[] |
var20 |
|
Vector3f |
var25 |
|
BsonArray |
var26 |
|
float |
var3 |
|
float |
var3 |
|
float |
var4 |
|
BsonDocument |
var4 |
|
float |
var4 |
|
float |
var4 |
|
float |
var5 |
|
boolean |
var5 |
|
float |
var5 |
|
float |
var6 |
|
Vector3f |
var6 |
|
float |
var6 |
|
float |
var7 |
|
Quaternionf |
var7 |
|
boolean |
var8 |
|
Vector3f |
var8 |
|
float[] |
var9 |
|
Vector3f |
var9 |
Методы (18)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
return new |
Quaternionfreturn new Quaternionf() |
abstract |
return new |
Quaternionfreturn new Quaternionf(var1, var2, var3, var4) |
abstract |
return new |
Vector3freturn new Vector3f(var1, var2, var3) |
abstract |
return new |
Vector3freturn new Vector3f(var4, var5, var6) |
static |
boolean |
accumulateNodeBoundsboolean accumulateNodeBounds(@Nonnull BsonDocument var0, @Nonnull Vector3f var1, @Nonnull Quaternionf var2, @Nonnull float[] var3) |
abstract |
return |
computeBoundsFromJsonreturn computeBoundsFromJson(var2) |
|
|
for for(BsonValue var11 : var1) |
|
|
for for(Vector3f var24 : var20) |
|
|
for for(BsonValue var28 : var26) |
static |
Vector3f[] |
getQuadCornersVector3f[] getQuadCorners(@Nonnull BsonDocument var0) |
|
|
if if(var1 == null) |
|
|
if if(!var5) |
|
|
if if(var4 != null) |
|
|
if if(var26 != null) |
|
|
if if(var0 == null) |
|
|
if if(var0 == null) |
static |
float |
readFloatfloat readFloat(@Nonnull BsonValue var0) |
|
return |
switchreturn switch(var2) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.asset.type.model;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.math.shape.Box;
class="kw">import com.hypixel.hytale.server.core.asset.common.CommonAsset;
class="kw">import com.hypixel.hytale.server.core.asset.common.CommonAssetRegistry;
class="kw">import java.nio.charset.StandardCharsets;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.bson.BsonArray;
class="kw">import org.bson.BsonDocument;
class="kw">import org.bson.BsonValue;
class="kw">import org.joml.Quaternionf;
class="kw">import org.joml.Vector3f;
class="kw">public class BlockyModelBoundsParser {
class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
class="kw">private class="kw">static class="kw">final float BLOCK_SCALE = 0.03125F;
class="kw">private class="kw">static class="kw">final Vector3f[] BOX_CORNERS = new Vector3f[]{
new Vector3f(-0.5F, 0.5F, -0.5F),
new Vector3f(0.5F, 0.5F, -0.5F),
new Vector3f(0.5F, -0.5F, -0.5F),
new Vector3f(-0.5F, -0.5F, -0.5F),
new Vector3f(0.5F, 0.5F, 0.5F),
new Vector3f(-0.5F, 0.5F, 0.5F),
new Vector3f(-0.5F, -0.5F, 0.5F),
new Vector3f(0.5F, -0.5F, 0.5F)
};
class="kw">public BlockyModelBoundsParser() {
}
@Nullable
class="kw">public class="kw">static Box computeBounds(@Nonnull String var0) {
CommonAsset var1 = CommonAssetRegistry.getByName(var0);
class="kw">return var1 == null ? null : computeBounds(var1);
}
@Nullable
class="kw">public class="kw">static Box computeBounds(@Nonnull CommonAsset var0) {
try {
byte[] var1 = var0.getBlob().join();
if (var1 == null) {
class="kw">return null;
}
BsonDocument var2 = BsonDocument.parse(new String(var1, StandardCharsets.UTF_8));
class="kw">return computeBoundsFromJson(var2);
} catch (Exception var3) {
((HytaleLogger.Api)LOGGER.at(Level.WARNING).withCause(var3)).log("Failed to compute bounds for blockymodel: %s", var0.getName());
class="kw">return null;
}
}
@Nullable
class="kw">private class="kw">static Box computeBoundsFromJson(@Nonnull BsonDocument var0) {
BsonArray var1 = getArray(var0, "nodes");
if (var1 != null && !var1.isEmpty()) {
float var2 = Float.MAX_VALUE;
float var3 = Float.MAX_VALUE;
float var4 = Float.MAX_VALUE;
float var5 = -Float.MAX_VALUE;
float var6 = -Float.MAX_VALUE;
float var7 = -Float.MAX_VALUE;
boolean var8 = false;
float[] var9 = new float[]{var2, var3, var4, var5, var6, var7};
for (BsonValue var11 : var1) {
if (var11.isDocument()) {
var8 |= accumulateNodeBounds(var11.asDocument(), new Vector3f(0.0F, 0.0F, 0.0F), new Quaternionf(), var9);
}
}
class="kw">return !var8 ? null : new Box(var9[0] * 0.03125F, var9[1] * 0.03125F, var9[2] * 0.03125F, var9[3] * 0.03125F, var9[4] * 0.03125F, var9[5] * 0.03125F);
} else {
class="kw">return null;
}
}
class="kw">private class="kw">static boolean accumulateNodeBounds(@Nonnull BsonDocument var0, @Nonnull Vector3f var1, @Nonnull Quaternionf var2, @Nonnull float[] var3) {
BsonDocument var4 = getDocument(var0, "shape");
boolean var5 = var4 == null || !var4.containsKey("visible") || var4.get("visible").asBoolean().getValue();
if (!var5) {
class="kw">return false;
}
Vector3f var6 = readVec3(getDocument(var0, "position"), 0.0F, 0.0F, 0.0F);
Quaternionf var7 = readQuat(getDocument(var0, "orientation"));
Vector3f var8 = var4 != null ? readVec3(getDocument(var4, "offset"), 0.0F, 0.0F, 0.0F) : new Vector3f();
Vector3f var9 = new Vector3f(var8);
var9.rotate(var7);
var9.add(var6);
Vector3f var10 = new Vector3f(var9);
var10.rotate(var2);
var10.add(var1);
Quaternionf var11 = new Quaternionf(var2);
var11.mul(var7);
boolean var12 = false;
if (var4 != null) {
String var13 = var4.containsKey("type") ? var4.get("type").asString().getValue() : "none";
if ("box".equals(var13) || "quad".equals(var13)) {
BsonDocument var14 = getDocument(var4, "settings");
Vector3f var15 = var14 != null ? readVec3(getDocument(var14, "size"), 0.0F, 0.0F, 0.0F) : new Vector3f();
Vector3f var16 = readVec3(getDocument(var4, "stretch"), 1.0F, 1.0F, 1.0F);
float var17 = var15.x * var16.x;
float var18 = var15.y * var16.y;
float var19 = var15.z * var16.z;
Vector3f[] var20 = "box".equals(var13) ? BOX_CORNERS : getQuadCorners(var4);
for (Vector3f var24 : var20) {
Vector3f var25 = new Vector3f(var24.x * var17, var24.y * var18, var24.z * var19);
var25.rotate(var11);
var25.add(var10);
var3[0] = Math.min(var3[0], var25.x);
var3[1] = Math.min(var3[1], var25.y);
var3[2] = Math.min(var3[2], var25.z);
var3[3] = Math.max(var3[3], var25.x);
var3[4] = Math.max(var3[4], var25.y);
var3[5] = Math.max(var3[5], var25.z);
}
var12 = true;
}
}
BsonArray var26 = getArray(var0, "children");
if (var26 != null) {
for (BsonValue var28 : var26) {
if (var28.isDocument()) {
var12 |= accumulateNodeBounds(var28.asDocument(), var10, var11, var3);
}
}
}
class="kw">return var12;
}
class="kw">private class="kw">static Vector3f[] getQuadCorners(@Nonnull BsonDocument var0) {
BsonDocument var1 = getDocument(var0, "settings");
String var2 = var1 != null && var1.containsKey("normal") ? var1.get("normal").asString().getValue() : "+Z";
class="kw">return class="kw">switch (var2) {
case "+X", "-X" -> new Vector3f[]{
new Vector3f(0.0F, -0.5F, -0.5F), new Vector3f(0.0F, 0.5F, -0.5F), new Vector3f(0.0F, 0.5F, 0.5F), new Vector3f(0.0F, -0.5F, 0.5F)
};
case "+Y", "-Y" -> new Vector3f[]{
new Vector3f(-0.5F, 0.0F, -0.5F), new Vector3f(0.5F, 0.0F, -0.5F), new Vector3f(0.5F, 0.0F, 0.5F), new Vector3f(-0.5F, 0.0F, 0.5F)
};
class="kw">default -> new Vector3f[]{
new Vector3f(-0.5F, -0.5F, 0.0F), new Vector3f(0.5F, -0.5F, 0.0F), new Vector3f(0.5F, 0.5F, 0.0F), new Vector3f(-0.5F, 0.5F, 0.0F)
};
};
}
@Nonnull
class="kw">private class="kw">static Vector3f readVec3(@Nullable BsonDocument var0, float var1, float var2, float var3) {
if (var0 == null) {
class="kw">return new Vector3f(var1, var2, var3);
}
float var4 = var0.containsKey("x") ? readFloat(var0.get("x")) : var1;
float var5 = var0.containsKey("y") ? readFloat(var0.get("y")) : var2;
float var6 = var0.containsKey("z") ? readFloat(var0.get("z")) : var3;
class="kw">return new Vector3f(var4, var5, var6);
}
@Nonnull
class="kw">private class="kw">static Quaternionf readQuat(@Nullable BsonDocument var0) {
if (var0 == null) {
class="kw">return new Quaternionf();
}
float var1 = var0.containsKey("x") ? readFloat(var0.get("x")) : 0.0F;
float var2 = var0.containsKey("y") ? readFloat(var0.get("y")) : 0.0F;
float var3 = var0.containsKey("z") ? readFloat(var0.get("z")) : 0.0F;
float var4 = var0.containsKey("w") ? readFloat(var0.get("w")) : 1.0F;
class="kw">return new Quaternionf(var1, var2, var3, var4);
}
class="kw">private class="kw">static float readFloat(@Nonnull BsonValue var0) {
class="kw">return (float)var0.asNumber().doubleValue();
}
@Nullable
class="kw">private class="kw">static BsonDocument getDocument(@Nonnull BsonDocument var0, @Nonnull String var1) {
BsonValue var2 = var0.get(var1);
class="kw">return var2 != null && var2.isDocument() ? var2.asDocument() : null;
}
@Nullable
class="kw">private class="kw">static BsonArray getArray(@Nonnull BsonDocument var0, @Nonnull String var1) {
BsonValue var2 = var0.get(var1);
class="kw">return var2 != null && var2.isArray() ? var2.asArray() : null;
}
}