81 lines
2.3 KiB
TypeScript
81 lines
2.3 KiB
TypeScript
import { Metrics } from "./calc";
|
|
|
|
// -------------------------------------------------------------------------------------------------
|
|
// DATA MODELS
|
|
// -------------------------------------------------------------------------------------------------
|
|
|
|
export interface Player {
|
|
metrics: Metrics;
|
|
}
|
|
|
|
export enum Attribute {
|
|
Strength = "Strength",
|
|
Power = "Power",
|
|
Endurance = "Endurance",
|
|
Agility = "Agility",
|
|
}
|
|
|
|
export enum Activity {
|
|
BackSquat = "BackSquat",
|
|
Deadlift = "Deadlift",
|
|
BenchPress = "BenchPress",
|
|
Run = "Run",
|
|
BroadJump = "BroadJump",
|
|
ConeDrill = "ConeDrill",
|
|
}
|
|
|
|
export interface ActivityPerformance {
|
|
activity: Activity;
|
|
performance: number;
|
|
}
|
|
|
|
export enum Gender {
|
|
Male = "Male",
|
|
Female = "Female"
|
|
}
|
|
|
|
// -------------------------------------------------------------------------------------------------
|
|
// Conversion utilities
|
|
// -------------------------------------------------------------------------------------------------
|
|
export const lbToKg = (lb: number | string): number => +lb * 0.453592;
|
|
export const kgToLb = (kg: number | string): number => +kg * 2.20462;
|
|
|
|
export const minToMs = (min) => min * 60000;
|
|
export const secToMs = (sec) => sec * 1000;
|
|
|
|
export const feetToCm = (feet) => feet * 30.48;
|
|
export const inchesToCm = (inches) => inches * 2.54;
|
|
|
|
export const mphToMtrsPerMs = (mph: number): number => (mph * 0.44704) / 1000;
|
|
|
|
export const timeToMs = (time: string): number => {
|
|
const [main, decimal = "0"] = time.split(".");
|
|
const milliseconds = Number(decimal.padEnd(3, "0").slice(0, 3));
|
|
|
|
const parts = main.split(":").map(Number);
|
|
let minutes = 0,
|
|
seconds = 0;
|
|
|
|
if (parts.length === 1) {
|
|
seconds = parts[0];
|
|
} else if (parts.length === 2) {
|
|
[minutes, seconds] = parts as [number, number];
|
|
} else {
|
|
throw new Error("Invalid time format");
|
|
}
|
|
|
|
return (minutes * 60 + seconds) * 1000 + milliseconds;
|
|
};
|
|
|
|
export const msToTime = (ms: number, includeMs = false): string => {
|
|
const minutes = Math.floor(ms / 60000);
|
|
const seconds = Math.floor((ms % 60000) / 1000);
|
|
const milliseconds = Math.floor(ms % 1000);
|
|
|
|
let formattedTime = `${minutes}:${seconds.toString().padStart(2, "0")}`;
|
|
if (includeMs) {
|
|
formattedTime += `.${milliseconds.toString().padStart(3, "0")}`;
|
|
}
|
|
return formattedTime;
|
|
};
|