mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-26 07:54:38 +02:00
fix(ci): build shared packages before tests and fix formatting
- Add build:packages step to all test.yml jobs (fixes @manacore/shared-nestjs-auth not found) - Handle missing coverage artifacts gracefully in test-coverage.yml - Update .prettierignore to exclude apps-archived/ and problematic files - Format all source files to pass CI checks 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
5282f5545b
commit
0ebfde0851
163 changed files with 15247 additions and 14677 deletions
|
|
@ -1,71 +1,71 @@
|
|||
import { statsService } from '../services/statsService';
|
||||
|
||||
export interface GameMessage {
|
||||
type: 'GAME_EVENT' | 'GAME_LOADED' | 'GAME_ENDED';
|
||||
gameId: string;
|
||||
event?: string;
|
||||
data?: any;
|
||||
type: 'GAME_EVENT' | 'GAME_LOADED' | 'GAME_ENDED';
|
||||
gameId: string;
|
||||
event?: string;
|
||||
data?: any;
|
||||
}
|
||||
|
||||
export function initGameCommunication(gameSlug: string) {
|
||||
let gameStartTime: number | null = null;
|
||||
|
||||
window.addEventListener('message', (event) => {
|
||||
if (event.origin !== window.location.origin) return;
|
||||
|
||||
const message = event.data as GameMessage;
|
||||
if (!message.type || message.gameId !== gameSlug) return;
|
||||
|
||||
switch (message.type) {
|
||||
case 'GAME_LOADED':
|
||||
gameStartTime = Date.now();
|
||||
statsService.incrementGamesPlayed(gameSlug);
|
||||
break;
|
||||
|
||||
case 'GAME_EVENT':
|
||||
handleGameEvent(gameSlug, message.event!, message.data);
|
||||
break;
|
||||
|
||||
case 'GAME_ENDED':
|
||||
if (gameStartTime) {
|
||||
const playTime = Math.floor((Date.now() - gameStartTime) / 1000);
|
||||
statsService.addPlayTime(gameSlug, playTime);
|
||||
gameStartTime = null;
|
||||
}
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
window.addEventListener('beforeunload', () => {
|
||||
if (gameStartTime) {
|
||||
const playTime = Math.floor((Date.now() - gameStartTime) / 1000);
|
||||
statsService.addPlayTime(gameSlug, playTime);
|
||||
}
|
||||
});
|
||||
let gameStartTime: number | null = null;
|
||||
|
||||
window.addEventListener('message', (event) => {
|
||||
if (event.origin !== window.location.origin) return;
|
||||
|
||||
const message = event.data as GameMessage;
|
||||
if (!message.type || message.gameId !== gameSlug) return;
|
||||
|
||||
switch (message.type) {
|
||||
case 'GAME_LOADED':
|
||||
gameStartTime = Date.now();
|
||||
statsService.incrementGamesPlayed(gameSlug);
|
||||
break;
|
||||
|
||||
case 'GAME_EVENT':
|
||||
handleGameEvent(gameSlug, message.event!, message.data);
|
||||
break;
|
||||
|
||||
case 'GAME_ENDED':
|
||||
if (gameStartTime) {
|
||||
const playTime = Math.floor((Date.now() - gameStartTime) / 1000);
|
||||
statsService.addPlayTime(gameSlug, playTime);
|
||||
gameStartTime = null;
|
||||
}
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
window.addEventListener('beforeunload', () => {
|
||||
if (gameStartTime) {
|
||||
const playTime = Math.floor((Date.now() - gameStartTime) / 1000);
|
||||
statsService.addPlayTime(gameSlug, playTime);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function handleGameEvent(gameId: string, event: string, data: any) {
|
||||
switch (event) {
|
||||
case 'SCORE_UPDATE':
|
||||
if (data.score) {
|
||||
statsService.updateStats(gameId, {
|
||||
lastScore: data.score
|
||||
});
|
||||
}
|
||||
break;
|
||||
|
||||
case 'ACHIEVEMENT_UNLOCKED':
|
||||
if (data.achievement) {
|
||||
statsService.unlockAchievement(gameId, data.achievement);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'GAME_OVER':
|
||||
if (data.score) {
|
||||
statsService.updateStats(gameId, {
|
||||
lastScore: data.score
|
||||
});
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
switch (event) {
|
||||
case 'SCORE_UPDATE':
|
||||
if (data.score) {
|
||||
statsService.updateStats(gameId, {
|
||||
lastScore: data.score,
|
||||
});
|
||||
}
|
||||
break;
|
||||
|
||||
case 'ACHIEVEMENT_UNLOCKED':
|
||||
if (data.achievement) {
|
||||
statsService.unlockAchievement(gameId, data.achievement);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'GAME_OVER':
|
||||
if (data.score) {
|
||||
statsService.updateStats(gameId, {
|
||||
lastScore: data.score,
|
||||
});
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,57 +6,72 @@ const GAME_ID = 'dein-spiel-slug';
|
|||
|
||||
// 2. Beim Spielstart senden
|
||||
window.addEventListener('load', () => {
|
||||
window.parent.postMessage({
|
||||
type: 'GAME_LOADED',
|
||||
gameId: GAME_ID
|
||||
}, '*');
|
||||
window.parent.postMessage(
|
||||
{
|
||||
type: 'GAME_LOADED',
|
||||
gameId: GAME_ID,
|
||||
},
|
||||
'*'
|
||||
);
|
||||
});
|
||||
|
||||
// 3. Bei Score-Updates senden
|
||||
function updateScore(newScore) {
|
||||
score = newScore;
|
||||
// UI Update...
|
||||
|
||||
window.parent.postMessage({
|
||||
type: 'GAME_EVENT',
|
||||
gameId: GAME_ID,
|
||||
event: 'SCORE_UPDATE',
|
||||
data: { score: score }
|
||||
}, '*');
|
||||
score = newScore;
|
||||
// UI Update...
|
||||
|
||||
window.parent.postMessage(
|
||||
{
|
||||
type: 'GAME_EVENT',
|
||||
gameId: GAME_ID,
|
||||
event: 'SCORE_UPDATE',
|
||||
data: { score: score },
|
||||
},
|
||||
'*'
|
||||
);
|
||||
}
|
||||
|
||||
// 4. Bei Game Over senden
|
||||
function gameOver() {
|
||||
// Game Over Logik...
|
||||
|
||||
window.parent.postMessage({
|
||||
type: 'GAME_EVENT',
|
||||
gameId: GAME_ID,
|
||||
event: 'GAME_OVER',
|
||||
data: { score: finalScore }
|
||||
}, '*');
|
||||
|
||||
// Achievement Beispiele
|
||||
if (score >= 100) {
|
||||
window.parent.postMessage({
|
||||
type: 'GAME_EVENT',
|
||||
gameId: GAME_ID,
|
||||
event: 'ACHIEVEMENT_UNLOCKED',
|
||||
data: {
|
||||
achievement: {
|
||||
id: 'first-100',
|
||||
name: 'Erste 100',
|
||||
description: '100 Punkte erreicht!'
|
||||
}
|
||||
}
|
||||
}, '*');
|
||||
}
|
||||
// Game Over Logik...
|
||||
|
||||
window.parent.postMessage(
|
||||
{
|
||||
type: 'GAME_EVENT',
|
||||
gameId: GAME_ID,
|
||||
event: 'GAME_OVER',
|
||||
data: { score: finalScore },
|
||||
},
|
||||
'*'
|
||||
);
|
||||
|
||||
// Achievement Beispiele
|
||||
if (score >= 100) {
|
||||
window.parent.postMessage(
|
||||
{
|
||||
type: 'GAME_EVENT',
|
||||
gameId: GAME_ID,
|
||||
event: 'ACHIEVEMENT_UNLOCKED',
|
||||
data: {
|
||||
achievement: {
|
||||
id: 'first-100',
|
||||
name: 'Erste 100',
|
||||
description: '100 Punkte erreicht!',
|
||||
},
|
||||
},
|
||||
},
|
||||
'*'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// 5. Optional: Bei Spielende/Verlassen
|
||||
window.addEventListener('beforeunload', () => {
|
||||
window.parent.postMessage({
|
||||
type: 'GAME_ENDED',
|
||||
gameId: GAME_ID
|
||||
}, '*');
|
||||
});
|
||||
window.parent.postMessage(
|
||||
{
|
||||
type: 'GAME_ENDED',
|
||||
gameId: GAME_ID,
|
||||
},
|
||||
'*'
|
||||
);
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue