superposition map behaviours bug fix
This commit is contained in:
@@ -221,7 +221,7 @@ export default {
|
||||
},
|
||||
map_mode: {
|
||||
handler (n, o) {
|
||||
console.log('concernementMap watch map_mode', o, n);
|
||||
console.log('concernementMap watch map_mode o n', o, n);
|
||||
if (n === 'superposition' && !this.opened_concernement) {
|
||||
// create constraints
|
||||
this.setSuperpositionsMatterConstraints();
|
||||
@@ -232,6 +232,18 @@ export default {
|
||||
},
|
||||
deep: true
|
||||
},
|
||||
opened_concernement: {
|
||||
handler (n, o) {
|
||||
console.log('concernementMap watch opened_concernement o n', o, n);
|
||||
// if (n && this.map_mode === 'superposition') {
|
||||
// this.clearSuperpositionsMatterConstraints();
|
||||
// }
|
||||
// if(o && !n){
|
||||
// this.setSuperpositionsMatterConstraints();
|
||||
// }
|
||||
},
|
||||
deep: true
|
||||
},
|
||||
allSuperpositions: {
|
||||
handler (n, o) {
|
||||
console.log('concernementMap watch allSuperpositions', o, n);
|
||||
@@ -1050,11 +1062,7 @@ export default {
|
||||
async setSuperpositionsMatterConstraints(){
|
||||
await nextTick(); // wait for dom to be upadted before applying consraint
|
||||
console.log('setSuperpositionsMatterConstraints this.allSuperpositions', this.allSuperpositions);
|
||||
// let allBodies = Matter.Composite.allBodies(this.world);
|
||||
// console.log('allBodies', allBodies);
|
||||
// let allComposites = Matter.Composite.allComposites(this.world);
|
||||
// console.log('allComposites', allComposites);
|
||||
|
||||
|
||||
// loop through all supperposition couple
|
||||
for(let [couple_id, superpositions] of Object.entries(this.allSuperpositions_byid)){
|
||||
// if couple has only one superposition, use regular mapItems
|
||||
@@ -1062,25 +1070,30 @@ export default {
|
||||
let i = 0;
|
||||
for(let [superposition_id, superposition] of Object.entries(superpositions)){
|
||||
i++;
|
||||
// console.log('superposition', superposition[0].cid, superposition[1].cid);
|
||||
let matter_bodyA_id, matter_bodyB_id;
|
||||
if (superpositions_ids.length === 1 || i === 1) {
|
||||
matter_bodyA_id = superposition[0].cid
|
||||
matter_bodyB_id = superposition[1].cid
|
||||
|
||||
let concernementA = this.concernementsByID[superposition[0].cid];
|
||||
// console.log('concernementA', concernementA);
|
||||
let concernementB = this.concernementsByID[superposition[1].cid];
|
||||
// console.log('concernementB', concernementB);
|
||||
|
||||
// console.log('superposition', superposition_id, superposition);
|
||||
let mapitemA_id, mapitemB_id;
|
||||
if (i === 1) {
|
||||
mapitemA_id = superposition[0].cid
|
||||
mapitemB_id = superposition[1].cid
|
||||
} else {
|
||||
matter_bodyA_id = `${superposition[0].cid}___${superposition_id}`
|
||||
matter_bodyB_id = `${superposition[1].cid}___${superposition_id}`
|
||||
mapitemA_id = `${superposition[0].cid}___${superposition_id}`
|
||||
mapitemB_id = `${superposition[1].cid}___${superposition_id}`
|
||||
}
|
||||
|
||||
|
||||
// get the concernement matter bodies with id
|
||||
let bodyA = Matter.Composite.get(this.world, matter_bodyA_id, 'body');
|
||||
let bodyB = Matter.Composite.get(this.world, matter_bodyB_id, 'body');
|
||||
let bodyA = Matter.Composite.get(this.world, mapitemA_id, 'body'); // matter body id is the same as mapitem_id
|
||||
let bodyB = Matter.Composite.get(this.world, mapitemB_id, 'body'); // matter body id is the same as mapitem_id
|
||||
// console.log('bodyA, bodyB', bodyA, bodyB);
|
||||
|
||||
// get the entite coordinates inside the concernement body
|
||||
let pointA = null;
|
||||
let concernementA = this.concernementsByID[superposition[0].cid];
|
||||
// console.log('concernementA', concernementA);
|
||||
for(let entiteA of concernementA.revisions_byid[concernementA.active_revision].entites){
|
||||
if (entiteA.entite && entiteA.entite.id === superposition[0].eid && entiteA.display) {
|
||||
// console.log('entiteA', entiteA);
|
||||
@@ -1089,8 +1102,6 @@ export default {
|
||||
}
|
||||
}
|
||||
let pointB = null;
|
||||
let concernementB = this.concernementsByID[superposition[1].cid];
|
||||
// console.log('concernementB', concernementB);
|
||||
for(let entiteB of concernementB.revisions_byid[concernementB.active_revision].entites){
|
||||
if (entiteB.entite && entiteB.entite.id === superposition[1].eid && entiteB.display) {
|
||||
// console.log('entiteB', entiteB);
|
||||
@@ -1115,14 +1126,36 @@ export default {
|
||||
this.superpositions_constraints.push(c);
|
||||
Matter.Composite.add(this.world, c);
|
||||
// keep a link the constraint into the concernement object (useful for tweening the constraint pointA & pointB in concernementMapItem)
|
||||
concernementA.superposition_constraints_id.push(c.id);
|
||||
concernementB.superposition_constraints_id.push(c.id);
|
||||
// record all superposed concernements for each concernement
|
||||
if (concernementA.superposed_concernements_id.indexOf(concernementB.id) < 0) {
|
||||
concernementA.superposed_concernements_id.push(concernementB.id);
|
||||
if(!concernementA.superposition_constraints_id[mapitemA_id]){
|
||||
concernementA.superposition_constraints_id[mapitemA_id] = [];
|
||||
}
|
||||
if (concernementB.superposed_concernements_id.indexOf(concernementA.id) < 0) {
|
||||
concernementB.superposed_concernements_id.push(concernementA.id);
|
||||
concernementA.superposition_constraints_id[mapitemA_id].push(c.id);
|
||||
if(!concernementB.superposition_constraints_id[mapitemB_id]){
|
||||
concernementB.superposition_constraints_id[mapitemB_id] = [];
|
||||
}
|
||||
concernementB.superposition_constraints_id[mapitemB_id].push(c.id);
|
||||
|
||||
// record all superposed concernements for each concernement
|
||||
if (concernementA.all_superposed_concernements_id.indexOf(concernementB.id) < 0) {
|
||||
concernementA.all_superposed_concernements_id.push(concernementB.id);
|
||||
}
|
||||
if (concernementB.all_superposed_concernements_id.indexOf(concernementA.id) < 0) {
|
||||
concernementB.all_superposed_concernements_id.push(concernementA.id);
|
||||
}
|
||||
// record all superposed concernements for each concernement by mapitem_id
|
||||
// A
|
||||
if (!concernementA.superposed_mapitem_id_by_mapitem_id[mapitemA_id]) {
|
||||
concernementA.superposed_mapitem_id_by_mapitem_id[mapitemA_id] = []
|
||||
}
|
||||
if (concernementA.superposed_mapitem_id_by_mapitem_id[mapitemA_id].indexOf(mapitemB_id) < 0) {
|
||||
concernementA.superposed_mapitem_id_by_mapitem_id[mapitemA_id].push(mapitemB_id);
|
||||
}
|
||||
// B
|
||||
if (!concernementB.superposed_mapitem_id_by_mapitem_id[mapitemB_id]) {
|
||||
concernementB.superposed_mapitem_id_by_mapitem_id[mapitemB_id] = []
|
||||
}
|
||||
if (concernementB.superposed_mapitem_id_by_mapitem_id[mapitemB_id].indexOf(mapitemA_id) < 0) {
|
||||
concernementB.superposed_mapitem_id_by_mapitem_id[mapitemB_id].push(mapitemA_id);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1134,21 +1167,18 @@ export default {
|
||||
console.log('clearSuperpositionsMatterConstraints', this.superpositions_constraints);
|
||||
for(let constraint of this.superpositions_constraints){
|
||||
|
||||
// Delete superposition constraints recorded in concernement object
|
||||
// delete constraint.concernementA.superposition_constraints[constraint.id];
|
||||
// delete constraint.concernementB.superposition_constraints[constraint.id];
|
||||
let keysA = constraint.concernementA.superposition_constraints_id;
|
||||
keysA.forEach(i => {
|
||||
if(constraint.concernementA.superposition_constraints_id[i] === constraint.id) {
|
||||
delete constraint.concernementA.superposition_constraints_id[i];
|
||||
}
|
||||
});
|
||||
let keysB = constraint.concernementB.superposition_constraints_id;
|
||||
keysB.forEach(i => {
|
||||
if(constraint.concernementB.superposition_constraints_id[i] === constraint.id) {
|
||||
delete constraint.concernementB.superposition_constraints_id[i];
|
||||
// Delete superposition constraints ids recorded in concernement object
|
||||
['A', 'B'].forEach(ab => {
|
||||
for( let [mapitem_id, constraint_ids] of Object.entries(constraint[`concernement${ab}`].superposition_constraints_id)){
|
||||
let indexes = Object.keys(constraint_ids);
|
||||
indexes.forEach(i => {
|
||||
if(constraint_ids[i] === constraint.id) {
|
||||
delete constraint[`concernement${ab}`].superposition_constraints_id[mapitem_id][i];
|
||||
}
|
||||
})
|
||||
}
|
||||
});
|
||||
|
||||
Matter.Composite.remove(this.world, constraint, true);
|
||||
}
|
||||
this.superpositions_constraints = [];
|
||||
|
||||
Reference in New Issue
Block a user