import { CCInteger, Component, _decorator } from "cc"; import { AppRoot } from "../AppRoot/AppRoot"; import { GameRunner } from "../Menu/GameRunner"; import { delay } from "../Services/Utils/AsyncUtils"; import { GameSettings, ISpawner } from "./Data/GameSettings"; import { UserData } from "./Data/UserData"; import { Game } from "./Game"; const { ccclass, property } = _decorator; @ccclass("TestGameRunner") export class TestGameRunner extends Component { @property(CCInteger) private startTime = 0; @property(CCInteger) private startXP = 0; @property(CCInteger) private maxHpLevel = 0; @property(CCInteger) private bonusDamageLevel = 0; @property(CCInteger) private projectilePiercingLevel = 0; @property(CCInteger) private movementSpeedLevel = 0; @property(CCInteger) private xpGathererLevel = 0; @property(CCInteger) private goldGathererLevel = 0; public start(): void { if (GameRunner.Instance.IsRunning) return; this.playTestGameAsync(); } public async playTestGameAsync(): Promise { while (Game.Instance == null || AppRoot.Instance == null) await delay(100); const testUserData = new UserData(); testUserData.game.metaUpgrades.healthLevel = this.maxHpLevel; testUserData.game.metaUpgrades.overallDamageLevel = this.bonusDamageLevel; testUserData.game.metaUpgrades.projectilePiercingLevel = this.projectilePiercingLevel; testUserData.game.metaUpgrades.movementSpeedLevel = this.movementSpeedLevel; testUserData.game.metaUpgrades.xpGathererLevel = this.xpGathererLevel; testUserData.game.metaUpgrades.goldGathererLevel = this.goldGathererLevel; const settings = this.getTimeModifiedSettings(AppRoot.Instance.Settings); Game.Instance.play(testUserData, settings, AppRoot.Instance.TranslationData, { startTime: this.startTime, startXP: this.startXP }); } private getTimeModifiedSettings(settings: GameSettings): GameSettings { const spawners: ISpawner[] = [ ...settings.enemyManager.circularEnemySpawners, ...settings.enemyManager.individualEnemySpawners, ...settings.enemyManager.waveEnemySpawners ]; for (const spawner of spawners) { spawner.common.startDelay -= this.startTime; spawner.common.stopDelay -= this.startTime; } return settings; } } export class TestValues { public startTime = 0; public startXP = 0; }