diff --git a/docs/404.html b/docs/404.html index 639bfa5..ac40859 100644 --- a/docs/404.html +++ b/docs/404.html @@ -1 +1 @@ -404: This page could not be found

404

This page could not be found.

\ No newline at end of file +404: This page could not be found

404

This page could not be found.

\ No newline at end of file diff --git a/docs/404/index.html b/docs/404/index.html index 639bfa5..ac40859 100644 --- a/docs/404/index.html +++ b/docs/404/index.html @@ -1 +1 @@ -404: This page could not be found

404

This page could not be found.

\ No newline at end of file +404: This page could not be found

404

This page could not be found.

\ No newline at end of file diff --git a/docs/_next/static/chunks/pages/gallery-9db61b8283b87e1a.js b/docs/_next/static/chunks/pages/gallery-9db61b8283b87e1a.js deleted file mode 100644 index fb248f0..0000000 --- a/docs/_next/static/chunks/pages/gallery-9db61b8283b87e1a.js +++ /dev/null @@ -1,2 +0,0 @@ -(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[214],{4080:function(e,l,a){(window.__NEXT_P=window.__NEXT_P||[]).push(["/gallery",function(){return a(1560)}])},1560:function(e,l,a){"use strict";a.r(l),a.d(l,{default:function(){return GalleryPage}});var n=a(5893),i=a(7294),r=a(3181),o=a(2091),s=a(1163),t=a(5316),c=a.n(t);let u={customSkins:{},newSkins:{}};var h=a(9746),d=a.n(h),m=a(9008),p=a.n(m),_=a(1664),v=a.n(_);let x=[],j={lmale:0,mmale:1,lfemale:2,mfemale:3,hmale:4,lbioderm:5,mbioderm:6,hbioderm:7};function GalleryPage(){var e,l;let a=(0,s.useRouter)(),[t,h]=function(){let[e,l]=(0,i.useState)(u);(0,i.useEffect)(()=>{let e=new AbortController,a=e.signal,n=!1,loadCustomSkins=async()=>{let e;try{if(e=await fetch("".concat("https://exogen.github.io/t2-skins","/skins.json"),{signal:a}),!n){let a=await e.json();n||l(a)}}catch(e){console.error(e)}};return loadCustomSkins(),()=>{n=!0,e.abort()}},[]);let a=e!==u;return[e,a]}(),[m,_]=(0,i.useState)("lmale"),g="hfemale"===m?"hmale":m,y=null!==(l=null===(e=t.customSkins)||void 0===e?void 0:e[g])&&void 0!==l?l:x,f=(0,i.useMemo)(()=>{if(null==t||!t.newSkins||"new"!==m)return[];{let e=[];return Object.entries(t.newSkins).forEach(l=>{let[a,n]=l;e.push(...n.map(e=>({name:e,model:a})))}),c()(e,[e=>e.name.toLowerCase(),e=>j[e.model]],["asc","asc"])}},[m,t]),k="new"===m?f:y,b=a.query.filter&&"string"==typeof a.query.filter?a.query.filter:"lmale";return(0,i.useEffect)(()=>{_(b)},[b]),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(p(),{children:(0,n.jsx)("title",{children:"Tribes 2 Skin Gallery"})}),(0,n.jsxs)("main",{className:d().GalleryPage,children:[(0,n.jsxs)("div",{className:d().Tools,children:[(0,n.jsxs)(v(),{className:d().Back,href:"../",children:[(0,n.jsx)(o.bUI,{size:12,className:d().Icon})," ",(0,n.jsx)("span",{className:d().Label,children:"Back to Editor"})]}),(0,n.jsxs)("select",{tabIndex:0,id:"ModelSelect","aria-label":"Player model",onChange:e=>{a.push("?filter=".concat(e.target.value))},value:m,children:[(0,n.jsx)("option",{value:"new",children:"All new skins ✨"}),(0,n.jsxs)("optgroup",{label:"Players","data-model-type":"player",children:[(0,n.jsx)("option",{value:"lmale",children:"Human Male • Light"}),(0,n.jsx)("option",{value:"mmale",children:"Human Male • Medium"}),(0,n.jsx)("option",{value:"hmale",children:"Human Male • Heavy"}),(0,n.jsx)("option",{value:"lfemale",children:"Human Female • Light"}),(0,n.jsx)("option",{value:"mfemale",children:"Human Female • Medium"}),(0,n.jsx)("option",{value:"hfemale",children:"Human Female • Heavy"}),(0,n.jsx)("option",{value:"lbioderm",children:"Bioderm • Light"}),(0,n.jsx)("option",{value:"mbioderm",children:"Bioderm • Medium"}),(0,n.jsx)("option",{value:"hbioderm",children:"Bioderm • Heavy"})]}),(0,n.jsxs)("optgroup",{label:"Weapons","data-model-type":"weapon",children:[(0,n.jsx)("option",{value:"disc",children:"Disc Launcher"}),(0,n.jsx)("option",{value:"chaingun",children:"Chaingun"}),(0,n.jsx)("option",{value:"grenade_launcher",children:"Grenade Launcher"}),(0,n.jsx)("option",{value:"sniper",children:"Laser Rifle"}),(0,n.jsx)("option",{value:"plasmathrower",children:"Plasma Cannon"}),(0,n.jsx)("option",{value:"energy",children:"Blaster"}),(0,n.jsx)("option",{value:"shocklance",children:"Shocklance"}),(0,n.jsx)("option",{value:"elf",children:"ELF Projector"}),(0,n.jsx)("option",{value:"missile",children:"Missile Launcher"}),(0,n.jsx)("option",{value:"mortar",children:"Mortar"}),(0,n.jsx)("option",{value:"repair",children:"Repair Pack"}),(0,n.jsx)("option",{value:"targeting",children:"Targeting Laser"})]}),(0,n.jsxs)("optgroup",{label:"Vehicles","data-model-type":"vehicle",children:[(0,n.jsx)("option",{value:"vehicle_grav_scout",children:"Wildcat Grav Cycle"}),(0,n.jsx)("option",{value:"vehicle_grav_tank",children:"Beowulf Assault Tank"}),(0,n.jsx)("option",{value:"vehicle_land_mpbbase",children:"Jericho Mobile Point Base"}),(0,n.jsx)("option",{value:"vehicle_air_scout",children:"Shrike Scout Fighter"}),(0,n.jsx)("option",{value:"vehicle_air_bomber",children:"Thundersword Bomber"}),(0,n.jsx)("option",{value:"vehicle_air_hapc",children:"HAVOC Gunship Transport"})]})]}),(0,n.jsx)("a",{href:"https://github.com/exogen/t2-model-skinner",className:d().IconLink,children:(0,n.jsx)(o.hJX,{size:32})})]}),h?(0,n.jsx)("div",{className:d().Gallery,children:k.map(e=>{let l,a;"string"==typeof e?(l=e,a=g):(l=e.name,a=e.model);let i="".concat("https://exogen.github.io/t2-skins","/gallery/").concat(encodeURIComponent(l),".").concat(a,".webp");return(0,n.jsxs)("div",{className:d().Skin,children:[(0,n.jsx)("img",{className:d().Preview,loading:"lazy",src:i,width:680,height:800,alt:l}),(0,n.jsx)("div",{className:d().Name,children:l})]},"".concat(l,":").concat(a))})}):(0,n.jsx)(r.xHo,{className:d().Spinner})]})]})}},9746:function(e){e.exports={GalleryPage:"gallery_GalleryPage__QyCLn",Tools:"gallery_Tools__COicv",Back:"gallery_Back__xvbOe",IconLink:"gallery_IconLink__7NlBA",Gallery:"gallery_Gallery__ZMJE_",Skin:"gallery_Skin__Ep_rb",Preview:"gallery_Preview__JGf2f",Name:"gallery_Name__W9Aoc",Spinner:"gallery_Spinner__9jTLL",spin:"gallery_spin__EVmH5",Label:"gallery_Label__kJfDw"}}},function(e){e.O(0,[774,365,648,918,888,179],function(){return e(e.s=4080)}),_N_E=e.O()}]); -//# sourceMappingURL=gallery-9db61b8283b87e1a.js.map \ No newline at end of file diff --git a/docs/_next/static/chunks/pages/gallery-9db61b8283b87e1a.js.map b/docs/_next/static/chunks/pages/gallery-9db61b8283b87e1a.js.map deleted file mode 100644 index fc003a4..0000000 --- a/docs/_next/static/chunks/pages/gallery-9db61b8283b87e1a.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/chunks/pages/gallery-9db61b8283b87e1a.js","mappings":"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","sources":["webpack://_N_E/?e81b","webpack://_N_E/./src/useManifest.ts","webpack://_N_E/./src/pages/gallery.tsx","webpack://_N_E/./src/pages/gallery.module.css","webpack://_N_E/"],"sourcesContent":["\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/gallery\",\n function () {\n return require(\"private-next-pages/gallery.tsx\");\n }\n ]);\n if(module.hot) {\n module.hot.dispose(function () {\n window.__NEXT_P.push([\"/gallery\"])\n });\n }\n ","import { useState, useEffect } from \"react\";\n\nexport type Manifest = {\n customSkins: Record;\n newSkins: Record;\n};\n\nconst baseManifestPath = `https://exogen.github.io/t2-skins`;\nexport const defaultManifest: Manifest = {\n customSkins: {},\n newSkins: {},\n};\n\nexport default function useManifest(): [Manifest, boolean] {\n const [manifest, setManifest] = useState(defaultManifest);\n\n useEffect(() => {\n const controller = new AbortController();\n const signal = controller.signal;\n let ignore = false;\n\n const loadCustomSkins = async () => {\n let res;\n try {\n res = await fetch(`${baseManifestPath}/skins.json`, { signal });\n if (!ignore) {\n const json = await res.json();\n if (!ignore) {\n setManifest(json as Manifest);\n }\n }\n } catch (err) {\n console.error(err);\n }\n };\n\n loadCustomSkins();\n\n return () => {\n ignore = true;\n controller.abort();\n };\n }, []);\n\n const isLoaded = manifest !== defaultManifest;\n return [manifest, isLoaded];\n}\n","import { useEffect, useMemo, useState } from \"react\";\nimport { CgSpinnerTwo } from \"react-icons/cg\";\nimport { FaChevronLeft, FaGithub } from \"react-icons/fa\";\nimport { useRouter } from \"next/router\";\nimport orderBy from \"lodash.orderby\";\nimport useManifest from \"../useManifest\";\nimport styles from \"./gallery.module.css\";\nimport Head from \"next/head\";\nimport Link from \"next/link\";\n\nconst baseManifestPath = `https://exogen.github.io/t2-skins`;\nconst emptySkins: string[] = [];\n\nconst modelOrder: Record = {\n lmale: 0,\n mmale: 1,\n lfemale: 2,\n mfemale: 3,\n hmale: 4,\n lbioderm: 5,\n mbioderm: 6,\n hbioderm: 7,\n};\n\nexport default function GalleryPage() {\n const router = useRouter();\n const [manifest, isLoaded] = useManifest();\n const [selectedModel, setSelectedModel] = useState(\"lmale\");\n const actualModel = selectedModel === \"hfemale\" ? \"hmale\" : selectedModel;\n const customSkins = manifest.customSkins?.[actualModel] ?? emptySkins;\n\n const newSkinList = useMemo(() => {\n if (manifest?.newSkins && selectedModel === \"new\") {\n const allNewSkins: Array<{ name: string; model: string }> = [];\n\n Object.entries(manifest.newSkins).forEach(([model, names]) => {\n allNewSkins.push(...names.map((name) => ({ name, model })));\n });\n\n return orderBy(\n allNewSkins,\n [(skin) => skin.name.toLowerCase(), (skin) => modelOrder[skin.model]],\n [\"asc\", \"asc\"]\n );\n } else {\n return [];\n }\n }, [selectedModel, manifest]);\n\n const filteredSkins = selectedModel === \"new\" ? newSkinList : customSkins;\n\n const filter =\n router.query.filter && typeof router.query.filter === \"string\"\n ? router.query.filter\n : \"lmale\";\n\n useEffect(() => {\n setSelectedModel(filter);\n }, [filter]);\n\n return (\n <>\n \n Tribes 2 Skin Gallery\n \n
\n
\n \n {\" \"}\n Back to Editor\n \n {\n router.push(`?filter=${event.target.value}`);\n }}\n value={selectedModel}\n >\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n {isLoaded ? (\n
\n {filteredSkins.map((name) => {\n let skinName;\n let skinModel;\n if (typeof name === \"string\") {\n skinName = name;\n skinModel = actualModel;\n } else {\n skinName = name.name;\n skinModel = name.model;\n }\n const url = `${baseManifestPath}/gallery/${encodeURIComponent(\n skinName\n )}.${skinModel}.webp`;\n\n return (\n
\n \n
{skinName}
\n
\n );\n })}\n
\n ) : (\n \n )}\n
\n \n );\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"GalleryPage\":\"gallery_GalleryPage__QyCLn\",\"Tools\":\"gallery_Tools__COicv\",\"Back\":\"gallery_Back__xvbOe\",\"IconLink\":\"gallery_IconLink__7NlBA\",\"Gallery\":\"gallery_Gallery__ZMJE_\",\"Skin\":\"gallery_Skin__Ep_rb\",\"Preview\":\"gallery_Preview__JGf2f\",\"Name\":\"gallery_Name__W9Aoc\",\"Spinner\":\"gallery_Spinner__9jTLL\",\"spin\":\"gallery_spin__EVmH5\",\"Label\":\"gallery_Label__kJfDw\"};"],"names":["window","__NEXT_P","push","__webpack_require__","defaultManifest","customSkins","newSkins","emptySkins","modelOrder","lmale","mmale","lfemale","mfemale","hmale","lbioderm","mbioderm","hbioderm","GalleryPage","manifest","router","useRouter","isLoaded","useManifest","setManifest","useState","useEffect","controller","AbortController","signal","ignore","loadCustomSkins","res","fetch","concat","json","err","console","error","abort","selectedModel","setSelectedModel","actualModel","newSkinList","useMemo","allNewSkins","Object","entries","forEach","model","names","param","map","name","orderBy","skin","toLowerCase","filteredSkins","filter","query","jsx_runtime","jsxs","Fragment","jsx","Head","title","main","className","styles","div","Link","href","FaChevronLeft","size","span","select","tabIndex","id","aria-label","onChange","event","target","value","option","optgroup","label","data-model-type","a","FaGithub","skinName","skinModel","url","encodeURIComponent","img","loading","src","width","height","alt","CgSpinnerTwo","module","exports"],"sourceRoot":""} \ No newline at end of file diff --git a/docs/_next/static/chunks/pages/gallery-af1406fdc1af13f5.js b/docs/_next/static/chunks/pages/gallery-af1406fdc1af13f5.js new file mode 100644 index 0000000..3e3e7ec --- /dev/null +++ b/docs/_next/static/chunks/pages/gallery-af1406fdc1af13f5.js @@ -0,0 +1,2 @@ +(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[214],{4080:function(e,l,a){(window.__NEXT_P=window.__NEXT_P||[]).push(["/gallery",function(){return a(1560)}])},1560:function(e,l,a){"use strict";a.r(l),a.d(l,{default:function(){return GalleryPage}});var n=a(5893),i=a(7294),r=a(3181),o=a(2091),s=a(1163),t=a(5316),c=a.n(t);let h={customSkins:{},newSkins:{}};var u=a(9746),d=a.n(u),m=a(9008),p=a.n(m),_=a(1664),v=a.n(_);let g=[],x={lmale:0,mmale:1,lfemale:2,mfemale:3,hmale:4,lbioderm:5,mbioderm:6,hbioderm:7,energy:8,disc:9,chaingun:10,grenade_launcher:11,sniper:12,elf:13,shocklance:14,plasmathrower:15,missile:16,mortar:17,repair:18,targeting:19,vehicle_grav_scout:20,vehicle_grav_tank:21,turret_assaulttank_mortar:22,vehicle_land_mpbbase:23,vehicle_air_scout:24,vehicle_air_bomber:25,vehicle_air_hapc:26};function GalleryPage(){var e,l;let a=(0,s.useRouter)(),[t,u]=function(){let[e,l]=(0,i.useState)(h);(0,i.useEffect)(()=>{let e=new AbortController,a=e.signal,n=!1,loadCustomSkins=async()=>{let e;try{if(e=await fetch("".concat("https://exogen.github.io/t2-skins","/skins.json"),{signal:a}),!n){let a=await e.json();n||l(a)}}catch(e){console.error(e)}};return loadCustomSkins(),()=>{n=!0,e.abort()}},[]);let a=e!==h;return[e,a]}(),[m,_]=(0,i.useState)("lmale"),j="hfemale"===m?"hmale":m,y=null!==(l=null===(e=t.customSkins)||void 0===e?void 0:e[j])&&void 0!==l?l:g,f=(0,i.useMemo)(()=>{if(null==t||!t.newSkins||"new"!==m)return[];{let e=[];return Object.entries(t.newSkins).forEach(l=>{let[a,n]=l;e.push(...n.map(e=>({name:e,model:a})))}),c()(e,[e=>e.name.toLowerCase(),e=>x[e.model]],["asc","asc"])}},[m,t]),b="new"===m?f:y,k=a.query.filter&&"string"==typeof a.query.filter?a.query.filter:"lmale";return(0,i.useEffect)(()=>{_(k)},[k]),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(p(),{children:(0,n.jsx)("title",{children:"Tribes 2 Skin Gallery"})}),(0,n.jsxs)("main",{className:d().GalleryPage,children:[(0,n.jsxs)("div",{className:d().Tools,children:[(0,n.jsxs)(v(),{className:d().Back,href:"../",children:[(0,n.jsx)(o.bUI,{size:12,className:d().Icon})," ",(0,n.jsx)("span",{className:d().Label,children:"Back to Editor"})]}),(0,n.jsxs)("select",{tabIndex:0,id:"ModelSelect","aria-label":"Player model",onChange:e=>{a.push("?filter=".concat(e.target.value))},value:m,children:[(0,n.jsx)("option",{value:"new",children:"All new skins ✨"}),(0,n.jsxs)("optgroup",{label:"Players","data-model-type":"player",children:[(0,n.jsx)("option",{value:"lmale",children:"Human Male • Light"}),(0,n.jsx)("option",{value:"mmale",children:"Human Male • Medium"}),(0,n.jsx)("option",{value:"hmale",children:"Human Male • Heavy"}),(0,n.jsx)("option",{value:"lfemale",children:"Human Female • Light"}),(0,n.jsx)("option",{value:"mfemale",children:"Human Female • Medium"}),(0,n.jsx)("option",{value:"hfemale",children:"Human Female • Heavy"}),(0,n.jsx)("option",{value:"lbioderm",children:"Bioderm • Light"}),(0,n.jsx)("option",{value:"mbioderm",children:"Bioderm • Medium"}),(0,n.jsx)("option",{value:"hbioderm",children:"Bioderm • Heavy"})]}),(0,n.jsxs)("optgroup",{label:"Weapons","data-model-type":"weapon",children:[(0,n.jsx)("option",{value:"disc",children:"Disc Launcher"}),(0,n.jsx)("option",{value:"chaingun",children:"Chaingun"}),(0,n.jsx)("option",{value:"grenade_launcher",children:"Grenade Launcher"}),(0,n.jsx)("option",{value:"sniper",children:"Laser Rifle"}),(0,n.jsx)("option",{value:"plasmathrower",children:"Plasma Cannon"}),(0,n.jsx)("option",{value:"energy",children:"Blaster"}),(0,n.jsx)("option",{value:"shocklance",children:"Shocklance"}),(0,n.jsx)("option",{value:"elf",children:"ELF Projector"}),(0,n.jsx)("option",{value:"missile",children:"Missile Launcher"}),(0,n.jsx)("option",{value:"mortar",children:"Mortar"}),(0,n.jsx)("option",{value:"repair",children:"Repair Pack"}),(0,n.jsx)("option",{value:"targeting",children:"Targeting Laser"})]}),(0,n.jsxs)("optgroup",{label:"Vehicles","data-model-type":"vehicle",children:[(0,n.jsx)("option",{value:"vehicle_grav_scout",children:"Wildcat Grav Cycle"}),(0,n.jsx)("option",{value:"vehicle_grav_tank",children:"Beowulf Assault Tank"}),(0,n.jsx)("option",{value:"vehicle_land_mpbbase",children:"Jericho Mobile Point Base"}),(0,n.jsx)("option",{value:"vehicle_air_scout",children:"Shrike Scout Fighter"}),(0,n.jsx)("option",{value:"vehicle_air_bomber",children:"Thundersword Bomber"}),(0,n.jsx)("option",{value:"vehicle_air_hapc",children:"HAVOC Gunship Transport"})]})]}),(0,n.jsx)("a",{href:"https://github.com/exogen/t2-model-skinner",className:d().IconLink,children:(0,n.jsx)(o.hJX,{size:32})})]}),u?(0,n.jsx)("div",{className:d().Gallery,children:b.map(e=>{let l,a;"string"==typeof e?(l=e,a=j):(l=e.name,a=e.model);let i="".concat("https://exogen.github.io/t2-skins","/gallery/").concat(encodeURIComponent(l),".").concat(a,".webp");return(0,n.jsxs)("div",{className:d().Skin,children:[(0,n.jsx)("img",{className:d().Preview,loading:"lazy",src:i,width:680,height:800,alt:l}),(0,n.jsx)("div",{className:d().Name,children:l})]},"".concat(l,":").concat(a))})}):(0,n.jsx)(r.xHo,{className:d().Spinner})]})]})}},9746:function(e){e.exports={GalleryPage:"gallery_GalleryPage__QyCLn",Tools:"gallery_Tools__COicv",Back:"gallery_Back__xvbOe",IconLink:"gallery_IconLink__7NlBA",Gallery:"gallery_Gallery__ZMJE_",Skin:"gallery_Skin__Ep_rb",Preview:"gallery_Preview__JGf2f",Name:"gallery_Name__W9Aoc",Spinner:"gallery_Spinner__9jTLL",spin:"gallery_spin__EVmH5",Label:"gallery_Label__kJfDw"}}},function(e){e.O(0,[774,365,648,918,888,179],function(){return e(e.s=4080)}),_N_E=e.O()}]); +//# sourceMappingURL=gallery-af1406fdc1af13f5.js.map \ No newline at end of file diff --git a/docs/_next/static/chunks/pages/gallery-af1406fdc1af13f5.js.map b/docs/_next/static/chunks/pages/gallery-af1406fdc1af13f5.js.map new file mode 100644 index 0000000..129a9e1 --- /dev/null +++ b/docs/_next/static/chunks/pages/gallery-af1406fdc1af13f5.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/chunks/pages/gallery-af1406fdc1af13f5.js","mappings":"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","sources":["webpack://_N_E/","webpack://_N_E/./src/useManifest.ts","webpack://_N_E/./src/pages/gallery.tsx","webpack://_N_E/./src/pages/gallery.module.css","webpack://_N_E/"],"sourcesContent":["\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/gallery\",\n function () {\n return require(\"private-next-pages/gallery.tsx\");\n }\n ]);\n if(module.hot) {\n module.hot.dispose(function () {\n window.__NEXT_P.push([\"/gallery\"])\n });\n }\n ","import { useState, useEffect } from \"react\";\n\nexport type Manifest = {\n customSkins: Record;\n newSkins: Record;\n};\n\nconst baseManifestPath = `https://exogen.github.io/t2-skins`;\nexport const defaultManifest: Manifest = {\n customSkins: {},\n newSkins: {},\n};\n\nexport default function useManifest(): [Manifest, boolean] {\n const [manifest, setManifest] = useState(defaultManifest);\n\n useEffect(() => {\n const controller = new AbortController();\n const signal = controller.signal;\n let ignore = false;\n\n const loadCustomSkins = async () => {\n let res;\n try {\n res = await fetch(`${baseManifestPath}/skins.json`, { signal });\n if (!ignore) {\n const json = await res.json();\n if (!ignore) {\n setManifest(json as Manifest);\n }\n }\n } catch (err) {\n console.error(err);\n }\n };\n\n loadCustomSkins();\n\n return () => {\n ignore = true;\n controller.abort();\n };\n }, []);\n\n const isLoaded = manifest !== defaultManifest;\n return [manifest, isLoaded];\n}\n","import { useEffect, useMemo, useState } from \"react\";\nimport { CgSpinnerTwo } from \"react-icons/cg\";\nimport { FaChevronLeft, FaGithub } from \"react-icons/fa\";\nimport { useRouter } from \"next/router\";\nimport orderBy from \"lodash.orderby\";\nimport useManifest from \"../useManifest\";\nimport styles from \"./gallery.module.css\";\nimport Head from \"next/head\";\nimport Link from \"next/link\";\n\nconst baseManifestPath = `https://exogen.github.io/t2-skins`;\nconst emptySkins: string[] = [];\n\nconst modelOrder: Record = {\n lmale: 0,\n mmale: 1,\n lfemale: 2,\n mfemale: 3,\n hmale: 4,\n lbioderm: 5,\n mbioderm: 6,\n hbioderm: 7,\n energy: 8,\n disc: 9,\n chaingun: 10,\n grenade_launcher: 11,\n sniper: 12,\n elf: 13,\n shocklance: 14,\n plasmathrower: 15,\n missile: 16,\n mortar: 17,\n repair: 18,\n targeting: 19,\n vehicle_grav_scout: 20,\n vehicle_grav_tank: 21,\n turret_assaulttank_mortar: 22,\n vehicle_land_mpbbase: 23,\n vehicle_air_scout: 24,\n vehicle_air_bomber: 25,\n vehicle_air_hapc: 26,\n};\n\nexport default function GalleryPage() {\n const router = useRouter();\n const [manifest, isLoaded] = useManifest();\n const [selectedModel, setSelectedModel] = useState(\"lmale\");\n const actualModel = selectedModel === \"hfemale\" ? \"hmale\" : selectedModel;\n const customSkins = manifest.customSkins?.[actualModel] ?? emptySkins;\n\n const newSkinList = useMemo(() => {\n if (manifest?.newSkins && selectedModel === \"new\") {\n const allNewSkins: Array<{ name: string; model: string }> = [];\n\n Object.entries(manifest.newSkins).forEach(([model, names]) => {\n allNewSkins.push(...names.map((name) => ({ name, model })));\n });\n\n return orderBy(\n allNewSkins,\n [(skin) => skin.name.toLowerCase(), (skin) => modelOrder[skin.model]],\n [\"asc\", \"asc\"]\n );\n } else {\n return [];\n }\n }, [selectedModel, manifest]);\n\n const filteredSkins = selectedModel === \"new\" ? newSkinList : customSkins;\n\n const filter =\n router.query.filter && typeof router.query.filter === \"string\"\n ? router.query.filter\n : \"lmale\";\n\n useEffect(() => {\n setSelectedModel(filter);\n }, [filter]);\n\n return (\n <>\n \n Tribes 2 Skin Gallery\n \n
\n
\n \n {\" \"}\n Back to Editor\n \n {\n router.push(`?filter=${event.target.value}`);\n }}\n value={selectedModel}\n >\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n {isLoaded ? (\n
\n {filteredSkins.map((name) => {\n let skinName;\n let skinModel;\n if (typeof name === \"string\") {\n skinName = name;\n skinModel = actualModel;\n } else {\n skinName = name.name;\n skinModel = name.model;\n }\n const url = `${baseManifestPath}/gallery/${encodeURIComponent(\n skinName\n )}.${skinModel}.webp`;\n\n return (\n
\n \n
{skinName}
\n
\n );\n })}\n
\n ) : (\n \n )}\n
\n \n );\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"GalleryPage\":\"gallery_GalleryPage__QyCLn\",\"Tools\":\"gallery_Tools__COicv\",\"Back\":\"gallery_Back__xvbOe\",\"IconLink\":\"gallery_IconLink__7NlBA\",\"Gallery\":\"gallery_Gallery__ZMJE_\",\"Skin\":\"gallery_Skin__Ep_rb\",\"Preview\":\"gallery_Preview__JGf2f\",\"Name\":\"gallery_Name__W9Aoc\",\"Spinner\":\"gallery_Spinner__9jTLL\",\"spin\":\"gallery_spin__EVmH5\",\"Label\":\"gallery_Label__kJfDw\"};"],"names":["window","__NEXT_P","push","__webpack_require__","defaultManifest","customSkins","newSkins","emptySkins","modelOrder","lmale","mmale","lfemale","mfemale","hmale","lbioderm","mbioderm","hbioderm","energy","disc","chaingun","grenade_launcher","sniper","elf","shocklance","plasmathrower","missile","mortar","repair","targeting","vehicle_grav_scout","vehicle_grav_tank","turret_assaulttank_mortar","vehicle_land_mpbbase","vehicle_air_scout","vehicle_air_bomber","vehicle_air_hapc","GalleryPage","manifest","router","useRouter","isLoaded","useManifest","setManifest","useState","useEffect","controller","AbortController","signal","ignore","loadCustomSkins","res","fetch","concat","json","err","console","error","abort","selectedModel","setSelectedModel","actualModel","newSkinList","useMemo","allNewSkins","Object","entries","forEach","model","names","param","map","name","orderBy","skin","toLowerCase","filteredSkins","filter","query","jsx_runtime","jsxs","Fragment","jsx","Head","title","main","className","styles","div","Link","href","FaChevronLeft","size","span","select","tabIndex","id","aria-label","onChange","event","target","value","option","optgroup","label","data-model-type","a","FaGithub","skinName","skinModel","url","encodeURIComponent","img","loading","src","width","height","alt","CgSpinnerTwo","module","exports"],"sourceRoot":""} \ No newline at end of file diff --git a/docs/_next/static/yW2VQOORfi7UgHZXk-c2b/_buildManifest.js b/docs/_next/static/ehD4Y6h1Z9uOWr0Pxxouf/_buildManifest.js similarity index 92% rename from docs/_next/static/yW2VQOORfi7UgHZXk-c2b/_buildManifest.js rename to docs/_next/static/ehD4Y6h1Z9uOWr0Pxxouf/_buildManifest.js index c64cdf0..03dda7e 100644 --- a/docs/_next/static/yW2VQOORfi7UgHZXk-c2b/_buildManifest.js +++ b/docs/_next/static/ehD4Y6h1Z9uOWr0Pxxouf/_buildManifest.js @@ -1 +1 @@ -self.__BUILD_MANIFEST=function(s){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},"/":[s,"static/chunks/e21e5bbe-b28e0079b469d4e8.js","static/chunks/ebc70433-4eccd1cb3af29a3e.js","static/chunks/6eb5140f-31a2b2da7903b885.js","static/chunks/85d7bc83-1ca530d7d3f44153.js","static/chunks/3a17f596-9aeae038dfa51955.js","static/chunks/f580fadb-2911e2fbf64aae5a.js","static/chunks/515-13ff0773d41722ae.js","static/chunks/pages/index-7060ed19c3a48d4d.js"],"/_error":["static/chunks/pages/_error-54b9fcf45cb5bc62.js"],"/gallery":[s,"static/chunks/737a5600-aea383aaa2061cc6.js","static/chunks/918-3c6747f76df39072.js","static/css/922e89893536f2f9.css","static/chunks/pages/gallery-9db61b8283b87e1a.js"],sortedPages:["/","/_app","/_error","/gallery"]}}("static/chunks/cb355538-dbf1c108320fc6a1.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB(); \ No newline at end of file +self.__BUILD_MANIFEST=function(s){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},"/":[s,"static/chunks/e21e5bbe-b28e0079b469d4e8.js","static/chunks/ebc70433-4eccd1cb3af29a3e.js","static/chunks/6eb5140f-31a2b2da7903b885.js","static/chunks/85d7bc83-1ca530d7d3f44153.js","static/chunks/3a17f596-9aeae038dfa51955.js","static/chunks/f580fadb-2911e2fbf64aae5a.js","static/chunks/515-13ff0773d41722ae.js","static/chunks/pages/index-7060ed19c3a48d4d.js"],"/_error":["static/chunks/pages/_error-54b9fcf45cb5bc62.js"],"/gallery":[s,"static/chunks/737a5600-aea383aaa2061cc6.js","static/chunks/918-3c6747f76df39072.js","static/css/922e89893536f2f9.css","static/chunks/pages/gallery-af1406fdc1af13f5.js"],sortedPages:["/","/_app","/_error","/gallery"]}}("static/chunks/cb355538-dbf1c108320fc6a1.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB(); \ No newline at end of file diff --git a/docs/_next/static/yW2VQOORfi7UgHZXk-c2b/_ssgManifest.js b/docs/_next/static/ehD4Y6h1Z9uOWr0Pxxouf/_ssgManifest.js similarity index 100% rename from docs/_next/static/yW2VQOORfi7UgHZXk-c2b/_ssgManifest.js rename to docs/_next/static/ehD4Y6h1Z9uOWr0Pxxouf/_ssgManifest.js diff --git a/docs/gallery/index.html b/docs/gallery/index.html index 260c133..61a65bb 100644 --- a/docs/gallery/index.html +++ b/docs/gallery/index.html @@ -1 +1 @@ -Tribes 2 Skin Gallery
\ No newline at end of file +Tribes 2 Skin Gallery
\ No newline at end of file diff --git a/docs/index.html b/docs/index.html index 50b3b56..337235e 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1 +1 @@ -T2 Model Viewer & Skinner
\ No newline at end of file +T2 Model Viewer & Skinner
\ No newline at end of file diff --git a/src/pages/gallery.tsx b/src/pages/gallery.tsx index f3b676a..24b8a00 100644 --- a/src/pages/gallery.tsx +++ b/src/pages/gallery.tsx @@ -20,6 +20,25 @@ const modelOrder: Record = { lbioderm: 5, mbioderm: 6, hbioderm: 7, + energy: 8, + disc: 9, + chaingun: 10, + grenade_launcher: 11, + sniper: 12, + elf: 13, + shocklance: 14, + plasmathrower: 15, + missile: 16, + mortar: 17, + repair: 18, + targeting: 19, + vehicle_grav_scout: 20, + vehicle_grav_tank: 21, + turret_assaulttank_mortar: 22, + vehicle_land_mpbbase: 23, + vehicle_air_scout: 24, + vehicle_air_bomber: 25, + vehicle_air_hapc: 26, }; export default function GalleryPage() {