diff --git a/src/components/Card.tsx b/src/components/Card.tsx index 188757c..e9668bd 100644 --- a/src/components/Card.tsx +++ b/src/components/Card.tsx @@ -1,13 +1,22 @@ +import { intToCardType } from "../types/cards"; import { ClubIcon } from "./icons/ClubIcon"; -import { JokerIcon } from "./icons/JokerIcon"; -export function Card() { +export function Card(props: {value: number}) { + const value = props.value; + + const [cardType, cardValue, [bgColor, textColor]] = intToCardType(value); + console.log(cardType, cardValue, bgColor, textColor); + return ( -
+
- 1 + {cardValue} - +
); } + + diff --git a/src/index.css b/src/index.css index 2834f56..3b49589 100644 --- a/src/index.css +++ b/src/index.css @@ -2,13 +2,32 @@ @tailwind components; @tailwind utilities; +/* General colors */ +:root { + --green-1: #22c55e; + --red-1: red; + --blue-1: blue; + --black-1: black; +} + +/* Dark theme colors */ :root { --c-bg: #151515; --c-on-bg: white; --c-bg-2: #202020; - --c-border-1: #a0a0a0 + --c-border-1: #a0a0a0; + + /* Card colors */ + --card-green-bg: var(--green-1); + --card-on-green-bg: white; + --card-red-bg: var(--red-1); + --card-on-red-bg: white; + --card-blue-bg: var(--blue-1); + --card-on-blue-bg: white; + --card-black-bg: black; + --card-on-black-bg: white; } @media (prefers-color-scheme: light) { @@ -16,6 +35,15 @@ --c-bg: #f0f0f0; --c-on-bg: black; --c-bg-2: white; + /* Card colors */ + --card-on-green-bg: var(--green-1); + --card-green-bg: white; + --card-on-red-bg: var(--red-1); + --card-red-bg: white; + --card-on-blue-bg: var(--blue-1); + --card-blue-bg: white; + --card-on-black-bg: black; + --card-black-bg: white; } } @@ -23,4 +51,4 @@ body { background-color: var(--c-bg); color: var(--c-on-bg); font-family: "Marcellus", serif; -} +} \ No newline at end of file diff --git a/src/pages/Index.tsx b/src/pages/Index.tsx index 2a6e3ec..46b9662 100644 --- a/src/pages/Index.tsx +++ b/src/pages/Index.tsx @@ -6,7 +6,7 @@ import { Card } from "../components/Card"; export function Index() { const [loading, setLoading] = createSignal(false); - const [userInfo, setUserInfo] = createSignal(null); + const [userInfo] = createSignal(null); const [error, setError] = createSignal(""); const [username, setUsername] = createSignal(""); @@ -94,9 +94,9 @@ export function Index() {
- - - + + +
); diff --git a/src/types/cards.ts b/src/types/cards.ts new file mode 100644 index 0000000..f42a573 --- /dev/null +++ b/src/types/cards.ts @@ -0,0 +1,73 @@ + +export enum CardType { + Club, + Diamond, + Heart, + Spade, + King, Queen, Jack, + RedJoker, + GreenJoker, + BlackJoker, + BlueJoker, +} + +const tailwindCardColors: Array<[string, string]> = [ + // black + ["var(--card-black-bg)", "var(--card-on-black-bg)"], + // red + ["var(--card-red-bg)", "var(--card-on-red-bg)"], + // green + ["var(--card-green-bg)", "var(--card-on-green-bg)"], + // blue + ["var(--card-blue-bg)", "var(--card-on-blue-bg)"], +]; + + +/** + * Cards are encoded as integers, and their types and values depend of their bits: + * + * @param value number that encodes the card value + * @returns The type of card and its value (A, 1, 2, etc), if any + */ +export function intToCardType(value: number): [CardType, string, [string, string]] { + switch ((value << 23) >>> 28) { + case 0: { + const type = ((value & 1) === 1) ? CardType.Club : CardType.Spade; + let number = ((value << 27) >>> 28).toString(); + if (number === "1") { + number = "A"; + } + + return [type, number, tailwindCardColors[0]]; + } + case 1: { + const type = ((value & 1) === 1) ? CardType.Heart : CardType.Diamond; + let number = ((value << 27) >>> 28).toString(); + if (number === "1") { + number = "A"; + } + + return [type, number, tailwindCardColors[1]]; + } + case 2: + return [CardType.BlackJoker,"", tailwindCardColors[0]]; + case 3: + return [CardType.RedJoker, "", tailwindCardColors[1]]; + case 4: + return [CardType.GreenJoker,"", tailwindCardColors[2]]; + case 5: + return [CardType.BlueJoker,"", tailwindCardColors[3]]; + case 6: + return [CardType.Jack,"", tailwindCardColors[2]]; + case 7: + return [CardType.Queen,"", tailwindCardColors[2]]; + case 8: + return [CardType.King,"", tailwindCardColors[2]]; + default: + { + console.error("Encountered a badly encoded card: ", value); + throw new Error(`Badly encoded card value: ${value}`); + } + } +} + diff --git a/tailwind.config.js b/tailwind.config.mjs similarity index 50% rename from tailwind.config.js rename to tailwind.config.mjs index 50ed99c..5dfcebf 100644 --- a/tailwind.config.js +++ b/tailwind.config.mjs @@ -1,5 +1,5 @@ /** @type {import('tailwindcss').Config} */ -module.exports = { +export default { content: [ "./src/**/*.{js,jsx,ts,tsx}", ], @@ -10,6 +10,14 @@ module.exports = { "c-on-bg": "var(--c-on-bg)", "c-bg-2": "var(--c-bg-2)", "c-border-1": "var(--c-border-1)", + "card-black-bg": "var(--card-black-bg)", + "card-on-black-bg": "var(--card-on-black-bg)", + "card-blue-bg": "var(--card-blue-bg)", + "card-on-blue-bg": "var(--card-on-blue-bg)", + "card-red-bg": "var(--card-red-bg)", + "card-on-red-bg": "var(--card-on-red-bg)", + "card-green-bg": "var(--card-green-bg)", + "card-on-green-bg": "var(--card-on-green-bg)", }, fontFamily: { "sans-serif": ["'Secular One'", "'sans-serif'"],