mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-23 11:39:50 +02:00
feat: migration 2
This commit is contained in:
1 parent
e1c8194beb
commit
6285f33989
305 files changed
+414
-414
No files matched your search
@@ -0,0 +1,3 @@
|
||||
export function NaNFallback(value: number, fallback: number) {
|
||||
return isNaN(value) ? fallback : value;
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
import { Vector3 } from 'three';
|
||||
|
||||
export const ZERO_VECTOR = new Vector3();
|
||||
export const I_HAT = new Vector3(1, 0, 0);
|
||||
export const J_HAT = new Vector3(0, 1, 0);
|
||||
export const K_HAT = new Vector3(0, 0, 1);
|
||||
@@ -0,0 +1,5 @@
|
||||
const numberFormat = Intl.NumberFormat('en', { notation: 'compact' });
|
||||
|
||||
export function formatCompact(number: number) {
|
||||
return numberFormat.format(number);
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
export * from './axis';
|
||||
export * from './formatCompact';
|
||||
export * from './isNumber';
|
||||
export * from './NaNFallback';
|
||||
export * from './normalizeAngleRad';
|
||||
export * from './normalToEuler';
|
||||
export * from './numberToRomanNumeral';
|
||||
@@ -0,0 +1,3 @@
|
||||
export default function isNumber(value: any) {
|
||||
return typeof value === 'number' && isFinite(value);
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
import { Euler, Quaternion, Vector3 } from 'three';
|
||||
import { J_HAT } from './axis';
|
||||
|
||||
const quaternion = new Quaternion();
|
||||
const axis = new Vector3();
|
||||
|
||||
export function normalToEuler(normal: Vector3, up = J_HAT) {
|
||||
return new Euler().setFromQuaternion(
|
||||
quaternion.setFromAxisAngle(
|
||||
axis.crossVectors(up, normal).normalize(),
|
||||
up.angleTo(normal),
|
||||
),
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
export function normalizeAngleRad(angle: number) {
|
||||
const newAngle = angle % (2 * Math.PI);
|
||||
if (newAngle > Math.PI) return newAngle - 2 * Math.PI;
|
||||
if (newAngle < -Math.PI) return newAngle + 2 * Math.PI;
|
||||
return newAngle;
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
/**
|
||||
* Thanks, August!
|
||||
* https://stackoverflow.com/a/41358305/12294756
|
||||
*/
|
||||
const ROMAN = {
|
||||
M: 1000,
|
||||
CM: 900,
|
||||
D: 500,
|
||||
CD: 400,
|
||||
C: 100,
|
||||
XC: 90,
|
||||
L: 50,
|
||||
XL: 40,
|
||||
X: 10,
|
||||
IX: 9,
|
||||
V: 5,
|
||||
IV: 4,
|
||||
I: 1,
|
||||
};
|
||||
const ROMAN_KEYS = Object.keys(ROMAN) as (keyof typeof ROMAN)[];
|
||||
|
||||
export default function numberToRomanNumeral(value: number) {
|
||||
let string = '';
|
||||
|
||||
ROMAN_KEYS.forEach((index) => {
|
||||
const part = Math.floor(value / ROMAN[index]);
|
||||
value -= part * ROMAN[index];
|
||||
string += index.repeat(part);
|
||||
});
|
||||
|
||||
return string;
|
||||
}
|
||||
Reference in new issue
Block a user