its inside the render thread (btw this is a separate issue but I noticed alot of times in the logs it said my object wasn't built and it was forcing a build even though i have built it some time previous before cloning but I think when I build it after the clone also, then it gets rid of that message).
here is where I originally instantiate the model before cloning (its the one called obj2):
Tower tower = towerMap.get(TowerType.LEAF_TOWER);
Object3D obj = Loader.loadSerializedObject(main.getResources().openRawResource(tower.getModelResourceId()));
obj.setScale(tower.getModelScale());
obj.setUserObject(tower);
tower.setModel(obj);
Object3D obj2 = new Object3D(obj, false);
obj2.setUserObject(tower);
tower.setAnimatedModel(obj2);
Object3D bullet = Loader.loadSerializedObject(main.getResources().openRawResource(tower.getBullet().getModelResourceId()));
bullet.setScale(tower.getBullet().getModelScale());
tower.getBullet().setModel(bullet);
bullet.setCollisionMode(Object3D.COLLISION_CHECK_SELF);
obj.build();
obj2.build();
bullet.build();
here is the clone method (the one called animatedModel is the one that flashes):
public Tower clone(boolean cloneStaticModel, boolean cloneAnimatedModel) {
Tower tower = new Tower(main);
tower.setCanAttackAir(canAttackAir);
tower.setCanAttackGround(canAttackGround);
tower.setDmg(dmg);
tower.setEffect(effect);
tower.setHeightPos(heightPos);
tower.setModelResourceId(modelResourceId);
tower.setModelScale(modelScale);
tower.setMsDelay(msDelay);
tower.setOnlyEffect(onlyEffect);
tower.setTile(tile);
tower.setTileRange(tileRange);
tower.setTowerName(towerName);
tower.setTowerType(towerType);
tower.setBullet(bullet);// no need to clone this
tower.setWorld(world);
tower.setPointRange(pointRange);
tower.setUseTileRange(useTileRange);
tower.setRangeCircle(rangeCircle.cloneObject());
tower.getRangeCircle().shareCompiledData(rangeCircle);
if (cloneAnimatedModel) {
tower.setAnimatedModel(new Object3D(animatedModel, true));
tower.getAnimatedModel().shareCompiledData(animatedModel);
}
if (cloneStaticModel) {
tower.setModel(model.cloneObject());
tower.getModel().shareCompiledData(model);
}
return tower;
}
here is part of my code where I add the Object (newTower.getAnimatedModel is the one that flashes brown) :
float levelHeight = ((CreatureDefenseApp) main.getApplication()).getLevelHeight();
Tower newTower = tower.clone(false, true);
newTower.setWorld(main.world);
tile.setTower(newTower);
newTower.setTile(tile);
Object3D clone = newTower.getAnimatedModel();
SimpleVector center = tile.getCenter(levelHeight);
center.z = newTower.getHeightPos();
clone.build();
clone.setOrigin(center);
tile.setEnabled(false);
main.getTowerRunner().add(newTower);
Object3D rangeCircle = newTower.getRangeCircle();
SimpleVector rangeCircleCenter = tile.getCenter(levelHeight);
rangeCircleCenter.z = ((CreatureDefenseApp) main.getApplication()).getLevelHeight() - 0.02f;
rangeCircle.setOrigin(rangeCircleCenter);
rangeCircle.build();
main.world.addObject(clone);
main.world.addObject(rangeCircle);