Spaces:
Sleeping
Sleeping
| import { Shyguy } from "./shyguy.js"; | |
| import { GameEngine } from "./game_engine.js"; | |
| import { ShyGuyLLM } from "./shyguy_llm.js"; | |
| import { StoryEngine } from "./story_engine.js"; | |
| import { SpeechToTextClient } from "./speech_to_text.js"; | |
| import { ElevenLabsClient } from "./eleven_labs.js"; | |
| export class Game { | |
| constructor() { | |
| this.firstRun = true; | |
| this.reset = this.reset.bind(this); | |
| this.initializeComponents(); | |
| } | |
| initializeComponents() { | |
| // Create fresh instances of all components | |
| this.shyguy = new Shyguy(); | |
| this.speechToTextClient = new SpeechToTextClient(); | |
| this.elevenLabsClient = new ElevenLabsClient(); | |
| this.shyguyLLM = new ShyGuyLLM(this.shyguy); | |
| this.storyEngine = new StoryEngine(this.shyguy); | |
| this.gameEngine = new GameEngine( | |
| this.shyguy, | |
| this.shyguyLLM, | |
| this.storyEngine, | |
| this.speechToTextClient, | |
| this.elevenLabsClient | |
| ); | |
| } | |
| async run() { | |
| this.gameEngine.init(this.firstRun); | |
| this.gameEngine.setResetCallback(this.reset); | |
| this.gameEngine.playBackgroundMusic(); | |
| this.gameEngine.lowerMusicVolume(); | |
| } | |
| reset() { | |
| this.firstRun = false; | |
| // Clean up old game engine | |
| if (this.gameEngine) { | |
| // Remove event listeners and clean up | |
| document.removeEventListener("keydown", this.gameEngine.handleKeyDown); | |
| document.removeEventListener("keyup", this.gameEngine.handleKeyUp); | |
| this.gameEngine.sendButton?.removeEventListener("click", this.gameEngine.handleSendMessage); | |
| this.gameEngine.dialogueContinueButton?.removeEventListener("click", this.gameEngine.handleDialogueContinue); | |
| this.gameEngine.playAgainBtn?.removeEventListener("click", this.gameEngine.handlePlayAgain); | |
| this.gameEngine.microphoneButton?.removeEventListener("click", this.gameEngine.handleMicrophone); | |
| this.gameEngine.startGameBtn?.removeEventListener("click", this.gameEngine.handleStartGame); | |
| this.gameEngine.dialogueNextButton?.removeEventListener("click", this.gameEngine.handleDialogueNext); | |
| // Stop the game loop | |
| this.gameEngine.shouldContinue = false; | |
| } | |
| setTimeout(() => { | |
| // Create fresh instances | |
| this.initializeComponents(); | |
| this.run(); | |
| }, 100); | |
| } | |
| } | |