refactored superposition constraint point tweening
This commit is contained in:
parent
a418682a72
commit
8a5c57cd13
@ -1392,19 +1392,30 @@ export default {
|
|||||||
Matter.Body.scale(this.body, obj.s, obj.s)
|
Matter.Body.scale(this.body, obj.s, obj.s)
|
||||||
this.paper_main_object.scale(obj.s);
|
this.paper_main_object.scale(obj.s);
|
||||||
|
|
||||||
// update superposition constraints
|
// update superposition constraints points
|
||||||
if (Object.keys(this.concernement.superposition_constraints).length) {
|
if (this.concernement.superposition_constraints_id.length) {
|
||||||
// console.log('concernement superposition_constraints', this.concernement.superposition_constraints);
|
// get all the constraints of the world
|
||||||
for(let constraint_id in this.concernement.superposition_constraints) {
|
let all_constrains = Matter.Composite.allConstraints(this.matterEngine.world);
|
||||||
let constraint = this.concernement.superposition_constraints[constraint_id];
|
// loop through all constraint ids recorded in the concernement
|
||||||
// console.log('concernement mapitem constraint', constraint);
|
for(let constraint_id of this.concernement.superposition_constraints_id) {
|
||||||
let ab = this.id === constraint.concernementA.id ? 'A' : 'B';
|
// get the right constraint object from matter
|
||||||
let point = constraint[`point${ab}`];
|
let constraint;
|
||||||
// console.log('point', point);
|
for (const c of all_constrains) {
|
||||||
// revert to the original point
|
if (c.id === constraint_id) {
|
||||||
let oripoint = Matter.Vector.create(point.x / this.scale, point.y / this.scale)
|
constraint = c;
|
||||||
let newpoint = Matter.Vector.create(oripoint.x * obj.s, oripoint.y * obj.s)
|
break;
|
||||||
constraint[`point${ab}`] = newpoint;
|
}
|
||||||
|
}
|
||||||
|
if (constraint) {
|
||||||
|
// tween the constraint point
|
||||||
|
let ab = this.id === constraint.concernementA.id ? 'A' : 'B';
|
||||||
|
let point = constraint[`point${ab}`];
|
||||||
|
// revert to the original point
|
||||||
|
let oripoint = Matter.Vector.create(point.x / this.scale, point.y / this.scale)
|
||||||
|
// newpoint from original point
|
||||||
|
let newpoint = Matter.Vector.create(oripoint.x * obj.s, oripoint.y * obj.s)
|
||||||
|
constraint[`point${ab}`] = newpoint;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1468,19 +1479,30 @@ export default {
|
|||||||
Matter.Body.scale(this.body, obj.s, obj.s)
|
Matter.Body.scale(this.body, obj.s, obj.s)
|
||||||
this.paper_main_object.scale(obj.s);
|
this.paper_main_object.scale(obj.s);
|
||||||
|
|
||||||
// update superposition constraints
|
// update superposition constraints points
|
||||||
if (this.concernement.superposition_constraints && Object.keys(this.concernement.superposition_constraints).length) {
|
if (this.concernement.superposition_constraints_id.length) {
|
||||||
// console.log('concernement superposition_constraints', this.concernement.superposition_constraints);
|
// get all the constraints of the world
|
||||||
for(let constraint_id in this.concernement.superposition_constraints) {
|
let all_constrains = Matter.Composite.allConstraints(this.matterEngine.world);
|
||||||
let constraint = this.concernement.superposition_constraints[constraint_id];
|
// loop through all constraint ids recorded in the concernement
|
||||||
// console.log('concernement mapitem constraint', constraint);
|
for(let constraint_id of this.concernement.superposition_constraints_id) {
|
||||||
let ab = this.id === constraint.concernementA.id ? 'A' : 'B';
|
// get the right constraint object from matter
|
||||||
let point = constraint[`point${ab}`];
|
let constraint;
|
||||||
// console.log('point', point);
|
for (const c of all_constrains) {
|
||||||
// revert to the original point
|
if (c.id === constraint_id) {
|
||||||
let oripoint = Matter.Vector.create(point.x / this.scale, point.y / this.scale)
|
constraint = c;
|
||||||
let newpoint = Matter.Vector.create(oripoint.x * obj.s, oripoint.y * obj.s)
|
break;
|
||||||
constraint[`point${ab}`] = newpoint;
|
}
|
||||||
|
}
|
||||||
|
if (constraint) {
|
||||||
|
// tween the constraint point
|
||||||
|
let ab = this.id === constraint.concernementA.id ? 'A' : 'B';
|
||||||
|
let point = constraint[`point${ab}`];
|
||||||
|
// revert to the original point
|
||||||
|
let oripoint = Matter.Vector.create(point.x / this.scale, point.y / this.scale)
|
||||||
|
// newpoint from original point
|
||||||
|
let newpoint = Matter.Vector.create(oripoint.x * obj.s, oripoint.y * obj.s)
|
||||||
|
constraint[`point${ab}`] = newpoint;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1097,8 +1097,11 @@ export default {
|
|||||||
this.superpositions_constraints.push(c);
|
this.superpositions_constraints.push(c);
|
||||||
Matter.Composite.add(this.world, 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)
|
// keep a link the constraint into the concernement object (useful for tweening the constraint pointA & pointB in concernementMapItem)
|
||||||
concernementA.superposition_constraints[c.id] = c;
|
// TODO this two lines make the all thing very slow
|
||||||
concernementB.superposition_constraints[c.id] = c;
|
// concernementA.superposition_constraints[c.id] = c;
|
||||||
|
// concernementB.superposition_constraints[c.id] = c;
|
||||||
|
concernementA.superposition_constraints_id.push(c.id);
|
||||||
|
concernementB.superposition_constraints_id.push(c.id);
|
||||||
// record all superposed concernements for each concernement
|
// record all superposed concernements for each concernement
|
||||||
if (concernementA.superposed_concernements_id.indexOf(concernementB.id) < 0) {
|
if (concernementA.superposed_concernements_id.indexOf(concernementB.id) < 0) {
|
||||||
concernementA.superposed_concernements_id.push(concernementB.id);
|
concernementA.superposed_concernements_id.push(concernementB.id);
|
||||||
@ -1113,8 +1116,22 @@ export default {
|
|||||||
clearSuperpositionsMatterConstraints(){
|
clearSuperpositionsMatterConstraints(){
|
||||||
console.log('clearSuperpositionsMatterConstraints', this.superpositions_constraints);
|
console.log('clearSuperpositionsMatterConstraints', this.superpositions_constraints);
|
||||||
for(let constraint of this.superpositions_constraints){
|
for(let constraint of this.superpositions_constraints){
|
||||||
delete constraint.concernementA.superposition_constraints[constraint.id];
|
|
||||||
delete constraint.concernementB.superposition_constraints[constraint.id];
|
// 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];
|
||||||
|
}
|
||||||
|
});
|
||||||
Matter.Composite.remove(this.world, constraint, true);
|
Matter.Composite.remove(this.world, constraint, true);
|
||||||
}
|
}
|
||||||
this.superpositions_constraints = [];
|
this.superpositions_constraints = [];
|
||||||
|
@ -92,7 +92,7 @@ export const ConcernementsStore = defineStore({
|
|||||||
// SUPERPOSITIONS
|
// SUPERPOSITIONS
|
||||||
if (entite.entite.superposition.length) {
|
if (entite.entite.superposition.length) {
|
||||||
concernement.has_superpositions = true;
|
concernement.has_superpositions = true;
|
||||||
concernement.superposition_constraints = {};
|
concernement.superposition_constraints_id = [];
|
||||||
concernement.superposed_concernements_id = [];
|
concernement.superposed_concernements_id = [];
|
||||||
entite.entite.superposition.forEach(entite_superpose => {
|
entite.entite.superposition.forEach(entite_superpose => {
|
||||||
// console.log(`superposition eid:${entite.entite.id}, teid:${entite_superpose.id}`);
|
// console.log(`superposition eid:${entite.entite.id}, teid:${entite_superpose.id}`);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user