From 69bb4d97b20674bbae73d075783d31b17827af91 Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 21 May 2017 13:17:25 -0400 Subject: [PATCH] model-viewer: render kits too --- .../net/runelite/modelviewer/KitManager.java | 64 +++++++++++++++++++ .../runelite/modelviewer/ModelManager.java | 5 +- .../net/runelite/modelviewer/ModelViewer.java | 20 ++++++ 3 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 model-viewer/src/main/java/net/runelite/modelviewer/KitManager.java diff --git a/model-viewer/src/main/java/net/runelite/modelviewer/KitManager.java b/model-viewer/src/main/java/net/runelite/modelviewer/KitManager.java new file mode 100644 index 0000000000..c5c219bb6d --- /dev/null +++ b/model-viewer/src/main/java/net/runelite/modelviewer/KitManager.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2017, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.modelviewer; + +import com.google.gson.Gson; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.HashMap; +import java.util.Map; +import net.runelite.cache.definitions.KitDefinition; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class KitManager +{ + private static final Logger logger = LoggerFactory.getLogger(KitManager.class); + + private static Map kits = new HashMap<>(); + + public static KitDefinition getKit(int id) + { + KitDefinition def = kits.get(id); + if (def != null) + { + return def; + } + + try (FileInputStream in = new FileInputStream(new File("kits/" + id + ".json"))) + { + def = new Gson().fromJson(new InputStreamReader(in), KitDefinition.class); + kits.put(id, def); + return def; + } + catch (IOException ex) + { + logger.warn(null, ex); + return null; + } + } +} diff --git a/model-viewer/src/main/java/net/runelite/modelviewer/ModelManager.java b/model-viewer/src/main/java/net/runelite/modelviewer/ModelManager.java index 505edde4d2..a086de34ac 100644 --- a/model-viewer/src/main/java/net/runelite/modelviewer/ModelManager.java +++ b/model-viewer/src/main/java/net/runelite/modelviewer/ModelManager.java @@ -68,7 +68,10 @@ public class ModelManager ModelLoader loader = new ModelLoader(); md = loader.load(id, b); - rotate(md, object, location); + if (object != null && location != null) + { + rotate(md, object, location); + } models.put(key, md); return md; diff --git a/model-viewer/src/main/java/net/runelite/modelviewer/ModelViewer.java b/model-viewer/src/main/java/net/runelite/modelviewer/ModelViewer.java index 4afb896837..b73140d2e3 100644 --- a/model-viewer/src/main/java/net/runelite/modelviewer/ModelViewer.java +++ b/model-viewer/src/main/java/net/runelite/modelviewer/ModelViewer.java @@ -33,10 +33,12 @@ import java.io.IOException; import java.io.InputStreamReader; import java.nio.ByteBuffer; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.imageio.ImageIO; +import net.runelite.cache.definitions.KitDefinition; import net.runelite.cache.definitions.ModelDefinition; import net.runelite.cache.definitions.NpcDefinition; import net.runelite.cache.definitions.ObjectDefinition; @@ -100,6 +102,7 @@ public class ModelViewer options.addOption(null, "object", true, "object to render"); options.addOption(null, "model", true, "model to render"); options.addOption(null, "map", true, "map region to render"); + options.addOption(null, "kits", true, "kits to render"); CommandLineParser parser = new DefaultParser(); CommandLine cmd = parser.parse(options, args); @@ -180,6 +183,21 @@ public class ModelViewer loadUnderlays(); loadOverlays(); } + if (cmd.hasOption("kits")) + { + String kits = cmd.getOptionValue("kits"); + Integer[] kitIds = Arrays.stream(kits.split(",")).map(s -> Integer.parseInt(s)).toArray(Integer[]::new); + + for (int kitId : kitIds) + { + KitDefinition kit = KitManager.getKit(kitId); + for (int model : kit.modelIds) + { + ModelDefinition md = ModelManager.getModel(model, null, null); + models.add(md); + } + } + } Display.setDisplayMode(new DisplayMode(800, 600)); Display.setTitle("Model Viewer"); @@ -297,7 +315,9 @@ public class ModelViewer assert texture != null; if (md.faceTextureUCoordinates == null || md.faceTextureVCoordinates == null) + { md.computeTextureUVCoordinates(); + } u = md.faceTextureUCoordinates[i]; v = md.faceTextureVCoordinates[i];