feat: spaced armor toggle

This commit is contained in:
TrèsAbhi committed 2024-01-10 19:08:23 -06:00
1 parent 9218eb09d6
commit 92c81d60db
3 files changed
+33 -3

No files matched your search

@@ -37,6 +37,7 @@ export function TankDisplay() {
const mode = useTankopedia((state) => state.mode); const mode = useTankopedia((state) => state.mode);
const showGrid = useTankopedia((state) => state.model.showGrid); const showGrid = useTankopedia((state) => state.model.showGrid);
const opaqueArmor = useTankopedia((state) => state.model.opaqueArmor); const opaqueArmor = useTankopedia((state) => state.model.opaqueArmor);
const showSpacedArmor = useTankopedia((state) => state.model.showSpacedArmor);
const protagonist = useTankopedia((state) => { const protagonist = useTankopedia((state) => {
if (!state.areTanksAssigned) return; if (!state.areTanksAssigned) return;
return state.protagonist; return state.protagonist;
@@ -188,6 +189,17 @@ export function TankDisplay() {
> >
Opaque armor Opaque armor
</DropdownMenu.CheckboxItem> </DropdownMenu.CheckboxItem>
<DropdownMenu.CheckboxItem
checked={showSpacedArmor}
onCheckedChange={(checked) => {
mutateTankopedia((draft) => {
draft.model.showSpacedArmor = checked;
});
}}
>
Spaced armor
</DropdownMenu.CheckboxItem>
</DropdownMenu.Content> </DropdownMenu.Content>
</DropdownMenu.Root> </DropdownMenu.Root>
@@ -28,6 +28,7 @@ export function TankArmor({ ...props }: TankArmorProps) {
if (!state.areTanksAssigned) return; if (!state.areTanksAssigned) return;
return state.antagonist; return state.antagonist;
}); });
const showSpacedArmor = useTankopedia((state) => state.model.showSpacedArmor);
if (!protagonist || !antagonist) return null; if (!protagonist || !antagonist) return null;
@@ -93,7 +94,12 @@ export function TankArmor({ ...props }: TankArmorProps) {
const thickness = tankModelDefinition.armor.thickness[armorId]; const thickness = tankModelDefinition.armor.thickness[armorId];
const isSpaced = tankModelDefinition.armor.spaced?.includes(armorId); const isSpaced = tankModelDefinition.armor.spaced?.includes(armorId);
if (!isVisible || thickness === undefined) return null; if (
!isVisible ||
thickness === undefined ||
(isSpaced && !showSpacedArmor)
)
return null;
return ( return (
<ArmorMesh <ArmorMesh
spaced={isSpaced} spaced={isSpaced}
@@ -121,7 +127,12 @@ export function TankArmor({ ...props }: TankArmorProps) {
const isSpaced = const isSpaced =
turretModelDefinition.armor.spaced?.includes(armorId); turretModelDefinition.armor.spaced?.includes(armorId);
if (!isVisible || thickness === undefined) return null; if (
!isVisible ||
thickness === undefined ||
(isSpaced && !showSpacedArmor)
)
return null;
return ( return (
<ArmorMesh <ArmorMesh
spaced={isSpaced} spaced={isSpaced}
@@ -156,7 +167,12 @@ export function TankArmor({ ...props }: TankArmorProps) {
const isSpaced = const isSpaced =
gunModelDefinition.armor.spaced?.includes(armorId); gunModelDefinition.armor.spaced?.includes(armorId);
if (!isVisible || thickness === undefined) return null; if (
!isVisible ||
thickness === undefined ||
(isSpaced && !showSpacedArmor)
)
return null;
return ( return (
<ArmorMesh <ArmorMesh
spaced={isSpaced} spaced={isSpaced}
+2
View File
@@ -33,6 +33,7 @@ type Tankopedia = {
controlsEnabled: boolean; controlsEnabled: boolean;
showGrid: boolean; showGrid: boolean;
opaqueArmor: boolean; opaqueArmor: boolean;
showSpacedArmor: boolean;
}; };
mode: TankopediaMode; mode: TankopediaMode;
} & ( } & (
@@ -72,6 +73,7 @@ export const useTankopedia = create<Tankopedia>()(() => ({
controlsEnabled: true, controlsEnabled: true,
showGrid: true, showGrid: true,
opaqueArmor: false, opaqueArmor: false,
showSpacedArmor: true,
}, },
areTanksAssigned: false, areTanksAssigned: false,
mode: 'model', mode: 'model',