import { quat } from "gl-matrix";
import {
  util as mathUtil,
  ROTATE_CONSTANT,
} from "../utils/math-util";

export function toAxis(source, offset) {
  return offset.reduce((acc, v, i) => {
    if (source[i]) {
      acc[source[i]] = v;
    }
    return acc;
  }, {});
}

export function getDeltaYaw(prvQ: quat, curQ: quat) {
  const yawDeltaByYaw = mathUtil.getRotationDelta(prvQ, curQ, ROTATE_CONSTANT.YAW_DELTA_BY_YAW);
  const yawDeltaByRoll = mathUtil.getRotationDelta(prvQ, curQ, ROTATE_CONSTANT.YAW_DELTA_BY_ROLL) *
    Math.sin(mathUtil.extractPitchFromQuat(curQ));

  return yawDeltaByRoll + yawDeltaByYaw;
}

export function getDeltaPitch(prvQ: quat, curQ: quat) {
  const pitchDelta = mathUtil.getRotationDelta(prvQ, curQ, ROTATE_CONSTANT.PITCH_DELTA);

  return pitchDelta;
}
