Almost finished with ModelSpec files. This does not build just yet because ModelSpec Readers and Writers need finishing.
This commit is contained in:
parent
f5d3ac5219
commit
f1ad3f02d8
|
@ -51,9 +51,6 @@ public class RenderPart extends ModelRenderer {
|
|||
MuseTextureUtils.bindTexture(part.get().getTexture(nbt));
|
||||
applyTransform();
|
||||
|
||||
|
||||
|
||||
|
||||
int ix = part.get().getColourIndex(nbt);
|
||||
if (ix < colours.length && ix >= 0) {
|
||||
Colour.doGLByInt(colours[ix]);
|
||||
|
|
|
@ -1,72 +0,0 @@
|
|||
package net.machinemuse.powersuits.client.render.modelspec;
|
||||
|
||||
import net.minecraft.client.model.ModelBiped;
|
||||
import net.minecraft.client.model.ModelRenderer;
|
||||
|
||||
/**
|
||||
* Ported to Java by lehjr on 11/5/16.
|
||||
*/
|
||||
//public class ArmorMorphTarget {
|
||||
// public interface MorphTarget {
|
||||
// String name = null;
|
||||
// float degrad = (float) (180F / Math.PI);
|
||||
//
|
||||
// ModelRenderer apply(ModelBiped m);
|
||||
// }
|
||||
//
|
||||
// public static class Cloak implements MorphTarget {
|
||||
// String name = "Cloak";
|
||||
//
|
||||
// public ModelRenderer apply(ModelBiped m) {
|
||||
// return m.bipedCloak;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// public static class Head implements MorphTarget {
|
||||
// String name = "Head";
|
||||
//
|
||||
// public ModelRenderer apply(ModelBiped m) {
|
||||
// return m.bipedHead;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// public static class Body implements MorphTarget {
|
||||
// String name = "Body";
|
||||
//
|
||||
// public ModelRenderer apply(ModelBiped m) {
|
||||
// return m.bipedBody;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// public static class RightArm implements MorphTarget {
|
||||
// String name = "RightArm";
|
||||
//
|
||||
// public ModelRenderer apply(ModelBiped m) {
|
||||
// return m.bipedRightArm;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// public static class LeftArm implements MorphTarget {
|
||||
// String name = "LeftArm";
|
||||
//
|
||||
// public ModelRenderer apply(ModelBiped m) {
|
||||
// return m.bipedLeftArm;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// public static class RightLeg implements MorphTarget {
|
||||
// String name = "RightLeg";
|
||||
//
|
||||
// public ModelRenderer apply(ModelBiped m) {
|
||||
// return m.bipedRightLeg;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// public static class LeftLeg implements MorphTarget {
|
||||
// String name = "LeftLeg";
|
||||
//
|
||||
// public ModelRenderer apply(ModelBiped m) {
|
||||
// return m.bipedLeftLeg;
|
||||
// }
|
||||
// }
|
||||
//}
|
|
@ -1,57 +1,57 @@
|
|||
package net.machinemuse.powersuits.client.render.modelspec
|
||||
|
||||
import net.minecraft.client.model.{ModelBiped, ModelRenderer}
|
||||
|
||||
/**
|
||||
* Author: MachineMuse (Claire Semple)
|
||||
* Created: 2:09 AM, 29/04/13
|
||||
*/
|
||||
|
||||
sealed trait MorphTarget {
|
||||
val name: String
|
||||
val degrad = 180F / Math.PI.asInstanceOf[Float]
|
||||
|
||||
def apply(m: ModelBiped): ModelRenderer
|
||||
}
|
||||
|
||||
case object Cloak extends MorphTarget {
|
||||
val name = "Cloak"
|
||||
|
||||
def apply(m: ModelBiped) = m.bipedCloak
|
||||
}
|
||||
|
||||
case object Head extends MorphTarget {
|
||||
val name = "Head"
|
||||
|
||||
def apply(m: ModelBiped) = m.bipedHead
|
||||
}
|
||||
|
||||
case object Body extends MorphTarget {
|
||||
val name = "Body"
|
||||
|
||||
def apply(m: ModelBiped) = m.bipedBody
|
||||
}
|
||||
|
||||
case object RightArm extends MorphTarget {
|
||||
val name = "RightArm"
|
||||
|
||||
def apply(m: ModelBiped) = m.bipedRightArm
|
||||
}
|
||||
|
||||
case object LeftArm extends MorphTarget {
|
||||
val name = "LeftArm"
|
||||
|
||||
def apply(m: ModelBiped) = m.bipedLeftArm
|
||||
}
|
||||
|
||||
case object RightLeg extends MorphTarget {
|
||||
val name = "RightLeg"
|
||||
|
||||
def apply(m: ModelBiped) = m.bipedRightLeg
|
||||
}
|
||||
|
||||
case object LeftLeg extends MorphTarget {
|
||||
val name = "LeftLeg"
|
||||
|
||||
def apply(m: ModelBiped) = m.bipedLeftLeg
|
||||
}
|
||||
//package net.machinemuse.powersuits.client.render.modelspec
|
||||
//
|
||||
//import net.minecraft.client.model.{ModelBiped, ModelRenderer}
|
||||
//
|
||||
///**
|
||||
// * Author: MachineMuse (Claire Semple)
|
||||
// * Created: 2:09 AM, 29/04/13
|
||||
// */
|
||||
//
|
||||
//sealed trait MorphTarget {
|
||||
// val name: String
|
||||
// val degrad = 180F / Math.PI.asInstanceOf[Float]
|
||||
//
|
||||
// def apply(m: ModelBiped): ModelRenderer
|
||||
//}
|
||||
//
|
||||
//case object Cloak extends MorphTarget {
|
||||
// val name = "Cloak"
|
||||
//
|
||||
// def apply(m: ModelBiped) = m.bipedCloak
|
||||
//}
|
||||
//
|
||||
//case object Head extends MorphTarget {
|
||||
// val name = "Head"
|
||||
//
|
||||
// def apply(m: ModelBiped) = m.bipedHead
|
||||
//}
|
||||
//
|
||||
//case object Body extends MorphTarget {
|
||||
// val name = "Body"
|
||||
//
|
||||
// def apply(m: ModelBiped) = m.bipedBody
|
||||
//}
|
||||
//
|
||||
//case object RightArm extends MorphTarget {
|
||||
// val name = "RightArm"
|
||||
//
|
||||
// def apply(m: ModelBiped) = m.bipedRightArm
|
||||
//}
|
||||
//
|
||||
//case object LeftArm extends MorphTarget {
|
||||
// val name = "LeftArm"
|
||||
//
|
||||
// def apply(m: ModelBiped) = m.bipedLeftArm
|
||||
//}
|
||||
//
|
||||
//case object RightLeg extends MorphTarget {
|
||||
// val name = "RightLeg"
|
||||
//
|
||||
// def apply(m: ModelBiped) = m.bipedRightLeg
|
||||
//}
|
||||
//
|
||||
//case object LeftLeg extends MorphTarget {
|
||||
// val name = "LeftLeg"
|
||||
//
|
||||
// def apply(m: ModelBiped) = m.bipedLeftLeg
|
||||
//}
|
|
@ -0,0 +1,125 @@
|
|||
package net.machinemuse.powersuits.client.render.modelspec;
|
||||
|
||||
import net.machinemuse.numina.geometry.Colour;
|
||||
import net.machinemuse.powersuits.item.ItemPowerArmor;
|
||||
import net.machinemuse.utils.MuseStringUtils;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.client.model.obj.WavefrontObject;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static net.machinemuse.powersuits.client.render.modelspec.MorphTarget.*;
|
||||
|
||||
/**
|
||||
* Author: MachineMuse (Claire Semple)
|
||||
* Created: 9:11 AM, 29/04/13
|
||||
*
|
||||
* Ported to Java by lehjr on 11/8/16.
|
||||
*/
|
||||
public class DefaultModelSpec {
|
||||
public static Colour normalcolour = Colour.WHITE;
|
||||
public static Colour glowcolour = new Colour(17.0 / 255, 78.0 / 255, 1, 1);
|
||||
public static String tex = "/assets/powersuits/textures/models/diffuse.png";
|
||||
|
||||
public static ModelSpec[] loadDefaultModel() {
|
||||
List<ModelSpec> defaultSpecList = new ArrayList<>();
|
||||
|
||||
/* Head ----------------------- */
|
||||
ModelSpec headModel = loadModel(new ResourceLocation("powersuits:models/mps_helm.obj"), tex.split(";"));
|
||||
makeEntries(Head, 0, 0, false, "helm_main;helm_tube_entry1;helm_tubes;helm_tube_entry2".split(";"), headModel);
|
||||
makeEntries(Head, 0, 1, true, "visor".split(";"), headModel);
|
||||
defaultSpecList.add(headModel);
|
||||
|
||||
/* Arms ----------------------- */
|
||||
ModelSpec armsModel = loadModel(new ResourceLocation("powersuits:models/mps_arms.obj"), tex.split(";"));
|
||||
makeEntries(RightArm, 1, 0, false, "arms3".split(";"),armsModel);
|
||||
makeEntries(RightArm, 1, 1, true, "crystal_shoulder_2".split(";"), armsModel);
|
||||
makeEntries(LeftArm, 1, 0, false, "arms2".split(";"), armsModel);
|
||||
makeEntries(LeftArm, 1, 1, true, "crystal_shoulder_1".split(";"), armsModel);
|
||||
defaultSpecList.add(armsModel);
|
||||
|
||||
/* Body ----------------------- */
|
||||
ModelSpec bodyModel = loadModel(new ResourceLocation("powersuits:models/mps_chest.obj"), tex.split(";"));
|
||||
makeEntries(Body, 1, 0, false, "belt;chest_main;polySurface36;backpack;chest_padding".split(";"), bodyModel);
|
||||
makeEntries(Body, 1, 1, true, "crystal_belt".split(";"), bodyModel);
|
||||
defaultSpecList.add(bodyModel);
|
||||
|
||||
/* Legs ----------------------- */
|
||||
ModelSpec legsModel = loadModel(new ResourceLocation("powersuits:models/mps_pantaloons.obj"), tex.split(";"));
|
||||
makeEntries(RightLeg, 2, 0, false, "leg1".split(";"), legsModel);
|
||||
makeEntries(LeftLeg, 2, 0, false, "leg2".split(";"), legsModel);
|
||||
defaultSpecList.add(legsModel);
|
||||
|
||||
/* Feet ----------------------- */
|
||||
ModelSpec feetModel = loadModel(new ResourceLocation("powersuits:models/mps_boots.obj"), tex.split(";"));
|
||||
makeEntries(RightLeg, 3, 0, false, "boots1".split(";"), feetModel);
|
||||
makeEntries(LeftLeg, 3, 0, false, "boots2".split(";"), feetModel);
|
||||
defaultSpecList.add(feetModel);
|
||||
|
||||
return (ModelSpec[]) defaultSpecList.toArray();
|
||||
}
|
||||
|
||||
|
||||
public static ModelSpec loadModel(ResourceLocation file, String[] textures) {
|
||||
WavefrontObject model = ModelRegistry.getInstance().loadModel(file);
|
||||
if (model != null) {
|
||||
return (ModelRegistry.getInstance().put(MuseStringUtils.extractName(file), new ModelSpec(model, textures, null, null, file.toString())));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void makeEntries(MorphTarget target, int slot, int colourIndex, Boolean glow, String[] names, ModelSpec model) {
|
||||
for (String name: names)
|
||||
model.put(name, new ModelPartSpec(model, target, name, slot, colourIndex, glow, name));
|
||||
}
|
||||
|
||||
public static NBTTagCompound makeModelPrefs(ItemStack stack, int slot) {
|
||||
ItemPowerArmor item = (ItemPowerArmor) stack.getItem();
|
||||
Colour normalcolour = item.getColorFromItemStack(stack);
|
||||
Colour glowcolour = item.getGlowFromItemStack(stack);
|
||||
List<NBTTagCompound> list = new ArrayList<>();
|
||||
|
||||
switch (slot) {
|
||||
case 0:
|
||||
list.addAll(makePrefs("mps_helm", "helm_main;helm_tube_entry1;helm_tubes;helm_tube_entry2".split(";"), 0, false));
|
||||
list.addAll(makePrefs("mps_helm", "visor".split(";"), 1, true));
|
||||
break;
|
||||
|
||||
case 1:
|
||||
list.addAll(makePrefs("mps_arms", "arms2;arms3".split(";"), 0, false));
|
||||
list.addAll(makePrefs("mps_arms", "crystal_shoulder_2;crystal_shoulder_1".split(";"), 1, true));
|
||||
list.addAll(makePrefs("mps_chest", "belt;chest_main;polySurface36;backpack;chest_padding".split(";"), 0, false));
|
||||
list.addAll(makePrefs("mps_chest", "crystal_belt".split(";"), 1, true));
|
||||
break;
|
||||
|
||||
case 2:
|
||||
list.addAll(makePrefs("mps_pantaloons", "leg1;leg2".split(";"), 0, false));
|
||||
break;
|
||||
|
||||
case 3:
|
||||
list.addAll(makePrefs("mps_boots", "boots1;boots2".split(";"), 0, false));
|
||||
break;
|
||||
}
|
||||
NBTTagCompound nbt = new NBTTagCompound();
|
||||
for (NBTTagCompound elem: list) {
|
||||
nbt.setTag(elem.getString("model") + "." + elem.getString("part"), elem);
|
||||
}
|
||||
return nbt;
|
||||
}
|
||||
|
||||
public static List<NBTTagCompound> makePrefs(String modelname, String[] partnames, int colour, boolean glow) {
|
||||
List<NBTTagCompound> prefArray = new ArrayList<>();
|
||||
ModelSpec model = ModelRegistry.getInstance().get(modelname);
|
||||
for (String name: partnames)
|
||||
prefArray.add(makePref(model.get(name), colour, glow));
|
||||
return prefArray;
|
||||
}
|
||||
|
||||
public static NBTTagCompound makePref(ModelPartSpec partSpec, Integer colourindex, Boolean glow) {
|
||||
return partSpec.multiSet(new NBTTagCompound(), null, glow, colourindex);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,101 +1,101 @@
|
|||
package net.machinemuse.powersuits.client.render.modelspec
|
||||
|
||||
import net.machinemuse.numina.general.MuseLogger
|
||||
import net.machinemuse.numina.geometry.Colour
|
||||
import net.machinemuse.powersuits.item.ItemPowerArmor
|
||||
import net.machinemuse.utils.MuseStringUtils
|
||||
import net.minecraft.item.ItemStack
|
||||
import net.minecraft.nbt.NBTTagCompound
|
||||
import net.minecraft.util.ResourceLocation
|
||||
|
||||
/**
|
||||
* Author: MachineMuse (Claire Semple)
|
||||
* Created: 9:11 AM, 29/04/13
|
||||
*/
|
||||
object DefaultModelSpec {
|
||||
val normalcolour: Colour = Colour.WHITE
|
||||
val glowcolour: Colour = new Colour(17.0 / 255, 78.0 / 255, 1, 1)
|
||||
val tex = "/assets/powersuits/textures/models/diffuse.png"
|
||||
|
||||
def loadDefaultModel: Option[ModelSpec] = {
|
||||
loadModel(new ResourceLocation("powersuits:models/mps_helm.obj"), tex.split(";")).map(model => {
|
||||
makeEntries(Head, 0, 0, false, "helm_main;helm_tube_entry1;helm_tubes;helm_tube_entry2".split(";"), model)
|
||||
makeEntries(Head, 0, 1, true, "visor".split(";"), model)
|
||||
model
|
||||
})
|
||||
loadModel(new ResourceLocation("powersuits:models/mps_arms.obj"), tex.split(";")).map(model => {
|
||||
makeEntries(RightArm, 1, 0, false, "arms3".split(";"), model)
|
||||
makeEntries(RightArm, 1, 1, true, "crystal_shoulder_2".split(";"), model)
|
||||
makeEntries(LeftArm, 1, 0, false, "arms2".split(";"), model)
|
||||
makeEntries(LeftArm, 1, 1, true, "crystal_shoulder_1".split(";"), model)
|
||||
model
|
||||
})
|
||||
loadModel(new ResourceLocation("powersuits:models/mps_chest.obj"), tex.split(";")).map(model => {
|
||||
makeEntries(Body, 1, 0, false, "belt;chest_main;polySurface36;backpack;chest_padding".split(";"), model)
|
||||
makeEntries(Body, 1, 1, true, "crystal_belt".split(";"), model)
|
||||
model
|
||||
})
|
||||
loadModel(new ResourceLocation("powersuits:models/mps_pantaloons.obj"), tex.split(";")).map(model => {
|
||||
makeEntries(RightLeg, 2, 0, false, "leg1".split(";"), model)
|
||||
makeEntries(LeftLeg, 2, 0, false, "leg2".split(";"), model)
|
||||
model
|
||||
})
|
||||
loadModel(new ResourceLocation("powersuits:models/mps_boots.obj"), tex.split(";")).map(model => {
|
||||
makeEntries(RightLeg, 3, 0, false, "boots1".split(";"), model)
|
||||
makeEntries(LeftLeg, 3, 0, false, "boots2".split(";"), model)
|
||||
model
|
||||
})
|
||||
}
|
||||
|
||||
def loadModel(file: ResourceLocation, textures: Array[String]): Option[ModelSpec] = {
|
||||
ModelRegistry.loadModel(file) match {
|
||||
case Some(m) => Some(ModelRegistry.put(MuseStringUtils.extractName(file), new ModelSpec(m, textures, None, None, file.toString)))
|
||||
case None => MuseLogger.logError("Model file " + file + " not found! D:")
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
def makeEntries(target: MorphTarget, slot: Int, colourIndex: Int, glow: Boolean, names: Array[String], model: ModelSpec) {
|
||||
for (name <- names) {
|
||||
model.put(name, new ModelPartSpec(model, target, name, slot, colourIndex, glow, name))
|
||||
}
|
||||
}
|
||||
|
||||
def makeModelPrefs(stack: ItemStack, slot: Int): NBTTagCompound = {
|
||||
val item = stack.getItem.asInstanceOf[ItemPowerArmor]
|
||||
val normalcolour = item.getColorFromItemStack(stack)
|
||||
val glowcolour = item.getGlowFromItemStack(stack)
|
||||
val list = slot match {
|
||||
case 0 => {
|
||||
makePrefs("mps_helm", "helm_main;helm_tube_entry1;helm_tubes;helm_tube_entry2".split(";"), 0, false) ++
|
||||
makePrefs("mps_helm", "visor".split(";"), 1, true)
|
||||
}
|
||||
case 1 => {
|
||||
makePrefs("mps_arms", "arms2;arms3".split(";"), 0, false) ++
|
||||
makePrefs("mps_arms", "crystal_shoulder_2;crystal_shoulder_1".split(";"), 1, true) ++
|
||||
makePrefs("mps_chest", "belt;chest_main;polySurface36;backpack;chest_padding".split(";"), 0, false) ++
|
||||
makePrefs("mps_chest", "crystal_belt".split(";"), 1, true)
|
||||
}
|
||||
case 2 => {
|
||||
makePrefs("mps_pantaloons", "leg1;leg2".split(";"), 0, false)
|
||||
}
|
||||
case 3 => {
|
||||
makePrefs("mps_boots", "boots1;boots2".split(";"), 0, false)
|
||||
}
|
||||
|
||||
}
|
||||
(new NBTTagCompound() /: list) {
|
||||
case (taglist, elem) => taglist.setTag(elem.getString("model") + "." + elem.getString("part"), elem); taglist
|
||||
}
|
||||
}
|
||||
|
||||
def makePrefs(modelname: String, partnames: Array[String], colour: Int, glow: Boolean): Array[NBTTagCompound] = {
|
||||
ModelRegistry.get(modelname).map(model =>
|
||||
for (name <- partnames) yield makePref(model.get(name).get, Some(colour), Some(glow))
|
||||
) getOrElse Array.empty[NBTTagCompound]
|
||||
}
|
||||
|
||||
def makePref(partSpec: ModelPartSpec, colourindex: Option[Int], glow: Option[Boolean]): NBTTagCompound = {
|
||||
partSpec.multiSet(new NBTTagCompound(), None, glow, colourindex)
|
||||
}
|
||||
}
|
||||
//package net.machinemuse.powersuits.client.render.modelspec
|
||||
//
|
||||
//import net.machinemuse.numina.general.MuseLogger
|
||||
//import net.machinemuse.numina.geometry.Colour
|
||||
//import net.machinemuse.powersuits.item.ItemPowerArmor
|
||||
//import net.machinemuse.utils.MuseStringUtils
|
||||
//import net.minecraft.item.ItemStack
|
||||
//import net.minecraft.nbt.NBTTagCompound
|
||||
//import net.minecraft.util.ResourceLocation
|
||||
//
|
||||
///**
|
||||
// * Author: MachineMuse (Claire Semple)
|
||||
// * Created: 9:11 AM, 29/04/13
|
||||
// */
|
||||
//object DefaultModelSpec {
|
||||
// val normalcolour: Colour = Colour.WHITE
|
||||
// val glowcolour: Colour = new Colour(17.0 / 255, 78.0 / 255, 1, 1)
|
||||
// val tex = "/assets/powersuits/textures/models/diffuse.png"
|
||||
//
|
||||
// def loadDefaultModel: Option[ModelSpec] = {
|
||||
// loadModel(new ResourceLocation("powersuits:models/mps_helm.obj"), tex.split(";")).map(model => {
|
||||
// makeEntries(Head, 0, 0, false, "helm_main;helm_tube_entry1;helm_tubes;helm_tube_entry2".split(";"), model)
|
||||
// makeEntries(Head, 0, 1, true, "visor".split(";"), model)
|
||||
// model
|
||||
// })
|
||||
// loadModel(new ResourceLocation("powersuits:models/mps_arms.obj"), tex.split(";")).map(model => {
|
||||
// makeEntries(RightArm, 1, 0, false, "arms3".split(";"), model)
|
||||
// makeEntries(RightArm, 1, 1, true, "crystal_shoulder_2".split(";"), model)
|
||||
// makeEntries(LeftArm, 1, 0, false, "arms2".split(";"), model)
|
||||
// makeEntries(LeftArm, 1, 1, true, "crystal_shoulder_1".split(";"), model)
|
||||
// model
|
||||
// })
|
||||
// loadModel(new ResourceLocation("powersuits:models/mps_chest.obj"), tex.split(";")).map(model => {
|
||||
// makeEntries(Body, 1, 0, false, "belt;chest_main;polySurface36;backpack;chest_padding".split(";"), model)
|
||||
// makeEntries(Body, 1, 1, true, "crystal_belt".split(";"), model)
|
||||
// model
|
||||
// })
|
||||
// loadModel(new ResourceLocation("powersuits:models/mps_pantaloons.obj"), tex.split(";")).map(model => {
|
||||
// makeEntries(RightLeg, 2, 0, false, "leg1".split(";"), model)
|
||||
// makeEntries(LeftLeg, 2, 0, false, "leg2".split(";"), model)
|
||||
// model
|
||||
// })
|
||||
// loadModel(new ResourceLocation("powersuits:models/mps_boots.obj"), tex.split(";")).map(model => {
|
||||
// makeEntries(RightLeg, 3, 0, false, "boots1".split(";"), model)
|
||||
// makeEntries(LeftLeg, 3, 0, false, "boots2".split(";"), model)
|
||||
// model
|
||||
// })
|
||||
// }
|
||||
//
|
||||
// def loadModel(file: ResourceLocation, textures: Array[String]): Option[ModelSpec] = {
|
||||
// ModelRegistry.loadModel(file) match {
|
||||
// case Some(m) => Some(ModelRegistry.put(MuseStringUtils.extractName(file), new ModelSpec(m, textures, None, None, file.toString)))
|
||||
// case None => MuseLogger.logError("Model file " + file + " not found! D:")
|
||||
// None
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// def makeEntries(target: MorphTarget, slot: Int, colourIndex: Int, glow: Boolean, names: Array[String], model: ModelSpec) {
|
||||
// for (name <- names) {
|
||||
// model.put(name, new ModelPartSpec(model, target, name, slot, colourIndex, glow, name))
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// def makeModelPrefs(stack: ItemStack, slot: Int): NBTTagCompound = {
|
||||
// val item = stack.getItem.asInstanceOf[ItemPowerArmor]
|
||||
// val normalcolour = item.getColorFromItemStack(stack)
|
||||
// val glowcolour = item.getGlowFromItemStack(stack)
|
||||
// val list = slot match {
|
||||
// case 0 => {
|
||||
// makePrefs("mps_helm", "helm_main;helm_tube_entry1;helm_tubes;helm_tube_entry2".split(";"), 0, false) ++
|
||||
// makePrefs("mps_helm", "visor".split(";"), 1, true)
|
||||
// }
|
||||
// case 1 => {
|
||||
// makePrefs("mps_arms", "arms2;arms3".split(";"), 0, false) ++
|
||||
// makePrefs("mps_arms", "crystal_shoulder_2;crystal_shoulder_1".split(";"), 1, true) ++
|
||||
// makePrefs("mps_chest", "belt;chest_main;polySurface36;backpack;chest_padding".split(";"), 0, false) ++
|
||||
// makePrefs("mps_chest", "crystal_belt".split(";"), 1, true)
|
||||
// }
|
||||
// case 2 => {
|
||||
// makePrefs("mps_pantaloons", "leg1;leg2".split(";"), 0, false)
|
||||
// }
|
||||
// case 3 => {
|
||||
// makePrefs("mps_boots", "boots1;boots2".split(";"), 0, false)
|
||||
// }
|
||||
//
|
||||
// }
|
||||
// (new NBTTagCompound() /: list) {
|
||||
// case (taglist, elem) => taglist.setTag(elem.getString("model") + "." + elem.getString("part"), elem); taglist
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// def makePrefs(modelname: String, partnames: Array[String], colour: Int, glow: Boolean): Array[NBTTagCompound] = {
|
||||
// ModelRegistry.get(modelname).map(model =>
|
||||
// for (name <- partnames) yield makePref(model.get(name).get, Some(colour), Some(glow))
|
||||
// ) getOrElse Array.empty[NBTTagCompound]
|
||||
// }
|
||||
//
|
||||
// def makePref(partSpec: ModelPartSpec, colourindex: Option[Int], glow: Option[Boolean]): NBTTagCompound = {
|
||||
// partSpec.multiSet(new NBTTagCompound(), None, glow, colourindex)
|
||||
// }
|
||||
//}
|
||||
|
|
|
@ -0,0 +1,91 @@
|
|||
package net.machinemuse.powersuits.client.render.modelspec;
|
||||
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
|
||||
/**
|
||||
* Ported to Java by lehjr on 11/8/16.
|
||||
*/
|
||||
public class ModelPartSpec
|
||||
{
|
||||
public ModelSpec modelSpec;
|
||||
private MorphTarget morph;
|
||||
public String partName;
|
||||
private int slot;
|
||||
private int defaultcolourindex;
|
||||
private boolean defaultglow;
|
||||
private String displayName;
|
||||
|
||||
public ModelPartSpec(ModelSpec modelSpec, MorphTarget morph, String partName, int slot, Integer defaultcolourindex, Boolean defaultglow, String displayName) {
|
||||
this.modelSpec = modelSpec;
|
||||
this.morph = morph;
|
||||
this.partName = partName;
|
||||
this.slot = slot;
|
||||
this.defaultcolourindex = (defaultcolourindex != null) ? defaultcolourindex : 0;
|
||||
this.defaultglow = (defaultglow != null) ? defaultglow : false;
|
||||
this.displayName = displayName;
|
||||
}
|
||||
|
||||
public String getTexture(NBTTagCompound nbt) {
|
||||
return (nbt.hasKey("texture") ? nbt.getString("texture") : modelSpec.textures[0]);
|
||||
}
|
||||
|
||||
public void setTexture(NBTTagCompound nbt, String s) {
|
||||
if (s.equals("") || s.equalsIgnoreCase(modelSpec.textures[0])) {
|
||||
nbt.removeTag("texture");
|
||||
}
|
||||
else {
|
||||
nbt.setString("texture", s);
|
||||
}
|
||||
}
|
||||
|
||||
public int getColourIndex(NBTTagCompound nbt) {
|
||||
return nbt.hasKey("colourindex") ? nbt.getInteger("colourindex") : this.defaultcolourindex;
|
||||
}
|
||||
|
||||
public void setColourIndex(NBTTagCompound nbt, int c) {
|
||||
if (c == this.defaultcolourindex) {
|
||||
nbt.removeTag("colourindex");
|
||||
}
|
||||
else {
|
||||
nbt.setInteger("colourindex", c);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean getGlow(NBTTagCompound nbt) {
|
||||
return nbt.hasKey("glow") ? nbt.getBoolean("glow") : this.defaultglow;
|
||||
}
|
||||
|
||||
public void setGlow(NBTTagCompound nbt, boolean g) {
|
||||
if (g == this.defaultglow) {
|
||||
nbt.removeTag("glow");
|
||||
}
|
||||
else {
|
||||
nbt.setBoolean("glow", g);
|
||||
}
|
||||
}
|
||||
|
||||
public void setModel(NBTTagCompound nbt, ModelSpec model) {
|
||||
String modelString = ModelRegistry.getInstance().inverse().get(model);
|
||||
setModel(nbt, ((modelString != null) ? modelString : ""));
|
||||
}
|
||||
|
||||
public void setModel(NBTTagCompound nbt, String modelname) {
|
||||
nbt.setString("model", modelname);
|
||||
}
|
||||
|
||||
public void setPart(NBTTagCompound nbt) {
|
||||
nbt.setString("part", this.partName);
|
||||
}
|
||||
|
||||
public void setPartAndModel(NBTTagCompound nbt) {
|
||||
}
|
||||
|
||||
public NBTTagCompound multiSet(NBTTagCompound nbt, String tex, Boolean glow, Integer c) {
|
||||
this.setPart(nbt);
|
||||
this.setModel(nbt, this.modelSpec);
|
||||
this.setTexture(nbt, (tex != null) ? tex : "");
|
||||
this.setGlow(nbt, (glow != null) ? glow : false);
|
||||
this.setColourIndex(nbt, (c != null) ? c : defaultcolourindex);
|
||||
return nbt;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,64 @@
|
|||
//package net.machinemuse.powersuits.client.render.modelspec
|
||||
//
|
||||
//import net.minecraft.nbt.NBTTagCompound
|
||||
//
|
||||
///**
|
||||
// * Ported to Java by lehjr on 11/8/16.
|
||||
// */
|
||||
//class ModelPartSpec(val modelSpec: ModelSpec,
|
||||
// val morph: MorphTarget,
|
||||
// val partName: String,
|
||||
// val slot: Int,
|
||||
// val defaultcolourindex: Int = 0,
|
||||
// val defaultglow: Boolean = false,
|
||||
// val displayName: String) {
|
||||
//
|
||||
// def getTexture(nbt: NBTTagCompound): String = {
|
||||
// if (nbt hasKey "texture") nbt getString "texture" else modelSpec.textures.head
|
||||
// }
|
||||
//
|
||||
// def setTexture(nbt: NBTTagCompound, s: String) {
|
||||
// if (s.equals("") || s.equalsIgnoreCase(modelSpec.textures.head)) nbt removeTag "texture" else nbt setString("texture", s)
|
||||
// }
|
||||
//
|
||||
// def getColourIndex(nbt: NBTTagCompound): Int = {
|
||||
// if (nbt hasKey "colourindex") nbt getInteger "colourindex" else defaultcolourindex
|
||||
// }
|
||||
//
|
||||
// def setColourIndex(nbt: NBTTagCompound, c: Int) {
|
||||
// if (c == defaultcolourindex) nbt removeTag "colourindex" else nbt setInteger("colourindex", c)
|
||||
// }
|
||||
//
|
||||
// def getGlow(nbt: NBTTagCompound): Boolean = {
|
||||
// if (nbt hasKey "glow") nbt getBoolean "glow" else defaultglow
|
||||
// }
|
||||
//
|
||||
// def setGlow(nbt: NBTTagCompound, g: Boolean) {
|
||||
// if (g == defaultglow) nbt removeTag "glow" else nbt setBoolean("glow", g)
|
||||
// }
|
||||
//
|
||||
// def setModel(nbt: NBTTagCompound, model: ModelSpec) {
|
||||
// setModel(nbt, ModelRegistry.inverse.getOrElse(model, ""))
|
||||
// }
|
||||
//
|
||||
// def setModel(nbt: NBTTagCompound, modelname: String) {
|
||||
// nbt setString("model", modelname)
|
||||
// }
|
||||
//
|
||||
// def setPart(nbt: NBTTagCompound) {
|
||||
// nbt setString("part", partName)
|
||||
// }
|
||||
//
|
||||
// def setPartAndModel(nbt: NBTTagCompound) {
|
||||
// }
|
||||
//
|
||||
// def multiSet(nbt: NBTTagCompound, tex: Option[String], glow: Option[Boolean], c: Option[Int]): NBTTagCompound = {
|
||||
// setPart(nbt)
|
||||
// setModel(nbt, this.modelSpec)
|
||||
// setTexture(nbt, tex.getOrElse(""))
|
||||
// setGlow(nbt, glow.getOrElse(false))
|
||||
// setColourIndex(nbt, c.getOrElse(defaultcolourindex))
|
||||
// nbt
|
||||
// }
|
||||
//
|
||||
//}
|
|
@ -0,0 +1,71 @@
|
|||
package net.machinemuse.powersuits.client.render.modelspec;
|
||||
|
||||
import net.machinemuse.numina.general.MuseLogger;
|
||||
import net.machinemuse.numina.scala.MuseRegistry;
|
||||
import net.machinemuse.utils.MuseStringUtils;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.client.model.AdvancedModelLoader;
|
||||
import net.minecraftforge.client.model.IModelCustom;
|
||||
import net.minecraftforge.client.model.obj.WavefrontObject;
|
||||
|
||||
/**
|
||||
* Author: MachineMuse (Claire Semple)
|
||||
* Created: 7:44 AM, 4/28/13
|
||||
*
|
||||
* Ported to Java by lehjr on 11/8/16.
|
||||
*
|
||||
* Note: make sure to have null checks in place.
|
||||
*/
|
||||
public class ModelRegistry extends MuseRegistry<ModelSpec> {
|
||||
private ModelRegistry(){
|
||||
}
|
||||
|
||||
private static ModelRegistry INSTANCE;
|
||||
|
||||
public static ModelRegistry getInstance() {
|
||||
if (INSTANCE == null)
|
||||
INSTANCE = new ModelRegistry();
|
||||
return INSTANCE;
|
||||
}
|
||||
|
||||
public WavefrontObject loadModel(ResourceLocation resource) {
|
||||
String name = MuseStringUtils.extractName(resource);
|
||||
ModelSpec spec = get(name);
|
||||
if (spec == null)
|
||||
return wrap(resource);
|
||||
return spec.model;
|
||||
}
|
||||
|
||||
public WavefrontObject wrap(ResourceLocation resource) {
|
||||
MuseLogger.logDebug("Loading " + resource + " as " + MuseStringUtils.extractName(resource));
|
||||
IModelCustom model = AdvancedModelLoader.loadModel(resource);
|
||||
if (model instanceof WavefrontObject)
|
||||
return (WavefrontObject) model;
|
||||
MuseLogger.logError("Model loading failed :( " + resource);
|
||||
return null;
|
||||
}
|
||||
|
||||
public ModelSpec getModel(NBTTagCompound nbt) {
|
||||
return get(nbt.getString("model"));
|
||||
}
|
||||
|
||||
public ModelPartSpec getPart(NBTTagCompound nbt, ModelSpec model) {
|
||||
return model.get(nbt.getString("part"));
|
||||
}
|
||||
|
||||
public ModelPartSpec getPart(NBTTagCompound nbt) {
|
||||
return getPart(nbt, getModel(nbt));
|
||||
//getModel(nbt).flatMap(m => m.get(nbt getString "part"))
|
||||
// FIXME: not sure if this is right
|
||||
}
|
||||
|
||||
public NBTTagCompound getSpecTag(NBTTagCompound museRenderTag, ModelPartSpec spec) {
|
||||
String name = makeName(spec);
|
||||
return (museRenderTag.hasKey(name)) ? (museRenderTag.getCompoundTag(name)) : null;
|
||||
}
|
||||
|
||||
public String makeName(ModelPartSpec spec) {
|
||||
return spec.modelSpec.getOwnName() + "." + spec.partName;
|
||||
}
|
||||
}
|
|
@ -1,124 +1,124 @@
|
|||
package net.machinemuse.powersuits.client.render.modelspec
|
||||
|
||||
import net.machinemuse.numina.general.MuseLogger
|
||||
import net.machinemuse.numina.scala.MuseRegistry
|
||||
import net.machinemuse.utils.MuseStringUtils
|
||||
import net.minecraft.nbt.NBTTagCompound
|
||||
import net.minecraft.util.{ResourceLocation, Vec3}
|
||||
import net.minecraftforge.client.model.AdvancedModelLoader
|
||||
import net.minecraftforge.client.model.obj.WavefrontObject
|
||||
|
||||
/**
|
||||
* Author: MachineMuse (Claire Semple)
|
||||
* Created: 7:44 AM, 4/28/13
|
||||
*/
|
||||
object ModelRegistry extends MuseRegistry[ModelSpec] {
|
||||
def loadModel(resource: ResourceLocation): Option[WavefrontObject] = {
|
||||
val name = MuseStringUtils.extractName(resource)
|
||||
get(name) match {
|
||||
case Some(i) => Some(i.model)
|
||||
case None => wrap(resource)
|
||||
}
|
||||
}
|
||||
|
||||
def wrap(resource: ResourceLocation): Option[WavefrontObject] = {
|
||||
MuseLogger.logDebug("Loading " + resource + " as " + MuseStringUtils.extractName(resource))
|
||||
AdvancedModelLoader.loadModel(resource) match {
|
||||
case m: WavefrontObject => Some(m)
|
||||
case _ => MuseLogger.logError("Model loading failed :( " + resource)
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
def getModel(nbt: NBTTagCompound): Option[ModelSpec] = {
|
||||
get(nbt.getString("model"))
|
||||
}
|
||||
|
||||
def getPart(nbt: NBTTagCompound, model: ModelSpec) = {
|
||||
model.get(nbt getString "part")
|
||||
}
|
||||
|
||||
def getPart(nbt: NBTTagCompound): Option[ModelPartSpec] = {
|
||||
getModel(nbt).flatMap(m => m.get(nbt getString "part"))
|
||||
}
|
||||
|
||||
def getSpecTag(museRenderTag: NBTTagCompound, spec: ModelPartSpec): Option[NBTTagCompound] = {
|
||||
val name = makeName(spec)
|
||||
if (museRenderTag.hasKey(name)) Some(museRenderTag.getCompoundTag(name)) else None
|
||||
}
|
||||
|
||||
def makeName(spec: ModelPartSpec) = spec.modelSpec.getOwnName + "." + spec.partName
|
||||
}
|
||||
|
||||
class ModelSpec(val model: WavefrontObject,
|
||||
val textures: Array[String],
|
||||
val offset: Option[Vec3],
|
||||
val rotation: Option[Vec3],
|
||||
val filename: String
|
||||
) extends MuseRegistry[ModelPartSpec] {
|
||||
def applyOffsetAndRotation() = {
|
||||
// TODO: Implement
|
||||
}
|
||||
|
||||
def getOwnName = {
|
||||
ModelRegistry.getName(this).getOrElse("")
|
||||
}
|
||||
}
|
||||
|
||||
class ModelPartSpec(val modelSpec: ModelSpec,
|
||||
val morph: MorphTarget,
|
||||
val partName: String,
|
||||
val slot: Int,
|
||||
val defaultcolourindex: Int = 0,
|
||||
val defaultglow: Boolean = false,
|
||||
val displayName: String) {
|
||||
|
||||
def getTexture(nbt: NBTTagCompound): String = {
|
||||
if (nbt hasKey "texture") nbt getString "texture" else modelSpec.textures.head
|
||||
}
|
||||
|
||||
def setTexture(nbt: NBTTagCompound, s: String) {
|
||||
if (s.equals("") || s.equalsIgnoreCase(modelSpec.textures.head)) nbt removeTag "texture" else nbt setString("texture", s)
|
||||
}
|
||||
|
||||
def getColourIndex(nbt: NBTTagCompound): Int = {
|
||||
if (nbt hasKey "colourindex") nbt getInteger "colourindex" else defaultcolourindex
|
||||
}
|
||||
|
||||
def setColourIndex(nbt: NBTTagCompound, c: Int) {
|
||||
if (c == defaultcolourindex) nbt removeTag "colourindex" else nbt setInteger("colourindex", c)
|
||||
}
|
||||
|
||||
def getGlow(nbt: NBTTagCompound): Boolean = {
|
||||
if (nbt hasKey "glow") nbt getBoolean "glow" else defaultglow
|
||||
}
|
||||
|
||||
def setGlow(nbt: NBTTagCompound, g: Boolean) {
|
||||
if (g == defaultglow) nbt removeTag "glow" else nbt setBoolean("glow", g)
|
||||
}
|
||||
|
||||
def setModel(nbt: NBTTagCompound, model: ModelSpec) {
|
||||
setModel(nbt, ModelRegistry.inverse.getOrElse(model, ""))
|
||||
}
|
||||
|
||||
def setModel(nbt: NBTTagCompound, modelname: String) {
|
||||
nbt setString("model", modelname)
|
||||
}
|
||||
|
||||
def setPart(nbt: NBTTagCompound) {
|
||||
nbt setString("part", partName)
|
||||
}
|
||||
|
||||
def setPartAndModel(nbt: NBTTagCompound) {
|
||||
}
|
||||
|
||||
def multiSet(nbt: NBTTagCompound, tex: Option[String], glow: Option[Boolean], c: Option[Int]): NBTTagCompound = {
|
||||
setPart(nbt)
|
||||
setModel(nbt, this.modelSpec)
|
||||
setTexture(nbt, tex.getOrElse(""))
|
||||
setGlow(nbt, glow.getOrElse(false))
|
||||
setColourIndex(nbt, c.getOrElse(defaultcolourindex))
|
||||
nbt
|
||||
}
|
||||
|
||||
}
|
||||
//package net.machinemuse.powersuits.client.render.modelspec
|
||||
//
|
||||
//import net.machinemuse.numina.general.MuseLogger
|
||||
//import net.machinemuse.numina.scala.MuseRegistry
|
||||
//import net.machinemuse.utils.MuseStringUtils
|
||||
//import net.minecraft.nbt.NBTTagCompound
|
||||
//import net.minecraft.util.{ResourceLocation, Vec3}
|
||||
//import net.minecraftforge.client.model.AdvancedModelLoader
|
||||
//import net.minecraftforge.client.model.obj.WavefrontObject
|
||||
//
|
||||
///**
|
||||
// * Author: MachineMuse (Claire Semple)
|
||||
// * Created: 7:44 AM, 4/28/13
|
||||
// */
|
||||
////object ModelRegistry extends MuseRegistry[ModelSpec] {
|
||||
//// def loadModel(resource: ResourceLocation): Option[WavefrontObject] = {
|
||||
//// val name = MuseStringUtils.extractName(resource)
|
||||
//// get(name) match {
|
||||
//// case Some(i) => Some(i.model)
|
||||
//// case None => wrap(resource)
|
||||
//// }
|
||||
//// }
|
||||
////
|
||||
//// def wrap(resource: ResourceLocation): Option[WavefrontObject] = {
|
||||
//// MuseLogger.logDebug("Loading " + resource + " as " + MuseStringUtils.extractName(resource))
|
||||
//// AdvancedModelLoader.loadModel(resource) match {
|
||||
//// case m: WavefrontObject => Some(m)
|
||||
//// case _ => MuseLogger.logError("Model loading failed :( " + resource)
|
||||
//// None
|
||||
//// }
|
||||
//// }
|
||||
////
|
||||
//// def getModel(nbt: NBTTagCompound): Option[ModelSpec] = {
|
||||
//// get(nbt.getString("model"))
|
||||
//// }
|
||||
////
|
||||
//// def getPart(nbt: NBTTagCompound, model: ModelSpec) = {
|
||||
//// model.get(nbt getString "part")
|
||||
//// }
|
||||
////
|
||||
//// def getPart(nbt: NBTTagCompound): Option[ModelPartSpec] = {
|
||||
//// getModel(nbt).flatMap(m => m.get(nbt getString "part"))
|
||||
//// }
|
||||
////
|
||||
//// def getSpecTag(museRenderTag: NBTTagCompound, spec: ModelPartSpec): Option[NBTTagCompound] = {
|
||||
//// val name = makeName(spec)
|
||||
//// if (museRenderTag.hasKey(name)) Some(museRenderTag.getCompoundTag(name)) else None
|
||||
//// }
|
||||
////
|
||||
//// def makeName(spec: ModelPartSpec) = spec.modelSpec.getOwnName + "." + spec.partName
|
||||
////}
|
||||
//
|
||||
////class ModelSpec(val model: WavefrontObject,
|
||||
//// val textures: Array[String],
|
||||
//// val offset: Option[Vec3],
|
||||
//// val rotation: Option[Vec3],
|
||||
//// val filename: String
|
||||
//// ) extends MuseRegistry[ModelPartSpec] {
|
||||
//// def applyOffsetAndRotation() = {
|
||||
//// // TODO: Implement
|
||||
//// }
|
||||
////
|
||||
//// def getOwnName = {
|
||||
//// ModelRegistry.getName(this).getOrElse("")
|
||||
//// }
|
||||
////}
|
||||
//
|
||||
//class ModelPartSpec(val modelSpec: ModelSpec,
|
||||
// val morph: MorphTarget,
|
||||
// val partName: String,
|
||||
// val slot: Int,
|
||||
// val defaultcolourindex: Int = 0,
|
||||
// val defaultglow: Boolean = false,
|
||||
// val displayName: String) {
|
||||
//
|
||||
// def getTexture(nbt: NBTTagCompound): String = {
|
||||
// if (nbt hasKey "texture") nbt getString "texture" else modelSpec.textures.head
|
||||
// }
|
||||
//
|
||||
// def setTexture(nbt: NBTTagCompound, s: String) {
|
||||
// if (s.equals("") || s.equalsIgnoreCase(modelSpec.textures.head)) nbt removeTag "texture" else nbt setString("texture", s)
|
||||
// }
|
||||
//
|
||||
// def getColourIndex(nbt: NBTTagCompound): Int = {
|
||||
// if (nbt hasKey "colourindex") nbt getInteger "colourindex" else defaultcolourindex
|
||||
// }
|
||||
//
|
||||
// def setColourIndex(nbt: NBTTagCompound, c: Int) {
|
||||
// if (c == defaultcolourindex) nbt removeTag "colourindex" else nbt setInteger("colourindex", c)
|
||||
// }
|
||||
//
|
||||
// def getGlow(nbt: NBTTagCompound): Boolean = {
|
||||
// if (nbt hasKey "glow") nbt getBoolean "glow" else defaultglow
|
||||
// }
|
||||
//
|
||||
// def setGlow(nbt: NBTTagCompound, g: Boolean) {
|
||||
// if (g == defaultglow) nbt removeTag "glow" else nbt setBoolean("glow", g)
|
||||
// }
|
||||
//
|
||||
// def setModel(nbt: NBTTagCompound, model: ModelSpec) {
|
||||
// setModel(nbt, ModelRegistry.inverse.getOrElse(model, ""))
|
||||
// }
|
||||
//
|
||||
// def setModel(nbt: NBTTagCompound, modelname: String) {
|
||||
// nbt setString("model", modelname)
|
||||
// }
|
||||
//
|
||||
// def setPart(nbt: NBTTagCompound) {
|
||||
// nbt setString("part", partName)
|
||||
// }
|
||||
//
|
||||
// def setPartAndModel(nbt: NBTTagCompound) {
|
||||
// }
|
||||
//
|
||||
// def multiSet(nbt: NBTTagCompound, tex: Option[String], glow: Option[Boolean], c: Option[Int]): NBTTagCompound = {
|
||||
// setPart(nbt)
|
||||
// setModel(nbt, this.modelSpec)
|
||||
// setTexture(nbt, tex.getOrElse(""))
|
||||
// setGlow(nbt, glow.getOrElse(false))
|
||||
// setColourIndex(nbt, c.getOrElse(defaultcolourindex))
|
||||
// nbt
|
||||
// }
|
||||
//
|
||||
//}
|
|
@ -1,84 +1,36 @@
|
|||
//package net.machinemuse.powersuits.client.render.modelspec;
|
||||
//
|
||||
//import net.machinemuse.numina.scala.MuseRegistry;
|
||||
//import net.minecraft.util.Vec3;
|
||||
//import net.minecraftforge.client.model.obj.WavefrontObject;
|
||||
//
|
||||
///**
|
||||
// * Author: MachineMuse (Claire Semple)
|
||||
// * Created: 7:44 AM, 4/28/13
|
||||
// *
|
||||
// * Ported to Java by lehjr on 10/23/16.
|
||||
// */
|
||||
//public class ModelSpec extends MuseRegistry<ModelPartSpec> {
|
||||
// private final WavefrontObject model;
|
||||
// private final String[] textures;
|
||||
// private final Vec3 offset;
|
||||
// private final Vec3 rotation;
|
||||
// private final String filename;
|
||||
//
|
||||
// public ModelSpec(final WavefrontObject model, final String[] textures, final Vec3 offset, final Vec3 rotation, final String filename) {
|
||||
// this.model = model;
|
||||
// this.textures = textures;
|
||||
// this.offset = offset;
|
||||
// this.rotation = rotation;
|
||||
// this.filename = filename;
|
||||
// }
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//// class ModelSpec(val model: WavefrontObject,
|
||||
//// val textures: Array[String],
|
||||
//// val offset: Option[Vec3],
|
||||
//// val rotation: Option[Vec3],
|
||||
//// val filename: String
|
||||
//// ) extends MuseRegistry[ModelPartSpec] {
|
||||
//// def applyOffsetAndRotation() = {
|
||||
//// // TODO: Implement
|
||||
//// }
|
||||
////
|
||||
//// def getOwnName = {
|
||||
//// ModelRegistry.getName(this).getOrElse("")
|
||||
//// }
|
||||
//// }
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
// public WavefrontObject model() {
|
||||
// return this.model;
|
||||
// }
|
||||
//
|
||||
// public String[] textures() {
|
||||
// return this.textures;
|
||||
// }
|
||||
//
|
||||
// public Vec3 offset() {
|
||||
// return this.offset;
|
||||
// }
|
||||
//
|
||||
// public Vec3 rotation() {
|
||||
// return this.rotation;
|
||||
// }
|
||||
//
|
||||
// public String filename() {
|
||||
// return this.filename;
|
||||
// }
|
||||
//
|
||||
// public void applyOffsetAndRotation() {
|
||||
// }
|
||||
//
|
||||
// public String getOwnName() {
|
||||
// return (ModelRegistry.getName(this.) != null) ? ModelRegistry.getName(this) : ("");
|
||||
//
|
||||
//
|
||||
// return (String)((MuseBiMap<Object, T>)ModelRegistry$.MODULE$).getName((T)this).getOrElse((Function0)new ModelSpec$$anonfun$getOwnName.ModelSpec$$anonfun$getOwnName$1(this));
|
||||
// }
|
||||
//
|
||||
//
|
||||
//}
|
||||
//
|
||||
package net.machinemuse.powersuits.client.render.modelspec;
|
||||
|
||||
import net.machinemuse.numina.scala.MuseRegistry;
|
||||
import net.minecraft.util.Vec3;
|
||||
import net.minecraftforge.client.model.obj.WavefrontObject;
|
||||
|
||||
/**
|
||||
* Author: MachineMuse (Claire Semple)
|
||||
* Created: 7:44 AM, 4/28/13
|
||||
*
|
||||
* Ported to Java by lehjr on 11/8/16.
|
||||
*/
|
||||
public class ModelSpec extends MuseRegistry<ModelPartSpec>
|
||||
{
|
||||
public WavefrontObject model;
|
||||
public String[] textures;
|
||||
public Vec3 offset;
|
||||
public Vec3 rotation;
|
||||
public String filename;
|
||||
|
||||
public ModelSpec(WavefrontObject model, String[] textures, Vec3 offset, Vec3 rotation, String filename) {
|
||||
this.model = model;
|
||||
this.textures = textures;
|
||||
this.offset = offset;
|
||||
this.rotation = rotation;
|
||||
this.filename = filename;
|
||||
}
|
||||
|
||||
public void applyOffsetAndRotation() {
|
||||
}
|
||||
|
||||
public String getOwnName() {
|
||||
String name = ModelRegistry.getInstance().getName(this);
|
||||
return (name != null) ? name : "";
|
||||
}
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
//package net.machinemuse.powersuits.client.render.modelspec
|
||||
//
|
||||
//import net.machinemuse.numina.scala.MuseRegistry
|
||||
//import net.minecraft.util.Vec3
|
||||
//import net.minecraftforge.client.model.obj.WavefrontObject
|
||||
//
|
||||
///**
|
||||
// * Ported to Java by lehjr on 11/8/16.
|
||||
// */
|
||||
//class ModelSpec(val model: WavefrontObject,
|
||||
// val textures: Array[String],
|
||||
// val offset: Option[Vec3],
|
||||
// val rotation: Option[Vec3],
|
||||
// val filename: String
|
||||
// ) extends MuseRegistry[ModelPartSpec] {
|
||||
// def applyOffsetAndRotation() = {
|
||||
// // TODO: Implement
|
||||
// }
|
||||
//
|
||||
// def getOwnName = {
|
||||
// ModelRegistry.getName(this).getOrElse("")
|
||||
// }
|
||||
//}
|
||||
//
|
|
@ -0,0 +1,21 @@
|
|||
package net.machinemuse.powersuits.client.render.modelspec
|
||||
|
||||
import java.io.{File, FileOutputStream, PrintWriter}
|
||||
|
||||
import com.google.gson.Gson
|
||||
|
||||
/**
|
||||
* Author: MachineMuse (Claire Semple)
|
||||
* Created: 9:10 AM, 29/04/13
|
||||
*/
|
||||
object ModelSpecJSONWriter {
|
||||
def writeRegistry(file: String) {
|
||||
val gson = new Gson()
|
||||
import scala.collection.JavaConverters._
|
||||
val registry = ModelRegistry.apply.asJava
|
||||
val jsonwrite = gson.toJson(registry)
|
||||
val w = new PrintWriter(new FileOutputStream(new File(file)))
|
||||
w.print(jsonwrite)
|
||||
w.close()
|
||||
}
|
||||
}
|
|
@ -0,0 +1,154 @@
|
|||
package net.machinemuse.powersuits.client.render.modelspec;
|
||||
|
||||
import net.machinemuse.numina.geometry.Colour;
|
||||
import net.minecraft.util.Vec3;
|
||||
import net.minecraftforge.client.model.obj.GroupObject;
|
||||
import scala.xml.NodeSeq;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.awt.*;
|
||||
import java.util.Iterator;
|
||||
|
||||
import static net.machinemuse.powersuits.client.render.modelspec.MorphTarget.*;
|
||||
|
||||
/**
|
||||
* Author: MachineMuse (Claire Semple)
|
||||
* Created: 8:44 AM, 4/28/13
|
||||
*
|
||||
* Ported to Java by lehjr on 11/8/16.
|
||||
*/
|
||||
public class ModelSpecXMLReader {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//package net.machinemuse.powersuits.client.render.modelspec
|
||||
//
|
||||
//import java.awt.Color
|
||||
//import java.net.URL
|
||||
//
|
||||
//import net.machinemuse.numina.general.MuseLogger
|
||||
//import net.machinemuse.numina.geometry.Colour
|
||||
//import net.machinemuse.utils.MuseStringUtils
|
||||
//import net.minecraft.util.{ResourceLocation, Vec3}
|
||||
//
|
||||
//import scala.xml.{NodeSeq, XML}
|
||||
//
|
||||
//
|
||||
|
||||
//object ModelSpecXMLReader {
|
||||
// def parseFile(file: URL) = {
|
||||
// val xml = XML.load(file)
|
||||
// (xml \\ "model") foreach {
|
||||
// modelnode => parseModel(modelnode)
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// def parseModel(modelnode: NodeSeq) = {
|
||||
// val file = (modelnode \ "@file").text
|
||||
// val textures = (modelnode \ "@textures").text.split(",")
|
||||
// val offset = parseVector((modelnode \ "@offset").text)
|
||||
// val rotation = parseVector((modelnode \ "@rotation").text)
|
||||
//
|
||||
// ModelRegistry.loadModel(new ResourceLocation(file)) match {
|
||||
// case Some(m) => {
|
||||
// val modelspec = new ModelSpec(m, textures, offset, rotation, file)
|
||||
// val existingspec = ModelRegistry.put(MuseStringUtils.extractName(file), modelspec)
|
||||
// (modelnode \ "binding").foreach {
|
||||
// bindingnode => parseBinding(bindingnode, existingspec)
|
||||
// }
|
||||
// }
|
||||
// case None => MuseLogger logError "Model file " + file + " not found! D:"
|
||||
// }
|
||||
//
|
||||
// }
|
||||
//
|
||||
def parseBinding(bindingnode: NodeSeq, modelspec: ModelSpec) = {
|
||||
val slot = parseInt((bindingnode \ "@slot").text)
|
||||
val target = parseTarget((bindingnode \ "@target").text)
|
||||
slot.foreach(slot => {
|
||||
target.foreach(target =>
|
||||
(bindingnode \ "part").foreach {
|
||||
partnode =>
|
||||
parseParts(partnode, modelspec, slot, target)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
public void parseParts(NodeSeq partNode, ModelSpec modelspec, int slot, MorphTarget target) {
|
||||
val defaultcolor = parseColour((partNode \ "@defaultcolor").text)
|
||||
val defaultglow = parseBool((partNode \ "@defaultglow").text)
|
||||
val name = (partNode \ "@name").text
|
||||
val polygroup = validatePolygroup((partNode \ "@polygroup").text, modelspec)
|
||||
polygroup.map(polygroup => {
|
||||
val partspec = new ModelPartSpec(modelspec, target, polygroup, slot, 0, defaultglow.getOrElse(false), name)
|
||||
modelspec.put(polygroup, partspec)
|
||||
})
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public String validatePolygroup(String s, ModelSpec m) {
|
||||
Iterator<GroupObject> it = m.model.groupObjects.iterator();
|
||||
while (it.hasNext()) {
|
||||
if (it.next().name.equals(s)) return s;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Boolean parseBool(String s) {
|
||||
try {
|
||||
return Boolean.parseBoolean(s);
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Colour parseColour(String s) {
|
||||
try {
|
||||
Color c = Color.decode(s);
|
||||
return new Colour(c.getRed(), c.getGreen(), c.getBlue(), c.getAlpha())
|
||||
} catch (Exception e){
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public MorphTarget parseTarget(String s) {
|
||||
switch (s.toLowerCase()) {
|
||||
case "head": return Head;
|
||||
case "body": return Body;
|
||||
case "leftarm": return LeftArm;
|
||||
case "rightarm": return RightArm;
|
||||
case "leftleg": return LeftLeg;
|
||||
case "rightleg": return RightLeg;
|
||||
case "cloak": return Cloak;
|
||||
default: return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer parseInt(String s) {
|
||||
try {
|
||||
return Integer.parseInt(s);
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Vec3 parseVector(String s) {
|
||||
try {
|
||||
String[] ss = s.split(",");
|
||||
double x = Double.parseDouble(ss[0]);
|
||||
double y = Double.parseDouble(ss[1]);
|
||||
double z = Double.parseDouble(ss[2]);
|
||||
|
||||
return Vec3.createVectorHelper(x, y, z);
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,121 +1,121 @@
|
|||
package net.machinemuse.powersuits.client.render.modelspec
|
||||
|
||||
import java.awt.Color
|
||||
import java.net.URL
|
||||
|
||||
import net.machinemuse.numina.general.MuseLogger
|
||||
import net.machinemuse.numina.geometry.Colour
|
||||
import net.machinemuse.utils.MuseStringUtils
|
||||
import net.minecraft.util.{ResourceLocation, Vec3}
|
||||
|
||||
import scala.xml.{NodeSeq, XML}
|
||||
|
||||
|
||||
/**
|
||||
* Author: MachineMuse (Claire Semple)
|
||||
* Created: 8:44 AM, 4/28/13
|
||||
*/
|
||||
object ModelSpecXMLReader {
|
||||
def parseFile(file: URL) = {
|
||||
val xml = XML.load(file)
|
||||
(xml \\ "model") foreach {
|
||||
modelnode => parseModel(modelnode)
|
||||
}
|
||||
}
|
||||
|
||||
def parseModel(modelnode: NodeSeq) = {
|
||||
val file = (modelnode \ "@file").text
|
||||
val textures = (modelnode \ "@textures").text.split(",")
|
||||
val offset = parseVector((modelnode \ "@offset").text)
|
||||
val rotation = parseVector((modelnode \ "@rotation").text)
|
||||
|
||||
ModelRegistry.loadModel(new ResourceLocation(file)) match {
|
||||
case Some(m) => {
|
||||
val modelspec = new ModelSpec(m, textures, offset, rotation, file)
|
||||
val existingspec = ModelRegistry.put(MuseStringUtils.extractName(file), modelspec)
|
||||
(modelnode \ "binding").foreach {
|
||||
bindingnode => parseBinding(bindingnode, existingspec)
|
||||
}
|
||||
}
|
||||
case None => MuseLogger logError "Model file " + file + " not found! D:"
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
def parseBinding(bindingnode: NodeSeq, modelspec: ModelSpec) = {
|
||||
val slot = parseInt((bindingnode \ "@slot").text)
|
||||
val target = parseTarget((bindingnode \ "@target").text)
|
||||
slot.foreach(slot => {
|
||||
target.foreach(target =>
|
||||
(bindingnode \ "part").foreach {
|
||||
partnode =>
|
||||
parseParts(partnode, modelspec, slot, target)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
def parseParts(partNode: NodeSeq, modelspec: ModelSpec, slot: Int, target: MorphTarget) = {
|
||||
val defaultcolor = parseColour((partNode \ "@defaultcolor").text)
|
||||
val defaultglow = parseBool((partNode \ "@defaultglow").text)
|
||||
val name = (partNode \ "@name").text
|
||||
val polygroup = validatePolygroup((partNode \ "@polygroup").text, modelspec)
|
||||
polygroup.map(polygroup => {
|
||||
val partspec = new ModelPartSpec(modelspec, target, polygroup, slot, 0, defaultglow.getOrElse(false), name)
|
||||
modelspec.put(polygroup, partspec)
|
||||
})
|
||||
}
|
||||
|
||||
def validatePolygroup(s: String, m: ModelSpec): Option[String] = {
|
||||
val it = m.model.groupObjects.iterator
|
||||
while (it.hasNext) {
|
||||
if (it.next().name.equals(s)) return Some(s)
|
||||
}
|
||||
return None
|
||||
}
|
||||
|
||||
def parseBool(s: String): Option[Boolean] = {
|
||||
try Some(s.toBoolean) catch {
|
||||
case _: Throwable => None
|
||||
}
|
||||
}
|
||||
|
||||
def parseColour(s: String): Option[Colour] = {
|
||||
try {
|
||||
val c = Color.decode(s)
|
||||
Some(new Colour(c.getRed, c.getGreen, c.getBlue, c.getAlpha))
|
||||
} catch {
|
||||
case _: Throwable => None
|
||||
}
|
||||
}
|
||||
|
||||
def parseTarget(s: String): Option[MorphTarget] = {
|
||||
s.toLowerCase match {
|
||||
case "head" => Some(Head)
|
||||
case "body" => Some(Body)
|
||||
case "leftarm" => Some(LeftArm)
|
||||
case "rightarm" => Some(RightArm)
|
||||
case "leftleg" => Some(LeftLeg)
|
||||
case "rightleg" => Some(RightLeg)
|
||||
case "cloak" => Some(Cloak)
|
||||
case _ => None
|
||||
}
|
||||
}
|
||||
|
||||
def parseInt(s: String): Option[Int] = {
|
||||
try Some(s.toInt) catch {
|
||||
case _: Throwable => None
|
||||
}
|
||||
}
|
||||
|
||||
def parseVector(s: String): Option[Vec3] = {
|
||||
try {
|
||||
val ss = s.split(",")
|
||||
val x = ss(0).toDouble
|
||||
val y = ss(1).toDouble
|
||||
val z = ss(2).toDouble
|
||||
Some(Vec3.createVectorHelper(x, y, z))
|
||||
} catch {
|
||||
case _: Throwable => None
|
||||
}
|
||||
}
|
||||
}
|
||||
//package net.machinemuse.powersuits.client.render.modelspec
|
||||
//
|
||||
//import java.awt.Color
|
||||
//import java.net.URL
|
||||
//
|
||||
//import net.machinemuse.numina.general.MuseLogger
|
||||
//import net.machinemuse.numina.geometry.Colour
|
||||
//import net.machinemuse.utils.MuseStringUtils
|
||||
//import net.minecraft.util.{ResourceLocation, Vec3}
|
||||
//
|
||||
//import scala.xml.{NodeSeq, XML}
|
||||
//
|
||||
//
|
||||
///**
|
||||
// * Author: MachineMuse (Claire Semple)
|
||||
// * Created: 8:44 AM, 4/28/13
|
||||
// */
|
||||
//object ModelSpecXMLReader {
|
||||
// def parseFile(file: URL) = {
|
||||
// val xml = XML.load(file)
|
||||
// (xml \\ "model") foreach {
|
||||
// modelnode => parseModel(modelnode)
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// def parseModel(modelnode: NodeSeq) = {
|
||||
// val file = (modelnode \ "@file").text
|
||||
// val textures = (modelnode \ "@textures").text.split(",")
|
||||
// val offset = parseVector((modelnode \ "@offset").text)
|
||||
// val rotation = parseVector((modelnode \ "@rotation").text)
|
||||
//
|
||||
// ModelRegistry.loadModel(new ResourceLocation(file)) match {
|
||||
// case Some(m) => {
|
||||
// val modelspec = new ModelSpec(m, textures, offset, rotation, file)
|
||||
// val existingspec = ModelRegistry.put(MuseStringUtils.extractName(file), modelspec)
|
||||
// (modelnode \ "binding").foreach {
|
||||
// bindingnode => parseBinding(bindingnode, existingspec)
|
||||
// }
|
||||
// }
|
||||
// case None => MuseLogger logError "Model file " + file + " not found! D:"
|
||||
// }
|
||||
//
|
||||
// }
|
||||
//
|
||||
// def parseBinding(bindingnode: NodeSeq, modelspec: ModelSpec) = {
|
||||
// val slot = parseInt((bindingnode \ "@slot").text)
|
||||
// val target = parseTarget((bindingnode \ "@target").text)
|
||||
// slot.foreach(slot => {
|
||||
// target.foreach(target =>
|
||||
// (bindingnode \ "part").foreach {
|
||||
// partnode =>
|
||||
// parseParts(partnode, modelspec, slot, target)
|
||||
// })
|
||||
// })
|
||||
// }
|
||||
//
|
||||
// def parseParts(partNode: NodeSeq, modelspec: ModelSpec, slot: Int, target: MorphTarget) = {
|
||||
// val defaultcolor = parseColour((partNode \ "@defaultcolor").text)
|
||||
// val defaultglow = parseBool((partNode \ "@defaultglow").text)
|
||||
// val name = (partNode \ "@name").text
|
||||
// val polygroup = validatePolygroup((partNode \ "@polygroup").text, modelspec)
|
||||
// polygroup.map(polygroup => {
|
||||
// val partspec = new ModelPartSpec(modelspec, target, polygroup, slot, 0, defaultglow.getOrElse(false), name)
|
||||
// modelspec.put(polygroup, partspec)
|
||||
// })
|
||||
// }
|
||||
//
|
||||
// def validatePolygroup(s: String, m: ModelSpec): Option[String] = {
|
||||
// val it = m.model.groupObjects.iterator
|
||||
// while (it.hasNext) {
|
||||
// if (it.next().name.equals(s)) return Some(s)
|
||||
// }
|
||||
// return None
|
||||
// }
|
||||
//
|
||||
// def parseBool(s: String): Option[Boolean] = {
|
||||
// try Some(s.toBoolean) catch {
|
||||
// case _: Throwable => None
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// def parseColour(s: String): Option[Colour] = {
|
||||
// try {
|
||||
// val c = Color.decode(s)
|
||||
// Some(new Colour(c.getRed, c.getGreen, c.getBlue, c.getAlpha))
|
||||
// } catch {
|
||||
// case _: Throwable => None
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// def parseTarget(s: String): Option[MorphTarget] = {
|
||||
// s.toLowerCase match {
|
||||
// case "head" => Some(Head)
|
||||
// case "body" => Some(Body)
|
||||
// case "leftarm" => Some(LeftArm)
|
||||
// case "rightarm" => Some(RightArm)
|
||||
// case "leftleg" => Some(LeftLeg)
|
||||
// case "rightleg" => Some(RightLeg)
|
||||
// case "cloak" => Some(Cloak)
|
||||
// case _ => None
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// def parseInt(s: String): Option[Int] = {
|
||||
// try Some(s.toInt) catch {
|
||||
// case _: Throwable => None
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// def parseVector(s: String): Option[Vec3] = {
|
||||
// try {
|
||||
// val ss = s.split(",")
|
||||
// val x = ss(0).toDouble
|
||||
// val y = ss(1).toDouble
|
||||
// val z = ss(2).toDouble
|
||||
// Some(Vec3.createVectorHelper(x, y, z))
|
||||
// } catch {
|
||||
// case _: Throwable => None
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
|
|
@ -26,16 +26,4 @@ object ModelSpecXMLWriter {
|
|||
}
|
||||
|
||||
def concatList(list: Seq[String]): String = list mkString ","
|
||||
}
|
||||
|
||||
object ModelSpecJSONWriter {
|
||||
def writeRegistry(file: String) {
|
||||
val gson = new Gson()
|
||||
import scala.collection.JavaConverters._
|
||||
val registry = ModelRegistry.apply.asJava
|
||||
val jsonwrite = gson.toJson(registry)
|
||||
val w = new PrintWriter(new FileOutputStream(new File(file)))
|
||||
w.print(jsonwrite)
|
||||
w.close()
|
||||
}
|
||||
}
|
|
@ -1,69 +1,87 @@
|
|||
//package net.machinemuse.powersuits.client.render.modelspec;
|
||||
//
|
||||
///**
|
||||
// * Ported to Java by lehjr on 11/8/16.
|
||||
// */
|
||||
//public enum MorphTarget {
|
||||
// Cloak("Cloak", m.bipedCloak),
|
||||
// Head("Head", m.bipedHead),
|
||||
// Body("Body", m.bipedBody),
|
||||
// RightArm("RightArm", m.bipedRightArm),
|
||||
// LeftArm("LeftArm", m.bipedRightArm),
|
||||
// RightLeg("RightLe", m.bipedRightLeg),
|
||||
// LeftLeg("LeftLeg", m.bipedLeftLeg);
|
||||
//
|
||||
//
|
||||
// public MorphTarget(String name, ModelBiped)
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//// sealed trait MorphTarget {
|
||||
//// val name: String
|
||||
//// val degrad = 180F / Math.PI.asInstanceOf[Float]
|
||||
////
|
||||
//// def apply(m: ModelBiped): ModelRenderer
|
||||
//// }
|
||||
////
|
||||
////case object Cloak extends MorphTarget {
|
||||
//// val name = "Cloak"
|
||||
////
|
||||
//// def apply(m: ModelBiped) = m.bipedCloak
|
||||
//// }
|
||||
////
|
||||
////case object Head extends MorphTarget {
|
||||
//// val name = "Head"
|
||||
////
|
||||
//// def apply(m: ModelBiped) = m.bipedHead
|
||||
//// }
|
||||
////
|
||||
////case object Body extends MorphTarget {
|
||||
//// val name = "Body"
|
||||
////
|
||||
//// def apply(m: ModelBiped) = m.bipedBody
|
||||
//// }
|
||||
////
|
||||
////case object RightArm extends MorphTarget {
|
||||
//// val name = "RightArm"
|
||||
////
|
||||
//// def apply(m: ModelBiped) = m.bipedRightArm
|
||||
//// }
|
||||
////
|
||||
////case object LeftArm extends MorphTarget {
|
||||
//// val name = "LeftArm"
|
||||
////
|
||||
//// def apply(m: ModelBiped) = m.bipedLeftArm
|
||||
//// }
|
||||
////
|
||||
////case object RightLeg extends MorphTarget {
|
||||
//// val name = "RightLeg"
|
||||
////
|
||||
//// def apply(m: ModelBiped) = m.bipedRightLeg
|
||||
//// }
|
||||
////
|
||||
////case object LeftLeg extends MorphTarget {
|
||||
//// val name = "LeftLeg"
|
||||
////
|
||||
//// def apply(m: ModelBiped) = m.bipedLeftLeg
|
||||
////}
|
||||
package net.machinemuse.powersuits.client.render.modelspec;
|
||||
|
||||
import net.minecraft.client.model.ModelBiped;
|
||||
import net.minecraft.client.model.ModelRenderer;
|
||||
|
||||
/**
|
||||
* Ported to Java by lehjr on 11/8/16.
|
||||
*/
|
||||
public enum MorphTarget {
|
||||
Cloak,
|
||||
Head,
|
||||
Body,
|
||||
RightArm,
|
||||
LeftArm,
|
||||
RightLeg,
|
||||
LeftLeg;
|
||||
|
||||
private interface iMorphTarget {
|
||||
String name = null;
|
||||
float degrad = (float) (180F / Math.PI);
|
||||
|
||||
ModelRenderer apply(ModelBiped m);
|
||||
}
|
||||
|
||||
public class Cloak implements iMorphTarget {
|
||||
String name = "Cloak";
|
||||
|
||||
@Override
|
||||
public ModelRenderer apply(ModelBiped m) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public class Head implements iMorphTarget {
|
||||
String name = "Head";
|
||||
|
||||
@Override
|
||||
public ModelRenderer apply(ModelBiped m) {
|
||||
return m.bipedHead;
|
||||
}
|
||||
}
|
||||
|
||||
public class Body implements iMorphTarget {
|
||||
String name = "Body";
|
||||
|
||||
@Override
|
||||
public ModelRenderer apply(ModelBiped m) {
|
||||
return m.bipedBody;
|
||||
}
|
||||
}
|
||||
|
||||
public class RightArm implements iMorphTarget {
|
||||
String name = "RightArm";
|
||||
|
||||
@Override
|
||||
public ModelRenderer apply(ModelBiped m) {
|
||||
return m.bipedRightArm;
|
||||
}
|
||||
}
|
||||
|
||||
public class LeftArm implements iMorphTarget {
|
||||
String name = "LeftArm";
|
||||
|
||||
@Override
|
||||
public ModelRenderer apply(ModelBiped m) {
|
||||
return m.bipedLeftArm;
|
||||
}
|
||||
}
|
||||
|
||||
public class RightLeg implements iMorphTarget {
|
||||
String name = "RightLeg";
|
||||
|
||||
@Override
|
||||
public ModelRenderer apply(ModelBiped m) {
|
||||
return m.bipedRightLeg;
|
||||
}
|
||||
}
|
||||
|
||||
public class LeftLeg implements iMorphTarget {
|
||||
String name = "LeftLeg";
|
||||
|
||||
@Override
|
||||
public ModelRenderer apply(ModelBiped m) {
|
||||
return m.bipedLeftLeg;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue