From f01df70d3fd14dc4601a038d37f48602c2972e83 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 27 Jun 2023 18:38:45 -0400 Subject: [PATCH] mesh fix 2 --- core/src/mindustry/mod/ContentParser.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/core/src/mindustry/mod/ContentParser.java b/core/src/mindustry/mod/ContentParser.java index b9950b8edd1f..133ddadbfb40 100644 --- a/core/src/mindustry/mod/ContentParser.java +++ b/core/src/mindustry/mod/ContentParser.java @@ -854,9 +854,18 @@ private T locateAny(String name){ return null; } + private GenericMesh[] parseMeshes(Planet planet, JsonValue array){ + var res = new GenericMesh[array.size]; + for(int i = 0; i < array.size; i++){ + //yes get is O(n) but it's practically irrelevant here + res[i] = parseMesh(planet, array.get(i)); + } + return res; + } + private GenericMesh parseMesh(Planet planet, JsonValue data){ if(data.isArray()){ - return new MultiMesh(parser.readValue(GenericMesh[].class, data)); + return new MultiMesh(parseMeshes(planet, data)); } String tname = Strings.capitalize(data.getString("type", "NoiseMesh")); @@ -874,8 +883,8 @@ private GenericMesh parseMesh(Planet planet, JsonValue data){ data.getInt("seed", 0), data.getFloat("speed", 0), data.getFloat("radius", 1f), data.getInt("divisions", 3), Color.valueOf(data.getString("color", "ffffff")), data.getInt("octaves", 1), data.getFloat("persistence", 0.5f), data.getFloat("scale", 1f), data.getFloat("thresh", 0.5f)); - case "MultiMesh" -> new MultiMesh(parser.readValue(GenericMesh[].class, data.get("meshes"))); - case "MatMesh" -> new MatMesh(parser.readValue(GenericMesh.class, data.get("mesh")), parser.readValue(Mat3D.class, data.get("mat"))); + case "MultiMesh" -> new MultiMesh(parseMeshes(planet, data.get("meshes"))); + case "MatMesh" -> new MatMesh(parseMesh(planet, data.get("mesh")), parser.readValue(Mat3D.class, data.get("mat"))); default -> throw new RuntimeException("Unknown mesh type: " + tname); }; }