41 lines
1.2 KiB
JavaScript
41 lines
1.2 KiB
JavaScript
const { Vec3 } = require('vec3')
|
|
const math = require('./math')
|
|
const euclideanMod = math.euclideanMod
|
|
const PI = Math.PI
|
|
const PI_2 = Math.PI * 2
|
|
const TO_RAD = PI / 180
|
|
const TO_DEG = 1 / TO_RAD
|
|
const FROM_NOTCH_BYTE = 360 / 256
|
|
// From wiki.vg: Velocity is believed to be in units of 1/8000 of a block per server tick (50ms)
|
|
const FROM_NOTCH_VEL = 1 / 8000
|
|
|
|
exports.toRadians = toRadians
|
|
exports.toDegrees = toDegrees
|
|
exports.fromNotchianYaw = fromNotchianYaw
|
|
exports.fromNotchianPitch = fromNotchianPitch
|
|
exports.fromNotchVelocity = fromNotchVelocity
|
|
exports.toNotchianYaw = yaw => toDegrees(PI - yaw)
|
|
exports.toNotchianPitch = pitch => toDegrees(-pitch)
|
|
exports.fromNotchianYawByte = yaw => fromNotchianYaw(yaw * FROM_NOTCH_BYTE)
|
|
exports.fromNotchianPitchByte = pitch => fromNotchianPitch(pitch * FROM_NOTCH_BYTE)
|
|
|
|
function toRadians (degrees) {
|
|
return TO_RAD * degrees
|
|
}
|
|
|
|
function toDegrees (radians) {
|
|
return TO_DEG * radians
|
|
}
|
|
|
|
function fromNotchianYaw (yaw) {
|
|
return euclideanMod(PI - toRadians(yaw), PI_2)
|
|
}
|
|
|
|
function fromNotchianPitch (pitch) {
|
|
return euclideanMod(toRadians(-pitch) + PI, PI_2) - PI
|
|
}
|
|
|
|
function fromNotchVelocity (vel) {
|
|
return new Vec3(vel.x * FROM_NOTCH_VEL, vel.y * FROM_NOTCH_VEL, vel.z * FROM_NOTCH_VEL)
|
|
}
|