Skip to content

Commit

Permalink
Fix multiple materials referencing same file
Browse files Browse the repository at this point in the history
  • Loading branch information
exogen committed Jan 29, 2024
1 parent e628bb4 commit 497eca6
Show file tree
Hide file tree
Showing 19 changed files with 69 additions and 39 deletions.
23 changes: 22 additions & 1 deletion config/models.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,28 @@ export async function getSkinConfig() {
{ label: "Green Light", name: "greenlight", hasDefault: false },
{ label: "Red Light", name: "lite_red", hasDefault: false },
],
plasmathrower: [{ label: "Weapon", name: "weapon_plasmathrower" }],
plasmathrower: [
{
label: "Rear & Barrel",
name: "weapon_plasma10",
file: "weapon_plasma1",
},
{
label: "Top & Front",
name: "weapon_plasma21",
file: "weapon_plasma2",
},
{
name: "weapon_plasma1",
file: "weapon_plasma1",
selectable: false,
},
{
name: "weapon_plasma2",
file: "weapon_plasma2",
selectable: false,
},
],
energy: [
{
label: "Weapon",
Expand Down
4 changes: 2 additions & 2 deletions docs/404.html

Large diffs are not rendered by default.

2 changes: 0 additions & 2 deletions docs/_next/static/chunks/pages/index-0934afea379f1152.js

This file was deleted.

This file was deleted.

2 changes: 2 additions & 0 deletions docs/_next/static/chunks/pages/index-617009baca527a4e.js

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion docs/index.html

Large diffs are not rendered by default.

Binary file removed docs/umhlanga_sunrise_4k.exr
Binary file not shown.
Binary file removed docs/umhlanga_sunrise_4k.hdr
Binary file not shown.
Binary file removed docs/whipple_creek_regional_park_1k_HDR.jpg
Binary file not shown.
7 changes: 4 additions & 3 deletions src/ColorCanvas.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,9 @@ export default function ColorCanvas({
materialDef: MaterialDefinition;
}) {
const { skinImageUrls, defaultSkinImageUrls } = useWarrior();
const skinImageUrl = skinImageUrls[materialDef.name];
const defaultSkinImageUrl = defaultSkinImageUrls[materialDef.name];
const skinImageUrl = skinImageUrls[materialDef.file ?? materialDef.name];
const defaultSkinImageUrl =
defaultSkinImageUrls[materialDef.file ?? materialDef.name];
const { setColorImageUrl } = useSkin();
const { canvasPadding } = useSettings();
const [noAlphaImageUrl, setNoAlphaImageUrl] = useState<string | null>(null);
Expand All @@ -36,7 +37,7 @@ export default function ColorCanvas({
width: textureSize[0],
height: textureSize[1],
});
setColorImageUrl(materialDef.name, imageUrl);
setColorImageUrl(materialDef.file ?? materialDef.name, imageUrl);
},
[textureSize, canvasPadding, setColorImageUrl, materialDef]
);
Expand Down
2 changes: 1 addition & 1 deletion src/Material.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ interface MaterialProps {
export default function Material({ material, materialDef }: MaterialProps) {
const { getSkinImages } = useSkin();
const { colorImageUrl, metallicImageUrl } =
getSkinImages(material.name) ?? {};
getSkinImages(materialDef?.file ?? material.name) ?? {};

useTexture({
material,
Expand Down
10 changes: 7 additions & 3 deletions src/MetallicCanvas.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,9 @@ export default function MetallicCanvas({
materialDef: MaterialDefinition;
}) {
const { skinImageUrls, defaultSkinImageUrls } = useWarrior();
const skinImageUrl = skinImageUrls[materialDef.name];
const defaultSkinImageUrl = defaultSkinImageUrls[materialDef.name];
const skinImageUrl = skinImageUrls[materialDef.file ?? materialDef.name];
const defaultSkinImageUrl =
defaultSkinImageUrls[materialDef.file ?? materialDef.name];
const { setMetallicImageUrl } = useSkin();
const { canvasPadding } = useSettings();
const [alphaImageUrl, setAlphaImageUrl] = useState<string | null>(null);
Expand Down Expand Up @@ -50,7 +51,10 @@ export default function MetallicCanvas({
runningChangeHandlers.current -= 1;
}
if (runningChangeHandlers.current === 0) {
setMetallicImageUrl(materialDef.name, outputImageUrl);
setMetallicImageUrl(
materialDef.file ?? materialDef.name,
outputImageUrl
);
}
},
[
Expand Down
28 changes: 14 additions & 14 deletions src/SkinProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,31 +6,31 @@ export default function SkinProvider({ children }: { children: ReactNode }) {

const setters = useMemo(
() => ({
setSkinImages(materialName: string, skinImages: SkinImages) {
setSkinImages(materialFile: string, skinImages: SkinImages) {
setMaterialSkins((materialSkins) => {
return {
...materialSkins,
[materialName]: skinImages,
[materialFile]: skinImages,
};
});
},
setColorImageUrl(materialName: string, colorImageUrl: string) {
setColorImageUrl(materialFile: string, colorImageUrl: string) {
setMaterialSkins((materialSkins) => {
return {
...materialSkins,
[materialName]: {
...materialSkins[materialName],
[materialFile]: {
...materialSkins[materialFile],
colorImageUrl,
},
};
});
},
setMetallicImageUrl(materialName: string, metallicImageUrl: string) {
setMetallicImageUrl(materialFile: string, metallicImageUrl: string) {
setMaterialSkins((materialSkins) => {
return {
...materialSkins,
[materialName]: {
...materialSkins[materialName],
[materialFile]: {
...materialSkins[materialFile],
metallicImageUrl,
},
};
Expand All @@ -43,14 +43,14 @@ export default function SkinProvider({ children }: { children: ReactNode }) {
const context = useMemo(() => {
return {
materialSkins,
getSkinImages(materialName: string) {
return materialSkins[materialName];
getSkinImages(materialFile: string) {
return materialSkins[materialFile];
},
getColorImageUrl(materialName: string) {
return materialSkins[materialName].colorImageUrl;
getColorImageUrl(materialFile: string) {
return materialSkins[materialFile].colorImageUrl;
},
getMetallicImageUrl(materialName: string) {
return materialSkins[materialName].metallicImageUrl;
getMetallicImageUrl(materialFile: string) {
return materialSkins[materialFile].metallicImageUrl;
},
...setters,
};
Expand Down
6 changes: 4 additions & 2 deletions src/WarriorProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -44,14 +44,16 @@ export function getSkinImageUrls({
switch (selectedSkinType) {
case "default":
if (materialDef.hasDefault !== false) {
skinImageUrls[materialDef.name] = `${basePath}/textures/${
skinImageUrls[
materialDef.file ?? materialDef.name
] = `${basePath}/textures/${
materialDef.file ?? materialDef.name
}.png`;
}
break;
case "custom":
skinImageUrls[
materialDef.name
materialDef.file ?? materialDef.name
] = `${baseSkinPath}/${selectedSkin}/${
materialDef.file ?? materialDef.name
}.png`;
Expand Down
6 changes: 4 additions & 2 deletions src/WarriorSelector.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ export default function WarriorSelector() {
<option value="chaingun">Chaingun</option>
<option value="grenade_launcher">Grenade Launcher</option>
<option value="sniper">Laser Rifle</option>
{/* <option value="plasmathrower">Plasma Cannon</option> */}
<option value="plasmathrower">Plasma Cannon</option>
<option value="energy">Blaster</option>
<option value="shocklance">Shocklance</option>
<option value="elf">ELF Projector</option>
Expand Down Expand Up @@ -178,7 +178,9 @@ export default function WarriorSelector() {
}
});
setSelectedSkin(null);
setSkinImageUrls({ [materialDef.name]: imageUrl });
setSkinImageUrls({
[materialDef.file ?? materialDef.name]: imageUrl,
});
}}
type="file"
accept=".png, image/png"
Expand Down
12 changes: 6 additions & 6 deletions src/useSkin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@ export type MaterialSkins = Record<string, SkinImages>;

interface SkinContextValue {
materialSkins: MaterialSkins;
getSkinImages: (materialName: string) => SkinImages;
setSkinImages: (materialName: string, skinImages: SkinImages) => void;
getColorImageUrl: (materialName: string) => string | undefined;
setColorImageUrl: (materialName: string, colorImageUrl: string) => void;
getMetallicImageUrl: (materialName: string) => string | undefined;
setMetallicImageUrl: (materialName: string, colorImageUrl: string) => void;
getSkinImages: (materialFile: string) => SkinImages;
setSkinImages: (materialFile: string, skinImages: SkinImages) => void;
getColorImageUrl: (materialFile: string) => string | undefined;
setColorImageUrl: (materialFile: string, colorImageUrl: string) => void;
getMetallicImageUrl: (materialFile: string) => string | undefined;
setMetallicImageUrl: (materialFile: string, colorImageUrl: string) => void;
}

const SkinContext = React.createContext<SkinContextValue | null>(null);
Expand Down

0 comments on commit 497eca6

Please sign in to comment.