mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-24 12:09:51 +02:00
feat: quartile
This commit is contained in:
1 parent
f13622836e
commit
0c9714b5a5
2 files changed
+19
-18
No files matched your search
@@ -375,7 +375,7 @@ export function SpacedArmorSceneComponent({
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (staticMode) {
|
if (staticMode) {
|
||||||
const x = clamp(thickness / thicknessRange.max, 0, 1);
|
const x = clamp(thickness / thicknessRange.quartile, 0, 1);
|
||||||
const y = Math.sqrt(x);
|
const y = Math.sqrt(x);
|
||||||
const r = -((1 - y) ** 2) + 1;
|
const r = -((1 - y) ** 2) + 1;
|
||||||
const g = -(y ** 2) + 1;
|
const g = -(y ** 2) + 1;
|
||||||
|
|||||||
@@ -20,7 +20,8 @@ interface StaticArmorSceneProps {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export interface ThicknessRange {
|
export interface ThicknessRange {
|
||||||
max: number;
|
// max: number;
|
||||||
|
quartile: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const StaticArmorScene = memo<StaticArmorSceneProps>(
|
export const StaticArmorScene = memo<StaticArmorSceneProps>(
|
||||||
@@ -61,27 +62,17 @@ export const StaticArmorScene = memo<StaticArmorSceneProps>(
|
|||||||
.filter(Boolean)
|
.filter(Boolean)
|
||||||
.map(({ model, id }) => {
|
.map(({ model, id }) => {
|
||||||
const tankThicknesses = Object.values(model.armor.thickness);
|
const tankThicknesses = Object.values(model.armor.thickness);
|
||||||
const trackThicknesses = Object.values(model.tracks)
|
|
||||||
.map((track) => track.thickness)
|
|
||||||
.flat();
|
|
||||||
const turretThicknesses = Object.values(model.turrets)
|
const turretThicknesses = Object.values(model.turrets)
|
||||||
.map((turret) => {
|
.map((turret) => {
|
||||||
const turretThicknesses = Object.values(turret.armor.thickness);
|
const turretThicknesses = Object.values(turret.armor.thickness);
|
||||||
const gunThicknesses = Object.values(turret.guns)
|
const gunThicknesses = Object.values(turret.guns)
|
||||||
.map((gun) => {
|
.map((gun) => Object.values(gun.armor.thickness))
|
||||||
return Object.values(gun.armor.thickness);
|
|
||||||
})
|
|
||||||
.flat();
|
.flat();
|
||||||
|
|
||||||
return [...turretThicknesses, ...gunThicknesses];
|
return [...turretThicknesses, ...gunThicknesses];
|
||||||
})
|
})
|
||||||
.flat();
|
.flat();
|
||||||
|
const totalThicknesses = [...tankThicknesses, ...turretThicknesses];
|
||||||
const totalThicknesses = [
|
|
||||||
...tankThicknesses,
|
|
||||||
...trackThicknesses,
|
|
||||||
...turretThicknesses,
|
|
||||||
];
|
|
||||||
|
|
||||||
if (id === tank.id) thisTankThicknesses = totalThicknesses;
|
if (id === tank.id) thisTankThicknesses = totalThicknesses;
|
||||||
|
|
||||||
@@ -89,12 +80,22 @@ export const StaticArmorScene = memo<StaticArmorSceneProps>(
|
|||||||
})
|
})
|
||||||
.flat();
|
.flat();
|
||||||
|
|
||||||
// const maxOfAll = Math.max(...thicknesses) * 0.75;
|
const sortedThicknesses = thicknesses.sort((a, b) => a - b);
|
||||||
// const max = Math.max(...thisTankThicknesses, maxOfAll);
|
const quartileIndex = (1 - 2 ** -6) * (sortedThicknesses.length + 1) - 1;
|
||||||
|
let quartile: number;
|
||||||
|
|
||||||
const max = Math.max(...thicknesses);
|
if (Number.isInteger(quartileIndex)) {
|
||||||
|
quartile = sortedThicknesses[quartileIndex];
|
||||||
|
} else {
|
||||||
|
quartile =
|
||||||
|
(sortedThicknesses[Math.floor(quartileIndex)] +
|
||||||
|
sortedThicknesses[Math.ceil(quartileIndex)]) /
|
||||||
|
2;
|
||||||
|
}
|
||||||
|
|
||||||
return { max } satisfies ThicknessRange;
|
console.log('quartile', quartile);
|
||||||
|
|
||||||
|
return { quartile } satisfies ThicknessRange;
|
||||||
}, [tank.tier]);
|
}, [tank.tier]);
|
||||||
|
|
||||||
useTankTransform(protagonist, turretContainer, gunContainer);
|
useTankTransform(protagonist, turretContainer, gunContainer);
|
||||||
|
|||||||
Reference in new issue
Block a user