refactror
This commit is contained in:
77
src/lib/colors.ts
Normal file
77
src/lib/colors.ts
Normal file
@@ -0,0 +1,77 @@
|
||||
type ReturnType = `text-mc-${string}` | `bg-mc-${string}`
|
||||
|
||||
export function getColor(color?: string, type: "text" | "bg" = "text", defaultColor: "red" | "gray" = "red"): ReturnType {
|
||||
switch (color) {
|
||||
case "RED":
|
||||
return type === "text" ? "text-mc-red" : "bg-mc-red"
|
||||
case "GOLD":
|
||||
return type === "text" ? "text-mc-gold" : "bg-mc-gold"
|
||||
case "GREEN":
|
||||
return type === "text" ? "text-mc-green" : "bg-mc-green"
|
||||
case "YELLOW":
|
||||
return type === "text" ? "text-mc-yellow" : "bg-mc-yellow"
|
||||
case "LIGHT_PURPLE":
|
||||
return type === "text" ? "text-mc-light-purple" : "bg-mc-light-purple"
|
||||
case "WHITE":
|
||||
return type === "text" ? "text-mc-white" : "bg-mc-white"
|
||||
case "BLUE":
|
||||
return type === "text" ? "text-mc-blue" : "bg-mc-blue"
|
||||
case "DARK_GREEN":
|
||||
return type === "text" ? "text-mc-dark-green" : "bg-mc-dark-green"
|
||||
case "DARK_RED":
|
||||
return type === "text" ? "text-mc-dark-red" : "bg-mc-dark-red"
|
||||
case "DARK_AQUA":
|
||||
return type === "text" ? "text-mc-dark-aqua" : "bg-mc-dark-aqua"
|
||||
case "DARK_PURPLE":
|
||||
return type === "text" ? "text-mc-dark-purple" : "bg-mc-dark-purple"
|
||||
case "DARK_GRAY":
|
||||
return type === "text" ? "text-mc-dark-gray" : "bg-mc-dark-gray"
|
||||
case "BLACK":
|
||||
return type === "text" ? "text-mc-black" : "bg-mc-black"
|
||||
case "DARK_BLUE":
|
||||
return type === "text" ? "text-mc-dark-blue" : "bg-mc-dark-blue"
|
||||
case "GRAY":
|
||||
return type === "text" ? "text-mc-gray" : "bg-mc-gray"
|
||||
default:
|
||||
return type === "text" ? `text-mc-${defaultColor}` : `bg-mc-${defaultColor}`
|
||||
}
|
||||
}
|
||||
|
||||
export function getColorFromCode(c?: string) {
|
||||
switch (c) {
|
||||
case "0":
|
||||
return "text-mc-black"
|
||||
case "1":
|
||||
return "text-mc-dark-blue"
|
||||
case "2":
|
||||
return "text-mc-dark-green"
|
||||
case "3":
|
||||
return "text-mc-dark-aqua"
|
||||
case "4":
|
||||
return "text-mc-dark-red"
|
||||
case "5":
|
||||
return "text-mc-dark-purple"
|
||||
case "6":
|
||||
return "text-mc-gold"
|
||||
case "7":
|
||||
return "text-mc-gray"
|
||||
case "8":
|
||||
return "text-mc-dark-gray"
|
||||
case "9":
|
||||
return "text-mc-blue"
|
||||
case "a":
|
||||
return "text-mc-green"
|
||||
case "b":
|
||||
return "text-mc-aqua"
|
||||
case "c":
|
||||
return "text-mc-red"
|
||||
case "d":
|
||||
return "text-mc-light-purple"
|
||||
case "e":
|
||||
return "text-mc-yellow"
|
||||
case "f":
|
||||
return "text-mc-white"
|
||||
default:
|
||||
return "text-mc-gray"
|
||||
}
|
||||
}
|
||||
@@ -1,78 +0,0 @@
|
||||
import { BedwarsModeStats } from "./hypixel/bedwars"
|
||||
import { devide } from "./hypixel/general"
|
||||
import { SkywarsModeStats } from "./hypixel/skywars"
|
||||
|
||||
export function concatSkywarsStats(...stats: SkywarsModeStats[]) {
|
||||
const summed = concatStatsArray<SkywarsModeStats>(["kills", "deaths", "wins", "losses"], ...stats)
|
||||
|
||||
const ret = {
|
||||
...summed,
|
||||
kd: devide(summed.kills, summed.deaths),
|
||||
wl: devide(summed.wins, summed.losses)
|
||||
}
|
||||
|
||||
return [
|
||||
ret.kills,
|
||||
ret.deaths,
|
||||
ret.kd,
|
||||
ret.wins,
|
||||
ret.losses,
|
||||
ret.wl
|
||||
]
|
||||
}
|
||||
|
||||
export function concatBedwarsStats(...stats: BedwarsModeStats[]) {
|
||||
if (stats.length === 0) return []
|
||||
|
||||
const summed = concatStatsArray<BedwarsModeStats>([
|
||||
"kills_bedwars",
|
||||
"deaths_bedwars",
|
||||
"final_kills_bedwars",
|
||||
"final_deaths_bedwars",
|
||||
"wins_bedwars",
|
||||
"losses_bedwars",
|
||||
"beds_broken_bedwars",
|
||||
"beds_lost_bedwars"
|
||||
], ...stats)
|
||||
|
||||
let winstreak = -1
|
||||
for (const s of stats) {
|
||||
if (s.winstreak !== -1) winstreak = Math.max(winstreak, s.winstreak)
|
||||
}
|
||||
|
||||
const ret = {
|
||||
...summed,
|
||||
winstreak: winstreak < 0 ? "?" : winstreak,
|
||||
kd: devide(summed.kills_bedwars, summed.deaths_bedwars),
|
||||
fkd: devide(summed.final_kills_bedwars, summed.final_deaths_bedwars),
|
||||
wl: devide(summed.wins_bedwars, summed.losses_bedwars),
|
||||
bbl: devide(summed.beds_broken_bedwars, summed.beds_lost_bedwars)
|
||||
}
|
||||
|
||||
return [
|
||||
ret.kills_bedwars,
|
||||
ret.deaths_bedwars,
|
||||
ret.kd,
|
||||
ret.final_kills_bedwars,
|
||||
ret.final_deaths_bedwars,
|
||||
ret.fkd,
|
||||
ret.wins_bedwars,
|
||||
ret.losses_bedwars,
|
||||
ret.wl,
|
||||
ret.winstreak,
|
||||
ret.beds_broken_bedwars,
|
||||
ret.beds_lost_bedwars,
|
||||
ret.bbl
|
||||
]
|
||||
}
|
||||
|
||||
function concatStatsArray<T extends Record<string, number>>(keys: (keyof T)[], ...stats: T[]) {
|
||||
const base: Record<string, number> = {}
|
||||
for (const k of keys) base[k as string] = 0
|
||||
for (const s of stats) {
|
||||
for (const k of keys) {
|
||||
base[k as string] += s[k] ?? 0
|
||||
}
|
||||
}
|
||||
return base as T
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
import { PRESTIGE_ICONS, PRESTIGES, SLUMBER_ROOMS, SLUMBER_WALLETS } from "@/data/hypixel/bedwars"
|
||||
import { floorLevel } from "./formatters"
|
||||
import { devide } from "./general"
|
||||
import { getColorFromCode } from "@/lib/colors"
|
||||
import { concatStatsArray, devide, floorLevel } from "../general"
|
||||
|
||||
export function getBedwarsStar(level: number) {
|
||||
if (level < 1100) {
|
||||
@@ -18,6 +18,51 @@ export function getBedwarsStar(level: number) {
|
||||
return PRESTIGE_ICONS[3].symbol
|
||||
}
|
||||
|
||||
export function concatBedwarsStats(...stats: BedwarsModeStats[]) {
|
||||
if (stats.length === 0) return []
|
||||
|
||||
const summed = concatStatsArray<BedwarsModeStats>([
|
||||
"kills_bedwars",
|
||||
"deaths_bedwars",
|
||||
"final_kills_bedwars",
|
||||
"final_deaths_bedwars",
|
||||
"wins_bedwars",
|
||||
"losses_bedwars",
|
||||
"beds_broken_bedwars",
|
||||
"beds_lost_bedwars"
|
||||
], ...stats)
|
||||
|
||||
let winstreak = -1
|
||||
for (const s of stats) {
|
||||
if (s.winstreak !== -1) winstreak = Math.max(winstreak, s.winstreak)
|
||||
}
|
||||
|
||||
const ret = {
|
||||
...summed,
|
||||
winstreak: winstreak < 0 ? "?" : winstreak,
|
||||
kd: devide(summed.kills_bedwars, summed.deaths_bedwars),
|
||||
fkd: devide(summed.final_kills_bedwars, summed.final_deaths_bedwars),
|
||||
wl: devide(summed.wins_bedwars, summed.losses_bedwars),
|
||||
bbl: devide(summed.beds_broken_bedwars, summed.beds_lost_bedwars)
|
||||
}
|
||||
|
||||
return [
|
||||
ret.kills_bedwars,
|
||||
ret.deaths_bedwars,
|
||||
ret.kd,
|
||||
ret.final_kills_bedwars,
|
||||
ret.final_deaths_bedwars,
|
||||
ret.fkd,
|
||||
ret.wins_bedwars,
|
||||
ret.losses_bedwars,
|
||||
ret.wl,
|
||||
ret.winstreak,
|
||||
ret.beds_broken_bedwars,
|
||||
ret.beds_lost_bedwars,
|
||||
ret.bbl
|
||||
]
|
||||
}
|
||||
|
||||
export function getTextColor(level: number) {
|
||||
const floored = floorLevel(level, 100)
|
||||
|
||||
@@ -28,6 +73,26 @@ export function getTextColor(level: number) {
|
||||
return PRESTIGES.find(l => l.level === floored)!.color
|
||||
}
|
||||
|
||||
export function bedwarsLevelColors(level: number) {
|
||||
if (level < 0) return getColorFromCode()
|
||||
|
||||
const floored = floorLevel(level, 100)
|
||||
|
||||
if (floored < 1000) {
|
||||
return getColorFromCode(PRESTIGES.find(v => v.level === floored)!.colormap)
|
||||
}
|
||||
|
||||
if (floored > 5000) {
|
||||
return PRESTIGES[PRESTIGES.length - 1].colormap.split("").map(v => {
|
||||
return getColorFromCode(v)
|
||||
})
|
||||
}
|
||||
|
||||
return PRESTIGES.find(v => v.level === floored)!.colormap.split("").map(v => {
|
||||
return getColorFromCode(v)
|
||||
})
|
||||
}
|
||||
|
||||
export function getPrestigeName(level: number) {
|
||||
const floored = floorLevel(level, 100)
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
export function floorLevel(level: number, base: number) {
|
||||
const extra = level % base
|
||||
|
||||
if (extra === 0) {
|
||||
return level;
|
||||
}
|
||||
|
||||
return level - extra;
|
||||
}
|
||||
@@ -11,3 +11,24 @@ export function devide(num: number, num2: number) {
|
||||
|
||||
return num / num2
|
||||
}
|
||||
|
||||
export function floorLevel(level: number, base: number) {
|
||||
const extra = level % base
|
||||
|
||||
if (extra === 0) {
|
||||
return level
|
||||
}
|
||||
|
||||
return level - extra
|
||||
}
|
||||
|
||||
export function concatStatsArray<T extends Record<string, number>>(keys: (keyof T)[], ...stats: T[]) {
|
||||
const base: Record<string, number> = {}
|
||||
for (const k of keys) base[k as string] = 0
|
||||
for (const s of stats) {
|
||||
for (const k of keys) {
|
||||
base[k as string] += s[k] ?? 0
|
||||
}
|
||||
}
|
||||
return base as T
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Guild } from "../schema/guild"
|
||||
import { Guild } from "@/lib/schema/guild"
|
||||
|
||||
export function getGuildMember(guild: Guild["guild"], uuid: string) {
|
||||
return guild.members.find(m => m.uuid === uuid)
|
||||
@@ -1,6 +1,5 @@
|
||||
import { HEADS, ICONS, PRESTIGES } from "@/data/hypixel/skywars"
|
||||
import { floorLevel } from "./formatters"
|
||||
import { devide } from "./general"
|
||||
import { concatStatsArray, devide, floorLevel } from "../general"
|
||||
|
||||
export function getHeadsColor(key: string) {
|
||||
const val = HEADS.find(v => v.id === key)?.color
|
||||
@@ -10,6 +9,25 @@ export function getHeadsColor(key: string) {
|
||||
return val
|
||||
}
|
||||
|
||||
export function concatSkywarsStats(...stats: SkywarsModeStats[]) {
|
||||
const summed = concatStatsArray<SkywarsModeStats>(["kills", "deaths", "wins", "losses"], ...stats)
|
||||
|
||||
const ret = {
|
||||
...summed,
|
||||
kd: devide(summed.kills, summed.deaths),
|
||||
wl: devide(summed.wins, summed.losses)
|
||||
}
|
||||
|
||||
return [
|
||||
ret.kills,
|
||||
ret.deaths,
|
||||
ret.kd,
|
||||
ret.wins,
|
||||
ret.losses,
|
||||
ret.wl
|
||||
]
|
||||
}
|
||||
|
||||
export function getTextColor(level: number) {
|
||||
const floored = floorLevel(level, 5)
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
import { getColorFromCode } from "@/data/colors"
|
||||
import { PRESTIGES } from "@/data/hypixel/bedwars"
|
||||
import { floorLevel } from "./hypixel/formatters"
|
||||
|
||||
export function bedwarsLevelColors(level: number) {
|
||||
if (level < 0) return getColorFromCode()
|
||||
|
||||
const floored = floorLevel(level, 100)
|
||||
|
||||
if (floored < 1000) {
|
||||
return getColorFromCode(PRESTIGES.find(v => v.level === floored)!.colormap)
|
||||
}
|
||||
|
||||
if (floored > 5000) {
|
||||
return PRESTIGES[PRESTIGES.length - 1].colormap.split("").map(v => {
|
||||
return getColorFromCode(v)
|
||||
})
|
||||
}
|
||||
|
||||
return PRESTIGES.find(v => v.level === floored)!.colormap.split("").map(v => {
|
||||
return getColorFromCode(v)
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user