Addition of min/max float and remaking of Float to be a slider

This commit is contained in:
2026-09-24 15:40:07 +02:00
parent adc61be69c
commit 1279c3921e
4 changed files with 44 additions and 17 deletions

View File

@@ -1,22 +1,47 @@
export function Float({ float }: { float: number }) { import { Slider, Label } from "@heroui/react";
import { useEffect, useState } from "react";
export function Float({
float,
minFloat = 0,
maxFloat = 1,
acceptInput = false,
}: {
float: number;
minFloat?: number;
maxFloat?: number;
acceptInput?: boolean;
}) {
const [value, setValue] = useState(float);
useEffect(() => {
setValue(Math.max(minFloat, Math.min(maxFloat, float)));
}, [float, minFloat, maxFloat]);
const handleChange = (newValue: number | number[]) => {
const val = Array.isArray(newValue) ? newValue[0]: newValue;
setValue(Math.max(minFloat, Math.min(maxFloat, val)));
};
return ( return (
<> <>
<div className="w-full flex justify-center relative"> <Slider value={value} maxValue={1} step={0.0001} onChange={handleChange}>
<div <Slider.Track
className="absolute mx-1 h-4 w-1 mt-1 rounded-xl bg-white" className="border-0 h-2 rounded-xl"
style={{ style={{
left: `calc(${float}*100% - var(--spacing))`, background:
transform: "translateX(-50%)", "linear-gradient(90deg, var(--color-green-800) 7%, var(--color-green-500) 7%, var(--color-green-500) 15%, var(--color-lime-400) 15%, var(--color-lime-400) 38%, var(--color-orange-400) 38%, var(--color-orange-400) 38%, var(--color-orange-400) 45%, var(--color-red-400) 45%",
}} }}
></div> >
<div className="w-full h-2 flex my-2"> <div
<div className="w-7/100 h-full rounded-l-xl bg-green-800"></div> className="h-full rounded-xl"
<div className="w-8/100 h-full bg-green-500"></div> style={{
<div className="w-23/100 h-full bg-lime-400"></div> background: `linear-gradient(90deg, rgba(0, 0, 0, 0.8) ${minFloat*100}%, transparent ${minFloat*100}%, transparent ${maxFloat*100}%, rgba(0, 0, 0, 0.8) ${maxFloat*100}%)`,
<div className="w-7/100 h-full bg-orange-400"></div> }}
<div className="w-55/100 h-full rounded-r-xl bg-red-400"></div> />
</div> <Slider.Thumb className="w-1" isDisabled={!acceptInput} />
</div> </Slider.Track>
</Slider>
</> </>
); );
} }

View File

@@ -82,7 +82,7 @@ export function SkinDialog({
<Typography.Paragraph> <Typography.Paragraph>
Float: {skin.float} Float: {skin.float}
</Typography.Paragraph> </Typography.Paragraph>
<Float float={skin.float} /> <Float float={skin.float} minFloat={skin.min_float} maxFloat={skin.max_float} acceptInput/>
</> </>
)} )}
{skin instanceof WeaponInfo && ( {skin instanceof WeaponInfo && (

View File

@@ -50,7 +50,7 @@ export function SkinTile({
{skin.display} {skin.display}
</Typography.Heading> </Typography.Heading>
{skin instanceof WeaponInfo && ( {skin instanceof WeaponInfo && (
<Float float={skin.float} /> <Float float={skin.float} minFloat={skin.min_float} maxFloat={skin.max_float}/>
)} )}
{skin instanceof WeaponInfo && ( {skin instanceof WeaponInfo && (
<Typography.Paragraph> <Typography.Paragraph>

View File

@@ -5,6 +5,8 @@ export class WeaponInfo {
display!: string; display!: string;
paint_index!: number; paint_index!: number;
float!: number; float!: number;
min_float!: number;
max_float!: number;
pattern!: number; pattern!: number;
constructor(data: WeaponInfo) { constructor(data: WeaponInfo) {