@Override public void setSpatial(Spatial spatial) { Spatial oldSpatial = this.spatial; super.setSpatial(spatial); updateTargetsAndMaterials(spatial); if (oldSpatial != null) { oldSpatial.removeMatParamOverride(numberOfJointsParam); oldSpatial.removeMatParamOverride(jointMatricesParam); } if (spatial != null) { spatial.removeMatParamOverride(numberOfJointsParam); spatial.removeMatParamOverride(jointMatricesParam); spatial.addMatParamOverride(numberOfJointsParam); spatial.addMatParamOverride(jointMatricesParam); } }
@Override public void setSpatial(Spatial spatial) { Spatial oldSpatial = this.spatial; super.setSpatial(spatial); updateTargetsAndMaterials(spatial); if (oldSpatial != null) { oldSpatial.removeMatParamOverride(numberOfBonesParam); oldSpatial.removeMatParamOverride(boneMatricesParam); } if (spatial != null) { spatial.removeMatParamOverride(numberOfBonesParam); spatial.removeMatParamOverride(boneMatricesParam); spatial.addMatParamOverride(numberOfBonesParam); spatial.addMatParamOverride(boneMatricesParam); } }
@Override public void read(JmeImporter im) throws IOException { super.read(im); InputCapsule in = im.getCapsule(this); skeleton = (Skeleton) in.readSavable("skeleton", null); numberOfBonesParam = (MatParamOverride) in.readSavable("numberOfBonesParam", null); boneMatricesParam = (MatParamOverride) in.readSavable("boneMatricesParam", null); if (numberOfBonesParam == null) { numberOfBonesParam = new MatParamOverride(VarType.Int, "NumberOfBones", null); boneMatricesParam = new MatParamOverride(VarType.Matrix4Array, "BoneMatrices", null); getSpatial().addMatParamOverride(numberOfBonesParam); getSpatial().addMatParamOverride(boneMatricesParam); } }
@Override public void read(JmeImporter im) throws IOException { super.read(im); InputCapsule in = im.getCapsule(this); armature = (Armature) in.readSavable("armature", null); numberOfJointsParam = (MatParamOverride) in.readSavable("numberOfBonesParam", null); jointMatricesParam = (MatParamOverride) in.readSavable("boneMatricesParam", null); if (numberOfJointsParam == null) { numberOfJointsParam = new MatParamOverride(VarType.Int, "NumberOfBones", null); jointMatricesParam = new MatParamOverride(VarType.Matrix4Array, "BoneMatrices", null); getSpatial().addMatParamOverride(numberOfJointsParam); getSpatial().addMatParamOverride(jointMatricesParam); } }
@Test public void testOverrides_IdenticalNames() { Node scene = createDummyScene(); scene.getChild("A").addMatParamOverride(mpoInt("val", 5)); scene.getChild("C").addMatParamOverride(mpoInt("val", 7)); validateScene(scene); }
@Test public void testOverrides_CloningScene_DoesntCloneMPO() { Node originalScene = createDummyScene(); originalScene.getChild("A").addMatParamOverride(mpoInt("int", 5)); originalScene.getChild("A").addMatParamOverride(mpoBool("bool", true)); originalScene.getChild("A").addMatParamOverride(mpoFloat("float", 3.12f)); Node clonedScene = originalScene.clone(false); validateScene(clonedScene); validateScene(originalScene); List<MatParamOverride> clonedOverrides = clonedScene.getChild("A").getLocalMatParamOverrides(); List<MatParamOverride> originalOverrides = originalScene.getChild("A").getLocalMatParamOverrides(); assertNotSame(clonedOverrides, originalOverrides); assertEquals(clonedOverrides, originalOverrides); for (int i = 0; i < clonedOverrides.size(); i++) { assertNotSame(clonedOverrides.get(i), originalOverrides.get(i)); assertEquals(clonedOverrides.get(i), originalOverrides.get(i)); } }
@Test public void testOverrides_AddAfterAttach() { Node scene = createDummyScene(); scene.updateGeometricState(); Node root = new Node("Root Node"); root.updateGeometricState(); root.attachChild(scene); scene.getChild("A").addMatParamOverride(mpoInt("val", 5)); validateScene(root); }
@Test public void testOverrides_AddBeforeAttach() { Node scene = createDummyScene(); scene.getChild("A").addMatParamOverride(mpoInt("val", 5)); scene.updateGeometricState(); Node root = new Node("Root Node"); root.updateGeometricState(); root.attachChild(scene); validateScene(root); }
@Test public void testOverrides_RemoveAfterAttach() { Node scene = createDummyScene(); scene.updateGeometricState(); Node root = new Node("Root Node"); root.updateGeometricState(); scene.getChild("A").addMatParamOverride(mpoInt("val", 5)); root.attachChild(scene); validateScene(root); scene.getChild("A").clearMatParamOverrides(); validateScene(root); }
@Test public void testOverrides_RemoveBeforeAttach() { Node scene = createDummyScene(); scene.updateGeometricState(); Node root = new Node("Root Node"); root.updateGeometricState(); scene.getChild("A").addMatParamOverride(mpoInt("val", 5)); validateScene(scene); scene.getChild("A").clearMatParamOverrides(); validateScene(scene); root.attachChild(scene); validateScene(root); }
@Test public void testOverrides_SaveAndLoad_KeepsMPOs() { MatParamOverride override = mpoInt("val", 5); Node scene = createDummyScene(); scene.getChild("A").addMatParamOverride(override); AssetManager assetManager = TestUtil.createAssetManager(); Node loadedScene = BinaryExporter.saveAndLoad(assetManager, scene); Node root = new Node("Root Node"); root.attachChild(loadedScene); validateScene(root); validateScene(scene); assertNotSame(override, loadedScene.getChild("A").getLocalMatParamOverrides().get(0)); assertEquals(override, loadedScene.getChild("A").getLocalMatParamOverrides().get(0)); }
@Override public void setSpatial(Spatial spatial) { Spatial oldSpatial = this.spatial; super.setSpatial(spatial); updateTargetsAndMaterials(spatial); if (oldSpatial != null) { oldSpatial.removeMatParamOverride(numberOfBonesParam); oldSpatial.removeMatParamOverride(boneMatricesParam); } if (spatial != null) { spatial.removeMatParamOverride(numberOfBonesParam); spatial.removeMatParamOverride(boneMatricesParam); spatial.addMatParamOverride(numberOfBonesParam); spatial.addMatParamOverride(boneMatricesParam); } }
@Override public void read(JmeImporter im) throws IOException { super.read(im); InputCapsule in = im.getCapsule(this); skeleton = (Skeleton) in.readSavable("skeleton", null); numberOfBonesParam = (MatParamOverride) in.readSavable("numberOfBonesParam", null); boneMatricesParam = (MatParamOverride) in.readSavable("boneMatricesParam", null); if (numberOfBonesParam == null) { numberOfBonesParam = new MatParamOverride(VarType.Int, "NumberOfBones", null); boneMatricesParam = new MatParamOverride(VarType.Matrix4Array, "BoneMatrices", null); getSpatial().addMatParamOverride(numberOfBonesParam); getSpatial().addMatParamOverride(boneMatricesParam); } }