Feat: Genre system with per-genre daily puzzles
This commit is contained in:
@@ -16,12 +16,13 @@ interface GameProps {
|
||||
artist: string;
|
||||
coverImage: string | null;
|
||||
} | null;
|
||||
genre?: string | null;
|
||||
}
|
||||
|
||||
const UNLOCK_STEPS = [2, 4, 7, 11, 16, 30, 60];
|
||||
|
||||
export default function Game({ dailyPuzzle }: GameProps) {
|
||||
const { gameState, statistics, addGuess } = useGameState();
|
||||
export default function Game({ dailyPuzzle, genre = null }: GameProps) {
|
||||
const { gameState, statistics, addGuess } = useGameState(genre);
|
||||
const [hasWon, setHasWon] = useState(false);
|
||||
const [hasLost, setHasLost] = useState(false);
|
||||
const [shareText, setShareText] = useState('Share Result');
|
||||
@@ -42,7 +43,7 @@ export default function Game({ dailyPuzzle }: GameProps) {
|
||||
<div className="game-container" style={{ textAlign: 'center', padding: '2rem' }}>
|
||||
<h2>No Puzzle Available</h2>
|
||||
<p>Could not generate a daily puzzle.</p>
|
||||
<p>Please ensure there are songs in the database.</p>
|
||||
<p>Please ensure there are songs in the database{genre ? ` for genre "${genre}"` : ''}.</p>
|
||||
<a href="/admin" style={{ color: 'var(--primary)', textDecoration: 'underline' }}>Go to Admin Dashboard</a>
|
||||
</div>
|
||||
);
|
||||
@@ -58,6 +59,7 @@ export default function Game({ dailyPuzzle }: GameProps) {
|
||||
addGuess(song.title, false);
|
||||
if (gameState.guesses.length + 1 >= 7) {
|
||||
setHasLost(true);
|
||||
setHasWon(false); // Ensure won is false
|
||||
sendGotifyNotification(7, 'lost', dailyPuzzle.id);
|
||||
}
|
||||
}
|
||||
@@ -72,6 +74,7 @@ export default function Game({ dailyPuzzle }: GameProps) {
|
||||
setLastAction('SKIP');
|
||||
addGuess("SKIPPED", false);
|
||||
setHasLost(true);
|
||||
setHasWon(false);
|
||||
sendGotifyNotification(7, 'lost', dailyPuzzle.id);
|
||||
};
|
||||
|
||||
@@ -98,7 +101,8 @@ export default function Game({ dailyPuzzle }: GameProps) {
|
||||
}
|
||||
|
||||
const speaker = hasWon ? '🔉' : '🔇';
|
||||
const text = `Hördle #${dailyPuzzle.id}\n\n${speaker}${emojiGrid}\n\n#Hördle #Music\n\nhttps://hoerdle.elpatron.me`;
|
||||
const genreText = genre ? `Genre: ${genre}\n` : '';
|
||||
const text = `Hördle #${dailyPuzzle.id}\n${genreText}\n${speaker}${emojiGrid}\n\n#Hördle #Music\n\nhttps://hoerdle.elpatron.me`;
|
||||
|
||||
// Fallback method for copying to clipboard
|
||||
const textarea = document.createElement('textarea');
|
||||
|
||||
Reference in New Issue
Block a user