forked from external-repos/LifeTrinket
Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
92f954130f | ||
|
|
112023bdd5 | ||
|
|
4e6dc56d99 | ||
|
|
e427bfd0cf | ||
|
|
ed10edc6d2 | ||
|
|
7696b357b4 | ||
|
|
a7b78b8e7a | ||
|
|
fa95d171b7 | ||
|
|
00a556be0e |
@@ -1,12 +1,12 @@
|
||||
index.html,1711189442688,fa2549e32940c356ac5cee88c8db61076ad62fb4e599858c8e45cfc68cd901c4
|
||||
manifest.json,1711189442512,7ff5111aa04a42adff3b38924ec467b6f345ed0309dba1486dc9b783b60c2a9d
|
||||
registerSW.js,1711189442688,5b6445b5215737c53ef0d379c151d57de165a056de2d1c5812ed614f158ebcbd
|
||||
sw.js,1711189443521,9c09d33ea573bb818864bfad526fa911839637171773eca8e31905458679846d
|
||||
robots.txt,1711189442512,391d14b3c2f8c9143a27a28c7399585142228d4d1bdbe2c87ac946de411fa9a2
|
||||
manifest.webmanifest,1711189442688,f2bf253209f6e292a6b0dbfa06fb4ac188eb5f2dba568c3ad5511b9ed52c1f51
|
||||
workbox-3e911b1d.js,1711189443521,d5dbc868a5c07af633d29de7ba3ffe37542aaaabdf33713b4298df31f92f11ff
|
||||
assets/index-WLCHZTqE.css,1711189442688,877e5ea9bfd3a1ca0e6449e8213da8a3c7717e530370f12669bb5c70dd21e700
|
||||
favicon.ico,1711189442511,8cefe5adbf00d337d8633fb744b9f2c4914f769b319be4bb7e184b7a4aa17160
|
||||
logo192.png,1711189442511,3d1e2e6f064d4fd325828f21bb6493ff0dbf2390b0e7d2aba9f2b6def4829799
|
||||
logo512.png,1711189442511,892a4da1cc5434929a83a71fcbcb0d0d80aa82f44e3c21e9b20ffe9267197133
|
||||
assets/index-OHs0lOr7.js,1711189442688,aa0dca732cd5b6f621ecb7c6dbcbfdbccde78941cfad954f6626d4ff83040c7f
|
||||
index.html,1711905081687,5707f310c48bfbf4b0777999bec2b3216159b24efaac7d4ef5b3f774031a5bd2
|
||||
manifest.webmanifest,1711905081687,f2bf253209f6e292a6b0dbfa06fb4ac188eb5f2dba568c3ad5511b9ed52c1f51
|
||||
manifest.json,1711905081475,7ff5111aa04a42adff3b38924ec467b6f345ed0309dba1486dc9b783b60c2a9d
|
||||
registerSW.js,1711905081687,5b6445b5215737c53ef0d379c151d57de165a056de2d1c5812ed614f158ebcbd
|
||||
sw.js,1711905082939,e3333155a3ccec8e315325341364c6fb441239fe35e70c1912b660bfdfbe5714
|
||||
robots.txt,1711905081475,391d14b3c2f8c9143a27a28c7399585142228d4d1bdbe2c87ac946de411fa9a2
|
||||
assets/index-7m_Zw4yH.css,1711905081687,37997d06b32b3d0c724c054913e3c0583b86f786358121cb1615e6646ff46b56
|
||||
workbox-3e911b1d.js,1711905082939,d5dbc868a5c07af633d29de7ba3ffe37542aaaabdf33713b4298df31f92f11ff
|
||||
logo192.png,1711905081474,3d1e2e6f064d4fd325828f21bb6493ff0dbf2390b0e7d2aba9f2b6def4829799
|
||||
favicon.ico,1711905081474,8cefe5adbf00d337d8633fb744b9f2c4914f769b319be4bb7e184b7a4aa17160
|
||||
logo512.png,1711905081475,892a4da1cc5434929a83a71fcbcb0d0d80aa82f44e3c21e9b20ffe9267197133
|
||||
assets/index-B28HjoRb.js,1711905081687,7475dc6e6963e1027f4ccaa29b43412d71fbe80a2dd42baccf9c058e69485a2f
|
||||
|
||||
1
.github/workflows/firebase-release.yml
vendored
1
.github/workflows/firebase-release.yml
vendored
@@ -8,6 +8,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
VITE_REPO_READ_ACCESS_TOKEN: ${{ secrets.REPO_READ_ACCESS_TOKEN }}
|
||||
VITE_FIREBASE_ANALYTICS_API_KEY: ${{ secrets.FIREBASE_ANALYTICS_API_KEY }}
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "life-trinket",
|
||||
"private": true,
|
||||
"version": "0.9.2",
|
||||
"version": "0.9.42",
|
||||
"type": "commonjs",
|
||||
"engines": {
|
||||
"node": ">=18",
|
||||
|
||||
@@ -187,6 +187,7 @@ export const SettingsModal = ({ isOpen, closeModal }: SettingsModalProps) => {
|
||||
<option value={PreStartMode.FingerGame}>
|
||||
Touch Roulette
|
||||
</option>
|
||||
<option value={PreStartMode.Trivia}>Group Trivia</option>
|
||||
</select>
|
||||
</div>
|
||||
<div className="text-xs text-left text-text-secondary">
|
||||
@@ -215,6 +216,14 @@ export const SettingsModal = ({ isOpen, closeModal }: SettingsModalProps) => {
|
||||
random.
|
||||
</div>
|
||||
)}
|
||||
|
||||
{settings.preStartMode === PreStartMode.Trivia && (
|
||||
<div className="text-xs text-left text-text-secondary mt-1">
|
||||
<span className="text-text-primary">Group Trivia:</span> A
|
||||
random "who is the most ..." type question will be shown, the
|
||||
group decides which player fits the question best.
|
||||
</div>
|
||||
)}
|
||||
</SettingContainer>
|
||||
<SettingContainer>
|
||||
<ToggleContainer>
|
||||
|
||||
160
src/Components/PreStartGame/Games/Trivia.tsx
Normal file
160
src/Components/PreStartGame/Games/Trivia.tsx
Normal file
@@ -0,0 +1,160 @@
|
||||
import { useState } from 'react';
|
||||
import { useGlobalSettings } from '../../../Hooks/useGlobalSettings';
|
||||
|
||||
const questions = [
|
||||
'Who has the most siblings?',
|
||||
'Who has the most pets?',
|
||||
'Who has the most tattoos?',
|
||||
'Who has the most piercings?',
|
||||
'Who has the most expensive shoes?',
|
||||
'Who has the most most amount of teeth?',
|
||||
'Who has the most least amount of teeth?',
|
||||
'Who has the most least amount of teeth?',
|
||||
'Who lives closest to the equator?',
|
||||
'Who is the tallest person in the group?',
|
||||
'Who is the shortest person in the group?',
|
||||
'Who speaks the most languages?',
|
||||
'Who has traveled to the most countries?',
|
||||
'Who has the earliest birthday in the year?',
|
||||
'Who has won the most awards or trophies?',
|
||||
'Who is the best cook among you?',
|
||||
'Who is the fastest runner?',
|
||||
'Who has the most unique hobby?',
|
||||
'Who is the biggest movie buff?',
|
||||
'Who is the most tech-savvy?',
|
||||
'Who is the best at solving puzzles?',
|
||||
'Who has the most extensive music collection?',
|
||||
'Who has the most impressive collection of books?',
|
||||
'Who has the most experience in a particular sport or activity?',
|
||||
'Who has the most interesting job or profession?',
|
||||
'Who has the most artistic talent?',
|
||||
'Who is the most organized person?',
|
||||
'Who is the best at keeping secrets?',
|
||||
'Who has the most fascinating family history?',
|
||||
'Who has the most embarrassing childhood nickname?',
|
||||
'Who has the most unusual talent or skill?',
|
||||
'Who has the most interesting family tradition?',
|
||||
'Who has the most impressive celebrity encounter?',
|
||||
'Who has the most unusual phobia?',
|
||||
'Who has the most adventurous spirit?',
|
||||
'Who has the most unique item in their wallet/purse?',
|
||||
'Who has the most daring fashion sense?',
|
||||
'Who has the most impressive party trick?',
|
||||
'Who has the most memorable encounter with a wild animal?',
|
||||
'Who has the most adventurous palate?',
|
||||
'Who has the most unusual collection?',
|
||||
'Who has the most unique bucket list item?',
|
||||
'Who has the most inspiring life motto or mantra?',
|
||||
'Who is the most likely to break out into song or dance in public?',
|
||||
'Who is the most likely to be found binge-watching TV shows?',
|
||||
'Who is the biggest procrastinator?',
|
||||
'Who is the most likely to cry during a movie?',
|
||||
'Who is the most adventurous when it comes to trying new foods?',
|
||||
"Who is the most likely to forget someone's birthday?",
|
||||
'Who is the best at giving advice?',
|
||||
'Who is the worst at giving advice?',
|
||||
'Who is the most likely to be found reading a book at a party?',
|
||||
'Who is the most likely to win in a game of charades?',
|
||||
'Who is the most likely to get lost in their own neighborhood?',
|
||||
'Who is the most sentimental?',
|
||||
'Who is the most likely to become famous?',
|
||||
'Who is the most likely to become a millionaire?',
|
||||
'Who is the most likely to start their own business?',
|
||||
'Who is the most likely to become president?',
|
||||
'Who is the most likely to go viral on social media?',
|
||||
'Who is the most likely to win a Nobel Prize?',
|
||||
'Who is the most likely to be a superhero in disguise?',
|
||||
'Who is the most likely to survive a zombie apocalypse?',
|
||||
'Who is the most likely to believe in aliens?',
|
||||
'Who is the most likely to spend all their money on something silly?',
|
||||
'Who is the most likely to write a bestselling novel?',
|
||||
'Who is the most likely to be a secret agent?',
|
||||
'Who is the most likely to be a professional athlete?',
|
||||
'Who is the most likely to win a game of trivia?',
|
||||
|
||||
'Who is the most likely to win the upcoming game?',
|
||||
'Who is the most likely to win at a game of Pokémon TCG?',
|
||||
'Who has the most valuable card in their collection?',
|
||||
'Who is the best at building decks?',
|
||||
'Who has won the most games?',
|
||||
'Who has the largest collection of cards?',
|
||||
'Who is the most knowledgeable about Magic the Gathering lore?',
|
||||
'Who is the most strategic?',
|
||||
'Who is the most likely to trade away their most valuable card for something silly?',
|
||||
'Who is the most competitive?',
|
||||
'Who would be the most creative when it comes to making up new Magic the Gathering rules?',
|
||||
'Who is the most likely to organize a Magic the Gathering draft tournament?',
|
||||
'Who is the most enthusiastic about opening booster packs?',
|
||||
'Who has the most unique and unusual Magic the Gathering deck?',
|
||||
'Who is the most likely to cosplay as their favorite Magic the Gathering character?',
|
||||
'Who is the most likely to forget to bring their Magic the Gathering deck to a game night?',
|
||||
'Who is the most generous when it comes to lending out their decks?',
|
||||
'Who is the most likely to start their own Magic the Gathering YouTube channel?',
|
||||
'Who is the most skilled at bluffing during a game of Magic the Gathering?',
|
||||
'Who is the most likely to spend all their money on Magic the Gathering cards?',
|
||||
'Who is the most likely to rage quit during a game of Magic the Gathering?',
|
||||
'Who is the most likely to win in a Magic the Gathering trivia contest?',
|
||||
'Who is the most likely to build a themed Magic the Gathering deck?',
|
||||
'Who is the most likely to organize a Magic the Gathering cube draft?',
|
||||
'Who is the most likely to teach new players how to play Magic the Gathering?',
|
||||
'Who is the most likely to build a commander deck with a ridiculous theme?',
|
||||
'Who is the most likely to collect foreign-language Magic the Gathering cards?',
|
||||
'Who is the most likely to participate in a Magic the Gathering charity event?',
|
||||
'Who is the most likely to cosplay as their Magic the Gathering commander?',
|
||||
'Who is the most likely to organize a Magic the Gathering charity tournament?',
|
||||
];
|
||||
|
||||
export const Trivia = () => {
|
||||
const { setPlaying, goToStart } = useGlobalSettings();
|
||||
|
||||
const [randomQuestion, setRandomQuestion] = useState(
|
||||
questions[Math.floor(Math.random() * questions.length)]
|
||||
);
|
||||
|
||||
const setUniqueRandomQuestion = () => {
|
||||
let newRandomQuestion =
|
||||
questions[Math.floor(Math.random() * questions.length)];
|
||||
while (newRandomQuestion === randomQuestion) {
|
||||
newRandomQuestion =
|
||||
questions[Math.floor(Math.random() * questions.length)];
|
||||
}
|
||||
setRandomQuestion(newRandomQuestion);
|
||||
};
|
||||
|
||||
return (
|
||||
<div
|
||||
className="absolute flex justify-center items-center w-full h-full portrait:h-[100dvw] portrait:w-[100dvh] z-50 bg-secondary-main overflow-hidden"
|
||||
onClick={() => setPlaying(true)}
|
||||
>
|
||||
<button
|
||||
className="absolute flex top-4 left-4 rounded-lg px-2 py-1 justify-center bg-primary-main text-text-primary text-xs"
|
||||
onClick={goToStart}
|
||||
>
|
||||
<div className="text-xl leading-[0.80rem]">{'<'} </div>
|
||||
Back
|
||||
</button>
|
||||
|
||||
<button
|
||||
className="absolute flex top-4 right-4 rounded-lg px-2 py-1 justify-center bg-primary-main text-text-primary text-xs"
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
setUniqueRandomQuestion();
|
||||
}}
|
||||
>
|
||||
Reroll
|
||||
</button>
|
||||
|
||||
<div className="size-full flex flex-col justify-between items-center whitespace-nowrap pointer-events-none webkit-user-select-none text-wrap text-center py-[10vmin] px-[10vmax]">
|
||||
<div className="text-[6vmin]">Decide who starts by answering:</div>
|
||||
<div className="flex flex-col">
|
||||
<div className="text-[8vmin] rotate-180 text-text-primary opacity-40">
|
||||
{randomQuestion}
|
||||
</div>
|
||||
<div className="text-[8vmin]">{randomQuestion}</div>
|
||||
</div>
|
||||
|
||||
<div className="text-[6vmin]">(Tap the screen to dismiss)</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
@@ -4,6 +4,7 @@ import { GridLayout } from '../Views/Play';
|
||||
import { FingerGame } from './Games/FingerGame';
|
||||
import { RandomKingPlayers } from './Games/RandomKing/RandomKingPlayers';
|
||||
import { RandomKingSelectWrapper } from './Games/RandomKing/RandomKingSelectWrapper';
|
||||
import { Trivia } from './Games/Trivia';
|
||||
|
||||
export const PreStart = ({ gridLayout }: { gridLayout: GridLayout }) => {
|
||||
const { settings, randomizingPlayer, goToStart } = useGlobalSettings();
|
||||
@@ -25,6 +26,10 @@ export const PreStart = ({ gridLayout }: { gridLayout: GridLayout }) => {
|
||||
return <FingerGame />;
|
||||
}
|
||||
|
||||
if (settings.preStartMode === PreStartMode.Trivia) {
|
||||
return <Trivia />;
|
||||
}
|
||||
|
||||
goToStart();
|
||||
return null;
|
||||
};
|
||||
|
||||
@@ -129,7 +129,11 @@ const Start = () => {
|
||||
return;
|
||||
}
|
||||
|
||||
analytics.trackEvent('game_started', { ...initialGameSettings });
|
||||
analytics.trackEvent('game_started', {
|
||||
...initialGameSettings,
|
||||
...settings,
|
||||
isPWA,
|
||||
});
|
||||
|
||||
try {
|
||||
if (settings.goFullscreenOnStart) {
|
||||
|
||||
@@ -2,7 +2,7 @@ import { initializeApp } from 'firebase/app';
|
||||
import { getAnalytics, logEvent } from 'firebase/analytics';
|
||||
|
||||
const firebaseConfig = {
|
||||
apiKey: 'AIzaSyCZ1AHMb5zmWS4VoRnC-OBxTswUfrJ0mlY',
|
||||
apiKey: import.meta.env.VITE_FIREBASE_API_KEY,
|
||||
authDomain: 'life-trinket.firebaseapp.com',
|
||||
projectId: 'life-trinket',
|
||||
storageBucket: 'life-trinket.appspot.com',
|
||||
@@ -23,7 +23,12 @@ export const useAnalytics = () => {
|
||||
return;
|
||||
}
|
||||
|
||||
logEvent(analytics, eventName, eventParams);
|
||||
const paramsWithVersion = {
|
||||
...eventParams,
|
||||
app_version: import.meta.env.VITE_APP_VERSION,
|
||||
};
|
||||
|
||||
logEvent(analytics, eventName, paramsWithVersion);
|
||||
};
|
||||
|
||||
return { trackEvent };
|
||||
|
||||
@@ -16,6 +16,7 @@ export enum PreStartMode {
|
||||
None = 'none',
|
||||
RandomKing = 'random-king',
|
||||
FingerGame = 'finger-game',
|
||||
Trivia = 'trivia',
|
||||
}
|
||||
|
||||
export type Settings = {
|
||||
|
||||
1
src/vite-env.d.ts
vendored
1
src/vite-env.d.ts
vendored
@@ -3,6 +3,7 @@
|
||||
interface ImportMetaEnv {
|
||||
readonly VITE_APP_VERSION: string;
|
||||
readonly VITE_REPO_READ_ACCESS_TOKEN: string;
|
||||
readonly VITE_FIREBASE_ANALYTICS_API_KEY: string;
|
||||
}
|
||||
|
||||
interface ImportMeta {
|
||||
|
||||
@@ -27,5 +27,8 @@ export default defineConfig({
|
||||
VITE_REPO_READ_ACCESS_TOKEN: JSON.stringify(
|
||||
process.env.VITE_REPO_READ_ACCESS_TOKEN
|
||||
),
|
||||
VITE_FIREBASE_ANALYTICS_API_KEY: JSON.stringify(
|
||||
process.env.VITE_FIREBASE_ANALYTICS_API_KEY
|
||||
),
|
||||
},
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user