You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.3 KiB
44 lines
1.3 KiB
import { INPUT_CANCEL,COMPUTE_INTERVAL } from './input-consts';
|
|
import { abs } from '../utils/utils-consts';
|
|
import getVelocity from './get-velocity';
|
|
import getDirection from './get-direction';
|
|
|
|
/**
|
|
* @private
|
|
* velocity is calculated every x ms
|
|
* @param {Object} session
|
|
* @param {Object} input
|
|
*/
|
|
export default function computeIntervalInputData(session, input) {
|
|
let last = session.lastInterval || input;
|
|
let deltaTime = input.timeStamp - last.timeStamp;
|
|
let velocity;
|
|
let velocityX;
|
|
let velocityY;
|
|
let direction;
|
|
|
|
if (input.eventType !== INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {
|
|
let deltaX = input.deltaX - last.deltaX;
|
|
let deltaY = input.deltaY - last.deltaY;
|
|
|
|
let v = getVelocity(deltaTime, deltaX, deltaY);
|
|
velocityX = v.x;
|
|
velocityY = v.y;
|
|
velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;
|
|
direction = getDirection(deltaX, deltaY);
|
|
|
|
session.lastInterval = input;
|
|
} else {
|
|
// use latest velocity info if it doesn't overtake a minimum period
|
|
velocity = last.velocity;
|
|
velocityX = last.velocityX;
|
|
velocityY = last.velocityY;
|
|
direction = last.direction;
|
|
}
|
|
|
|
input.velocity = velocity;
|
|
input.velocityX = velocityX;
|
|
input.velocityY = velocityY;
|
|
input.direction = direction;
|
|
}
|