void updateNpcs() { Node n; boolean isLoaded; if (conn.hasNpcs()) { for (NpcData npc : conn.getNpcs()) { isLoaded = modelLoader.hasNodeFor(npc); n = modelLoader.getNodeFor(npc); if (! isLoaded) { rootNode.attachChild(n); //n.updateCollisionTree(); kills performance } npc.update(); //npc.heading += 200; if (npc.hasChanged()) { n.setLocalRotation(npc.getRotation()); //_log.info(n.getLocalRotation().toString()); n.setLocalTranslation(npc.getTranslation()); npc.updated(); } } } } ------------------------------------ public Matrix3f getRotation() { return WomWorld.getInstance().getRotation(heading); } ------------------------------------ public final Vector3f skyVector; public Matrix3f getRotation(int heading) { Matrix3f rot = new Matrix3f(); rot.fromAxisAngle(skyVector, headingToAngle(heading)); return rot; }