diff --git a/public/fonts/kyrou 7 wide bold xtnd.ttf b/public/fonts/kyrou 7 wide bold xtnd.ttf new file mode 100644 index 0000000..165c3e7 Binary files /dev/null and b/public/fonts/kyrou 7 wide bold xtnd.ttf differ diff --git a/src/App.tsx b/src/App.tsx index 46ec3a3..f07aa80 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,5 +1,6 @@ import type { Component } from "solid-js"; import Main from "./pages/Main"; +import "./styles/fonts-grixel.css"; const App: Component = () => { return
; diff --git a/src/index.css b/src/index.css index d4b5078..d431901 100644 --- a/src/index.css +++ b/src/index.css @@ -1 +1,14 @@ -@import 'tailwindcss'; +@import "tailwindcss"; + +@theme { + --animate-fadein: fadein 0.1s ease-in-out 1; + @keyframes fadein { + 0%, + 100% { + transform: rotate(-1deg); + } + 50% { + transform: rotate(1deg); + } + } +} diff --git a/src/pages/Main.tsx b/src/pages/Main.tsx index e56deec..2a1bdda 100644 --- a/src/pages/Main.tsx +++ b/src/pages/Main.tsx @@ -1,4 +1,4 @@ -import { createSignal, type Component } from "solid-js"; +import { createMemo, createSignal, type Component } from "solid-js"; import { allTypes, girlTypes } from "../typing/girlTypes"; const Main: Component = () => { @@ -10,13 +10,82 @@ const Main: Component = () => { ? prev.filter((value) => value !== girl) : [...prev, girl], ); - console.log(selectedTypes()); }; + const chosenTypes = createMemo(() => { + const ret = [ + ...selectedTypes().map((girl) => + allTypes.find((girlT) => girlT.type === girl), + ), + ]; + return ret; + }); + + const rows = createMemo(() => { + console.log("Calculating weaknesses..."); + let strengths: girlTypes[] = []; + let weaknesses: girlTypes[] = []; + let immunities: girlTypes[] = []; + selectedTypes().forEach((t) => { + const currentGirl = allTypes.find((girl) => girl.type === t); + if (currentGirl) { + strengths = [...strengths, ...currentGirl.strengths]; + weaknesses = [...weaknesses, ...currentGirl.weaknesses]; + immunities = [...immunities, ...currentGirl.immunities]; + } + }); + const girlT = { + ...girlTypes, + }; + const keys = Object.keys(girlT); + let counts = new Map(); + keys.forEach((key) => counts.set(girlT[parseInt(key)], 0)); + + strengths.forEach((str) => + counts.set(girlTypes[str], counts.get(girlTypes[str]) + 1), + ); + weaknesses.forEach((wea) => + counts.set(girlTypes[wea], counts.get(girlTypes[wea]) - 1), + ); + + const multipliers = new Set([...counts.values()].sort((a, b) => b - a)); + + const rows: { mul: number; girls: string[] }[] = []; + multipliers.forEach((mul) => rows.push({ mul: mul, girls: [] })); + + counts.forEach((value, key) => + rows + .find((val) => val.mul === value && key != "None" && key != undefined) + ?.girls.push(key), + ); + + const finalRows = rows.map((value) => { + return { mul: 1 * Math.pow(2, value.mul), girls: value.girls }; + }); + + if (immunities.length > 0) { + finalRows.push({ + mul: 0, + girls: [...immunities.map((value) => girlTypes[value])], + }); + } + + const ret = finalRows.map((value) => { + return { + mul: value.mul, + girls: value.girls.map((girl) => + allTypes.find((girlT) => girlTypes[girlT.type] === girl), + ), + }; + }); + + return ret; + }); + return ( -
-
-

Choose defending Pokémon types

+
+
+

Choose defending Pokémon types

{allTypes.map((t) => ( ))}
+
+

Your types:

+
+ {chosenTypes().map((g) => ( + {g?.displayName} + ))} +
+ +
-
-

Takes 1× from

+
+ {rows().map((row) => ( +
+

Takes {row.mul}× from

+
+ {row.girls.map((g) => ( + {g?.displayName} + ))} +
+
+ ))}
); diff --git a/src/styles/fonts-grixel.css b/src/styles/fonts-grixel.css new file mode 100644 index 0000000..ad11ec1 --- /dev/null +++ b/src/styles/fonts-grixel.css @@ -0,0 +1,9 @@ +@font-face { + font-family: "Grixel"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: + local("Grixel Kyrou 7 Wide"), + url("/fonts/kyrou 7 wide bold xtnd.ttf") format("truetype"); +} diff --git a/src/typing/girlTypes.ts b/src/typing/girlTypes.ts index ea1e389..922a831 100644 --- a/src/typing/girlTypes.ts +++ b/src/typing/girlTypes.ts @@ -117,8 +117,8 @@ export const Puppy: girlType = { displayName: "PUPPY", displayImage: ImgPuppy, type: girlTypes.Puppy, - strengths: [], - weaknesses: [], + strengths: [girlTypes.Knight, girlTypes.Puppy, girlTypes.Plushy, girlTypes.Angel, girlTypes.PoolToy], + weaknesses: [girlTypes.Kitty, girlTypes.Little, girlTypes.Dragon, girlTypes.Bug, girlTypes.Goddess, girlTypes.Horror, girlTypes.Handler], immunities: [] }