Quaternion lookat was it changed Jme 3.3

So there is no way to bundle your game for distribution?

Ok it was a classpath issue, weird though that the interface would say one thing and the physical classpath file said something completely different, something some where wasn’t updating correctly

thank for all the responses though and sorry for wasting your time

cheers

In finding and fixing the class path issues I have to realize the the old ogre.xml I use as placeholders are now causing null pointers even though I get no compilation errors, I have not switched to the new animation stuff yet for my main code base so I need to understand what I have to fix to get it all working again

Some of the models also have models of the old system, too.

meaning that this could be yet another issue on my end?

please clarify

because all the assets were copied very carefully

When the engine got updated, it also updated the test models to use the new animation system. Some of those models also have a copy of the old model that uses the old animation system - but they’re just renamed or suffixed with “old” or something.

sorry I don’t understand what to glean from your reply, the old system is deprecated but not removed or am I incorrect

in other words
fix the models, the code or both, some guidance would be appreciated note I have been using mesh.xml directly, as a reference this all worked in 3.2 so 3.2 to 3.3 advice would helpful

java.lang.NullPointerException
at hkr.start.weap.M16.(M16.java:77)
at hkr.start.actor.Hero_HKR.(Hero_HKR.java:48)
at hkr.start.Main_HKR.simpleInitApp(Main_HKR.java:43)
at com.jme3.app.SimpleApplication.initialize(SimpleApplication.java:239)
at com.jme3.system.lwjgl.LwjglAbstractDisplay.initInThread(LwjglAbstractDisplay.java:132)
at com.jme3.system.lwjgl.LwjglAbstractDisplay.run(LwjglAbstractDisplay.java:213)
at java.lang.Thread.run(Unknown Source)

If you’re using the models from the test-data and still want to use the old animation system, you need to use the models with a suffix “old” in them.

The models without the suffix “old” are now using the new animation system. To fix your issue, use the model with the suffix “old” in the name.

No no, I am not using the test models it’s an old animated ghoul and M16

If you are using your own custom models and don’t want to use the new animation system then you would need to use j3os created on 3.2.

Models loaded from various formats on 3.3 will be using the new animation system. A j3o file already has those controls ‘locked in’, so to speak, and so will use whatever it was exported with.

Edit: and if you were not using j3o files at all… well “there’s your problem” as you shouldn’t be loading things like ogre in your game.

It not that I don’t want to use the new system I just wanted to concentrate my ideas first and fix all those other issues after.

anyway is there an example of manual conversion anywhere or tool

99.9% sure that JmeConvert jars were built with 3.2 (the build.gradle file says so):

So if you use that to convert a model to j3o then it will use the old animation system. (Except for gltf which always used the new animation system.)

Else you can download an SDK that uses 3.2 and use it to convert your model.

@pspeed thanks for the help appreciated

I can confirm that my game sample now starts in 3.3 however I encountered yet another issue that I am trying track down my ghoul model only loads in T pose and won’t call it’s animations, while my m16 loads and will play all animation as expected, both models have and should spawn with their idle animation set, the difference between the two models is the M16 is loaded at runtime and the ghoul instances, for now, loaded by input action.

Is there an additional step that is required to trigger the animation control for “old” models not loaded at run time.

I used the SDK to convert the models and can confirm that animations appear to have been converted also, i.e. they playback in the SDK

Note: in 3.2 ghoul instances would sometimes load in T pose but only when jme3 was under “stress”, 150+ attacking and friendly ghouls just for kicks…quite a sample I wasn’t fortunate enough to discover and build upon, that

We’d probably have to see the code you use to set the idle animation to help debug it for you.

the model setup

private void setupModel(String mat,String modelNode)
{
	   /* Material skin = new Material(main_HKR.getAssetManager(), mat);
        skin.setTexture("DiffuseMap", main_HKR.getAssetManager().loadTexture(dif));
        skin.setTexture("NormalMap", main_HKR.getAssetManager().loadTexture(norm));
        skin.setTexture("SpecularMap", main_HKR.getAssetManager().loadTexture(spec));*/
                Material skin = new hks.matDefs.MaterialSP2(main_HKR.getAssetManager().loadMaterial(mat));
                model = (Node)main_HKR.getAssetManager().loadModel(modelNode);
        TangentBinormalGenerator.generate(model);
        model.setMaterial(skin);
		model.getChild(0).setName(Integer.toString(id));
		animControl = model.getControl(AnimControl.class);
		animChannel = animControl.createChannel();
		animControl.addListener(this);
		animChannel.setAnim("idle");
		
		soldier = new Node();
		soldier.attachChild(model);
		model.setLocalTranslation(modelOffset);
		model.setLocalScale(1.0625f);
		main_HKR.getRootNode().attachChild(soldier);
		capsule = new CapsuleCollisionShape(.506f, .956f, 1);//12.5% increase
		control = new RigidBodyControl(capsule, 50);
		control.setAngularFactor(0);
		control.setLinearDamping(linearDamping);
		main_HKR.getBulletAppState().getPhysicsSpace().add(control);
	}

the input action

if (name.equals("spawnEnemy") && !keyPressed)
				m.getEnemies(id).add(new NPC_HKR(m,ghoul.mat, ghoul.model));

“The def” holds asset path

package hkr.start.actor.defs;

public class Ghoul {
    public String model="hkr/start/assets/ghoul/ghoul.mesh.j3o";
    public String mat="hkr/start/assets/ghoul/ghoul.j3m";
}

In the old animation system, animations were stored in an AnimControl. In the new system, they’re stored in an AnimComposer.

The old system always loaded models in bind pose. The new system doesn’t necessarily load models in bind pose. To get the model to bind pose, you may need to invoke applyBindPose() on the Armature object. (Armature is roughly equivalent to the old Skeleton class.)

No you misunderstand I want the model to start it’s animation on loading which it does in 3.2, only under “stress” …“as in me very quickly loading ghouls” it would load model in bind pose or a model would enter bind pose sometimes, in 3.3 it loads in bind pose and doesn’t leave bind pose at all…at this stage I am using the old animation for a while still since the models are placeholders for now

And so NPC_HKR somehow calls setupModel() I guess?

my bad sorry

public NPC_HKR(Main_HKR m,String mat, String modelNode)
	{
		main_HKR = m;
		id = main_HKR.getId();
		
		setupModel(mat,modelNode);
		
		targetTime = main_HKR.getTime() - reTargetTime;
		attackTime = main_HKR.getTime();
		sprintStartTime = main_HKR.getTime();
	}