code creation each tank :
class Tanker {
contructor(){}
//...
setMesh(){
console.log( "en set mesh de ",this.name );
this.mesh = scenes[this.parent_scene].getMeshByName("tanker_base").clone(this.name+"_mesh");
this.mesh_collider = scenes[this.parent_scene].getMeshByName(this.name+"_mesh.tanker_base_collider");
// this.mesh_collider.computeWorldMatrix(true);
this.mesh_coll_pos = scenes[this.parent_scene].getMeshByName(this.name+"_mesh.tanker_base_collider_pos");
this.mesh_coll_pos.setEnabled(true);
// scenes[this.parent_scene].meshes.forEach(_mesh => {
// if( _mesh.name.includes(this.name) ){
// console.log( _mesh.name );
// }
// });
this.taller = ceil.mid-0.6;
this.mesh.position = new BABYLON.Vector3(0,this.taller,FuelDepot.POS_Z);
this.mesh.setEnabled(true);
// return;
this.agr = new BABYLON.PhysicsAggregate(this.mesh_collider, BABYLON.PhysicsShapeType.MESH, {mass: 0});
this.agr.shape.filterMembershipMask = 2;
this.esfera = BABYLON.MeshBuilder.CreateSphere("sphere", { segments:5, diameter:2.5 }, scenes[this.parent_scene]);
this.esfera.material = test_mat_green.clone("mat_fuel_dpot_au");
this.esfera.material.wireframe = true;//
this.esfera.enableEdgesRendering();
this.esfera.edgesWidth = 0.5;
this.esfera.position = this.mesh.position;
this.esfera.isPickable = false;
this.esfera.isVisible = false;
this.real_center = this.mesh.getBoundingInfo().boundingBox.centerWorld;
this.id_radar_screen = gb_radar_screen.register(this.alias);
// console.log( this.name,", mi radar id es ",this.id_radar_screen );
gb_radar_screen.show(this.id_radar_screen);
for (let _ca = 1; _ca < 9; _ca++) {
this.tanks[_ca-1].mesh = scenes[this.parent_scene].getMeshByName(this.name+"_mesh.tank_"+_ca);
this.tanks[_ca-1].mesh_collider = scenes[this.parent_scene].getMeshByName(this.name+"_mesh.tank_"+_ca+"_collider");
this.tanks[_ca-1].mesh_collider.isPickable = false;
this.tanks[_ca-1].mesh.setEnabled(true);
this.tanks[_ca-1].mesh.isVisible=true;
// this.tanks[_ca-1].mesh.material = test_mat_black.clone(utils.generateId(16));
if( _ca == 1 ){
console.log( "mesh tank 1" );
console.log( this.tanks[_ca-1].mesh.material );
}
this.tanks[_ca-1].life_tag = new BABYLON.GUI.Slider(this.name+"_tank_"+_ca+"_tag");
this.tanks[_ca-1].life_tag.minimum = 0;
this.tanks[_ca-1].life_tag.maximum = this.tanks[_ca-1].life_shield;
this.tanks[_ca-1].life_tag.value = this.tanks[_ca-1].life_shield;
this.tanks[_ca-1].life_tag.isThumbClamped = false;
this.tanks[_ca-1].life_tag.isVertical = false;
this.tanks[_ca-1].life_tag.displayThumb = false;
this.tanks[_ca-1].life_tag.height = "6px";
this.tanks[_ca-1].life_tag.width = "60px";
this.tanks[_ca-1].life_tag.verticalAlignment = BABYLON.GUI.Control.VERTICAL_ALIGNMENT_TOP;
this.tanks[_ca-1].life_tag.horizontalAlignment = BABYLON.GUI.Control.HORIZONTAL_ALIGNMENT_CENTER;
this.tanks[_ca-1].life_tag.top = "4px";
this.tanks[_ca-1].life_tag.isThumbCircle = false;
this.tanks[_ca-1].life_tag.color = "#ff0000";
this.tanks[_ca-1].life_tag.background = "#000";
this.tanks[_ca-1].life_tag.thickness = 1;
this.tanks[_ca-1].life_tag.borderColor = "#ffffff";
gameplay_ui.addControl(this.tanks[_ca-1].life_tag);
this.tanks[_ca-1].life_tag.linkWithMesh(big_enemy.tanks[_ca-1].mesh);
this.tanks[_ca-1].life_tag.linkOffsetY = -35;
//tank shield...
this.tanks[_ca-1].shield_mesh = scenes[this.parent_scene].getMeshByName(this.name+"_mesh.tank_"+_ca+"_shield");
this.tanks[_ca-1].shield_mesh.material = enemy_shield_material;
this.tanks[_ca-1].shield_mesh.isPickable = false;
this.tanks[_ca-1].shield_mesh.setEnabled(false);
let _cx = utils.rand(1,3)-1;
//mes destroyed
this.tanks[_ca-1].mesh_destroyed = tanks_damaged_base[_cx].clone(utils.generateId(16));
this.tanks[_ca-1].mesh_destroyed.material = tanks_damaged_mat;
this.tanks[_ca-1].mesh.computeWorldMatrix(true);
this.tanks[_ca-1].mesh_destroyed.position = this.tanks[_ca-1].mesh.getBoundingInfo().boundingBox.centerWorld.clone();
this.tanks[_ca-1].mesh_destroyed.setEnabled(false);
}
}//end set mesh
}
Dispose all on restart event
static disposeAll(){
//las torretas...
gb_radar_screen.remove(big_enemy.id_radar_screen);
big_enemy.front_turret.mesh_damaged.dispose();
big_enemy.front_turret.mesh_collider.dispose();
big_enemy.front_turret.init_bullets.dispose();
big_enemy.front_turret.mesh.dispose();
big_enemy.front_turret.rayHelper.dispose();
big_enemy.front_turret.ray=null;
if( big_enemy.front_turret.life_tag != null ){
big_enemy.front_turret.life_tag.dispose();
big_enemy.front_turret.life_tag=null;
}
big_enemy.front_turret=null;
big_enemy.back_turret.mesh_damaged.dispose();
big_enemy.back_turret.mesh_collider.dispose();
big_enemy.back_turret.init_bullets.dispose();
big_enemy.back_turret.mesh.dispose();
big_enemy.back_turret.rayHelper.dispose();
big_enemy.back_turret.ray=null;
if( big_enemy.back_turret.life_tag != null ){
big_enemy.back_turret.life_tag.dispose();
big_enemy.back_turret.life_tag=null;
}
big_enemy.front_turret=null;
//los 8 depositos de combustible
for (let _ca = 1; _ca < 9; _ca++) {
if( big_enemy.tanks[_ca-1].life_tag != null ){
big_enemy.tanks[_ca-1].life_tag.dispose();
big_enemy.tanks[_ca-1].life_tag=null;
}
//tank shield...
big_enemy.tanks[_ca-1].shield_mesh.dispose();
big_enemy.tanks[_ca-1].mesh_destroyed.dispose();
big_enemy.tanks[_ca-1].mesh_collider.dispose();
big_enemy.tanks[_ca-1].mesh.dispose();
big_enemy.tanks[_ca-1]=null;
}
big_enemy.tanks=null;
//fires
for (let _fi = 0; _fi < big_enemy.maxFires; _fi++) {
big_enemy.fires[_fi].flow.stop();
big_enemy.fires[_fi].flow.dispose();
big_enemy.fires[_fi].emitter.dispose();
}
//morteros
for (let _mk = 0; _mk < FuelDepot.MAX_MORTARS; _mk++) {
for (let _mu = 1; _mu < 4; _mu++){
big_enemy.mortars[_mk].muzzles[_mu -1].dispose();
big_enemy.mortars[_mk].muzzles_end[_mu -1].dispose();
}
big_enemy.mortars[_mk].rayHelper.dispose();
big_enemy.mortars[_mk].ray=null;
if( big_enemy.mortars[_mk].life_tag != null ){
big_enemy.mortars[_mk].life_tag.dispose();
big_enemy.mortars[_mk].life_tag=null;
}
big_enemy.mortars[_mk].mesh_damaged.dispose();
big_enemy.mortars[_mk].mesh_collider.dispose();
big_enemy.mortars[_mk].mesh.dispose();
big_enemy.mortars[_mk]=null;
}
big_enemy.mortars=[];
//meshes
big_enemy.agr.dispose();
big_enemy.agr=null;
big_enemy.esfera.dispose();
big_enemy.mesh_collider.dispose();
big_enemy.mesh_coll_pos.dispose();
big_enemy.mesh.dispose();
}//fin de dispose all de tanquero
*click event over mesh after the second clone not fired