Skip to content

Commit 31bf04f

Browse files
committed
Improve banner switching update
1 parent 63ddc05 commit 31bf04f

1 file changed

Lines changed: 9 additions & 5 deletions

File tree

pages/tools/gachacalc.tsx

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,7 @@ type ReducedSim = {
180180
}
181181

182182
type GachaTarget = {
183+
id: string
183184
banner: Banner
184185
current: number
185186
target: number
@@ -189,8 +190,10 @@ type GachaTarget = {
189190
lostPity: number
190191
}
191192

193+
let gtCounter = 0
192194
function createDefaultTarget(banner: Banner): GachaTarget {
193195
return {
196+
id: gtCounter++ + Math.random().toString(36).substring(2, 15),
194197
banner,
195198
current: banner.minConst,
196199
target: banner.maxConst,
@@ -241,7 +244,7 @@ export default function GachaCalc({ location }: { location: string }) {
241244
<h1 className="text-5xl font-bold pb-2">Gacha rate calculator</h1>
242245

243246
<NumberInput label="Pulls" set={setPulls} value={pulls} min={0} max={1260 * gachaTargets.length}/>
244-
{gachaTargets.map((gachaTarget, index) => <div key={index * 100 + gachaTargets.length} className="bg-blend-multiply bg-slate-600 rounded-xl p-1 my-2">
247+
{gachaTargets.map((gachaTarget, index) => <div key={gachaTarget.id} className="bg-blend-multiply bg-slate-600 rounded-xl p-1 my-2">
245248
{gachaTargets.length > 1 &&
246249
<button className="bg-red-700 text-slate-50 cursor-pointer text-center rounded-lg px-2 py-1 my-2 float-right"
247250
onClick={() =>
@@ -483,7 +486,7 @@ function GachaTargetInput({
483486

484487
const [gachaName, setGacha] = useState(value.banner.bannerName)
485488

486-
const banner = value.banner
489+
const banner = Object.values(gachas).find((x) => x.bannerName == gachaName) ?? Object.values(gachas)[0]
487490
useEffect(() => delayed(() => { if (pity >= banner.maxPity) setPity(banner.maxPity - 1) }), [banner, pity])
488491
useEffect(() => delayed(() => { if (banner.guaranteedPity && guaranteedPity >= banner.guaranteedPity) setGuaranteedPity(banner.guaranteedPity) }), [banner, guaranteedPity])
489492
useEffect(() => delayed(() => { if (Array.isArray(banner.banner) && lostPity >= banner.banner.length) setLostPity(banner.banner.length - 1) }), [banner, lostPity])
@@ -494,7 +497,7 @@ function GachaTargetInput({
494497
useEffect(() => delayed(() => { if (current >= target) setCurrent(target - 1) }), [target, current])
495498

496499
useEffect(() => {
497-
if (gachaName != value.banner.bannerName) {}
500+
if (banner.bannerName != value.banner.bannerName) {}
498501
else if (current != value.current) {}
499502
else if (target != value.target) {}
500503
else if (pity != value.pity) {}
@@ -504,15 +507,16 @@ function GachaTargetInput({
504507
else return
505508

506509
set({
507-
banner: Object.values(gachas).find((x) => x.bannerName == gachaName) ?? Object.values(gachas)[0],
510+
id: value.id,
511+
banner,
508512
current,
509513
target,
510514
pity,
511515
guaranteed,
512516
guaranteedPity,
513517
lostPity,
514518
})
515-
}, [set, value, gachaName, current, target, pity, guaranteed, guaranteedPity, lostPity])
519+
}, [set, value, banner, current, target, pity, guaranteed, guaranteedPity, lostPity])
516520
return (
517521
<>
518522
<SelectInput label="Banner type" set={(g) => {

0 commit comments

Comments
 (0)