|
|
|
@ -6113,42 +6113,102 @@ function checkScare(_ref) { |
|
|
|
|
var diffX = Math.abs(state.x - evtX); |
|
|
|
|
var diffY = Math.abs(state.y - evtY); |
|
|
|
|
|
|
|
|
|
if (diffX < 50 && diffY < 50) { |
|
|
|
|
if (evt.target === particleDiv) { |
|
|
|
|
_dom2.default.container.dispatchEvent(evtScare(evtX, evtY)); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
function move(acc, i) { |
|
|
|
|
var x = acc.x, |
|
|
|
|
y = acc.y, |
|
|
|
|
dx = acc.dx, |
|
|
|
|
dy = acc.dy; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var east = _dom2.default.containerBounds.width - particleDiv.offsetWidth; |
|
|
|
|
var south = _dom2.default.containerBounds.height - particleDiv.offsetHeight; |
|
|
|
|
|
|
|
|
|
x += dx; |
|
|
|
|
y += dy; |
|
|
|
|
|
|
|
|
|
if (x < 0) { |
|
|
|
|
x = Math.abs(x); |
|
|
|
|
dx = -dx; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (x > east) { |
|
|
|
|
x = Math.round(2 * east - x); |
|
|
|
|
dx = -dx; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (y < 0) { |
|
|
|
|
y = Math.abs(y); |
|
|
|
|
dy = -dy; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (y > south) { |
|
|
|
|
y = Math.round(2 * south - y); |
|
|
|
|
dy = -dy; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return { x: x, y: y, dx: dx, dy: dy }; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
function flee(_ref3) { |
|
|
|
|
var _ref4 = _slicedToArray(_ref3, 2), |
|
|
|
|
evt = _ref4[0], |
|
|
|
|
store = _ref4[1]; |
|
|
|
|
|
|
|
|
|
var initialState = store.get(); |
|
|
|
|
var fleeRadius = 200; |
|
|
|
|
var _evt$detail = evt.detail, |
|
|
|
|
scareX = _evt$detail.scareX, |
|
|
|
|
scareY = _evt$detail.scareY; |
|
|
|
|
|
|
|
|
|
var fps$ = _rxjs2.default.Observable.interval(1000 / 32); |
|
|
|
|
|
|
|
|
|
fps$.scan(function (acc, i) { |
|
|
|
|
return store.set({ x: acc.x + acc.dx, y: acc.y + acc.dy }); |
|
|
|
|
}, initialState).takeWhile(function (state) { |
|
|
|
|
var xDanger = Math.abs(initialState.x - state.x) < 150; |
|
|
|
|
var yDanger = Math.abs(initialState.y - state.y) < 150; |
|
|
|
|
var frames$ = fps$.scan(move, initialState).takeWhile(function (state) { |
|
|
|
|
var xDanger = Math.abs(initialState.x - state.x) < fleeRadius; |
|
|
|
|
var yDanger = Math.abs(initialState.y - state.y) < fleeRadius; |
|
|
|
|
|
|
|
|
|
return xDanger && yDanger; |
|
|
|
|
}).subscribe(function (state) { |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
frames$.last().subscribe(function (finalState) { |
|
|
|
|
store.set(finalState); |
|
|
|
|
store.set(randomMoveVector()); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
frames$.subscribe(function (state) { |
|
|
|
|
particleDiv.style.left = state.x + 'px'; |
|
|
|
|
particleDiv.style.top = state.y + 'px'; |
|
|
|
|
}); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
function randomMoveVector() { |
|
|
|
|
var speed = 5; |
|
|
|
|
var dx = Math.round(Math.random() * speed); |
|
|
|
|
var dy = Math.pow(Math.pow(speed, 2) - Math.pow(dx, 2), 0.5); |
|
|
|
|
|
|
|
|
|
var negX = Math.random() < 0.5 ? -1 : 1; |
|
|
|
|
var negY = Math.random() < 0.5 ? -1 : 1; |
|
|
|
|
|
|
|
|
|
dx *= negX; |
|
|
|
|
dy *= negY; |
|
|
|
|
|
|
|
|
|
return { dx: dx, dy: dy }; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function reset() { |
|
|
|
|
if (particleDiv.parentNode) { |
|
|
|
|
_dom2.default.container.removeChild(particleDiv); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var store = new _store2.default({ x: 10, y: 10, dx: 5, dy: 5 }); |
|
|
|
|
var _randomMoveVector = randomMoveVector(), |
|
|
|
|
dx = _randomMoveVector.dx, |
|
|
|
|
dy = _randomMoveVector.dy; |
|
|
|
|
|
|
|
|
|
var store = new _store2.default({ x: 0, y: 0, dx: dx, dy: dy }); |
|
|
|
|
var state = store.get(); |
|
|
|
|
|
|
|
|
|
particleDiv.style.top = state.y + 'px'; |
|
|
|
@ -6162,7 +6222,9 @@ function reset() { |
|
|
|
|
function init() { |
|
|
|
|
var store = reset(); |
|
|
|
|
|
|
|
|
|
var click$ = _rxjs2.default.Observable.fromEvent(_dom2.default.container, 'click').map(function (evt) { |
|
|
|
|
var click$ = _rxjs2.default.Observable.fromEvent(_dom2.default.container, 'click') |
|
|
|
|
// .do(DOM.calcBounds)
|
|
|
|
|
.do(_dom2.default.highlight).map(function (evt) { |
|
|
|
|
return [evt, store]; |
|
|
|
|
}).subscribe(checkScare); |
|
|
|
|
|
|
|
|
@ -6213,8 +6275,11 @@ __webpack_require__(72); |
|
|
|
|
|
|
|
|
|
_animation4.default.init(); |
|
|
|
|
|
|
|
|
|
// TODO
|
|
|
|
|
// PR: https://github.com/ReactiveX/rxjs/blob/master/doc/decision-tree-widget/tree.yml#L122 "...time past since the last..."
|
|
|
|
|
// TODO ANIM2 clicking several times on seahorse creates jumpiness
|
|
|
|
|
// TODO display file contents in page
|
|
|
|
|
// TODO adding core UI breaks bounds
|
|
|
|
|
//
|
|
|
|
|
// TODO PR: https://github.com/ReactiveX/rxjs/blob/master/doc/decision-tree-widget/tree.yml#L122 "...time past since the last..."
|
|
|
|
|
//
|
|
|
|
|
// INTERMEDIATE TOPICS
|
|
|
|
|
// === I have one existing Observable and
|
|
|
|
@ -20110,11 +20175,10 @@ Object.defineProperty(exports, "__esModule", { |
|
|
|
|
value: true |
|
|
|
|
}); |
|
|
|
|
var container = document.querySelector('.particles'); |
|
|
|
|
var containerBounds = document.querySelector('.particles').getBoundingClientRect(); |
|
|
|
|
var containerBounds = container.getBoundingClientRect(); |
|
|
|
|
|
|
|
|
|
var DOM = { |
|
|
|
|
container: container, |
|
|
|
|
|
|
|
|
|
containerBounds: containerBounds, |
|
|
|
|
|
|
|
|
|
getEventOffsetCoords: function getEventOffsetCoords(evt, containerCoords) { |
|
|
|
@ -20126,7 +20190,24 @@ var DOM = { |
|
|
|
|
evtX: pageX - containerCoords.left, |
|
|
|
|
evtY: pageY - containerCoords.top |
|
|
|
|
}; |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
highlight: function highlight(evt) { |
|
|
|
|
var _DOM$getEventOffsetCo = DOM.getEventOffsetCoords(evt, DOM.containerBounds), |
|
|
|
|
evtX = _DOM$getEventOffsetCo.evtX, |
|
|
|
|
evtY = _DOM$getEventOffsetCo.evtY; |
|
|
|
|
|
|
|
|
|
var highlightDiv = document.createElement('div'); |
|
|
|
|
highlightDiv.className = 'highlight'; |
|
|
|
|
highlightDiv.style.left = evtX + 'px'; |
|
|
|
|
highlightDiv.style.top = evtY + 'px'; |
|
|
|
|
|
|
|
|
|
DOM.container.appendChild(highlightDiv); |
|
|
|
|
setTimeout(function () { |
|
|
|
|
DOM.container.removeChild(highlightDiv); |
|
|
|
|
}, 500); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
exports.default = DOM; |
|
|
|
|