From 5fc114b2f464a31e2ccf424a13006cde982eb232 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Tue, 14 Jan 2020 12:09:57 +0100 Subject: [PATCH] IMprovements on panels physics --- Scales/RateScale.js | 18 +++++---- Scales/TimeFrameScale.js | 18 +++++---- Spaces/PanelsSpace.js | 87 +++++++++++++++++++++++++++++++++++----- 3 files changed, 98 insertions(+), 25 deletions(-) diff --git a/Scales/RateScale.js b/Scales/RateScale.js index 8df57a2ed..71c1b9a23 100644 --- a/Scales/RateScale.js +++ b/Scales/RateScale.js @@ -161,15 +161,17 @@ function newRateScale () { let displaceFactor = 0 if (thisObject.payload.parentNode === undefined) { return } // This happens when in the process of deleting the scale, timeline chart or time machine. if (thisObject.payload.parentNode.type === 'Timeline Chart') { - if (thisObject.payload.parentNode.payload.parentNode.rateScale !== undefined) { - displaceFactor++ - } - for (let i = 0; i < thisObject.payload.parentNode.payload.parentNode.timelineCharts.length; i++) { - let timelineChart = thisObject.payload.parentNode.payload.parentNode.timelineCharts[i] - if (thisObject.payload.node.id !== timelineChart.rateScale.id) { + if (thisObject.payload.parentNode.payload.parentNode !== undefined) { + if (thisObject.payload.parentNode.payload.parentNode.rateScale !== undefined) { displaceFactor++ - } else { - break + } + for (let i = 0; i < thisObject.payload.parentNode.payload.parentNode.timelineCharts.length; i++) { + let timelineChart = thisObject.payload.parentNode.payload.parentNode.timelineCharts[i] + if (thisObject.payload.node.id !== timelineChart.rateScale.id) { + displaceFactor++ + } else { + break + } } } } diff --git a/Scales/TimeFrameScale.js b/Scales/TimeFrameScale.js index 7674b52a9..c4b438ded 100644 --- a/Scales/TimeFrameScale.js +++ b/Scales/TimeFrameScale.js @@ -138,15 +138,17 @@ function newTimeFrameScale () { let displaceFactor = 0 if (thisObject.payload.parentNode === undefined) { return } // This happens when in the process of deleting the scale, timeline chart or time machine. if (thisObject.payload.parentNode.type === 'Timeline Chart') { - if (thisObject.payload.parentNode.payload.parentNode.timeFrameScale !== undefined) { - displaceFactor++ - } - for (let i = 0; i < thisObject.payload.parentNode.payload.parentNode.timelineCharts.length; i++) { - let timelineChart = thisObject.payload.parentNode.payload.parentNode.timelineCharts[i] - if (thisObject.payload.node.id !== timelineChart.timeFrameScale.id) { + if (thisObject.payload.parentNode.payload.parentNode !== undefined) { + if (thisObject.payload.parentNode.payload.parentNode.timeFrameScale !== undefined) { displaceFactor++ - } else { - break + } + for (let i = 0; i < thisObject.payload.parentNode.payload.parentNode.timelineCharts.length; i++) { + let timelineChart = thisObject.payload.parentNode.payload.parentNode.timelineCharts[i] + if (thisObject.payload.node.id !== timelineChart.timeFrameScale.id) { + displaceFactor++ + } else { + break + } } } } diff --git a/Spaces/PanelsSpace.js b/Spaces/PanelsSpace.js index 77cb064b7..bd8361114 100644 --- a/Spaces/PanelsSpace.js +++ b/Spaces/PanelsSpace.js @@ -126,11 +126,24 @@ function newPanelsSpace () { } function positioningPhysics () { - const INCREMENT = 0.5 if (thisObject.panels !== undefined) { for (let i = 0; i < thisObject.panels.length; i++) { let panel = thisObject.panels[i] + /* setting the speed of the panel */ + let ACCELERATION = 0.1 // This is resting speed. + if (panel.container.speed === undefined) { + panel.container.speed = { + x: 1, + y: 1 + } + panel.container.resistance = { + x: 0, + y: 0 + } + } + + /* Trying to move the panel and see if it is possible */ let centerPoint = { x: panel.container.frame.position.x, y: panel.container.frame.position.y @@ -144,17 +157,23 @@ function newPanelsSpace () { /* According to the quadrant we push the panels to the sides */ if (centerPoint.x < verticalLine) { - panel.container.frame.position.x = panel.container.frame.position.x - INCREMENT + panel.container.frame.position.x = panel.container.frame.position.x - panel.container.speed.x if (isOverlapping(i, panel.container) === true) { - panel.container.frame.position.x = panel.container.frame.position.x + INCREMENT * 2 + panel.container.frame.position.x = panel.container.frame.position.x + panel.container.speed.x * 3 + accelerateOnX() + } else { + desAccelerateOnX() } if (panel.container.frame.position.x < viewPort.visibleArea.topLeft.x) { panel.container.frame.position.x = viewPort.visibleArea.topLeft.x } } else { - panel.container.frame.position.x = panel.container.frame.position.x + INCREMENT + panel.container.frame.position.x = panel.container.frame.position.x + panel.container.speed.x if (isOverlapping(i, panel.container) === true) { - panel.container.frame.position.x = panel.container.frame.position.x - INCREMENT * 2 + panel.container.frame.position.x = panel.container.frame.position.x - panel.container.speed.x * 3 + accelerateOnX() + } else { + desAccelerateOnX() } if (panel.container.frame.position.x + panel.container.frame.width > viewPort.visibleArea.topRight.x) { panel.container.frame.position.x = viewPort.visibleArea.topRight.x - panel.container.frame.width @@ -162,23 +181,73 @@ function newPanelsSpace () { } if (panel.container.frame.height <= viewPort.visibleArea.bottomRight.y - viewPort.visibleArea.topRight.y) { if (centerPoint.y < horizontalLine) { - panel.container.frame.position.y = panel.container.frame.position.y - INCREMENT + panel.container.frame.position.y = panel.container.frame.position.y - panel.container.speed.y if (isOverlapping(i, panel.container) === true) { - panel.container.frame.position.y = panel.container.frame.position.y + INCREMENT * 2 + panel.container.frame.position.y = panel.container.frame.position.y + panel.container.speed.y * 3 + accelerateOnY() + } else { + desAccelerateOnY() } if (panel.container.frame.position.y < viewPort.visibleArea.topLeft.y) { panel.container.frame.position.y = viewPort.visibleArea.topLeft.y } } else { - panel.container.frame.position.y = panel.container.frame.position.y + INCREMENT + panel.container.frame.position.y = panel.container.frame.position.y + panel.container.speed.y if (isOverlapping(i, panel.container) === true) { - panel.container.frame.position.y = panel.container.frame.position.y - INCREMENT * 2 + panel.container.frame.position.y = panel.container.frame.position.y - panel.container.speed.y * 3 + accelerateOnY() + } else { + desAccelerateOnY() } if (panel.container.frame.position.y + panel.container.frame.height > viewPort.visibleArea.bottomRight.y) { panel.container.frame.position.y = viewPort.visibleArea.bottomRight.y - panel.container.frame.height } } } + + function accelerateOnX () { + panel.container.speed.x = panel.container.speed.x + ACCELERATION + if (panel.container.speed.x > ACCELERATION * 10) { + panel.container.speed.x = ACCELERATION * 10 + } + panel.container.resistance.x = panel.container.resistance.x + 1 + } + function desAccelerateOnX () { + if (panel.container.resistance.x < -3) { + panel.container.resistance.x = 0 + panel.container.speed.x = ACCELERATION * 5 + console.log('desAccelerateOnX Invertido', panel.container.speed.x) + return + } + panel.container.speed.x = panel.container.speed.x - ACCELERATION + if (panel.container.speed.x < ACCELERATION) { + panel.container.speed.x = ACCELERATION * 1 + } + panel.container.resistance.x = panel.container.resistance.x - 1 + } + function accelerateOnY () { + if (panel.container.resistance.y > 5) { + panel.container.resistance.y = 0 + return + } + panel.container.speed.y = panel.container.speed.y + ACCELERATION + if (panel.container.speed.y > ACCELERATION * 10) { + panel.container.speed.y = ACCELERATION * 5 + } + panel.container.resistance.y = panel.container.resistance.y + 1 + } + function desAccelerateOnY () { + if (panel.container.resistance.y < -3) { + panel.container.resistance.y = 0 + panel.container.speed.y = ACCELERATION * 10 + return + } + panel.container.speed.y = panel.container.speed.y - ACCELERATION + if (panel.container.speed.y < ACCELERATION) { + panel.container.speed.y = ACCELERATION * 1 + } + panel.container.resistance.y = panel.container.resistance.y - 1 + } } }