package com.lyeeedar.Roguelike3D.Graphics.Models.RiggedModels; import java.io.Serializable; import com.badlogic.gdx.graphics.Mesh; import com.badlogic.gdx.math.Matrix4; import com.badlogic.gdx.math.collision.BoundingBox; import com.lyeeedar.Roguelike3D.Game.GameData; import com.lyeeedar.Roguelike3D.Graphics.Lights.LightManager; import com.lyeeedar.Roguelike3D.Graphics.Models.Shapes; import com.lyeeedar.Utils.FileUtils; public class RiggedSubMesh implements Serializable { private static final long serialVersionUID = -530256766516721412L; public final float scale; public final int primitiveType; public final String[] meshValues; private transient Mesh mesh; private transient BoundingBox box; public transient boolean created = false; public RiggedSubMesh(int primitiveType, float scale, String... meshValues) { this.primitiveType = primitiveType; this.scale = scale; this.meshValues = meshValues; } public BoundingBox getBoundingBox() { return box; } public void create() { if (created || mesh != null) return; created = true; if (meshValues[0].equalsIgnoreCase("cube")) { if (meshValues.length == 4) mesh = Shapes.genCuboid(Float.parseFloat(meshValues[1]), Float.parseFloat(meshValues[2]), Float.parseFloat(meshValues[3])); else mesh = Shapes.genCuboid(Float.parseFloat(meshValues[1]), Float.parseFloat(meshValues[2]), Float.parseFloat(meshValues[3]), Float.parseFloat(meshValues[4]), Float.parseFloat(meshValues[5]), Float.parseFloat(meshValues[6])); } else if (meshValues[0].equalsIgnoreCase("file")) { mesh = FileUtils.loadMesh(meshValues[1]); if (meshValues.length > 2) { float x = Float.parseFloat(meshValues[2]); float y = Float.parseFloat(meshValues[3]); float z = Float.parseFloat(meshValues[4]); mesh = Shapes.copyMesh(mesh); Shapes.translateMesh(mesh, x, y, z); } } else { System.err.println("Invalid mesh type "+meshValues[0]); } box = mesh.calculateBoundingBox(); box.min.mul(scale); box.max.mul(scale); } public Mesh getMesh() { return mesh; } public void dispose() { if (!meshValues[0].equals("file") && created) { mesh.dispose(); created = false; } } public void bakeLight(LightManager lights, boolean bakeStatics, Matrix4 mat) { Mesh newMesh = Shapes.insertLight(mesh, lights, bakeStatics, mat); if (!meshValues[0].equals("file")) { mesh.dispose(); } mesh = newMesh; } }