Addition of min/max float and remaking of Float to be a slider
This commit is contained in:
@@ -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>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 && (
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user