Compare commits

...

5 Commits
0.9.2 ... 0.9.4

Author SHA1 Message Date
Viktor Rådberg
ed10edc6d2 bump 2024-03-31 12:30:18 +02:00
Viktor Rådberg
7696b357b4 add trivia prestart mode 2024-03-31 12:30:03 +02:00
Viktor Rådberg
a7b78b8e7a settings tracking 2024-03-31 12:28:34 +02:00
Viktor Rådberg
fa95d171b7 bump 2024-03-30 14:23:26 +01:00
Viktor Rådberg
00a556be0e always include version in tracked events 2024-03-30 14:22:37 +01:00
7 changed files with 187 additions and 3 deletions

View File

@@ -1,7 +1,7 @@
{
"name": "life-trinket",
"private": true,
"version": "0.9.2",
"version": "0.9.4",
"type": "commonjs",
"engines": {
"node": ">=18",

View File

@@ -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>

View 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]">{'<'}&nbsp;</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>
);
};

View File

@@ -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;
};

View File

@@ -129,7 +129,11 @@ const Start = () => {
return;
}
analytics.trackEvent('game_started', { ...initialGameSettings });
analytics.trackEvent('game_started', {
...initialGameSettings,
...settings,
isPWA,
});
try {
if (settings.goFullscreenOnStart) {

View File

@@ -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 };

View File

@@ -16,6 +16,7 @@ export enum PreStartMode {
None = 'none',
RandomKing = 'random-king',
FingerGame = 'finger-game',
Trivia = 'trivia',
}
export type Settings = {