Preact: Support cosmetic formes (#2461)

---------

Co-authored-by: Guangcong Luo <guangcongluo@gmail.com>
This commit is contained in:
Dieter Reinert 2025-06-19 20:49:12 +02:00 committed by GitHub
parent 20369ee707
commit 4b5830ff39
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -2766,12 +2766,41 @@ class DetailsForm extends preact.Component<{
)}
</label>
</p>}
{species.cosmeticFormes && <p>
<button class="button">
Change sprite
</button>
</p>}
{species.cosmeticFormes && <div>
<p><strong>Form:</strong></p>
<div style="display:flex;flex-wrap:wrap;gap:6px;max-width:400px;">
{(() => {
const baseId = toID(species.baseSpecies);
const forms = species.cosmeticFormes?.length ? [baseId, ...species.cosmeticFormes.map(toID)] : [baseId];
return forms.map(id => {
const sp = editor.dex.species.get(id);
const iconStyle = Dex.getPokemonIcon({ species: sp.name } as Dex.PokemonSet);
const isCur = toID(set.species) === id;
return <button
value={id}
class={`button piconbtn${isCur ? ' cur' : ''}`}
style={{ padding: '2px' }}
onClick={this.selectSprite}
>
<span class="picon" style={iconStyle}></span>
<br />{sp.forme || sp.baseForme || sp.baseSpecies}
</button>;
});
})()}
</div>
</div>}
</div>
</div>;
}
selectSprite = (ev: Event) => {
const target = ev.currentTarget as HTMLButtonElement;
const formId = target.value;
const { editor, set } = this.props;
const species = editor.dex.species.get(formId);
if (!species.exists) return;
editor.changeSpecies(set, species.name);
this.props.onChange();
this.forceUpdate();
};
}