microboard-temp 0.12.4 → 0.12.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/browser.js +29 -26
- package/dist/cjs/index.js +29 -26
- package/dist/cjs/node.js +29 -26
- package/dist/esm/browser.js +29 -26
- package/dist/esm/index.js +29 -26
- package/dist/esm/node.js +29 -26
- package/dist/types/Gravity/GravityEngine.d.ts +1 -1
- package/package.json +1 -1
package/dist/cjs/browser.js
CHANGED
|
@@ -54310,7 +54310,7 @@ class GravityEngine {
|
|
|
54310
54310
|
G = 80;
|
|
54311
54311
|
G_CENTER = 120;
|
|
54312
54312
|
DAMPING = 0.92;
|
|
54313
|
-
REPULSION =
|
|
54313
|
+
REPULSION = 800;
|
|
54314
54314
|
TICK_MS = 33;
|
|
54315
54315
|
SYNC_MS = 300;
|
|
54316
54316
|
MAX_DISTANCE = 3000;
|
|
@@ -54345,13 +54345,18 @@ class GravityEngine {
|
|
|
54345
54345
|
const items = this.board.items.listAll().filter((item) => !item.transformation.isLocked && !EXCLUDED_ITEM_TYPES.has(item.itemType));
|
|
54346
54346
|
if (items.length < 1)
|
|
54347
54347
|
return;
|
|
54348
|
-
const
|
|
54348
|
+
const snap = items.map((item, idx) => {
|
|
54349
54349
|
const pos = item.transformation.getTranslation();
|
|
54350
54350
|
const mbr = item.getMbr();
|
|
54351
54351
|
const w = Math.max(mbr.getWidth(), 1);
|
|
54352
54352
|
const h2 = Math.max(mbr.getHeight(), 1);
|
|
54353
54353
|
return {
|
|
54354
|
+
idx,
|
|
54354
54355
|
id: item.getId(),
|
|
54356
|
+
left: pos.x,
|
|
54357
|
+
top: pos.y,
|
|
54358
|
+
right: pos.x + w,
|
|
54359
|
+
bottom: pos.y + h2,
|
|
54355
54360
|
cx: pos.x + w * 0.5,
|
|
54356
54361
|
cy: pos.y + h2 * 0.5,
|
|
54357
54362
|
w,
|
|
@@ -54359,16 +54364,15 @@ class GravityEngine {
|
|
|
54359
54364
|
mass: w * h2
|
|
54360
54365
|
};
|
|
54361
54366
|
});
|
|
54362
|
-
let sumX = 0;
|
|
54363
|
-
|
|
54364
|
-
for (const s2 of snapshot) {
|
|
54367
|
+
let sumX = 0, sumY = 0;
|
|
54368
|
+
for (const s2 of snap) {
|
|
54365
54369
|
sumX += s2.cx;
|
|
54366
54370
|
sumY += s2.cy;
|
|
54367
54371
|
}
|
|
54368
|
-
const centerX = sumX /
|
|
54369
|
-
const centerY = sumY /
|
|
54370
|
-
for (let i = 0;i <
|
|
54371
|
-
const s1 =
|
|
54372
|
+
const centerX = sumX / snap.length;
|
|
54373
|
+
const centerY = sumY / snap.length;
|
|
54374
|
+
for (let i = 0;i < snap.length; i++) {
|
|
54375
|
+
const s1 = snap[i];
|
|
54372
54376
|
if (!this.velocities.has(s1.id)) {
|
|
54373
54377
|
this.velocities.set(s1.id, { vx: 0, vy: 0 });
|
|
54374
54378
|
}
|
|
@@ -54380,22 +54384,28 @@ class GravityEngine {
|
|
|
54380
54384
|
const distCenter = Math.sqrt(dcx * dcx + dcy * dcy) + 1;
|
|
54381
54385
|
ax += this.G_CENTER * dcx / distCenter;
|
|
54382
54386
|
ay += this.G_CENTER * dcy / distCenter;
|
|
54383
|
-
for (let j = 0;j <
|
|
54387
|
+
for (let j = 0;j < snap.length; j++) {
|
|
54384
54388
|
if (i === j)
|
|
54385
54389
|
continue;
|
|
54386
|
-
const s2 =
|
|
54390
|
+
const s2 = snap[j];
|
|
54387
54391
|
const dx = s2.cx - s1.cx;
|
|
54388
54392
|
const dy = s2.cy - s1.cy;
|
|
54389
|
-
const
|
|
54390
|
-
const dist = Math.sqrt(distSq) + 0.001;
|
|
54393
|
+
const dist = Math.sqrt(dx * dx + dy * dy) + 0.001;
|
|
54391
54394
|
if (dist > this.MAX_DISTANCE)
|
|
54392
54395
|
continue;
|
|
54393
|
-
const
|
|
54394
|
-
if (
|
|
54395
|
-
const
|
|
54396
|
-
|
|
54397
|
-
|
|
54396
|
+
const overlapping = s1.right > s2.left && s2.right > s1.left && s1.bottom > s2.top && s2.bottom > s1.top;
|
|
54397
|
+
if (overlapping) {
|
|
54398
|
+
const overlapX = Math.min(s1.right, s2.right) - Math.max(s1.left, s2.left);
|
|
54399
|
+
const overlapY = Math.min(s1.bottom, s2.bottom) - Math.max(s1.top, s2.top);
|
|
54400
|
+
if (overlapX < overlapY) {
|
|
54401
|
+
const sign = s1.cx < s2.cx ? -1 : 1;
|
|
54402
|
+
ax += sign * this.REPULSION * overlapX;
|
|
54403
|
+
} else {
|
|
54404
|
+
const sign = s1.cy < s2.cy ? -1 : 1;
|
|
54405
|
+
ay += sign * this.REPULSION * overlapY;
|
|
54406
|
+
}
|
|
54398
54407
|
} else {
|
|
54408
|
+
const distSq = dx * dx + dy * dy;
|
|
54399
54409
|
const gravAcc = this.G * s2.mass / (distSq + this.SOFTENING_SQ);
|
|
54400
54410
|
ax += gravAcc * dx / dist;
|
|
54401
54411
|
ay += gravAcc * dy / dist;
|
|
@@ -54437,14 +54447,7 @@ class GravityEngine {
|
|
|
54437
54447
|
method: "applyMatrix",
|
|
54438
54448
|
items: movedItems.map(({ id, dx, dy }) => ({
|
|
54439
54449
|
id,
|
|
54440
|
-
matrix: {
|
|
54441
|
-
translateX: dx,
|
|
54442
|
-
translateY: dy,
|
|
54443
|
-
scaleX: 1,
|
|
54444
|
-
scaleY: 1,
|
|
54445
|
-
shearX: 0,
|
|
54446
|
-
shearY: 0
|
|
54447
|
-
}
|
|
54450
|
+
matrix: { translateX: dx, translateY: dy, scaleX: 1, scaleY: 1, shearX: 0, shearY: 0 }
|
|
54448
54451
|
}))
|
|
54449
54452
|
};
|
|
54450
54453
|
this.board.events.emit(operation);
|
package/dist/cjs/index.js
CHANGED
|
@@ -54310,7 +54310,7 @@ class GravityEngine {
|
|
|
54310
54310
|
G = 80;
|
|
54311
54311
|
G_CENTER = 120;
|
|
54312
54312
|
DAMPING = 0.92;
|
|
54313
|
-
REPULSION =
|
|
54313
|
+
REPULSION = 800;
|
|
54314
54314
|
TICK_MS = 33;
|
|
54315
54315
|
SYNC_MS = 300;
|
|
54316
54316
|
MAX_DISTANCE = 3000;
|
|
@@ -54345,13 +54345,18 @@ class GravityEngine {
|
|
|
54345
54345
|
const items = this.board.items.listAll().filter((item) => !item.transformation.isLocked && !EXCLUDED_ITEM_TYPES.has(item.itemType));
|
|
54346
54346
|
if (items.length < 1)
|
|
54347
54347
|
return;
|
|
54348
|
-
const
|
|
54348
|
+
const snap = items.map((item, idx) => {
|
|
54349
54349
|
const pos = item.transformation.getTranslation();
|
|
54350
54350
|
const mbr = item.getMbr();
|
|
54351
54351
|
const w = Math.max(mbr.getWidth(), 1);
|
|
54352
54352
|
const h2 = Math.max(mbr.getHeight(), 1);
|
|
54353
54353
|
return {
|
|
54354
|
+
idx,
|
|
54354
54355
|
id: item.getId(),
|
|
54356
|
+
left: pos.x,
|
|
54357
|
+
top: pos.y,
|
|
54358
|
+
right: pos.x + w,
|
|
54359
|
+
bottom: pos.y + h2,
|
|
54355
54360
|
cx: pos.x + w * 0.5,
|
|
54356
54361
|
cy: pos.y + h2 * 0.5,
|
|
54357
54362
|
w,
|
|
@@ -54359,16 +54364,15 @@ class GravityEngine {
|
|
|
54359
54364
|
mass: w * h2
|
|
54360
54365
|
};
|
|
54361
54366
|
});
|
|
54362
|
-
let sumX = 0;
|
|
54363
|
-
|
|
54364
|
-
for (const s2 of snapshot) {
|
|
54367
|
+
let sumX = 0, sumY = 0;
|
|
54368
|
+
for (const s2 of snap) {
|
|
54365
54369
|
sumX += s2.cx;
|
|
54366
54370
|
sumY += s2.cy;
|
|
54367
54371
|
}
|
|
54368
|
-
const centerX = sumX /
|
|
54369
|
-
const centerY = sumY /
|
|
54370
|
-
for (let i = 0;i <
|
|
54371
|
-
const s1 =
|
|
54372
|
+
const centerX = sumX / snap.length;
|
|
54373
|
+
const centerY = sumY / snap.length;
|
|
54374
|
+
for (let i = 0;i < snap.length; i++) {
|
|
54375
|
+
const s1 = snap[i];
|
|
54372
54376
|
if (!this.velocities.has(s1.id)) {
|
|
54373
54377
|
this.velocities.set(s1.id, { vx: 0, vy: 0 });
|
|
54374
54378
|
}
|
|
@@ -54380,22 +54384,28 @@ class GravityEngine {
|
|
|
54380
54384
|
const distCenter = Math.sqrt(dcx * dcx + dcy * dcy) + 1;
|
|
54381
54385
|
ax += this.G_CENTER * dcx / distCenter;
|
|
54382
54386
|
ay += this.G_CENTER * dcy / distCenter;
|
|
54383
|
-
for (let j = 0;j <
|
|
54387
|
+
for (let j = 0;j < snap.length; j++) {
|
|
54384
54388
|
if (i === j)
|
|
54385
54389
|
continue;
|
|
54386
|
-
const s2 =
|
|
54390
|
+
const s2 = snap[j];
|
|
54387
54391
|
const dx = s2.cx - s1.cx;
|
|
54388
54392
|
const dy = s2.cy - s1.cy;
|
|
54389
|
-
const
|
|
54390
|
-
const dist = Math.sqrt(distSq) + 0.001;
|
|
54393
|
+
const dist = Math.sqrt(dx * dx + dy * dy) + 0.001;
|
|
54391
54394
|
if (dist > this.MAX_DISTANCE)
|
|
54392
54395
|
continue;
|
|
54393
|
-
const
|
|
54394
|
-
if (
|
|
54395
|
-
const
|
|
54396
|
-
|
|
54397
|
-
|
|
54396
|
+
const overlapping = s1.right > s2.left && s2.right > s1.left && s1.bottom > s2.top && s2.bottom > s1.top;
|
|
54397
|
+
if (overlapping) {
|
|
54398
|
+
const overlapX = Math.min(s1.right, s2.right) - Math.max(s1.left, s2.left);
|
|
54399
|
+
const overlapY = Math.min(s1.bottom, s2.bottom) - Math.max(s1.top, s2.top);
|
|
54400
|
+
if (overlapX < overlapY) {
|
|
54401
|
+
const sign = s1.cx < s2.cx ? -1 : 1;
|
|
54402
|
+
ax += sign * this.REPULSION * overlapX;
|
|
54403
|
+
} else {
|
|
54404
|
+
const sign = s1.cy < s2.cy ? -1 : 1;
|
|
54405
|
+
ay += sign * this.REPULSION * overlapY;
|
|
54406
|
+
}
|
|
54398
54407
|
} else {
|
|
54408
|
+
const distSq = dx * dx + dy * dy;
|
|
54399
54409
|
const gravAcc = this.G * s2.mass / (distSq + this.SOFTENING_SQ);
|
|
54400
54410
|
ax += gravAcc * dx / dist;
|
|
54401
54411
|
ay += gravAcc * dy / dist;
|
|
@@ -54437,14 +54447,7 @@ class GravityEngine {
|
|
|
54437
54447
|
method: "applyMatrix",
|
|
54438
54448
|
items: movedItems.map(({ id, dx, dy }) => ({
|
|
54439
54449
|
id,
|
|
54440
|
-
matrix: {
|
|
54441
|
-
translateX: dx,
|
|
54442
|
-
translateY: dy,
|
|
54443
|
-
scaleX: 1,
|
|
54444
|
-
scaleY: 1,
|
|
54445
|
-
shearX: 0,
|
|
54446
|
-
shearY: 0
|
|
54447
|
-
}
|
|
54450
|
+
matrix: { translateX: dx, translateY: dy, scaleX: 1, scaleY: 1, shearX: 0, shearY: 0 }
|
|
54448
54451
|
}))
|
|
54449
54452
|
};
|
|
54450
54453
|
this.board.events.emit(operation);
|
package/dist/cjs/node.js
CHANGED
|
@@ -56783,7 +56783,7 @@ class GravityEngine {
|
|
|
56783
56783
|
G = 80;
|
|
56784
56784
|
G_CENTER = 120;
|
|
56785
56785
|
DAMPING = 0.92;
|
|
56786
|
-
REPULSION =
|
|
56786
|
+
REPULSION = 800;
|
|
56787
56787
|
TICK_MS = 33;
|
|
56788
56788
|
SYNC_MS = 300;
|
|
56789
56789
|
MAX_DISTANCE = 3000;
|
|
@@ -56818,13 +56818,18 @@ class GravityEngine {
|
|
|
56818
56818
|
const items = this.board.items.listAll().filter((item) => !item.transformation.isLocked && !EXCLUDED_ITEM_TYPES.has(item.itemType));
|
|
56819
56819
|
if (items.length < 1)
|
|
56820
56820
|
return;
|
|
56821
|
-
const
|
|
56821
|
+
const snap = items.map((item, idx) => {
|
|
56822
56822
|
const pos = item.transformation.getTranslation();
|
|
56823
56823
|
const mbr = item.getMbr();
|
|
56824
56824
|
const w = Math.max(mbr.getWidth(), 1);
|
|
56825
56825
|
const h2 = Math.max(mbr.getHeight(), 1);
|
|
56826
56826
|
return {
|
|
56827
|
+
idx,
|
|
56827
56828
|
id: item.getId(),
|
|
56829
|
+
left: pos.x,
|
|
56830
|
+
top: pos.y,
|
|
56831
|
+
right: pos.x + w,
|
|
56832
|
+
bottom: pos.y + h2,
|
|
56828
56833
|
cx: pos.x + w * 0.5,
|
|
56829
56834
|
cy: pos.y + h2 * 0.5,
|
|
56830
56835
|
w,
|
|
@@ -56832,16 +56837,15 @@ class GravityEngine {
|
|
|
56832
56837
|
mass: w * h2
|
|
56833
56838
|
};
|
|
56834
56839
|
});
|
|
56835
|
-
let sumX = 0;
|
|
56836
|
-
|
|
56837
|
-
for (const s2 of snapshot) {
|
|
56840
|
+
let sumX = 0, sumY = 0;
|
|
56841
|
+
for (const s2 of snap) {
|
|
56838
56842
|
sumX += s2.cx;
|
|
56839
56843
|
sumY += s2.cy;
|
|
56840
56844
|
}
|
|
56841
|
-
const centerX = sumX /
|
|
56842
|
-
const centerY = sumY /
|
|
56843
|
-
for (let i = 0;i <
|
|
56844
|
-
const s1 =
|
|
56845
|
+
const centerX = sumX / snap.length;
|
|
56846
|
+
const centerY = sumY / snap.length;
|
|
56847
|
+
for (let i = 0;i < snap.length; i++) {
|
|
56848
|
+
const s1 = snap[i];
|
|
56845
56849
|
if (!this.velocities.has(s1.id)) {
|
|
56846
56850
|
this.velocities.set(s1.id, { vx: 0, vy: 0 });
|
|
56847
56851
|
}
|
|
@@ -56853,22 +56857,28 @@ class GravityEngine {
|
|
|
56853
56857
|
const distCenter = Math.sqrt(dcx * dcx + dcy * dcy) + 1;
|
|
56854
56858
|
ax += this.G_CENTER * dcx / distCenter;
|
|
56855
56859
|
ay += this.G_CENTER * dcy / distCenter;
|
|
56856
|
-
for (let j = 0;j <
|
|
56860
|
+
for (let j = 0;j < snap.length; j++) {
|
|
56857
56861
|
if (i === j)
|
|
56858
56862
|
continue;
|
|
56859
|
-
const s2 =
|
|
56863
|
+
const s2 = snap[j];
|
|
56860
56864
|
const dx = s2.cx - s1.cx;
|
|
56861
56865
|
const dy = s2.cy - s1.cy;
|
|
56862
|
-
const
|
|
56863
|
-
const dist = Math.sqrt(distSq) + 0.001;
|
|
56866
|
+
const dist = Math.sqrt(dx * dx + dy * dy) + 0.001;
|
|
56864
56867
|
if (dist > this.MAX_DISTANCE)
|
|
56865
56868
|
continue;
|
|
56866
|
-
const
|
|
56867
|
-
if (
|
|
56868
|
-
const
|
|
56869
|
-
|
|
56870
|
-
|
|
56869
|
+
const overlapping = s1.right > s2.left && s2.right > s1.left && s1.bottom > s2.top && s2.bottom > s1.top;
|
|
56870
|
+
if (overlapping) {
|
|
56871
|
+
const overlapX = Math.min(s1.right, s2.right) - Math.max(s1.left, s2.left);
|
|
56872
|
+
const overlapY = Math.min(s1.bottom, s2.bottom) - Math.max(s1.top, s2.top);
|
|
56873
|
+
if (overlapX < overlapY) {
|
|
56874
|
+
const sign = s1.cx < s2.cx ? -1 : 1;
|
|
56875
|
+
ax += sign * this.REPULSION * overlapX;
|
|
56876
|
+
} else {
|
|
56877
|
+
const sign = s1.cy < s2.cy ? -1 : 1;
|
|
56878
|
+
ay += sign * this.REPULSION * overlapY;
|
|
56879
|
+
}
|
|
56871
56880
|
} else {
|
|
56881
|
+
const distSq = dx * dx + dy * dy;
|
|
56872
56882
|
const gravAcc = this.G * s2.mass / (distSq + this.SOFTENING_SQ);
|
|
56873
56883
|
ax += gravAcc * dx / dist;
|
|
56874
56884
|
ay += gravAcc * dy / dist;
|
|
@@ -56910,14 +56920,7 @@ class GravityEngine {
|
|
|
56910
56920
|
method: "applyMatrix",
|
|
56911
56921
|
items: movedItems.map(({ id, dx, dy }) => ({
|
|
56912
56922
|
id,
|
|
56913
|
-
matrix: {
|
|
56914
|
-
translateX: dx,
|
|
56915
|
-
translateY: dy,
|
|
56916
|
-
scaleX: 1,
|
|
56917
|
-
scaleY: 1,
|
|
56918
|
-
shearX: 0,
|
|
56919
|
-
shearY: 0
|
|
56920
|
-
}
|
|
56923
|
+
matrix: { translateX: dx, translateY: dy, scaleX: 1, scaleY: 1, shearX: 0, shearY: 0 }
|
|
56921
56924
|
}))
|
|
56922
56925
|
};
|
|
56923
56926
|
this.board.events.emit(operation);
|
package/dist/esm/browser.js
CHANGED
|
@@ -54139,7 +54139,7 @@ class GravityEngine {
|
|
|
54139
54139
|
G = 80;
|
|
54140
54140
|
G_CENTER = 120;
|
|
54141
54141
|
DAMPING = 0.92;
|
|
54142
|
-
REPULSION =
|
|
54142
|
+
REPULSION = 800;
|
|
54143
54143
|
TICK_MS = 33;
|
|
54144
54144
|
SYNC_MS = 300;
|
|
54145
54145
|
MAX_DISTANCE = 3000;
|
|
@@ -54174,13 +54174,18 @@ class GravityEngine {
|
|
|
54174
54174
|
const items = this.board.items.listAll().filter((item) => !item.transformation.isLocked && !EXCLUDED_ITEM_TYPES.has(item.itemType));
|
|
54175
54175
|
if (items.length < 1)
|
|
54176
54176
|
return;
|
|
54177
|
-
const
|
|
54177
|
+
const snap = items.map((item, idx) => {
|
|
54178
54178
|
const pos = item.transformation.getTranslation();
|
|
54179
54179
|
const mbr = item.getMbr();
|
|
54180
54180
|
const w = Math.max(mbr.getWidth(), 1);
|
|
54181
54181
|
const h2 = Math.max(mbr.getHeight(), 1);
|
|
54182
54182
|
return {
|
|
54183
|
+
idx,
|
|
54183
54184
|
id: item.getId(),
|
|
54185
|
+
left: pos.x,
|
|
54186
|
+
top: pos.y,
|
|
54187
|
+
right: pos.x + w,
|
|
54188
|
+
bottom: pos.y + h2,
|
|
54184
54189
|
cx: pos.x + w * 0.5,
|
|
54185
54190
|
cy: pos.y + h2 * 0.5,
|
|
54186
54191
|
w,
|
|
@@ -54188,16 +54193,15 @@ class GravityEngine {
|
|
|
54188
54193
|
mass: w * h2
|
|
54189
54194
|
};
|
|
54190
54195
|
});
|
|
54191
|
-
let sumX = 0;
|
|
54192
|
-
|
|
54193
|
-
for (const s2 of snapshot) {
|
|
54196
|
+
let sumX = 0, sumY = 0;
|
|
54197
|
+
for (const s2 of snap) {
|
|
54194
54198
|
sumX += s2.cx;
|
|
54195
54199
|
sumY += s2.cy;
|
|
54196
54200
|
}
|
|
54197
|
-
const centerX = sumX /
|
|
54198
|
-
const centerY = sumY /
|
|
54199
|
-
for (let i = 0;i <
|
|
54200
|
-
const s1 =
|
|
54201
|
+
const centerX = sumX / snap.length;
|
|
54202
|
+
const centerY = sumY / snap.length;
|
|
54203
|
+
for (let i = 0;i < snap.length; i++) {
|
|
54204
|
+
const s1 = snap[i];
|
|
54201
54205
|
if (!this.velocities.has(s1.id)) {
|
|
54202
54206
|
this.velocities.set(s1.id, { vx: 0, vy: 0 });
|
|
54203
54207
|
}
|
|
@@ -54209,22 +54213,28 @@ class GravityEngine {
|
|
|
54209
54213
|
const distCenter = Math.sqrt(dcx * dcx + dcy * dcy) + 1;
|
|
54210
54214
|
ax += this.G_CENTER * dcx / distCenter;
|
|
54211
54215
|
ay += this.G_CENTER * dcy / distCenter;
|
|
54212
|
-
for (let j = 0;j <
|
|
54216
|
+
for (let j = 0;j < snap.length; j++) {
|
|
54213
54217
|
if (i === j)
|
|
54214
54218
|
continue;
|
|
54215
|
-
const s2 =
|
|
54219
|
+
const s2 = snap[j];
|
|
54216
54220
|
const dx = s2.cx - s1.cx;
|
|
54217
54221
|
const dy = s2.cy - s1.cy;
|
|
54218
|
-
const
|
|
54219
|
-
const dist = Math.sqrt(distSq) + 0.001;
|
|
54222
|
+
const dist = Math.sqrt(dx * dx + dy * dy) + 0.001;
|
|
54220
54223
|
if (dist > this.MAX_DISTANCE)
|
|
54221
54224
|
continue;
|
|
54222
|
-
const
|
|
54223
|
-
if (
|
|
54224
|
-
const
|
|
54225
|
-
|
|
54226
|
-
|
|
54225
|
+
const overlapping = s1.right > s2.left && s2.right > s1.left && s1.bottom > s2.top && s2.bottom > s1.top;
|
|
54226
|
+
if (overlapping) {
|
|
54227
|
+
const overlapX = Math.min(s1.right, s2.right) - Math.max(s1.left, s2.left);
|
|
54228
|
+
const overlapY = Math.min(s1.bottom, s2.bottom) - Math.max(s1.top, s2.top);
|
|
54229
|
+
if (overlapX < overlapY) {
|
|
54230
|
+
const sign = s1.cx < s2.cx ? -1 : 1;
|
|
54231
|
+
ax += sign * this.REPULSION * overlapX;
|
|
54232
|
+
} else {
|
|
54233
|
+
const sign = s1.cy < s2.cy ? -1 : 1;
|
|
54234
|
+
ay += sign * this.REPULSION * overlapY;
|
|
54235
|
+
}
|
|
54227
54236
|
} else {
|
|
54237
|
+
const distSq = dx * dx + dy * dy;
|
|
54228
54238
|
const gravAcc = this.G * s2.mass / (distSq + this.SOFTENING_SQ);
|
|
54229
54239
|
ax += gravAcc * dx / dist;
|
|
54230
54240
|
ay += gravAcc * dy / dist;
|
|
@@ -54266,14 +54276,7 @@ class GravityEngine {
|
|
|
54266
54276
|
method: "applyMatrix",
|
|
54267
54277
|
items: movedItems.map(({ id, dx, dy }) => ({
|
|
54268
54278
|
id,
|
|
54269
|
-
matrix: {
|
|
54270
|
-
translateX: dx,
|
|
54271
|
-
translateY: dy,
|
|
54272
|
-
scaleX: 1,
|
|
54273
|
-
scaleY: 1,
|
|
54274
|
-
shearX: 0,
|
|
54275
|
-
shearY: 0
|
|
54276
|
-
}
|
|
54279
|
+
matrix: { translateX: dx, translateY: dy, scaleX: 1, scaleY: 1, shearX: 0, shearY: 0 }
|
|
54277
54280
|
}))
|
|
54278
54281
|
};
|
|
54279
54282
|
this.board.events.emit(operation);
|
package/dist/esm/index.js
CHANGED
|
@@ -54132,7 +54132,7 @@ class GravityEngine {
|
|
|
54132
54132
|
G = 80;
|
|
54133
54133
|
G_CENTER = 120;
|
|
54134
54134
|
DAMPING = 0.92;
|
|
54135
|
-
REPULSION =
|
|
54135
|
+
REPULSION = 800;
|
|
54136
54136
|
TICK_MS = 33;
|
|
54137
54137
|
SYNC_MS = 300;
|
|
54138
54138
|
MAX_DISTANCE = 3000;
|
|
@@ -54167,13 +54167,18 @@ class GravityEngine {
|
|
|
54167
54167
|
const items = this.board.items.listAll().filter((item) => !item.transformation.isLocked && !EXCLUDED_ITEM_TYPES.has(item.itemType));
|
|
54168
54168
|
if (items.length < 1)
|
|
54169
54169
|
return;
|
|
54170
|
-
const
|
|
54170
|
+
const snap = items.map((item, idx) => {
|
|
54171
54171
|
const pos = item.transformation.getTranslation();
|
|
54172
54172
|
const mbr = item.getMbr();
|
|
54173
54173
|
const w = Math.max(mbr.getWidth(), 1);
|
|
54174
54174
|
const h2 = Math.max(mbr.getHeight(), 1);
|
|
54175
54175
|
return {
|
|
54176
|
+
idx,
|
|
54176
54177
|
id: item.getId(),
|
|
54178
|
+
left: pos.x,
|
|
54179
|
+
top: pos.y,
|
|
54180
|
+
right: pos.x + w,
|
|
54181
|
+
bottom: pos.y + h2,
|
|
54177
54182
|
cx: pos.x + w * 0.5,
|
|
54178
54183
|
cy: pos.y + h2 * 0.5,
|
|
54179
54184
|
w,
|
|
@@ -54181,16 +54186,15 @@ class GravityEngine {
|
|
|
54181
54186
|
mass: w * h2
|
|
54182
54187
|
};
|
|
54183
54188
|
});
|
|
54184
|
-
let sumX = 0;
|
|
54185
|
-
|
|
54186
|
-
for (const s2 of snapshot) {
|
|
54189
|
+
let sumX = 0, sumY = 0;
|
|
54190
|
+
for (const s2 of snap) {
|
|
54187
54191
|
sumX += s2.cx;
|
|
54188
54192
|
sumY += s2.cy;
|
|
54189
54193
|
}
|
|
54190
|
-
const centerX = sumX /
|
|
54191
|
-
const centerY = sumY /
|
|
54192
|
-
for (let i = 0;i <
|
|
54193
|
-
const s1 =
|
|
54194
|
+
const centerX = sumX / snap.length;
|
|
54195
|
+
const centerY = sumY / snap.length;
|
|
54196
|
+
for (let i = 0;i < snap.length; i++) {
|
|
54197
|
+
const s1 = snap[i];
|
|
54194
54198
|
if (!this.velocities.has(s1.id)) {
|
|
54195
54199
|
this.velocities.set(s1.id, { vx: 0, vy: 0 });
|
|
54196
54200
|
}
|
|
@@ -54202,22 +54206,28 @@ class GravityEngine {
|
|
|
54202
54206
|
const distCenter = Math.sqrt(dcx * dcx + dcy * dcy) + 1;
|
|
54203
54207
|
ax += this.G_CENTER * dcx / distCenter;
|
|
54204
54208
|
ay += this.G_CENTER * dcy / distCenter;
|
|
54205
|
-
for (let j = 0;j <
|
|
54209
|
+
for (let j = 0;j < snap.length; j++) {
|
|
54206
54210
|
if (i === j)
|
|
54207
54211
|
continue;
|
|
54208
|
-
const s2 =
|
|
54212
|
+
const s2 = snap[j];
|
|
54209
54213
|
const dx = s2.cx - s1.cx;
|
|
54210
54214
|
const dy = s2.cy - s1.cy;
|
|
54211
|
-
const
|
|
54212
|
-
const dist = Math.sqrt(distSq) + 0.001;
|
|
54215
|
+
const dist = Math.sqrt(dx * dx + dy * dy) + 0.001;
|
|
54213
54216
|
if (dist > this.MAX_DISTANCE)
|
|
54214
54217
|
continue;
|
|
54215
|
-
const
|
|
54216
|
-
if (
|
|
54217
|
-
const
|
|
54218
|
-
|
|
54219
|
-
|
|
54218
|
+
const overlapping = s1.right > s2.left && s2.right > s1.left && s1.bottom > s2.top && s2.bottom > s1.top;
|
|
54219
|
+
if (overlapping) {
|
|
54220
|
+
const overlapX = Math.min(s1.right, s2.right) - Math.max(s1.left, s2.left);
|
|
54221
|
+
const overlapY = Math.min(s1.bottom, s2.bottom) - Math.max(s1.top, s2.top);
|
|
54222
|
+
if (overlapX < overlapY) {
|
|
54223
|
+
const sign = s1.cx < s2.cx ? -1 : 1;
|
|
54224
|
+
ax += sign * this.REPULSION * overlapX;
|
|
54225
|
+
} else {
|
|
54226
|
+
const sign = s1.cy < s2.cy ? -1 : 1;
|
|
54227
|
+
ay += sign * this.REPULSION * overlapY;
|
|
54228
|
+
}
|
|
54220
54229
|
} else {
|
|
54230
|
+
const distSq = dx * dx + dy * dy;
|
|
54221
54231
|
const gravAcc = this.G * s2.mass / (distSq + this.SOFTENING_SQ);
|
|
54222
54232
|
ax += gravAcc * dx / dist;
|
|
54223
54233
|
ay += gravAcc * dy / dist;
|
|
@@ -54259,14 +54269,7 @@ class GravityEngine {
|
|
|
54259
54269
|
method: "applyMatrix",
|
|
54260
54270
|
items: movedItems.map(({ id, dx, dy }) => ({
|
|
54261
54271
|
id,
|
|
54262
|
-
matrix: {
|
|
54263
|
-
translateX: dx,
|
|
54264
|
-
translateY: dy,
|
|
54265
|
-
scaleX: 1,
|
|
54266
|
-
scaleY: 1,
|
|
54267
|
-
shearX: 0,
|
|
54268
|
-
shearY: 0
|
|
54269
|
-
}
|
|
54272
|
+
matrix: { translateX: dx, translateY: dy, scaleX: 1, scaleY: 1, shearX: 0, shearY: 0 }
|
|
54270
54273
|
}))
|
|
54271
54274
|
};
|
|
54272
54275
|
this.board.events.emit(operation);
|
package/dist/esm/node.js
CHANGED
|
@@ -56600,7 +56600,7 @@ class GravityEngine {
|
|
|
56600
56600
|
G = 80;
|
|
56601
56601
|
G_CENTER = 120;
|
|
56602
56602
|
DAMPING = 0.92;
|
|
56603
|
-
REPULSION =
|
|
56603
|
+
REPULSION = 800;
|
|
56604
56604
|
TICK_MS = 33;
|
|
56605
56605
|
SYNC_MS = 300;
|
|
56606
56606
|
MAX_DISTANCE = 3000;
|
|
@@ -56635,13 +56635,18 @@ class GravityEngine {
|
|
|
56635
56635
|
const items = this.board.items.listAll().filter((item) => !item.transformation.isLocked && !EXCLUDED_ITEM_TYPES.has(item.itemType));
|
|
56636
56636
|
if (items.length < 1)
|
|
56637
56637
|
return;
|
|
56638
|
-
const
|
|
56638
|
+
const snap = items.map((item, idx) => {
|
|
56639
56639
|
const pos = item.transformation.getTranslation();
|
|
56640
56640
|
const mbr = item.getMbr();
|
|
56641
56641
|
const w = Math.max(mbr.getWidth(), 1);
|
|
56642
56642
|
const h2 = Math.max(mbr.getHeight(), 1);
|
|
56643
56643
|
return {
|
|
56644
|
+
idx,
|
|
56644
56645
|
id: item.getId(),
|
|
56646
|
+
left: pos.x,
|
|
56647
|
+
top: pos.y,
|
|
56648
|
+
right: pos.x + w,
|
|
56649
|
+
bottom: pos.y + h2,
|
|
56645
56650
|
cx: pos.x + w * 0.5,
|
|
56646
56651
|
cy: pos.y + h2 * 0.5,
|
|
56647
56652
|
w,
|
|
@@ -56649,16 +56654,15 @@ class GravityEngine {
|
|
|
56649
56654
|
mass: w * h2
|
|
56650
56655
|
};
|
|
56651
56656
|
});
|
|
56652
|
-
let sumX = 0;
|
|
56653
|
-
|
|
56654
|
-
for (const s2 of snapshot) {
|
|
56657
|
+
let sumX = 0, sumY = 0;
|
|
56658
|
+
for (const s2 of snap) {
|
|
56655
56659
|
sumX += s2.cx;
|
|
56656
56660
|
sumY += s2.cy;
|
|
56657
56661
|
}
|
|
56658
|
-
const centerX = sumX /
|
|
56659
|
-
const centerY = sumY /
|
|
56660
|
-
for (let i = 0;i <
|
|
56661
|
-
const s1 =
|
|
56662
|
+
const centerX = sumX / snap.length;
|
|
56663
|
+
const centerY = sumY / snap.length;
|
|
56664
|
+
for (let i = 0;i < snap.length; i++) {
|
|
56665
|
+
const s1 = snap[i];
|
|
56662
56666
|
if (!this.velocities.has(s1.id)) {
|
|
56663
56667
|
this.velocities.set(s1.id, { vx: 0, vy: 0 });
|
|
56664
56668
|
}
|
|
@@ -56670,22 +56674,28 @@ class GravityEngine {
|
|
|
56670
56674
|
const distCenter = Math.sqrt(dcx * dcx + dcy * dcy) + 1;
|
|
56671
56675
|
ax += this.G_CENTER * dcx / distCenter;
|
|
56672
56676
|
ay += this.G_CENTER * dcy / distCenter;
|
|
56673
|
-
for (let j = 0;j <
|
|
56677
|
+
for (let j = 0;j < snap.length; j++) {
|
|
56674
56678
|
if (i === j)
|
|
56675
56679
|
continue;
|
|
56676
|
-
const s2 =
|
|
56680
|
+
const s2 = snap[j];
|
|
56677
56681
|
const dx = s2.cx - s1.cx;
|
|
56678
56682
|
const dy = s2.cy - s1.cy;
|
|
56679
|
-
const
|
|
56680
|
-
const dist = Math.sqrt(distSq) + 0.001;
|
|
56683
|
+
const dist = Math.sqrt(dx * dx + dy * dy) + 0.001;
|
|
56681
56684
|
if (dist > this.MAX_DISTANCE)
|
|
56682
56685
|
continue;
|
|
56683
|
-
const
|
|
56684
|
-
if (
|
|
56685
|
-
const
|
|
56686
|
-
|
|
56687
|
-
|
|
56686
|
+
const overlapping = s1.right > s2.left && s2.right > s1.left && s1.bottom > s2.top && s2.bottom > s1.top;
|
|
56687
|
+
if (overlapping) {
|
|
56688
|
+
const overlapX = Math.min(s1.right, s2.right) - Math.max(s1.left, s2.left);
|
|
56689
|
+
const overlapY = Math.min(s1.bottom, s2.bottom) - Math.max(s1.top, s2.top);
|
|
56690
|
+
if (overlapX < overlapY) {
|
|
56691
|
+
const sign = s1.cx < s2.cx ? -1 : 1;
|
|
56692
|
+
ax += sign * this.REPULSION * overlapX;
|
|
56693
|
+
} else {
|
|
56694
|
+
const sign = s1.cy < s2.cy ? -1 : 1;
|
|
56695
|
+
ay += sign * this.REPULSION * overlapY;
|
|
56696
|
+
}
|
|
56688
56697
|
} else {
|
|
56698
|
+
const distSq = dx * dx + dy * dy;
|
|
56689
56699
|
const gravAcc = this.G * s2.mass / (distSq + this.SOFTENING_SQ);
|
|
56690
56700
|
ax += gravAcc * dx / dist;
|
|
56691
56701
|
ay += gravAcc * dy / dist;
|
|
@@ -56727,14 +56737,7 @@ class GravityEngine {
|
|
|
56727
56737
|
method: "applyMatrix",
|
|
56728
56738
|
items: movedItems.map(({ id, dx, dy }) => ({
|
|
56729
56739
|
id,
|
|
56730
|
-
matrix: {
|
|
56731
|
-
translateX: dx,
|
|
56732
|
-
translateY: dy,
|
|
56733
|
-
scaleX: 1,
|
|
56734
|
-
scaleY: 1,
|
|
56735
|
-
shearX: 0,
|
|
56736
|
-
shearY: 0
|
|
56737
|
-
}
|
|
56740
|
+
matrix: { translateX: dx, translateY: dy, scaleX: 1, scaleY: 1, shearX: 0, shearY: 0 }
|
|
56738
56741
|
}))
|
|
56739
56742
|
};
|
|
56740
56743
|
this.board.events.emit(operation);
|