From 1cd5c8b03c55fab94820c478bf173591a8d3ea04 Mon Sep 17 00:00:00 2001 From: Andrey Limasov Date: Tue, 16 Jun 2026 10:57:01 +0300 Subject: [PATCH] Initial commit --- .editorconfig | 18 + .gitignore | 20 + README.md | 35 + android/AndroidManifest.xml | 27 + android/build.gradle | 130 ++ android/ic_launcher-web.png | Bin 0 -> 39311 bytes android/libs/arm64-v8a/libgdx-freetype.so | Bin 0 -> 797976 bytes android/libs/arm64-v8a/libgdx.so | Bin 0 -> 163888 bytes android/libs/armeabi-v7a/libgdx-freetype.so | Bin 0 -> 757848 bytes android/libs/armeabi-v7a/libgdx.so | Bin 0 -> 160156 bytes android/libs/x86/libgdx-freetype.so | Bin 0 -> 853248 bytes android/libs/x86/libgdx.so | Bin 0 -> 189668 bytes android/libs/x86_64/libgdx-freetype.so | Bin 0 -> 888928 bytes android/libs/x86_64/libgdx.so | Bin 0 -> 193008 bytes android/proguard-rules.pro | 51 + android/project.properties | 14 + .../res/drawable-anydpi-v26/ic_launcher.xml | 6 + .../ic_launcher_foreground.xml | 28 + android/res/drawable-hdpi/ic_launcher.png | Bin 0 -> 4774 bytes android/res/drawable-mdpi/ic_launcher.png | Bin 0 -> 2874 bytes android/res/drawable-xhdpi/ic_launcher.png | Bin 0 -> 6679 bytes android/res/drawable-xxhdpi/ic_launcher.png | Bin 0 -> 10114 bytes android/res/drawable-xxxhdpi/ic_launcher.png | Bin 0 -> 13695 bytes android/res/values/color.xml | 4 + android/res/values/strings.xml | 4 + android/res/values/styles.xml | 10 + .../tower/android/AndroidLauncher.java | 18 + assets/.gitkeep | 3 + assets/assets.txt | 9 + assets/hs_err_pid15412.log | 1353 ++++++++++++ assets/libgdx.png | Bin 0 -> 2458 bytes assets/pop.mp3 | Bin 0 -> 5477 bytes assets/pop.wav | Bin 0 -> 12392 bytes assets/roboto.ttf | Bin 0 -> 145908 bytes assets/shot.mp3 | 1 + assets/shot.wav | Bin 0 -> 7982 bytes assets/ui.ttf | Bin 0 -> 879796 bytes build.gradle | 73 + core/build.gradle | 18 + .../main/java/ru/project/tower/DebugLog.java | 17 + .../java/ru/project/tower/GameContext.java | 61 + .../main/java/ru/project/tower/GameState.java | 367 ++++ core/src/main/java/ru/project/tower/Main.java | 65 + .../tower/abilities/AbilityEffect.java | 75 + .../project/tower/abilities/AbilityHost.java | 41 + .../project/tower/abilities/AbilityKind.java | 83 + .../tower/abilities/AbilitySystem.java | 460 ++++ .../tower/abilities/PlayerAbilities.java | 170 ++ .../ru/project/tower/abilities/Turret.java | 23 + .../tower/balance/BalanceEffectRegistry.java | 147 ++ .../tower/balance/BalanceEffectSpec.java | 71 + .../tower/balance/BalanceReportExporter.java | 49 + .../tower/balance/BalanceRouteReport.java | 197 ++ .../tower/balance/BalanceRouteSimulator.java | 581 +++++ .../tower/balance/BalanceRouteTarget.java | 81 + .../tower/balance/BalanceRuntimeHarness.java | 909 ++++++++ .../balance/BalanceSimulationHarness.java | 137 ++ .../tower/balance/BossBalanceSpec.java | 78 + .../tower/balance/EndlessBalanceSpec.java | 501 +++++ .../tower/balance/EnemyComposition.java | 76 + .../tower/balance/MetaProgressionPacing.java | 33 + .../ru/project/tower/balance/PowerAxis.java | 18 + .../tower/balance/SeededUpgradeDraftDeck.java | 156 ++ .../tower/balance/SimulationReport.java | 515 +++++ .../tower/balance/StrategyProfile.java | 50 + .../ru/project/tower/balance/UpgradeCard.java | 91 + .../tower/balance/UpgradeCardRarity.java | 7 + .../tower/balance/UpgradeCardRegistry.java | 248 +++ .../tower/content/BossContentRegistry.java | 145 ++ .../tower/entities/bullets/BulletData.java | 142 ++ .../entities/bullets/BulletEffectsSink.java | 37 + .../entities/bullets/BulletMultipliers.java | 30 + .../tower/entities/bullets/BulletSystem.java | 447 ++++ .../bullets/BulletTalentProvider.java | 67 + .../entities/bullets/EnemySpatialIndex.java | 40 + .../entities/circles/BaseCircleData.java | 174 ++ .../entities/circles/BasicCircleData.java | 42 + .../tower/entities/circles/BonusBallData.java | 110 + .../entities/circles/DasherCircleData.java | 122 ++ .../entities/circles/FastCircleData.java | 21 + .../entities/circles/HealerCircleData.java | 81 + .../entities/circles/SniperCircleData.java | 115 + .../entities/circles/SpawnerCircleData.java | 67 + .../entities/circles/SplitterCircleData.java | 51 + .../entities/circles/StrongCircleData.java | 51 + .../circles/bosses/GlacialWardenData.java | 371 ++++ .../circles/bosses/IllusionMasterData.java | 284 +++ .../circles/bosses/JuggernautData.java | 185 ++ .../circles/bosses/ShadowWeaverData.java | 240 +++ .../circles/bosses/SwarmQueenData.java | 344 +++ .../circles/bosses/VolatileReactorData.java | 256 +++ .../entities/particles/FloatingText.java | 74 + .../entities/particles/NeonParticle.java | 48 + .../navigation/DefaultScreenFactory.java | 47 + .../tower/navigation/GameScreenNavigator.java | 76 + .../tower/navigation/ScreenFactory.java | 15 + .../tower/navigation/ScreenNavigation.java | 12 + .../tower/navigation/ScreenNavigator.java | 13 + .../tower/player/EffectiveCombatStats.java | 189 ++ .../tower/player/PlayerCombatState.java | 365 ++++ .../player/PlayerRunCombatCalculator.java | 100 + .../ru/project/tower/player/PlayerStats.java | 226 ++ .../ru/project/tower/run/GameplayColor.java | 11 + .../ru/project/tower/run/GameplayEvent.java | 314 +++ .../tower/run/GameplayEventDispatcher.java | 61 + .../project/tower/run/GameplayEventSink.java | 10 + .../project/tower/run/GameplayEventSinks.java | 31 + .../ru/project/tower/run/GameplayEvents.java | 78 + .../project/tower/run/GameplayPosition.java | 31 + .../ru/project/tower/run/GameplaySound.java | 6 + .../project/tower/run/RunBulletSnapshot.java | 19 + .../ru/project/tower/run/RunFrameEvents.java | 13 + .../tower/run/RunFrameOrchestrator.java | 264 +++ .../ru/project/tower/run/RunRngStreams.java | 142 ++ .../java/ru/project/tower/run/RunSession.java | 103 + .../project/tower/run/RunSessionConfig.java | 53 + .../project/tower/run/RunSessionFactory.java | 76 + .../tower/run/RunSnapshotCoordinator.java | 109 + .../project/tower/run/RunSnapshotMapper.java | 82 + .../project/tower/run/RunSnapshotState.java | 61 + .../ru/project/tower/run/RunStartMode.java | 7 + .../tower/screens/AbilitySelectionScreen.java | 649 ++++++ .../tower/screens/AbilityShopScreen.java | 488 +++++ .../ru/project/tower/screens/GameScreen.java | 1887 ++++++++++++++++ .../ru/project/tower/screens/MainScreen.java | 454 ++++ .../tower/screens/TalentTreeScreen.java | 796 +++++++ .../AbilitySelectionDependencies.java | 30 + .../AbilitySelectionLayout.java | 145 ++ .../AbilitySelectionScaleMetrics.java | 45 + .../abilityshop/AbilityShopCardView.java | 70 + .../abilityshop/AbilityShopDependencies.java | 30 + .../AbilityShopPurchaseService.java | 31 + .../abilityshop/AbilityShopResources.java | 73 + .../abilityshop/AbilityShopScaleMetrics.java | 41 + .../common/NeonMenuParticleSystem.java | 171 ++ .../gamescreen/GameScreenComposition.java | 32 + .../gamescreen/GameScreenDependencies.java | 71 + .../abilities/GameScreenAbilityHost.java | 122 ++ .../actions/GameScreenActionRouter.java | 180 ++ .../actions/GameScreenInputAction.java | 30 + .../assets/GameScreenFontAssets.java | 212 ++ .../assets/GameScreenMaterialAssets.java | 1056 +++++++++ .../assets/GameScreenSoundAssets.java | 27 + .../GameScreenBulletEffectsHostAdapter.java | 42 + .../events/GameScreenBulletEffectsSink.java | 72 + .../GameScreenEnemyKillEventHandler.java | 78 + .../GameScreenEnemyKillHostAdapter.java | 71 + .../events/GameScreenGameplayEventSink.java | 153 ++ .../GameScreenGameObjectModel.java | 418 ++++ .../GameScreenGameObjectRenderer.java | 1105 ++++++++++ .../gamescreen/hud/GameScreenHudModel.java | 661 ++++++ .../hud/GameScreenHudRenderContext.java | 22 + .../gamescreen/hud/GameScreenHudRenderer.java | 1909 +++++++++++++++++ .../hud/GameScreenHudViewModel.java | 102 + .../GameScreenGestureProcessorFactory.java | 13 + .../input/GameScreenInputController.java | 512 +++++ .../input/GameScreenInputHostAdapter.java | 64 + .../input/GameScreenInputModel.java | 420 ++++ .../gamescreen/layout/GameScreenLayout.java | 1069 +++++++++ .../layout/GameScreenScaleMetrics.java | 87 + .../gamescreen/layout/SafeAreaInsets.java | 48 + .../layout/SafeAreaInsetsProvider.java | 12 + .../model/GameScreenGameOverOverlayModel.java | 269 +++ .../model/GameScreenPauseOverlayModel.java | 128 ++ .../GameScreenGameOverOverlayRenderer.java | 208 ++ .../render/GameScreenMenuButtonRenderer.java | 130 ++ .../GameScreenPauseOverlayRenderer.java | 243 +++ .../GameScreenRenderModelAssembler.java | 295 +++ .../render/GameScreenUpgradePickOverlay.java | 261 +++ .../GameScreenUpgradePickOverlayRenderer.java | 365 ++++ .../render/PauseScreenshotOwner.java | 35 + .../run/GameScreenRunFrameEvents.java | 55 + .../run/GameScreenRunFrameHostAdapter.java | 62 + .../run/GameScreenRunSnapshotHost.java | 96 + .../run/GameScreenRunSnapshotHostAdapter.java | 31 + .../shop/GameScreenShopController.java | 122 ++ .../shop/GameScreenShopPanelState.java | 721 +++++++ .../shop/GameScreenShopUpgradeHost.java | 63 + .../GameScreenShopUpgradeHostAdapter.java | 62 + .../shop/ShopUpgradePreviewValues.java | 312 +++ .../special/GameScreenBossEffectsHost.java | 20 + .../special/GameScreenSpecialCircleHost.java | 57 + .../GameScreenSpecialCircleHostAdapter.java | 28 + .../gamescreen/ui/NeonButtonRenderer.java | 75 + .../gamescreen/ui/NeonTextRenderer.java | 112 + .../upgrades/GameScreenUpgradeHost.java | 74 + .../GameScreenUpgradeHostAdapter.java | 35 + .../vfx/GameScreenBackgroundRenderer.java | 106 + .../vfx/GameScreenFloatingTextLayout.java | 117 + .../vfx/GameScreenFloatingTextSystem.java | 43 + .../vfx/GameScreenImpactEffects.java | 82 + .../vfx/GameScreenParticleEffects.java | 179 ++ .../gamescreen/vfx/GameScreenVfxModel.java | 318 +++ .../gamescreen/vfx/GameScreenVfxRenderer.java | 667 ++++++ .../visual/GameScreenVisualTokens.java | 110 + .../GameScreenWaveClearRewardHandler.java | 101 + .../GameScreenWaveClearRewardHostAdapter.java | 56 + .../waves/GameScreenWaveRunEvents.java | 91 + .../waves/GameScreenWaveRunHostAdapter.java | 57 + .../screens/main/MainScreenScaleMetrics.java | 46 + .../talenttree/TalentTreeScaleMetrics.java | 40 + .../TalentTreeScreenDependencies.java | 30 + .../tower/support/BossEffectsHost.java | 7 + .../tower/support/CompactNumberFormatter.java | 54 + .../tower/support/GameAssetService.java | 8 + .../ru/project/tower/support/GameClock.java | 15 + .../tower/support/GameplaySoundAssets.java | 52 + .../support/GdxInputProcessorInstaller.java | 11 + .../tower/support/GdxViewportSize.java | 15 + .../support/InputProcessorInstaller.java | 7 + .../tower/support/LibGdxAssetService.java | 77 + .../tower/support/MathUtilsRandomSource.java | 25 + .../tower/support/PausableGameClock.java | 42 + .../project/tower/support/RandomSource.java | 11 + .../ru/project/tower/support/RangeChecks.java | 25 + .../tower/support/RobotoFontFactory.java | 161 ++ .../project/tower/support/ScreenAssets.java | 98 + .../project/tower/support/ScreenPalette.java | 106 + .../tower/support/SeededRandomSource.java | 101 + .../project/tower/support/UiAtlasBuilder.java | 88 + .../project/tower/support/ViewportSize.java | 7 + .../tower/systems/BonusBallSystem.java | 252 +++ .../systems/BossPlayerCombatModifiers.java | 38 + .../tower/systems/BossProjectileFactory.java | 151 ++ .../tower/systems/CircleSpatialGrid.java | 166 ++ .../tower/systems/CircleSpatialIndex.java | 35 + .../tower/systems/CollisionSystem.java | 147 ++ .../tower/systems/EnemyClassifier.java | 12 + .../tower/systems/EnemyDeathHandler.java | 81 + .../tower/systems/EnemySimulationSystem.java | 68 + .../tower/systems/PlayerShootingSystem.java | 193 ++ .../tower/systems/SpecialCircleBehaviors.java | 516 +++++ .../tower/systems/SpecialCircleSystem.java | 194 ++ .../ru/project/tower/talents/TalentData.java | 101 + .../ru/project/tower/talents/TalentTree.java | 789 +++++++ .../project/tower/upgrades/UpgradeHost.java | 31 + .../project/tower/upgrades/UpgradeKind.java | 73 + .../tower/upgrades/UpgradeSynergy.java | 51 + .../project/tower/upgrades/UpgradeSystem.java | 539 +++++ .../upgrades/shop/ShopUpgradeCategory.java | 17 + .../upgrades/shop/ShopUpgradeDefinition.java | 80 + .../tower/upgrades/shop/ShopUpgradeHost.java | 18 + .../tower/upgrades/shop/ShopUpgradeKind.java | 45 + .../upgrades/shop/ShopUpgradeRegistry.java | 373 ++++ .../upgrades/shop/ShopUpgradeSnapshot.java | 135 ++ .../upgrades/shop/ShopUpgradeSystem.java | 261 +++ .../tower/waves/BossSpawnController.java | 184 ++ .../project/tower/waves/SpawnController.java | 639 ++++++ .../project/tower/waves/WaveController.java | 267 +++ .../ru/project/tower/waves/WaveRunEvents.java | 22 + .../tower/waves/WaveRunOrchestrator.java | 94 + .../ru/project/tower/waves/WaveTuning.java | 73 + core/src/main/resources/default.fnt | 99 + core/src/main/resources/font.fnt | 164 ++ core/src/main/resources/uiskin.json | 22 + ...026-04-17-phase3-content-meta-retention.md | 604 ++++++ ...04-17-phase3-k1-test-harness-completion.md | 127 ++ .../2026-04-17-phase3-k1-test-harness.md | 1594 ++++++++++++++ ...026-04-17-phase3-k1-test-harness-design.md | 312 +++ gradle.properties | 9 + gradle/gradle-daemon-jvm.properties | 13 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 43705 bytes gradle/wrapper/gradle-wrapper.properties | 7 + gradlew | 251 +++ gradlew.bat | 94 + lwjgl3/build.gradle | 180 ++ lwjgl3/icons/logo.icns | Bin 0 -> 201876 bytes lwjgl3/icons/logo.ico | Bin 0 -> 4286 bytes lwjgl3/icons/logo.png | Bin 0 -> 9754 bytes lwjgl3/nativeimage.gradle | 54 + .../project/tower/lwjgl3/Lwjgl3Launcher.java | 37 + .../project/tower/lwjgl3/StartupHelper.java | 204 ++ lwjgl3/src/main/resources/libgdx128.png | Bin 0 -> 9754 bytes lwjgl3/src/main/resources/libgdx16.png | Bin 0 -> 879 bytes lwjgl3/src/main/resources/libgdx32.png | Bin 0 -> 2092 bytes lwjgl3/src/main/resources/libgdx64.png | Bin 0 -> 4996 bytes settings.gradle | 8 + 277 files changed, 42921 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 README.md create mode 100644 android/AndroidManifest.xml create mode 100644 android/build.gradle create mode 100644 android/ic_launcher-web.png create mode 100644 android/libs/arm64-v8a/libgdx-freetype.so create mode 100644 android/libs/arm64-v8a/libgdx.so create mode 100644 android/libs/armeabi-v7a/libgdx-freetype.so create mode 100644 android/libs/armeabi-v7a/libgdx.so create mode 100644 android/libs/x86/libgdx-freetype.so create mode 100644 android/libs/x86/libgdx.so create mode 100644 android/libs/x86_64/libgdx-freetype.so create mode 100644 android/libs/x86_64/libgdx.so create mode 100644 android/proguard-rules.pro create mode 100644 android/project.properties create mode 100644 android/res/drawable-anydpi-v26/ic_launcher.xml create mode 100644 android/res/drawable-anydpi-v26/ic_launcher_foreground.xml create mode 100644 android/res/drawable-hdpi/ic_launcher.png create mode 100644 android/res/drawable-mdpi/ic_launcher.png create mode 100644 android/res/drawable-xhdpi/ic_launcher.png create mode 100644 android/res/drawable-xxhdpi/ic_launcher.png create mode 100644 android/res/drawable-xxxhdpi/ic_launcher.png create mode 100644 android/res/values/color.xml create mode 100644 android/res/values/strings.xml create mode 100644 android/res/values/styles.xml create mode 100644 android/src/main/java/ru/project/tower/android/AndroidLauncher.java create mode 100644 assets/.gitkeep create mode 100644 assets/assets.txt create mode 100644 assets/hs_err_pid15412.log create mode 100644 assets/libgdx.png create mode 100644 assets/pop.mp3 create mode 100644 assets/pop.wav create mode 100644 assets/roboto.ttf create mode 100644 assets/shot.mp3 create mode 100644 assets/shot.wav create mode 100644 assets/ui.ttf create mode 100644 build.gradle create mode 100644 core/build.gradle create mode 100644 core/src/main/java/ru/project/tower/DebugLog.java create mode 100644 core/src/main/java/ru/project/tower/GameContext.java create mode 100644 core/src/main/java/ru/project/tower/GameState.java create mode 100644 core/src/main/java/ru/project/tower/Main.java create mode 100644 core/src/main/java/ru/project/tower/abilities/AbilityEffect.java create mode 100644 core/src/main/java/ru/project/tower/abilities/AbilityHost.java create mode 100644 core/src/main/java/ru/project/tower/abilities/AbilityKind.java create mode 100644 core/src/main/java/ru/project/tower/abilities/AbilitySystem.java create mode 100644 core/src/main/java/ru/project/tower/abilities/PlayerAbilities.java create mode 100644 core/src/main/java/ru/project/tower/abilities/Turret.java create mode 100644 core/src/main/java/ru/project/tower/balance/BalanceEffectRegistry.java create mode 100644 core/src/main/java/ru/project/tower/balance/BalanceEffectSpec.java create mode 100644 core/src/main/java/ru/project/tower/balance/BalanceReportExporter.java create mode 100644 core/src/main/java/ru/project/tower/balance/BalanceRouteReport.java create mode 100644 core/src/main/java/ru/project/tower/balance/BalanceRouteSimulator.java create mode 100644 core/src/main/java/ru/project/tower/balance/BalanceRouteTarget.java create mode 100644 core/src/main/java/ru/project/tower/balance/BalanceRuntimeHarness.java create mode 100644 core/src/main/java/ru/project/tower/balance/BalanceSimulationHarness.java create mode 100644 core/src/main/java/ru/project/tower/balance/BossBalanceSpec.java create mode 100644 core/src/main/java/ru/project/tower/balance/EndlessBalanceSpec.java create mode 100644 core/src/main/java/ru/project/tower/balance/EnemyComposition.java create mode 100644 core/src/main/java/ru/project/tower/balance/MetaProgressionPacing.java create mode 100644 core/src/main/java/ru/project/tower/balance/PowerAxis.java create mode 100644 core/src/main/java/ru/project/tower/balance/SeededUpgradeDraftDeck.java create mode 100644 core/src/main/java/ru/project/tower/balance/SimulationReport.java create mode 100644 core/src/main/java/ru/project/tower/balance/StrategyProfile.java create mode 100644 core/src/main/java/ru/project/tower/balance/UpgradeCard.java create mode 100644 core/src/main/java/ru/project/tower/balance/UpgradeCardRarity.java create mode 100644 core/src/main/java/ru/project/tower/balance/UpgradeCardRegistry.java create mode 100644 core/src/main/java/ru/project/tower/content/BossContentRegistry.java create mode 100644 core/src/main/java/ru/project/tower/entities/bullets/BulletData.java create mode 100644 core/src/main/java/ru/project/tower/entities/bullets/BulletEffectsSink.java create mode 100644 core/src/main/java/ru/project/tower/entities/bullets/BulletMultipliers.java create mode 100644 core/src/main/java/ru/project/tower/entities/bullets/BulletSystem.java create mode 100644 core/src/main/java/ru/project/tower/entities/bullets/BulletTalentProvider.java create mode 100644 core/src/main/java/ru/project/tower/entities/bullets/EnemySpatialIndex.java create mode 100644 core/src/main/java/ru/project/tower/entities/circles/BaseCircleData.java create mode 100644 core/src/main/java/ru/project/tower/entities/circles/BasicCircleData.java create mode 100644 core/src/main/java/ru/project/tower/entities/circles/BonusBallData.java create mode 100644 core/src/main/java/ru/project/tower/entities/circles/DasherCircleData.java create mode 100644 core/src/main/java/ru/project/tower/entities/circles/FastCircleData.java create mode 100644 core/src/main/java/ru/project/tower/entities/circles/HealerCircleData.java create mode 100644 core/src/main/java/ru/project/tower/entities/circles/SniperCircleData.java create mode 100644 core/src/main/java/ru/project/tower/entities/circles/SpawnerCircleData.java create mode 100644 core/src/main/java/ru/project/tower/entities/circles/SplitterCircleData.java create mode 100644 core/src/main/java/ru/project/tower/entities/circles/StrongCircleData.java create mode 100644 core/src/main/java/ru/project/tower/entities/circles/bosses/GlacialWardenData.java create mode 100644 core/src/main/java/ru/project/tower/entities/circles/bosses/IllusionMasterData.java create mode 100644 core/src/main/java/ru/project/tower/entities/circles/bosses/JuggernautData.java create mode 100644 core/src/main/java/ru/project/tower/entities/circles/bosses/ShadowWeaverData.java create mode 100644 core/src/main/java/ru/project/tower/entities/circles/bosses/SwarmQueenData.java create mode 100644 core/src/main/java/ru/project/tower/entities/circles/bosses/VolatileReactorData.java create mode 100644 core/src/main/java/ru/project/tower/entities/particles/FloatingText.java create mode 100644 core/src/main/java/ru/project/tower/entities/particles/NeonParticle.java create mode 100644 core/src/main/java/ru/project/tower/navigation/DefaultScreenFactory.java create mode 100644 core/src/main/java/ru/project/tower/navigation/GameScreenNavigator.java create mode 100644 core/src/main/java/ru/project/tower/navigation/ScreenFactory.java create mode 100644 core/src/main/java/ru/project/tower/navigation/ScreenNavigation.java create mode 100644 core/src/main/java/ru/project/tower/navigation/ScreenNavigator.java create mode 100644 core/src/main/java/ru/project/tower/player/EffectiveCombatStats.java create mode 100644 core/src/main/java/ru/project/tower/player/PlayerCombatState.java create mode 100644 core/src/main/java/ru/project/tower/player/PlayerRunCombatCalculator.java create mode 100644 core/src/main/java/ru/project/tower/player/PlayerStats.java create mode 100644 core/src/main/java/ru/project/tower/run/GameplayColor.java create mode 100644 core/src/main/java/ru/project/tower/run/GameplayEvent.java create mode 100644 core/src/main/java/ru/project/tower/run/GameplayEventDispatcher.java create mode 100644 core/src/main/java/ru/project/tower/run/GameplayEventSink.java create mode 100644 core/src/main/java/ru/project/tower/run/GameplayEventSinks.java create mode 100644 core/src/main/java/ru/project/tower/run/GameplayEvents.java create mode 100644 core/src/main/java/ru/project/tower/run/GameplayPosition.java create mode 100644 core/src/main/java/ru/project/tower/run/GameplaySound.java create mode 100644 core/src/main/java/ru/project/tower/run/RunBulletSnapshot.java create mode 100644 core/src/main/java/ru/project/tower/run/RunFrameEvents.java create mode 100644 core/src/main/java/ru/project/tower/run/RunFrameOrchestrator.java create mode 100644 core/src/main/java/ru/project/tower/run/RunRngStreams.java create mode 100644 core/src/main/java/ru/project/tower/run/RunSession.java create mode 100644 core/src/main/java/ru/project/tower/run/RunSessionConfig.java create mode 100644 core/src/main/java/ru/project/tower/run/RunSessionFactory.java create mode 100644 core/src/main/java/ru/project/tower/run/RunSnapshotCoordinator.java create mode 100644 core/src/main/java/ru/project/tower/run/RunSnapshotMapper.java create mode 100644 core/src/main/java/ru/project/tower/run/RunSnapshotState.java create mode 100644 core/src/main/java/ru/project/tower/run/RunStartMode.java create mode 100644 core/src/main/java/ru/project/tower/screens/AbilitySelectionScreen.java create mode 100644 core/src/main/java/ru/project/tower/screens/AbilityShopScreen.java create mode 100644 core/src/main/java/ru/project/tower/screens/GameScreen.java create mode 100644 core/src/main/java/ru/project/tower/screens/MainScreen.java create mode 100644 core/src/main/java/ru/project/tower/screens/TalentTreeScreen.java create mode 100644 core/src/main/java/ru/project/tower/screens/abilityselection/AbilitySelectionDependencies.java create mode 100644 core/src/main/java/ru/project/tower/screens/abilityselection/AbilitySelectionLayout.java create mode 100644 core/src/main/java/ru/project/tower/screens/abilityselection/AbilitySelectionScaleMetrics.java create mode 100644 core/src/main/java/ru/project/tower/screens/abilityshop/AbilityShopCardView.java create mode 100644 core/src/main/java/ru/project/tower/screens/abilityshop/AbilityShopDependencies.java create mode 100644 core/src/main/java/ru/project/tower/screens/abilityshop/AbilityShopPurchaseService.java create mode 100644 core/src/main/java/ru/project/tower/screens/abilityshop/AbilityShopResources.java create mode 100644 core/src/main/java/ru/project/tower/screens/abilityshop/AbilityShopScaleMetrics.java create mode 100644 core/src/main/java/ru/project/tower/screens/common/NeonMenuParticleSystem.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/GameScreenComposition.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/GameScreenDependencies.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/abilities/GameScreenAbilityHost.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/actions/GameScreenActionRouter.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/actions/GameScreenInputAction.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/assets/GameScreenFontAssets.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/assets/GameScreenMaterialAssets.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/assets/GameScreenSoundAssets.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/events/GameScreenBulletEffectsHostAdapter.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/events/GameScreenBulletEffectsSink.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/events/GameScreenEnemyKillEventHandler.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/events/GameScreenEnemyKillHostAdapter.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/events/GameScreenGameplayEventSink.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/gameobjects/GameScreenGameObjectModel.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/gameobjects/GameScreenGameObjectRenderer.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/hud/GameScreenHudModel.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/hud/GameScreenHudRenderContext.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/hud/GameScreenHudRenderer.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/hud/GameScreenHudViewModel.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/input/GameScreenGestureProcessorFactory.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/input/GameScreenInputController.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/input/GameScreenInputHostAdapter.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/input/GameScreenInputModel.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/layout/GameScreenLayout.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/layout/GameScreenScaleMetrics.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/layout/SafeAreaInsets.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/layout/SafeAreaInsetsProvider.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/model/GameScreenGameOverOverlayModel.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/model/GameScreenPauseOverlayModel.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/render/GameScreenGameOverOverlayRenderer.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/render/GameScreenMenuButtonRenderer.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/render/GameScreenPauseOverlayRenderer.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/render/GameScreenRenderModelAssembler.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/render/GameScreenUpgradePickOverlay.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/render/GameScreenUpgradePickOverlayRenderer.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/render/PauseScreenshotOwner.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/run/GameScreenRunFrameEvents.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/run/GameScreenRunFrameHostAdapter.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/run/GameScreenRunSnapshotHost.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/run/GameScreenRunSnapshotHostAdapter.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/shop/GameScreenShopController.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/shop/GameScreenShopPanelState.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/shop/GameScreenShopUpgradeHost.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/shop/GameScreenShopUpgradeHostAdapter.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/shop/ShopUpgradePreviewValues.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/special/GameScreenBossEffectsHost.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/special/GameScreenSpecialCircleHost.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/special/GameScreenSpecialCircleHostAdapter.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/ui/NeonButtonRenderer.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/ui/NeonTextRenderer.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/upgrades/GameScreenUpgradeHost.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/upgrades/GameScreenUpgradeHostAdapter.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/vfx/GameScreenBackgroundRenderer.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/vfx/GameScreenFloatingTextLayout.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/vfx/GameScreenFloatingTextSystem.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/vfx/GameScreenImpactEffects.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/vfx/GameScreenParticleEffects.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/vfx/GameScreenVfxModel.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/vfx/GameScreenVfxRenderer.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/visual/GameScreenVisualTokens.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/waves/GameScreenWaveClearRewardHandler.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/waves/GameScreenWaveClearRewardHostAdapter.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/waves/GameScreenWaveRunEvents.java create mode 100644 core/src/main/java/ru/project/tower/screens/gamescreen/waves/GameScreenWaveRunHostAdapter.java create mode 100644 core/src/main/java/ru/project/tower/screens/main/MainScreenScaleMetrics.java create mode 100644 core/src/main/java/ru/project/tower/screens/talenttree/TalentTreeScaleMetrics.java create mode 100644 core/src/main/java/ru/project/tower/screens/talenttree/TalentTreeScreenDependencies.java create mode 100644 core/src/main/java/ru/project/tower/support/BossEffectsHost.java create mode 100644 core/src/main/java/ru/project/tower/support/CompactNumberFormatter.java create mode 100644 core/src/main/java/ru/project/tower/support/GameAssetService.java create mode 100644 core/src/main/java/ru/project/tower/support/GameClock.java create mode 100644 core/src/main/java/ru/project/tower/support/GameplaySoundAssets.java create mode 100644 core/src/main/java/ru/project/tower/support/GdxInputProcessorInstaller.java create mode 100644 core/src/main/java/ru/project/tower/support/GdxViewportSize.java create mode 100644 core/src/main/java/ru/project/tower/support/InputProcessorInstaller.java create mode 100644 core/src/main/java/ru/project/tower/support/LibGdxAssetService.java create mode 100644 core/src/main/java/ru/project/tower/support/MathUtilsRandomSource.java create mode 100644 core/src/main/java/ru/project/tower/support/PausableGameClock.java create mode 100644 core/src/main/java/ru/project/tower/support/RandomSource.java create mode 100644 core/src/main/java/ru/project/tower/support/RangeChecks.java create mode 100644 core/src/main/java/ru/project/tower/support/RobotoFontFactory.java create mode 100644 core/src/main/java/ru/project/tower/support/ScreenAssets.java create mode 100644 core/src/main/java/ru/project/tower/support/ScreenPalette.java create mode 100644 core/src/main/java/ru/project/tower/support/SeededRandomSource.java create mode 100644 core/src/main/java/ru/project/tower/support/UiAtlasBuilder.java create mode 100644 core/src/main/java/ru/project/tower/support/ViewportSize.java create mode 100644 core/src/main/java/ru/project/tower/systems/BonusBallSystem.java create mode 100644 core/src/main/java/ru/project/tower/systems/BossPlayerCombatModifiers.java create mode 100644 core/src/main/java/ru/project/tower/systems/BossProjectileFactory.java create mode 100644 core/src/main/java/ru/project/tower/systems/CircleSpatialGrid.java create mode 100644 core/src/main/java/ru/project/tower/systems/CircleSpatialIndex.java create mode 100644 core/src/main/java/ru/project/tower/systems/CollisionSystem.java create mode 100644 core/src/main/java/ru/project/tower/systems/EnemyClassifier.java create mode 100644 core/src/main/java/ru/project/tower/systems/EnemyDeathHandler.java create mode 100644 core/src/main/java/ru/project/tower/systems/EnemySimulationSystem.java create mode 100644 core/src/main/java/ru/project/tower/systems/PlayerShootingSystem.java create mode 100644 core/src/main/java/ru/project/tower/systems/SpecialCircleBehaviors.java create mode 100644 core/src/main/java/ru/project/tower/systems/SpecialCircleSystem.java create mode 100644 core/src/main/java/ru/project/tower/talents/TalentData.java create mode 100644 core/src/main/java/ru/project/tower/talents/TalentTree.java create mode 100644 core/src/main/java/ru/project/tower/upgrades/UpgradeHost.java create mode 100644 core/src/main/java/ru/project/tower/upgrades/UpgradeKind.java create mode 100644 core/src/main/java/ru/project/tower/upgrades/UpgradeSynergy.java create mode 100644 core/src/main/java/ru/project/tower/upgrades/UpgradeSystem.java create mode 100644 core/src/main/java/ru/project/tower/upgrades/shop/ShopUpgradeCategory.java create mode 100644 core/src/main/java/ru/project/tower/upgrades/shop/ShopUpgradeDefinition.java create mode 100644 core/src/main/java/ru/project/tower/upgrades/shop/ShopUpgradeHost.java create mode 100644 core/src/main/java/ru/project/tower/upgrades/shop/ShopUpgradeKind.java create mode 100644 core/src/main/java/ru/project/tower/upgrades/shop/ShopUpgradeRegistry.java create mode 100644 core/src/main/java/ru/project/tower/upgrades/shop/ShopUpgradeSnapshot.java create mode 100644 core/src/main/java/ru/project/tower/upgrades/shop/ShopUpgradeSystem.java create mode 100644 core/src/main/java/ru/project/tower/waves/BossSpawnController.java create mode 100644 core/src/main/java/ru/project/tower/waves/SpawnController.java create mode 100644 core/src/main/java/ru/project/tower/waves/WaveController.java create mode 100644 core/src/main/java/ru/project/tower/waves/WaveRunEvents.java create mode 100644 core/src/main/java/ru/project/tower/waves/WaveRunOrchestrator.java create mode 100644 core/src/main/java/ru/project/tower/waves/WaveTuning.java create mode 100644 core/src/main/resources/default.fnt create mode 100644 core/src/main/resources/font.fnt create mode 100644 core/src/main/resources/uiskin.json create mode 100644 docs/superpowers/plans/2026-04-17-phase3-content-meta-retention.md create mode 100644 docs/superpowers/plans/2026-04-17-phase3-k1-test-harness-completion.md create mode 100644 docs/superpowers/plans/2026-04-17-phase3-k1-test-harness.md create mode 100644 docs/superpowers/specs/2026-04-17-phase3-k1-test-harness-design.md create mode 100644 gradle.properties create mode 100644 gradle/gradle-daemon-jvm.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 lwjgl3/build.gradle create mode 100644 lwjgl3/icons/logo.icns create mode 100644 lwjgl3/icons/logo.ico create mode 100644 lwjgl3/icons/logo.png create mode 100644 lwjgl3/nativeimage.gradle create mode 100644 lwjgl3/src/main/java/ru/project/tower/lwjgl3/Lwjgl3Launcher.java create mode 100644 lwjgl3/src/main/java/ru/project/tower/lwjgl3/StartupHelper.java create mode 100644 lwjgl3/src/main/resources/libgdx128.png create mode 100644 lwjgl3/src/main/resources/libgdx16.png create mode 100644 lwjgl3/src/main/resources/libgdx32.png create mode 100644 lwjgl3/src/main/resources/libgdx64.png create mode 100644 settings.gradle diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..67df35c --- /dev/null +++ b/.editorconfig @@ -0,0 +1,18 @@ +# https://editorconfig.org +root = true + +[*] +indent_style = space +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.{java,scala,groovy,kt,kts}] +indent_size = 4 + +[*.gradle] +indent_size = 2 + +[*.md] +trim_trailing_whitespace = false diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a9c3575 --- /dev/null +++ b/.gitignore @@ -0,0 +1,20 @@ +# Gradle / build +.gradle/ +build/ +*/build/ +out/ + +# Android +local.properties +*.apk +*.aab +.cxx/ +captures/ + +# IntelliJ / Android Studio +.idea/ +*.iml + +# OS +.DS_Store +Thumbs.db diff --git a/README.md b/README.md new file mode 100644 index 0000000..b6bf500 --- /dev/null +++ b/README.md @@ -0,0 +1,35 @@ +# Tower + +A [libGDX](https://libgdx.com/) project generated with [gdx-liftoff](https://github.com/libgdx/gdx-liftoff). + +This project was generated with a template including simple application launchers and an `ApplicationAdapter` extension that draws libGDX logo. + +## Platforms + +- `core`: Main module with the application logic shared by all platforms. +- `lwjgl3`: Primary desktop platform using LWJGL3; was called 'desktop' in older docs. +- `android`: Android mobile platform. Needs Android SDK. + +## Gradle + +This project uses [Gradle](https://gradle.org/) to manage dependencies. +The Gradle wrapper was included, so you can run Gradle tasks using `gradlew.bat` or `./gradlew` commands. +Useful Gradle tasks and flags: + +- `--continue`: when using this flag, errors will not stop the tasks from running. +- `--daemon`: thanks to this flag, Gradle daemon will be used to run chosen tasks. +- `--offline`: when using this flag, cached dependency archives will be used. +- `--refresh-dependencies`: this flag forces validation of all dependencies. Useful for snapshot versions. +- `android:lint`: performs Android project validation. +- `build`: builds sources and archives of every project. +- `cleanEclipse`: removes Eclipse project data. +- `cleanIdea`: removes IntelliJ project data. +- `clean`: removes `build` folders, which store compiled classes and built archives. +- `eclipse`: generates Eclipse project data. +- `idea`: generates IntelliJ project data. +- `lwjgl3:jar`: builds application's runnable jar, which can be found at `lwjgl3/build/libs`. +- `lwjgl3:run`: starts the application. +- `test`: runs unit tests (if any). + +Note that most tasks that are not specific to a single project can be run with `name:` prefix, where the `name` should be replaced with the ID of a specific project. +For example, `core:clean` removes `build` folder only from the `core` project. diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml new file mode 100644 index 0000000..1a5629c --- /dev/null +++ b/android/AndroidManifest.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + diff --git a/android/build.gradle b/android/build.gradle new file mode 100644 index 0000000..97846ed --- /dev/null +++ b/android/build.gradle @@ -0,0 +1,130 @@ + +buildscript { + repositories { + mavenCentral() + google() + } +} +apply plugin: 'com.android.application' + + +android { + namespace "ru.project.tower" + compileSdk 35 + sourceSets { + main { + manifest.srcFile 'AndroidManifest.xml' + java.setSrcDirs(['src/main/java']) + aidl.setSrcDirs(['src/main/java']) + renderscript.setSrcDirs(['src/main/java']) + res.setSrcDirs(['res']) + assets.setSrcDirs(['../assets']) + jniLibs.setSrcDirs(['libs']) + } + } + packagingOptions { + resources { + excludes += ['META-INF/robovm/ios/robovm.xml', 'META-INF/DEPENDENCIES.txt', 'META-INF/DEPENDENCIES', + 'META-INF/dependencies.txt', '**/*.gwt.xml'] + pickFirsts += ['META-INF/LICENSE.txt', 'META-INF/LICENSE', 'META-INF/license.txt', 'META-INF/LGPL2.1', + 'META-INF/NOTICE.txt', 'META-INF/NOTICE', 'META-INF/notice.txt'] + } + } + defaultConfig { + applicationId 'ru.project.tower' + minSdkVersion 19 + targetSdkVersion 35 + versionCode 1 + versionName "1.0" + multiDexEnabled true + } + compileOptions { + sourceCompatibility "8" + targetCompatibility "8" + coreLibraryDesugaringEnabled true + } + buildTypes { + release { + minifyEnabled true + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +repositories { + // needed for AAPT2, may be needed for other tools + google() +} + +configurations { natives } + +dependencies { + coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4' + implementation "com.badlogicgames.gdx:gdx-backend-android:$gdxVersion" + implementation project(':core') + + natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-arm64-v8a" + natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi-v7a" + natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-x86" + natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-x86_64" + natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-arm64-v8a" + natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi-v7a" + natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86" + natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86_64" + +} + +// Called every time gradle gets executed, takes the native dependencies of +// the natives configuration, and extracts them to the proper libs/ folders +// so they get packed with the APK. +tasks.register('copyAndroidNatives') { + doFirst { + file("libs/armeabi-v7a/").mkdirs() + file("libs/arm64-v8a/").mkdirs() + file("libs/x86_64/").mkdirs() + file("libs/x86/").mkdirs() + + configurations.natives.copy().files.each { jar -> + def outputDir = null + if(jar.name.endsWith("natives-armeabi-v7a.jar")) outputDir = file("libs/armeabi-v7a") + if(jar.name.endsWith("natives-arm64-v8a.jar")) outputDir = file("libs/arm64-v8a") + if(jar.name.endsWith("natives-x86_64.jar")) outputDir = file("libs/x86_64") + if(jar.name.endsWith("natives-x86.jar")) outputDir = file("libs/x86") + if(outputDir != null) { + copy { + from zipTree(jar) + into outputDir + include "*.so" + } + } + } + } +} + +tasks.matching { it.name.contains("merge") && it.name.contains("JniLibFolders") }.configureEach { packageTask -> + packageTask.dependsOn 'copyAndroidNatives' +} + +tasks.register('run', Exec) { + def path + def localProperties = project.file("../local.properties") + if (localProperties.exists()) { + Properties properties = new Properties() + localProperties.withInputStream { instr -> + properties.load(instr) + } + def sdkDir = properties.getProperty('sdk.dir') + if (sdkDir) { + path = sdkDir + } else { + path = "$System.env.ANDROID_SDK_ROOT" + } + } else { + path = "$System.env.ANDROID_SDK_ROOT" + } + + def adb = path + "/platform-tools/adb" + commandLine "$adb", 'shell', 'am', 'start', '-n', 'ru.project.tower/ru.project.tower.android.AndroidLauncher' +} + +eclipse.project.name = appName + "-android" diff --git a/android/ic_launcher-web.png b/android/ic_launcher-web.png new file mode 100644 index 0000000000000000000000000000000000000000..fd910c5b6ce239036141b4c7babddf8daa91981d GIT binary patch literal 39311 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

7&pj_NFPd4NGqajV$^{@p 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�(8u|^fv4Ud z?KQXOB>3a)w0HYkjPDNGts)i|8Ou{;w7&2r`N_ZubM(@_@;CciCYYst=vKDA(}aC7 z7kP;D)V;Sd-f8HDH}O2<`oA@5VG>`pHrlJghrgvf_|PXm2K^8IEU1{Vzp8>fJxAQ0 z6%{kgsv=@$E6y{ktP$3N(8b70jO}6Yqhe+-t~10QV!~#R=Iq_IVWBNEBMUb{BLl=i zK5z6bls=Y@uiR|(v=wIGlkd>yQMY$Rz%;7#ANl>BwA=6)ag_<5>VN9_Q`HNAX=}ko zGs^i%TzD(k_|d1N2PO5XBjg~--sp;Yft6>!ng0O$Nb~v$bom162+rGqv);|-x8!r_ z&&f3-M!B)$Ax8(SG`HCLUj^%@eJU6^Hjwc#griA^-;#_a|F|>DapmlLA7krEH*GoY zFtXEYZgM8^PVyWchVdPz`geR%nePA6pXzQo#n~k|lkB&zbR=|O6f&JPBzK01E+V@~ zoyO2_Dj!WN>(J5yZnf~Nv2}GL^3XEl_*`ROYN#u=WUV_wI%h*+HyHXZ*rFRl@ zR*n;$)nz8;98Apl9XGUzIs2&N#M3(cY0k}@bwTUwv%QJrtOI^~htFL!`UpHr_SfXx zHLs)%#y-b||4M(*+|_0sXEr*2&r84|b^Z^Yf{zdIhrzjD!rVK7jcg3k$rJQpoalqv zE@K@W9c8F}ka^mAiVX|#q+ztBfj!)f&Li5=Mf*c&3o?0f^Sv*$;dLhUWi)6&Ty>V@7)=kOX^I6GI| zQ+?xd_H2lc1BWx)9PwMlPsGHJ1wH1LAikH5ou_QAv)6CO?)DzJ0vJ$B)l7F}0r+uy znz6T_8Xu0&qBDs`@}FpmXhW#jp@o&4>tL^o5d)FcZm*x@A;%^c3gC}iT+^CewXp9b zGF?A82#=xz=>3GMZ}n-tqmuohgA0_C0ld)uQ~Qz?>+JUAb2=&3AAqm$e(;?mqrL|{ zfB*gdmRJ8H811IKGe*Z|+RWazmJEH@Mc;+Us>ycL=AYQS45R&23`Ob&Q)ev~6xZjD67NHqo}ZiB6>2*`BBEq@7K)BZO?Me$`JW zV<=~Al7&*oW-SEv%)PqU@u5q?|F+e^_-)`tGcxJ7XxEvy1G}e;D;Kug^B7!Gj8fdPQ?KQ3qIP05y zuQ4UR%O`$U0>@>`j-yK?X{mCpB=fAK+G6bZ5po9iKr>Q(;^mVqe|Xs_3b1js12^c8 z9Vf!tw5Hl-a)3WFsBO>lBKloZ zme;mkX4BLb=AV?;=x2bY*082?8Cx08**t?h{X88Sn>AEES?acJ)T#1`@K>;FUnTxC zzGpx4Z~t3zrX*;T=t+A*rc0$+L+OD-$Ii6p)PB;RLVHhrCFysnpNB;Zlk7p7hiI?Q zaPpLQ0&o5HPe%8EmLpT;1^zAaOAm2=Yo`C`?dRA1;cb5eTK;ccZ~HeE?+lz;djIlM z%fq4P;UjX_cv1S1?p8&FN1oO8!y{=BlW_kR@n7=uyK~c4+6+^ z;txgeg*C#_S|j3l{f@W0@y|ovE-B`>?7z>m7pz4N4POB-%*YAGWp8gNHzL9t?AVb8 z%4XxE0WU34UZp+!-b39|dfumY8agF_la z@_bkL>VXG&kspY?vw4~I_?AX+ajyqI?xTNpKjDA(?t@2PXc&M|Auy7Etk1AIyuioA zuSYzPm~4B_#NRe9Ppj{+P8HtoX>!>yj_J%RG{Fpe{G9V#Nshl-W8CF@8pt2Jhfl^l zqiXbgqbh^7yo|HMIo)?2oQs_8-RO>1Ry?wy346NXsab;k{9yXIBb+wJ7FKnD>+1VP z;)@l-iOoMY_kZ8=lPEFojOSIYg<^Y)iC=$&_hH^kj#Ql^ifi9XOe+7`vCYIEdd3;? zHEH2j({pO8GO}u`Mo+G-^0V&g(`&0P+nBM_i%xYpvH!va72*=$QPp-EnkSrKf2N!-632|r(6c*yue1eLIvBEz_yy_ zO~g$Hz@<6tHSGb`FmDC$(!Tk)J#!)Wa{>G882&z2P$z>NWEW89X7<@H*k=vwvoY+m zhK*P3ypMf$?9^r90DMh-p3mM{u-o73wD}ly zUIgb<|6b}Ipx*;&mxo`Zj)(GdIa{0ScSUbXXKW*ky*i_x3(n;5-)Q2pRBsRQt~xK# z`~B?ceVlD65!p0M8B8Qr(*b3XYPDgbcNp0h$YnZf6c4|c5*ZFpl;(|YBF&A@MP7ta@)*h0Ec>C7eLD_ZSjoB46`U(+FBfkdyK^>sdC$giJ3BaAn!}#1wD-i8@G;Jq zl*2>&MEN?@Z*srv;d>?LWA>gAeM{^O?HTPI(L2%p+3b_Rd}seBX_yT+_U*qRyPdkz z@trJ#=4l_*CHTUrJNMi9$7;>Kg*Lq7v80~s1Pd$Cd5 zSY*^S?joM0YZmm(xMylL-y4k0Q^Q7hD!98YN<7;mX2aBn$;F0l)jJyb%pzw`Dc_ZE zxF5U3u?t4{kIpiqf6I76w4c=Hcf;3|!&A1iWDd;TXBZ!2S(j^kW`<<0Qob+E7?Ej^ z`;c)?RsJH4%{)6}rP{_5ZcH;{QolxXQ>M-hg44^-&mCcmaec2TGiUlk=a>Jd^`NkJ_7Q+u>X~p4Ue6>`za(=L?I?+Zp^^Vboc(1>Q>#-kh$W+iQqAIQ^l1M-{t zvTY0r`PHsZAFA)AUIl$UM_rom_+uC~+tgl?20G(OZ}?noE|I zy+AU~L$pzJm$_5=$7-I6HMe~!Si5X^OETVE@{a0RJj*F3oki=bGRfG=p*a^E-wDk} z_L4K@kyXq<6Ea#Hd)#WC7rTiqVyqK@p>i0@cA>j7uPqJ6_u&ipB6DlEZ6<@Z9Q7Rp zpB)|5$ssV2_0V2Z`B>PxhF~u){n@TZ)G&Kn^dr z<*sF%&sZ_tW11QVrM+Rt-%$N8+fj@gx=>>Tz>DWhDRD!6=5&;H$1Zb zDCcCe`Tvm{A0?M!%~{gJGdBd|FWzRfB73c~3XMn*_-A6rI0SEm7M92dTIU*>@TfjuhI{o(s`1K2XSJYlVyk$Ro;}Bqhv zX(W43H~Wql;Gw*Q-$`3}C-^wXSDd{B{~O?iUHInY&~^^{MYLJ6&~ES<+0)J&to+qzX9s!^2vq=YT@oBn`bTDs6@{CM;vJH4lMo#)3PYXFm z^1y81@<0k)rT~|uTre59a8GED3%E>V?ClA-w5PzO{UhPx*yD%7#j*Dfhl@em(8nat z3dk4Fn&Rwb!9;wr8+!3kFcCcB%7L1I$?by4=0SPkqvWL~;2^nS5-?fF_oR%}!F)Nd zd`mLY_F*y-XNo27GUw(5ESghb(fpCHaA@*SSUB(*4vS9ONW!B0>(KhM2jKv2*z_q0 zhmVt)=6?#j=w$Aqb;6Aee6LIFne+kNFk}C(@WL3_FXIEXf(QCW%3g_m8oYR``;+gL z|6jr6-2XaE9tI|jl>~v>2H2SnTl~Gr^?m0XY`Yv=VOST33>^rH;))BdBezdlUb!G03UJ#_8 z#JZ;Rb9%0=8tU8m9q2Da-a5fv@q2Bl{W2!$3CVtC=TR;Qo%4$})G)3z#;A2rjxp&t zy3a)CuE|*Ylg#U%KJRyS>=)~h)~z2Pzc2Jn(?tClvTqsq3m6uBF@-X32&Z4!Tn9y7s~oi&a+ z`LD2MTDu(PGkmXmkew^2@1<;d%?SI9H;`s<=DDSj_i+#Nwi=9h_PItBoig5xK9d?} zUdXs7Y&YWgs^{rkcjA2een4pEgjkyk{KwYJeYNYpi660SOY*M}tp9^&8~yI);{&E4 zo__YK7hM6{L@#W$o4;6r|OVlPZPUhjW#hk@iz-*)EZFUyy|5+L>cN zxuce*L$7r|MEc|f?c~C=zKyI!{@cUoc-kX>L?(6U>m=L8sN5~`hjiW%BhcHw!{E;4 z-&42lL5Bu(p#xgjXRNC9vs~tk&&~iRoA7T9?MnQQU0$^MS^Ql@KiaVWCdc!PY!Hm6 z&Kw*MYx1$b5!eWnte4{F*+XZv#Fx^?W~*PfZ7S_o;nqz(v79 zbI{X#`*fe4r-^H5WIXlUl~7<#t<>I?t)&TA^semr$=(Dsp^pZI=K?V@K}>^JFG zozywW`h5#Lza5?^8%T(!pQq+*kt<4e2+8pSzVPs7<{j9(dPKzb|GnH;SBre9arAL_ zL$_^%G+OR-yBg8gA>^aJ}&1;>9;ZA#~b zh6R+T=<9z1e}D}(;g%ctT*AkJjahkwaq0}L*_gb*db%*42L57`YO(nY?T8+IlzmKe zO1fzmI<0If71)`U8%^thc@GXdB|D%g^O)B{XvzgVZQUg+*t!GX?FWDru#d&x-gq$N zn#_Ie6Jisw!@P<<5ro%88M6VskWN?Np4`)gUAg~m&WV7*B=TP=7iAr^WI4Y2>hDF# zcs9?R7#qoc`PM}CC*_GbDA~c<-$uLr;LT0cZ|1jXPtva`hqX)kHHnv>Pv45Uc#8S` zhB>Nh17y0^h=li1zqdD%Q;qnV_DpPOy!Wx^lKVvUo0NZ!`WCi~X6^-&?M}4O1IKmUD{KN;hYJQd63 zNuIdYBdnJ? zg9y15;B zI{vNI!RW2bu^aj6d*G(EQ#dldM|>!IC+p!N9-9B6+(k3tKBwF@$mFsaOu1o1MDS7h zCd%&xR~~?FsC+KtDg&OpxAR9?sW9c-Eq(Kd1g)PC^D<7IZ3Wz?`+m05zShB_Z_(!D znu#yZhJI9Ix2>V?q>Nz4qX}Pj81|a`T*iXiXyaY#ZrEf*H16B^{=4ruKI4i@s(815 z$MAK2kJyDc_PA{PM6nem?6HoVR7ZPB-9}>*|4p^Q%ExWcukBx%NdlrQ6OU2mv9+lJ08K*3pype#aXX? zGmQ1S!DHouQv3SdiC)--9vcEbh)c2WGuAjKGRFCQbmsPJc&p&BnmykJe6o%4J!Onh zeX1V|SvlE96E;naTkW4d?$h z*3JhF?6g*{*PXR;#yP3S&DajPCiNKbAdNRU&LY+X{p6)weW{ICHAeQYbD)KShx9$ou?+s2#J{9I=TRF@fpQuB%d@s59hg@=Q5rlo+_tY0Pr`R zF9neC_DTo;xO*qjoox8nHUZ89EMW8kaSgX2zYzERl4QzT*<1NHq(!nK zrwg1363Yr*$S0yd*Wv&EVR2gl;D@Xh@1`B`Mkjtjz9ti6 zcb(|pp|*-XAbt)y^9pqCN$fHY@{Ha=Tr}}^#mqTCJPkRkOBAo2OH2$jre&d7+84ks zQ;J^SNxXD2CPrft?&vIc0<^4oq;ZvKbckG!CUg88a}gY_;r!^#GQiM#9u%4^=SeNC7UH|Cl-ly(7ohFrmi{gbA^1pZ?XM-<^KZz%PGnO{M6L+wF(%+h2 z8_E- zRu;mSJa0Mn8RXa!4?2e0@#RE!BB!@{J;5sB?ixPIUsSK>XglXjt63Y|vp;cLrtB+cK8QvcFmm3w|kjn0sq5u6-gJnWO=^lsjYD z$mwNO?zLfU5{n(bgmS!@p3)^b4o{) zPwX>GqD}69Uwq@NAkTkVyp=e7lH9BZM@se)lUoR%ejGeGPM&CsdKPtVs<>%UnD3Q* zeqlf39ov^*E=McKhc7UMI(LBXhy zyXo8P`I#?wrME3ned(;mC5P7<_jIjoa({oZXouSRkeI4AuaUQf@u|)s+E$&xvj4RB z8R+Bp(~;HD6`)!1Ex;o=Z|KSTX7}{I=V)JW^b3ZYr}vqRA$Gyt(WcFee;Kj)jG>5} zfid=_=B<3xntK7?<$KzF))d|ht8(;cn$g_yFfSN z$u_6;bVHZx(iszQSIl%dzdOGZ-1FWuPJPWKm(OdO*FCST&E+E)bWI`$DK?oTtYlks z#%f}FL$9&n_1fCb@ij{XFN1plzCVT-3;Hev&bic;j-fg3#$QWwRJk@{%mv$%&{vKB z*|(iMW2tK?o-k0CHBQ!j?+3x?8`vb^yYuT^DR?yb1ZovExj&bHMy7b9|pQRavLpq}Z45 zGy1f~P4I%G%?G(5_BdtTj7xWD+%Z$O+X;c!Z9kpKu|nphJQ?IUiOGkj%4@_Q`cwZ7 z@<6nfq062m7g`9KcKb-9>NXd7=*ejpLa(*$Dzx=JcrQ7`gNzhfYDA9EhU`V`qqypA zXHO>U+)DgnA+iRvXGm;eIe4l&7EXH)E>$z0;qSF3$+h?w*86MBFZJA1^OwxHn`aj5 z*upckiM%e@7RsRo!`u6>^e@~^jzRlHa){s{ycG@z*HdN2)bR@HZ!2RSx|^Yv=UnDr1`KQYY#K>keSWKc zGdge?Fmx@czQ2~|EZ%EPH1>L)9@Ds}g0(!;cva>@VB60gPM$Lqv1gQTLH_K}8}7kt zt15ujtbo=?&Q;u&V3EOlKQcb=BfE0_m6zkg5r7|MWI&&*VjHjl^&CaUQ{JqtAL|w;A6j( z93F;EN1p3+eArX(;pl`em^NOyVlJLqL*Iy+s&3xTW*(yLH~O8t!Xa{kR@93ACv$@0 z>&?89IYE_ISobt2ZsUps?tCwSI}avsXFE^DCrO4-?Cvo>tL%4P-VMzas$6S7X70)> zyk@_XD>NgKS2&p~lz62?uF%1}!k5h%!$n~S|`}lqt-z&}vww6PmbcXf7y~q-2*=H57-pH&a^{2jY ze+O|pkJ$O`zCaAm7w&K1QxO;ut^917@;|f~|NMohwTNM|a;?MF^7i&4>2_-UP3HZ&L7VG~_86wE&iZ|t9Dv=&UkXOlhRgQjiC zAnynF3Kp2&H9_8W^Z#MaF$`!+l8#_+AJ|*F?Y;HI=!s=I7kAEZdJmb~$x#+N*=c6= zZ+1gpEbOh4yFKuAFZ?|nKA(ZyJvw>~G^d&NbY_VRY2OE}d%7)-j zHTv-DW*?H*7oJRnt!@_fy7li`H@{BXd-K z)&rEQ_)Fpa{UeRXxA3&wZB_Q&m;9CtiH!WJYWL*Ia&WgB`*+O!wZ7=)ul2<~ z^Z6(`N6Yuf9}`E;>vK;H?7d=1G&=ikREi1Q-#y-rfwS*_&UIoo6?e9^FdXja|Hp0n zpqsP7``MIxt035V8Ff~gG;*$Y(6M7PFVu^c0K7A#X>BDSRA$c!=+9 z*WCN6ao3og#)zxJYi3)1;kX!Ub|ehzFjcIqz5c`l<^@r(uB-+6$T z#sg{hzA9ODTp|upWmM-4o(D{$nD6V(9~pVIcUCYSA?8ncCFe1(?4^;OV(@SmWw$b? z7s1_XzTZMD<``l;-=vS@v_Fovj}qx;q?fmJ1CDiw>#`v!A#F>S4@ zBsN#`sikfCxhG>PlXZJ23#~7vopleVZMDm`QT7qmEi? z9ygF*`(AkF{qRZU=2Y&^m;Q=8Guy@e$$!OM{43#=H}jdpXEdKq*5fVKR6O%4cxHiX zbkE!;wvy|9OwR?++y}4B=(&-6+lqZ%yZ>Hz=2&9+9iA!J?<4PaO@`x>9^|QaN8zLU z;I$p-IJ8?&OfzvQ?%Isk62 z*uy=(=R>C(c)n zTxQ39evdcCbH80yNAt`{JHI_~{LXUdc(Y-Jb&o&}wt-n^xx%YWSI0NDS4VFM8j+>s z&A5kg{4-;~h7;axm>s?xXc7H&xzl3%sjqu6vw_!5jL!$mrOP${xt}u-Czp@oGlB2f zsAYY!xj8=QPVDMQ_*3%UNaaV74?6b6?{>3KWoOPkcD{YCtN2U#?1|6TvL}P+vnr>v z`P@e?j@-q&oXnJWKbsc$7Vnx;-`z4cvYvOHT!ScEAN4tGw#Np-lB+GxsDepI@eYT($8z1{!b%H$KoyC1JiS=k> zPR`m+U~Okb(x}f}Re91`#Ur(5D&zQ3WZP@D-6_)|{98ns7FV!U<+H3l;jYOSM)ob-gDrk5&qrqjTUYYjg^yVVa6?b3d_lG@+ABcc z4e`DDhs?VWw9~}4c+CGQ!&y>%h zLsNWNjz5UwhoLi}!Q89{c_Ql2X{590DOzv?_|E;LJr7|2*|#kF=_9OZJ+Q`R(Qk5$DzJxr|!H2JENn&9NFBKUj$xM{H1^4vHRQd=kPrGgSPymr}`K6 z{G=`aVV>Q8AI$fYm-EdX!TbiE$HV+4Kj&LJ`OWi<`^a%Zj?Ug)!Te)9qvYw#n6cp} zels&xXO4?K$JrzMAn(|Zg89X2=c!-mY+{0ACH-RQ610a=8TJCJS)tzFPgo0Os2=2 zeo;HWGx)yToOY3yy1pq^z(YIM+3A6F+O*KmN7KG#W&|?mkNc_vUi#L(F&_FRw`#yb ze$oH>Pw%l~uWy33+2<7vxoa)Td#S7P>9mzWyQ9?yeW#AIf!}-hXuK9<(RjU#P2){p zJT9}I@n$R@Z`X@5-qDLEWU9V1=1G~Ft97=WovZPmohg`D{?WwL z@|^1lRPan+oSkXS^9Hu)-F)uFk*=E0T$V7mC7fMAqr2YfFR8~Cq4iyW%;g(cWBK+E z?&mh_yV_GWJ+b%m#GcK_V3JoJWLDKYMl zJ?<=f+%~VF?VcG~sv8D@Vy$vh6>#}uVpJ9H~&-ma<8bjC8=k7>|%f*dbTc`Qf1<4hVKF*7_k z2KfRHU8_$z=hS%QcgY!|cm~;LWW#P|&2*Mx-NW4kc6`0nBibt7rZF^&ZYS=vUIwiY z46wiS)=|~?dqIdF&Xc2?!wq@eRCD?bZlRaeEi|fBhX9J&`$^Rxqg*7z3UzotAi)J zgFc|V`zPIL*j+}T3%hL@S#k5?Y2!IxaA2#mnkmC!yVqho+6Q`On^StEV+h`o#r&Kb zPQi`?o$lG^&VE|(67Te3GknP2BTk#c;pKrBH}k(_8nx9#U5zyr0w->n@899RAV!p;w{I$tfb8Z!1j!nu({C#$7!8++5 z2J*Y&hso!&Acu84%=cW*UsXrtPmuHdC+^axr^&~MIr}mkJNRMbZ_TX;JV?%Ma}p26 z8ogb}<(|I}Ml~<(ZH=!E8&+cNTdj>{2gi?Yd(}7Ahy=2fE7;Rx(cfWcte1Azq_nFX z3W8ZMfn)oTBR!m5#u9CNY5OQPChi>x7whh0@Tvs7GBtnhMuXPr%r352+u>tQT?-Q# z#Z0V4a?ITce3f1xSo(pZ&TN2TEEjyOc1^Y0Zey*n=>_f_h28hP{u23o%f_d3HT)w3 z|ISlut6XJz{sj2`J@4v2AH088V_=;hokuW_N=`Vzea*mN3Tp}df$t8*Maf4;uP%%R zkM-}hXiw{=y5FQdy-(uivY!4D;bSxVPXDvUPia1$Q(rj<&u9s<_R3Y=M*VN_)Ocm1 zeJv}&fT=7Gf1^pfUettUSZdRRw&k6`RKLRoiR-7d5yIy zDh+O%#yGx-4OjJiqs%_FQ-H4|z78e3mx+I1!zEu+&gSe5&EQ*zb8YPlt=Gj`#{oES zCj{e5#y&JLAHme=Z)(pC$Un*UrqZYSz9uxdkEPYy?RRQhQ~Y+$vTD5B+V}uy1kom z`#${YLHcevLf?Y9_BR64-churcY?p({e#=s>q@+X4#q@NI{82Mt&ImQY-FOb=nO4U z+D3+o6_68L@*HP%u{E4CtiT3TX-*8MSNZ#dPY+YB8r+w?b->1dI;<#Tk?4s&ewd{&(K>{Vo~%=A6NQEWdz8hz5QXzeuGMwZLx}zlePV zzp!bB0nJG8i(p%Hza7Ik1W!AOTg`?3i4JH?isvk#j(q5v z6SCT~z}Uq(h4lX?;jKR>UwRvQrs@IzA!qmUGf@3(w^1e7cDjP6j&Rmoj-FZOGEP-+ zZYE!Q$40dbKD!itEC2GJ+q$GlKZ@u1Sh(4Ky}*rU67Cwik1<=f06*-*wb1H?Il*<< zqD!nRm)h}b;AY9>ImE5uw;x~Kyp!=))sjC(zu#X?F2FIsbmSRe%AQdf!8EA3<+xut zLV3v-3!rhx8qk2#VcUeCWFasTEG_o!$IZL+3^1RW0`m|s&jIFY?@TaPec)c@VVr_{ zIeNY`PR~w1>tDgX?F6oxv;0mCH3NzkUvp~ zF%*!0>DHR0?2L~vGUK0ri@yW1rDbM?B{OT!43*&rWoF6jw!9AQuOV+%XeROpFs#0N z1m_aM*E7ezCuMx;743|%f;}WTUO9Hew=ZUV6%XO7$9F$8?m6TY{lA%~U?=*)d*s`! zaDb1_jptD3Hey(IjWl{^0|V_#2j84MZ?G=pzKDguM~~n@zv2nij92j^qQ&|ynL@m; z92f|8ioIUVd%;laSgy6>m~19}2*>2}rGE6kc)G@{b_V2aBP(3MnX6!W#EoAZyrcZQ z5z&v*M^3;`6-OieKx393AQ-7%^=C|HZNN+Qr+$)g@D831#^5JmEF4JIEdxHOb+t~Z z^>rVe!y7MXIO{Y!&S+wCLI2H{PKIv7Pt+M+_LJyio~B@w{EqoH zELdml9qnz&iAjA-^71V3Cx>;&Mn)@VPIauY^cL|}>1Fk-nV(#`+#8lJc&75v&hfCGAw?tV7xK^fgKckjq0eUrCZi|p&%C5B|73<8 zn^m{Q-!~aMgdGp{TInKkVP92n4LPMbW7DiSPi;6wz;h>rQYkyX7kr&>p^Lzg} z!40xE`wdP)A3-X7OpZ@u&oC~h6^glnFpzv4XnjSN?KANONm8z{*xN3J@FJVkpoE-O49SU*i! z)0R`l$CfA;FgnsJ?6HO5^W*&Y3eO45WkOobD%mIYLO&)^W-Q;8R}UYj_zw81V5D4s z*Ky7vKK606{Sf(L;Y%NR7s1i~UE3;W?_Bl#JNw?QoYu6ysBlGu`y_j?3CQLcyR2|U z;;!=a4x{GUi2MOY8{V*d3zs1;YAv#ZD|)w5zJhk-H&Q`6-IU|*+75%VJh9WK z-djW+>H8|H_Eok4ywW-KZ06svKPw`+o;hq7V>&A1)#U2N zhVf;iw}w71=X)mQ4)|YeEc;9Uld1J|?>e^S4&WS?oa{4Q5#v$Q}=2mG_jIA%xgT)bA35E z`|;6Ixg+>MsZ2Ld>~6(;Ul&Z>3)hAc`i?HT6L8B zu5DWkFw#ENe=+{!Ol4cQ+v=!4vhVGq_#^piuZ@TwYOM7Wn^yUM&iweloBE;4`_;Z~fIDjlZrsH|j8}^%HI~t%bm6BvltzilI*)&Ri6yQLh~BobMRN@7kvEOPA$LtHa_qdVGgXd$`}V zoKO0N!Dz_LAeXn}-*%iihVWn8r8&v(4V+Z|)*{Be9N1m~Y%{T=_<(Icu)Ue_e3wsU zZhK<`pEt&Z8`IBfXne$`Um3O!-H*ZFW5A@xo!KF}C10)!jnViZjET?%)o}orVtb72OVI4c_`Z&E^8zn5idLo8o8yv?-Pn#o!=Y7z#fz)Ms~UjE+&h1| zKGSGk)j)3XhErt+bzea>|Jy!)yt{nk*;iNce$79JU)=-W^mE^+cuEC6w|@A07=FOr z<>5+vFa4*sge(2+jXpl`8(Ur%oLQ?C^}w=-5AsLc8sX?JLGJO*<>TU$F((+ULxyNZ zHq!X&7@NjX!P=pZ27IiQpSAL`PWABXdvl*>jh=6m55(p4vB$Jl+zY>|Ar zkvFQ%G4@>!m$46y<8yr$<@HYZe+=Bv9fJ+vzkK=|68Nuv8^HgDpX=_1^bYxI3;*Tw z&Tp-I>=xEazML1(_t<9~{_4JCZQnP{G2w{sWn$Zmj=8SUoKd?w-ej%pxTFOBzsy=S zQEngjZ%|hFpISHFNDuE}t#33kZ2WHk{~N&n2Jl_;9S#0JVrF#c_c8Xo#;f(zT58?2 zo>wrgO4g6Pv_k7w$@&$5-xdDn8$-G6(4o3UXixkyKH5J`&@suQUDzEg?l|gv#mv(C z=YSFAY#QO6+q6o0n_y$@m%eQv3z$7eMscqa`?2D&Z~xNsmB-$Wrv3iy<&VAowzcs& za^hcm&`PUow9>pg(}78~c~h@^`Zx=wZbnDO!F^}(40|Z+r>uXscPF&3!$AH}|HE@I z$X>}gM~n2vPR1)4cK<8p_KE0cmhsj$$yu9N+dA7uq5RcO-W8P(+IBL%b7Fuu|H>p4 zmXY-!bC>O=9hixi=)3e5*=Mk=wGKbqw6JHyp-ZKl7ZP`h51j5E#vaKS@Sl6R6rI(| zG8RcLgRbZ6|7>9237j;i9P}qsI+TIEBuD2vMsES~f}b_XHHpnktjX}X%Qhgpip4x+ z-`P(a6HMp6Gr`5N$&8OZ$=qwm^+n(7UU5AjKfd|%@y}1{n#1R#_~E``IYv6^L%uQ( z@s!RoiLoxU`*m~XXxjPfllGZpZl9B!fpDjDOCS9&P~M1y{YLq-+8B>=6YH*pWV~={ zUJqc=>cO8RaOBQ|(31}DsUpsJ0^z~m=rSq4bIOZs{7^mglvePvvQs&#fUk$K`p`|$ zQ}fWRV>(Ola(_`V_!l&NVc&${qB>%*RaXByc;?(wVo*1i5AEhl|53ZLKa_zhz)|fD z+%=NJS`6MhGI$T=hc~;hDZ7E`V6NQ>m*EeI|0MUla(+94vs=N@6^H}NKXLYS*Lm32 z-1ugLPt7*&%APxYz`oc9T!oKL9NqL-=RqfL(!bj8$;ZJwM<1b{d zLi;-Dvx7WLvujKHWREh~FOn&gv|1|fTe zax~Sgw$G^JW#IV|`q6ylYbHB<593h|0{BsukFzM9b0zPcs|#RvQa;w75}turSLd@AYzt_1yRxI^wZa-)IQO?*y z-e6pOGvs0qz&kwHwUsl>Pp$!zGt|JydshYSdvv{QA)H&pWe>scvnLnak^S5|!8zYw z%31LmYy;2JMzYUk?6;uoX7GYSZ0NFW+kH|_@etSZzhs9x?uys<5bevpVA=cD8FT7+ za1Q6HDj%X>on!ofbGTcnqdNuGF#a{rVCg!`(K{J`RRFu*B6x^@$=IvcP%a-k@nGAN zhn%$qIct+&rsgDga8@4hPB9{r=NS>zEifnd90pJR7d8^DMbdwxcB)ar9robk$NO+> zppB}roM(~G_aropQ=ZoDF^1h&D`&H>j^mz6Xh#k>r1^P>50_1H6R}Daz@(M)+WH~u zIoV#%9Kjc#j6(d?H>AKdQ~&2JB9r3yg^3ku~PS_(*8X6+^~5WypBg=bK!p|94Sg^I~A`@{40cKN#7LVbqN0v*<>x|FW;0Y zw7ZD&W#7mxt9;?u`ck*mqxC6ceXV=yR{1KL?RUr!B`2>pBKco2UiN{X-K^OkjJ_vj zD?7QG_cs_XYaKtt7oZ#82kZ0#5nKcFt+O1&i1u5Au;Wn#>0v zI=G+ndHHooR*+w@$^Lu?Spqp?;67LRfxVBsrnwPoV)JPWzYc7gF{?K-B3pt%-V~#T z979&kk|`l03eDmynGbhD9!WP^J0}_OF9FBptW`I@@p@N>4Ao7J!uP?2Ddk4wtADRt zYLjDi@I`}j-KoEHlHOz=!4_|wSH7a6Uan|Pt?4=)WHeS}6NQTzhYF)2X5?8ImPo&#G?E35xi_GjD$LYz_H_mtI`YChWf6ql)cxnUc0I5L(W1j z>uraZ{wwY7VoyJeubuW+Gi^-k+;^7pcXwqQ@$M6@sM?OJZJS1@?VDB!ue#WJ`s`oB?e-Ue8PBQj>hwq|4 z!*N^xSM%SO*n|5g7<=#HdsjB_WzWY3<~XfqHFBKZc?4JZi{Rb|%zjTlick1CwCm|* zrB9PHByV^hf0t-;5q&&B{Ym&s_D|H^xcGrxdk?JpP@HN4cH5}ytT}#q~;L>CdS@k-`W3<<*vBJ@+lv|eXWkq+zrSY7349q7F$;zzNo(O z2(%x*U%4B&cPnogF?9F{qbp(;g)bfj2H3`sXS_XiPeR?tluGi*Sf8+@S=)&HUW>eclz@#WxT?% zJ6Xq0V4b8DhiO-IdIEkvHPC16mkr>p4_VjQ(}TQO>zsq{rq0!bFTbTd@o9aZEL}4} z%T?|LeD9LKwRiPSbesJi;2bXgGyZqhaB|OPVt7AvFN^*b9G31oz}t~+w0?uMWqRxq z=2QbM6OHPmU(uYT|HUQDts8hA26m;`gTSE@$u6E-h!5p`edWRp*oU#ZczY_?_nkH# z)1T$|ehiG4cBj#n=5ztiZ@~9=O(H(BIV~c)Pl(*$N9(sJ?&h&AN2BZgg%_yJ%5%(n z@I4X@7S0N;*~kM~F*oOv8t*{+33zOHsek@YY5&Mi3Zv>nb?^Cb2Iszmb?e<8?lvwu z7zT&tu|MdZO^M?oSp2cE@%P%M92>lW8KIg=l<4_8_K}T zLD)I^vTRzC2h>-RZ|+BDqHZ955&rU5EN5Ir@Xjy7GcP61+u{3t&=$!$f`R;J9XL!v zCp5NOrR1H}I@xe?^!;udrzf$d&hKBt7h7D8zPtdqy$XCwf$y1e@kwS=3`Oc)6x&}i zw>O{Se&7Bdub0hIzU=a?oxywrFS7{zyu^4Mn`ucW`z5&-?6$C($frs&dO2g1O;G3A zlD|`P9IjwIYixYV4ir}`igddshAYUI5hSmTC)fD@xO?;XsOo$F|C||?GYLD{STqS} zof%xJtf^2YiAxqmh180*mw;U+iCR&s#EMCXZ3lu&kh*}k1ne?1Hr{G+Nf!;!_6F15 ztD?5G_g)jUw+XSeC`tyQ`95Fg%ppSr?DyOL?(gya{xOd;=X1{aEbq_z^WH!2Pp!du z)ekZT#X7k*xsS_rdc3hLXDoj9=L{W-_CMNV$zd!RCm)OK^6psV{~J1%9LCan;XTY1 zIl45CMUUT9t=u1`LB2qv_T=LjjH?q~3MUQZuA(zPO)QvmKFF=idpoe~vFD0hO28z- zPxvKR9~*Obg8JU_9j%YG@;BG_zp<8HwAa#M>$q#_LfZVewY2y*|8r~UO7x%q)3vnz z-_Vi%cWKPerymzC1N7tL;4*rOLq#(4hus9kPwR|4A{I=nQR-unxqxBdn35b_Q%s1k%9svTC%~ ztq{2_f(#y*>ew>YAd^MtO9ymzFZDV0>&#BUC#TI!0}a-ZYB zNwtr4jWM258?ra}v3t#_G@50vRvG>1dlT6!cBRp*eSNai4AA!?%2a=tItTla6_@Q! zJW{qh{E*0X`YyTem$CZsAuFa7`M-7tvV?_=t$})T76rRWKUBo81eH!mUSK5?2Tz$~{gD}nPD~6wHeg#X#CatC4 zyTJp+3CrH5KF`J%ELy4DK*-z3F3x=G8`ZUye7il!OBOO4If7SqfoBnN=)3q?j6F@b zraD5*OAr0-MOMTAl01uJ@QhO1243vgz@yl%^uF3qu0`<&?YY!h9AEqO@%gdzZ^=K- zdNAWpu%<*;C67GLf1i=n)N`=z$$V^G!l54e8f6|NmkD3=eLXx_wp5LGD{=NVZWCh` z=X-2y`1Ue7RcAJJII^JjIcCSd$MaXTkEnX?JdO2vk5S+}pBR6XXR={$<*G6_SGk+p z+VNBUjJ@wp9JBJ%_{ptX#W^Mc&M^U2c5dCg%Fq$n$#teqMmst1;dOAaBUZl7sxjCj zk`bQ=Y?iO^AZIyw@73P>_&cFE@>Ynl0c*mGi`Mh;k(a|xyMIYslO@+NpOKE2& z?U)tqv@tHIZQpe-cXvsqL+kh3{>`DH| z=8Jso#QvAiANRlDZP15>lnEA+VPfQQ)3^fnk%QxO=D%Ure6wNad_VIQxCI@%{_gqt z_3P*Rdz{?h&Y76b-Y7PaBF}q~o3+t0LwU4r> zt#>+hEUmdb=*I48j31cJ#E)o^GbjvPq$B9LV>`@>=g^Mk((SKHLmDJUlcy{}{l}gq zjz6u@p(XfGgSRpU#q(YFE7O)4Qs>5(7mCRjKI@qFojoA#9J_P!!HeumWL{EZ;@$H* zv`4uEc*blRhwl}5Y2Jw)u=Sv$=Mr(2y&-zeoJN^X;wNjmp+&&$#n-T(%JyUbXYYaR zDC&cF<+E?GKMER@1y0l_=V1p|&ChpVgbp(g(6rgR$&-?Cl@UX)vSBW`m9PfXFX_p$ zWvD&r2HKA}7@Z7nlz+oQFB8tx+d3XN!&NvVyXTMS)ZKHK7+?L6 z@h<0{{hBWpU?Y-ESoWj<*JsFYdInef8M>}B{)zVZS22EMmhF=me`Rv~`QYG}7`yVw z&IJdfMfO=+@c_8E@3HD9Cw{?*rJE%$)iGw_-=mB>b`fX9B+JOLS)sQ5*b#1~&g0=; zE%ghAp9O{*w~Ko_S^3dOp> z%?FsT9MOR~F{0RL#?sr~h%o%j{;z}fu&DRcKb#(J2Tv!6h#e!>;_zIc!| zREJHw9a%99J`pRiz2{N0xtE_}9xURo4$mcb6=P@reNgrZGhKcdZ_qHU)}CUcIj`Z~ z`FRcZ@VlGedVWp(*6~}*FT(Ge{Jz2O>-_HG*T`=TzlQl;-f!~rv?7xo z!r*4lhelgHxckh%4?LJae!_n`TkB=&HJtwk&zC+f8aju0mW;x>w&y)+(?-!x`LY}u zsd05P9`Sn7Ox8}Y9XikgOjN$tn-d(v+EMvy)Tg{lqMPmHIyau}x}l4lw?o@->@-e0 zs`Gc$=d_U>e-)dQ>H<$@^+LOkrQ1&YhC{cr<8j6({L|cM?qZGq)Gyf&*^0F@DagDw zr_$|1UoHX%#0!5J6;8;PExIjUqJDR+X_(KN;oHpkXTWnkzm0XHc!c*~ICkAEPtx5G z_#5FoSoo)Nrfoj*C+Dlue{?5P=L{WluC4r*#9H2$KhJ8;W9&KyS8J&f+9VqWYwOsv zVDk-Za>P4=i#zT4k$yAr=pMk3k^7p~;jy?rXlwW%@8`I`y`LJ_k*^KLP|aaJMO)nX zs61fetlgn9lt(dqLGjf>Xj}#|#Z2ZQ%sfPg8FO@Qt&yCEJZ!a^gUYML`_MBfA36tm z-<^Z36U>3=r07!L-6XO z^5Ne3w(Jq+=d$?Sz;w?`a|2;L0a&pCQTGvE}Kbx=ZEJHFWG8ecasKg3sK=J8Q(Tcvp{K z?|68Z+W*wK$v;v5#V3hdvbYY#JA7^D8nhE4)KnAlerfjR3_)Y zWXSxt+w@bmCo?EG{zLE}=O`Yqc11(~FT(@t|2;g=p7m5({y(;+{vU+p|1WEb{IyBi z`gg6V|C{=btY^p6`=O;CezL>r+;Hrh71o9M_|G}BxG+>(VmNjZ(N;%}8I;RJ_awhq z7eKd%AIm$il~lNNZ>ZdIBK{#C;PLoh7ww2%N4YxuBLm%I;cKBJ&xj7;8F|oM`gV-G zRC*kqA>G;G8Iq@+yb>R2|0Mh(lEN<}Cxs`3YS(>w+>$En&^G+Y`4~vtxFP&KBlbu5 zhhsBv&I&(B3__}%DS3{%y{|(yVEKv%28@`_f)Si$GcvA%b|U{_&rEc<39Y-_w%E<=AIeSN7o*8CHk`Dxen@(t;U7*&^`**qVG1|CgF{| zyxoHS_R!D0$$nzHu<`OEeZ}@dU)$8qQQJteua1p-(6+RmzRLFC#^qs4{-M@bKC zJ7gy}h?AHY&qp3yo_g;OB|e{ee`YALH1+U~Klu^{#S5@MTD?=Qy=k$PVdN}QW|4{o28dVdXiPU?MSC~*+RUh@;X;?UCY_=ic1fYXS5QV!LnZB zyt%GppMLHUbN}vY|GX~dnw)Ipp(Ey=_qy5lwwC9L9V(^FBEIR3GXFe3dv|jA{xq}V zP&=`EsyCo-$oIh>o>|M@H&(JfD)v#Q>dG}e`}668{82&bP<{HJ#Ux@z;iDOg$wgSVw!0=6ACtQtlE`+}6d4FKGVDHkEeBK>sJdS#}d(eX>I zhhueTt%t9VF*X8c^r4B+Od}p=-7tT$>&%kv<9?ot-W^~bb*;qKbBgAgEBLZeHgWkP zBtN_Pl}Nr2XV|xE8kFbp3f95+!rFZ7rB72|&wJ*RRkBNe z=3DQUeC7}D>O1R>lFeyHitevCQqqJSro#0f$!<^uY~JS@E^>4!JHJyAd=UF_7`jN_ z=%(;R+<&4tcHQF_#H#1OyV!%G9LCqvP7VLd^v)-|?19Z}a{YPLbBN`{rx$*FSga6U z9{wd~VE*+Y`NY!0zcktue;4`h+c$jczi)rnM~uoW;?J#?H(tgz{O)d@3r~z<@4`3U zl^v}ZSZn^SW_(@P=;Zs8??nCQ{I&Q6lpBWzW(f~I_^jjrC%1O0{kH|aB|BLDiTT%y z`B!Dyd>H)ySUZ>KNhP>5)ZXRNe8X<DuO8yWLORXY5mTpQXw)sq#Vx>r%3U#$)3I z*9_={XprOpbBf|dGUC1$9Dfrua<-2>eVJh+kx^nKau1J;<<7(JwBBgTt@IRRRH`g3 zmU}s6Kcy_sTTtmSY@3iD9MRZ1pkcdd_iyn{-SG=^qiD{SP-ws3XjvR-kFfW=eu8Ix zTEKga(Pj-B5zD<1-)OS^+!p>P+ZA0A{#v}Rcho;Uw|Lh|c}IRw(d1OxlL7y?b%8Ls zN0A)_gG@7&cz5@}gUg{0y081Rk@z$Bx2y;yvS>s8h2>Y`e}HD_`K|XDZFMU=1(lyN zj=ZJsu1jv|oF3yatUy$$LO1|?^V*sZCo_H) zu~B*CPIdj6@`F7v!bq&Ayb`}%C4H&iX*PG0dtLlu8hxf;i{zVFN&H&~U8v`b!dU$p zkIhf2&kn`(&fCQ3|HMH-db^I?! zMyfGSJ+GX5zj7r|=EzN_oEM}_>&QZvjocJ!6a4TO2e(Y~6hy!|`0++;khASR34Xvh z@?5A5U!CpyIbol!q)*#Y`UJin?Gyh$(kIG}+ox?QecDT(!0W@z`?n^upLUy3aQ`Qa zgy8AU%MM$2aL&xO=cLh*30B*4GI%D$;jav5-^>X7go824@)2sC%Gad5^ul`s`n4P% zT1>P9zhKtkx;@a!{gop^v3~L(JU{U1*l)=nlKsp>ueb1y#ktjb{<}riX6rlkn*#Ti z%-fDFbnP%>R=~J#aaC3evAw>&QOFBE*9HRma)d}!~U zMPGB+_cNXEwgKN|@Q^g*#4YLU;Ui}maNF|TY z;1D`%TjW${507Z6pJ(fMFP;40KL7{Ht7^zSJ*v~rQ^c8#C9Ja&&UB0Ojx}8JdRnKg z6LN;*3h0h_-MQ5J0A~tO*Lc}X6bDOeX2nCSRh^sMJL0qHa|?OKxkBu}sJM%|{(x+x z{RSp6BF^4O&VcDqY@~Q4eT3JA;B$9jJ9FR7hkv>6E=zqk4H*ErN@IJF^L0eq75hm( zxuC`-7$`rJ`Wjjqn?I^*hIH08#xXvE9p?TOEPTb^JqX*+Ez1|{mv?aw#^9rY8ojVQ5=>)Xf`e&}r<^{*XW z*pI&6DIK4<*ZooEXB|141H(dzGI({F^li#}=wCIm)X}*}&QqBAQO+29e)K)_Q)vnx zbA$ElahSxul^*DU%JPl&1>+h)QsszV3UWSoOBTSPf;@XN3|EfDgCPH?8X)Y$Ao`=uVyQ*}?zbGsySF{~oSs z~S$O0wd}6dOeg6nCj-$U+&1l4Z5XS1OYZ@4o*Y z&)8oK-B5o0$?*@lcX>x{!^Qg_rQZ=`tiM2GN|3W2LdMw#Ee+HED&(T;<`l*jjV|h6 zON`|W(}u+!Gt--*;w9#orqR&HF#qr6YN7YmaQ(_0Z|p3tI>R@dWhDHRUw^hqOk5i0 z)f074OA#Gal3CXg~e(2ozGsJ=@UbY_isqDqnzIGSx4>0GIX_~W)cn|ofxRr-k z3tO%>+6?A!6nm$1E>whj2L`I!d1pA!h;Jp%(t$%;vhD}qO&0Wi5`89yB>o`fHjf0> z?K_b_iwX-Qms;8*`3dIt?4p>#yyg>c`UvleR%=aZFUtAeoF+fGvNXMAaX<9?L-tx~ zp1O+_Ln~c6Cw@2du6?XAI{|;h#uUui#U51Tg>Q{E=B)5eYU<)$&GY-j(yga{(fMg! za;2Z4aeJC2AKSF^jQRz4={f7SdpdYZKkf4A^$Q}02gnyrt{h+lzF(2Qv}b;IE_^c= z867#Tdt&_p6JBA!D{82N_#5y;_%$hhGxvk|apnF1`%}9nwl6rq^Qs{BZ2I;AcqCqv z&i8r1p%DCD%6Ec~aBbf?B}ZYjgz_%>r@eXI)YFChWy^|F>K9xCe6{B@&pV~FkoQWs zs_jY0HHwd&pX`hJ<+01A#+UGoBf}^bX>z=nce=ert=-sq1YhyO+-r>j+E~<;UBBR~ z%zFsgggre+pOcsC!4~MJJukbQ?}!uJXs9gZy)W?|`sM6H_L$i>3Emy}N^z_iKBT;$ zH?J{X(z+p$UqZB_j&tkQyurCX&@0gu1NyNAT|u}i{Oo~_iq^%vj% z596tVPbrU;%hRBb6;-wzLEb|6nRviZK1J@Q4DqNQueZ4nKJ_WaFpaBeTFnt~nOMW- zu8|{J>v`wxZ#w*HuXkkY1H=bz@tA!Fph?s4H%2~D6kB(8acn*GUG(gpU?}!5>sWN{ zNA$_BJ^1jaFudxw$UNd#pH1?wG@glXE#vt|fPx$y^(5$~W*&VQLTi#o*% zWH*`4H|oi(WY~g;^UKLRe!x~kDc@L3FHQH?DP)YyLh(;ozW!UG4}_E*PM)8U(fssHs0iS z`X;xkaQ|9xs(y@k$JC=dQ)AuoIfrL1WXzFe@J#O8PZfW3@*eDGExCOXe-u2j;gM{# zNtUAn+2zF3Q~rme<%}Wuepj+=(_Hph*k#%A=P7ge>*RP(JG{Z(U!D`!JI|&(>*iUc zxUfL{#1HT7W1QjB;lF1UALT7S<^5Ft>mRwX>D3YUH}x+mjxB))_uyX;KmLGqI$Ah& z8McF6@M387o5hZ8`(H)(vyIvBCHe7dJB{W&@Z;ZQ7<0CHCN_2PzGRUEG%HGb^^!mM zzWW^MUyK1igZQq8v&Os5sb8=~@4&NHc&0RU&){9!X<%$NZ=S(kT0IxfhM#MEE-x?n za9~ykG%#_Q(Y70Ud6aL%&&A(uz70Qf`Sxn+N#)yL=ibI`&3nU@`!PmTya&JP%6547 zLHf#h*u*7Ig^w4Ka}jg0Vht;sZp zSG&*aDXa8R#ysq0emH}}{V}}K9{l(YXDl_ zw9g#Z^bWFdd1yrJa>~lc;n~FX2mBTx3v*_46Ulj+LZRWY@=uzvGbsy@!*rix0y3(`#diVkvrgF zCzU%IN1asec)GF@g{+?>aeV9{>5E>|r6l4ay#q;*PHCy!RdVJ!B7fge`ll8X|j?g^0&t z%_%3X=r-oP)wf9on_oEBm`;Mbn-faAmJ7g*@#%cgSfCiL?6<2-UwJO}IpuPxzH(7ufOD%$%$#)2wXF%TZ}rwP*+4UcYe!V1&tm>`4zlbO zU%=M<2itee*^jop!Z~;6)0!9B#g5e$#+T8R!yFb3zU$1P^X|;lcZ=8u1U;_C_IwL@ z9o_!Pj?xYcpW-UM>|bBpAE+l+5HgD^EA;@wFgAgzX_CK^G88gOqiu_s7>_`ETF?Q* zlN}f={{%b*+4jyu#Gy~59NT&o?WQH|=|09CM1QJbjMXXj^cu$D+ODhlKh$k>VP~(yUSEfO zJWRjc@m8*3f1i1MbLEKo1vhB^M;&L(3ZR5BMo02MQ)C(=)*%3@o%(U4O;N{79ES=hEb3{YZ+}kv%O+Jvzfx>)xg%?5k3J zCC2seN81(>Triq1OPKqW%z65H(^xEA=%Vc#nDa3M*>gq>49t>G zLElTBzl3kpzV1bfiwyGL8Ae+%*J`dVJyyH2rK&x>cinPN!A{N=`~VpPJHmGBM$Vk4 zf8?(Xs=l;PD1pxr95FI#D1VH8t*2j{lafxZoyBGJs~+6Elzxq-U+MJAm+Y777d>SE z`BMSPRG;>;JVrfwX4l^mYQs1+i+u4xwK;Slz zM%gszMwXejx#{fsRgo2;{vFU!V|;qk#-EuRW1djkdQUxP&XKRm<7vJg+&&wc^TsKh zkzj@ran^k!IT!vNy7CU=UuKTA&(yjX8SWkEjmne@{#txHZ>%;}68}rS{@nO!jF+6N z&Feg&+RyTT9p_DdhU<&=oQ-Z8d&Ac@tb|78y=7cxgs}Z`?IuV3w0r7W&t1cw^Lk_d z1yl1DeUaZ?59KZTF2ACwr!5*b^$UxxoqGDB;Zwh8?|ZzKeUC*`zeCw~7kSn%BsU{| z6mp~L9Dx@62)QFxznjN8U>=*_W-Kp$b@c|?97}s+S0a0sA&-*RpE#m%<>Z5J`ja`X zbJ{mThgP;{d&brf$Ro4Sg*5>%@Jw~n8O$j&@;eTqpf`dbYvDJz# z!Ok1B_jo`DzYV<*y>s?_6viZLC=TtR=gf?c%f~36d>MgV*@LwP<3;4v*o(bnh7l9}j{u9Rk;eFg z*iG>H^u3UQEe1GEsXe%Ap*f|-0}R(c&N&BH1e)$1KZSFSeZfbrIKSz3=&$UFE#7~g zuWKA#xW)VJ`ImY_1wR;W+*HpzZGmPZYgRl+J2h2bn+J?1)X}HqJbR?rcqxtY$7ZgM zRm1~Va%GPcbq=pDIbawT%~3&cj$v7b_Xh`~Ro&z52JO{~Z)=*2dn9I(%Ohy~*PM%K_$ z`eJy|gRy_hC)hQ%enB4db_hFzF&h4XzLx8q+NU#^6X&nN3W4v$Pp&k; zQD1}bXlh>vvRYYsr~urWunag9ajc??6$kNk+|>TWc&C`E!xMX zH2Z4uLUw_BdQaa8&K_)LSCa!VhxSTG|FJVu0=o8R@d0}1~i}2TfS}oU|^P?=PKW}%XmrczD#)+x=<7!OXTeVY&x0oS1BVO->mVxE10XFk0#%L zfoCm$9hfEj5Kj@!7Y%ppR-A24ner4u%h_L6zgX+T<=I=A%a6-FD!y%h&wMH8%Beqf z}5}r_Z4LcsxBspHq3d_Twqnq4po2&VSJj(a9$GtINy9U&V)C zfd0I&Ez}ki|K>gM-d`bqx_tfD$STL<>ymF$`MTtrlkxFiLDQ}>t@K*xZ;MB^#q9VG zm^bHt4zzX>v4z?3M=29LsDGC5%nN+%J>le^R^A)olncKBkI{C1@_8lwsifY6_V-Rc zo_oQK2Y&)?*m|vl8y{lF7x{!H+Ir{X5_mPQef5al)P%{Ls$xF&MLT=*x~z zf%a`3{#YFG2K&L2f2F@Jo?w5o@g(mko@B>w=DBdl9kc9NhoF z%JEJvyVC2(I@af+neS`zD_3Wdc*5`;FO3JUhncphpHt5{StG&MT0CJo3 zU*KPXJX4U4+~!Nluliniw3fLMZs}fYTJ_uZh&pR?2eI`&dVuEUw-I=zT zvB%Fh>o-*~&N9yMIqaRn89h@voil$%#YJIOn;A(yK&JB|7 z4?vHugqBy1?bsAql)iasU1&olaZOpY-SeLDWH)x^j`+HF6^Ef%aL#yZB7bR93$%F> z??j0ca$|T-XZ-Txw|JeheC{i;8+*K8{`OYyf6ZTpEvDp~*ny_zEMk7g%T7EQz0|yG z@1m`ZpKgte{oST6Xt>(+kblgi{w{D_^^c)0`5;xl+nz63|5j*zcRDdcyWo9%uX>Nh z4W-vFm`B`DMlx=we~C9XfQ|;eB5tTC28{MU;+@hosLSP`%Vl&%krNuog)90i-11*) zZC0$7;+AZGXXBv1^W%8MgFluJ@7Q?R7U-;eoH}PlctC8ooi9{-qw+_2?f6digav>6 zs*}@Z79^=p3p|Xy=&TKA53<+p-(W5+?MFXRf3)wyjk97rV7?eBq_Ug4>z{g+qOS5K6;ofQ*XB5AWMlXN>LpO8dQ=mKkIE7X9!ZuA}-cXzch1L-+A7!{m3yd1@`V#e=Pry`k)WnXH$Iru=aerd$+RJH?7tbA++Eh%cJ1({N6z$1I`#ic&6ZM5@OaDis zw}g4NmY-o};)l-coMsqJzfrxsZyA|`_0q>GzB^hkeXPfZFL-HRN~MR`tdzYqyYdzKzL3%UDtjhFKae!}$;e%I0WI`03(HAJlF3Vx0J zLfBO;V^WjG+RgWRZ@@F9uN9bec_w%6^-Sq}(=)Ym4)67Nj84HwJUL38xn_1>C-T1X z)34|H8(?uOV_(Hs-|%GjjS@~%=dY+!GO%)4YEE?a#c29iOPSgfj5qO9+s|{aKIVCI zI=6XpI*YjyV?`fx?D(u5)T{U2@MPNWwR)-7ID>8mIU}o98=J3NZEmh!?b%$j+Phiu@;aWEo4#_NzjM=>{L1*%@Y{mErSU9- zPIUs4yW!V2m}%HSMsarTn7&JaVW)jR8oLPP_}gmmwfz8{Y#}%=**u;4OR@bpXH%v% zT_PVH@4S$FNBXp4Qt%gXUQ&ABa^`9aS7H(>#8a?|VRqA1XYpF)<(zdWx?7sRds8K6 z;%PmLCs?6SLD%~IOs_-?XkxO(L`^$IIj${(y`L)O)26kh8YYh+8 z`aXGaZ5q1nLh22f5&KND6P+m?!d@yrIr3|~9k@;7UT1;4iR}5lcUb&8Ty<8+7rDOY z9TEQo*9815pZ%X*=oa~Jjj?&z-aP{k=E3Vm+WbrBcH~e;R{SmGe&sIzZ}?j`^6G)h z2J>(xZ2t9&XjhWQ4f5KLzLUyx&-t0la|i7_dGuR6!B4-et&_;3Ob%@5DL9uf@TD2` zYw(Rpue0K3LBG4`tK$EP7_;o-XR3^Tp3N0{p3qp5c5%j%8$6A2bl>}Y{6tHvCvuwu z4f)NtfdAp|d1BIwjp6l+wO;e6Q**8FPvyHj@{%4%=3Ue{hRO<}F`_TiIbX>l7ATi9 z5jDS}Q>rVK&s!Co3&3;u54_5Wb3Xzd9JFZ_#k3z!b}jci^T*oPJGd8GurWrVU-2FL zF+XxHiMyW*xGnyGck+aP$+27c)0+b;r#Ex{g2sHGRXDxbmxn&~wH;B7O)&0lGa0)V zSbO68?Ehx`ZLWR%Y`-7y^I`J~lolld=Z^{v4KfmhT?&LSt(yCQq^qc_ixb}C=nZ6$me#T0Q z68`2QJGY(xiPFS~;pFyXj8Wt{bm*|6zV?lu4m?-~ov)j0w7Gi<^^M-K7`H{c9$zRCqTXZ5$V;iR0c7zbUvqLC zNY{D0*l6~lshKyz7=>XPk~@Ze{8+? z>1VJjCCBdO4b=LnM@};G#o|% zr!v=ycY63`=v5l$$5Jl(r`#I({)sj%`xl<6T=6dXqo!ixnHs;FvO?gkvF2Yj!Y+$Y zMoifDu)gK}$`{N;{^99%9m1J^<~iq?(4Jz#a^v^?-u8P3>qnq70Sl*mBJ{;QlhDbl zmp2k!nln4x@75&0YbVyh&s^(#mVrmjz^Z==C3KFQxoQnD`Z@9EeuB@8Gg~6WV@k%W zEb}D(`@zD1`VZ|*wv!1?PmH&XN5;U`&_Z1X_Q0!0_0Rq6LSsS?I^*`oedM{@viK)Y z`V!HneF@?<6VXrLs|TN>i!N@1=hPJ93qGIoAj6zFpgomw^f>Xo9T$skm4Y+M_vxIQ zaJ+pr_|p@;oPDvDb1%fhWSjo6r+;q4nd=v8?BQ*Nz-MB7>!{Y7uqVMwa^r@{nO@j9 zdZr0>Hb1e;G>$ILQxI&(!QH0Zc_sYUnF^v6ztt7_^F;8rzfTOzCbveL_4CN$QrR)X z(VK|ZM~?Ne{xwHVA42p&FoQo}e=~xk|9i~Pobb*Q8)eE;xi%J{zJ z%E7V^RCYCG|1?;(UuCq{a`j-@+bX+(vK516e^eRmw%jmSwwJP&o9Hj^rX9Zge&3PH z?~k5W-WI1U#(VyBW7hUfs8pR#iX%i2`7kh1d!%eE)q^U>!=rX%ap zZ~qx1V=d^|wKaG2`x^@jBH*??PxvFFz!{l$|1R-2`o56=*YaO$CHvg9ItM$Wft;xM ze2<_N_5eMZL&%4mxE2Nn2 z#~*%p@jVZ>-E;sux=lxJFHQ&s;W>PJXK_OF$iBeERi6Uy*A&}v1!a^~6CV`+hI3!e zec5V$TLa}aMMmNW^t&d@tgV`C*4~Ye^|}dWZR_c0rni3e)FrK}AK%=1s&#}b+QS)4vkhl;-zCI7j7xqe_0cam^8_#*lY}XJ_C?i~f89hI))wWeuZQ!sZkdd&#M7`i z=xtamohs_Nx}eltJGmO#se3>BnmM<8GQKz4<`KOJ+H&VbZNhWG^Pp_;z;r7g+C z44--T%k5s{zK+(%-xX}b&|ORaor%P(HJvYtn}gNjN?$Wle_PMV3tBk8t9^ep}W&I(KzX zA-fKlx7#Ue`OAPkXN};tb!6sv$-|}eOEBqOX4K-JZxdVu6I%|sE|mB$@+b%vlDFEA z3}pXhJ9=ZL@;Q9;EOa}@^4Y>f2Kq&WwXEFpk|{(xZYwKF+&013PW)@!xVOANv+*W?`1bHb5AyTCA)~GPfuh8~8Y3}~X0~P7@(}x|d8d1W)9%0np2Wa; z!`r4&X5GAIvG&V%;ny0NFuZMG1JCa9B<9gx_qIvUlg#)R)%Ld1L{#$>My{rvZr(Q- zi}hu`|8XgK%B?27n>*eR?I^%j-j=2|Pc63lIPha%VubFeCGSu5COo~kAL<9eXg!eQw`wtvk4_S!!tJ$7j*F{_onqE}_Jmaw<%ziV>nP#&=q z5$u-uVeRwF+qs6hm;H3F^1GM~i!;!bbErdOxL4z6|FZNJWaZh$qm!DuryI@R9u42) zJN@6yRk;bIW9PAUy68ha{KcAC-qtqFXqFEQ-`Epf(8ABvt=^+=EPPVNKVO(wpR8vZ z_o_$F+nz4U5__&oiRK8y2 z$Upio+=_7D#W+Mmq&Ew8u3w-VIpV-&6~K21a9#|&uOQ#R<;=%roW(la*000RNnbJs zl)bR*vo#XZfq(m>kNUnWe<(2#I==+lmvm^&mFCEIMR_a>xaKh@uRdOycmmp_dHIg! z1^yAG?>&rD^hdNtFt;ppbIMiL!P@JAPG&Lw%IaJDqwpz}zsA_vXJ6rr)$v!kxt_|N z9mtlw%Do?IBamH7_##}{C>Vn`>aUAe27Ub|{e)j^k0jgE88Jq_0qz!}PY&h_vo_i? z>h@foIqjSzpMUY$$K>v~`+a8PWb*L`7ZR(ce#|wtY?{mSAh7%@>wcM; z*$2OW5C0{idwE5V_f znHRRzvBy$p%3itj)>Tg_dicT_DAoidbBhVvAp(8beerrnrh#=*3;aV+f-|D=Fi*H%WHN1&!5g{s$InOEBr)5*K<{lv?$l! z8BMh}e0o^y&*zlamYH`?hPMZ=n>IY==h?6L-9V1Fv&r#Ry%XLK{KDsrh=q|QZ`gos z;;%V@=#L8%)>da-^vo=*4WqY2cV1i&$wV*u^aZsgy7G?tr@pCu*<@8$>UZyGtmRAE zW)Nd~=INnT>p3HAJ?CL<0XIs(rL)F|R<%;rO4;)&n~0pp*`vg*gSY8@yO8Y^4}!h_ z3dxQBhINx`Yl;)$vHm6>bT4msQLErOZ#H&E?iYG<`h58p$9leR#-yuh4kUk9ep~Xm zY(zQn!@?8jO?VqL;oHX1a_P#4o{USpMSDaZ9jkBz`&WoaR4P zp4;37&WesY=Sfe*Ry8TuJCgH+lDMn0eoKtdoWtMr7g&L^J+a%NWixUL{ERQcI>4?R z+Y7we?-=w`ujp3KW%l{O!QMxav8RuSU9)dswvRDKS;KoDHHmeQUYr#)x-*(_@Mzz8 zaDMN=Y>Su$r$6>NFK3EOC&wA%^g}b%u6$k^ zi?6LHu@>Fk_~#<~JdQoT8+h>WUUEfJkMxBD^i}osP+#4h<6;^5?&Y5=Huc;PI%xD8 zU$2d=`+99D<&T-8$^)$Z>n@wvR&vlNp1RQYc2Yo=E3qY4*u6?wJ#Vr!$_=~7D~LySOj;$uZ#VQ;#d0^n+xZj z>D0%*!pJmq;H>%u_5VSR8s^{cxqL46pIYd+v&N|Btw&|+klw6VUuTUCG#a%7dvs3e z!q<8m>uY=Vglem(D~s{1rG3tt53aii`Qw|#ttyv2t~!X`4&PB;5p=eM@pYrscdk*8 z9`MF~&RN6J^BQYoa~g?R_I2ue?O%G1@(A@*@m*NoLks%BorQcSnoxpmK{UbARWu=` zzo|6A?eF>YLw)X{&%N|He4djl!kw#n)~!2Nj-AEnlaD@qNS{9VO<_#yFhV_AgH_1u zRrFKq?HTxM@0?KW!sW)wwRzYd&y7qDz=wnUx*LmI!~2Z3Y2?o=4(wQ9tlxV>{`xm> zFs{nGA)jAfPW>XozkG~u{)jPY^V7zp&-aWOHGj+){F4*P_{}hLXO^3%&TLwF%1n61 zO~@7%-Mcg|Iq|M1(2wAe-RI-O;D2}yv;|moU(6gsS9AM1dWybK{3Go z;gQZT^4@n<7jrIKlkh!aEu4LcCn_JV`Qi7CA^pFgR;;u>+UdO9g_b)578b_(Kx0FZHg2zjjR&13m`&;B3yd=at<;)Em>^B=j+zqxB zYb<$w$san6J@U61Ip@ju(ja;OyqsK<*}(_M;SwUAxud$a|EUqic*Tr`zhU(60Jbx= zCYcAzT)81oaN`E(3Nb3!W!Uey%acc2#@xuXCG7RL=0sTge)5>?WWFW8MOagh;s<%l z-fQUWWm20*`RtTXt=dDMwA*W-J>ncPqRBeLM&4Zc^d?dk(Rxh`%-U<~r73k6%eIFN zi1&`Ed-_M~maHncxpKeBIyi9I&{)!mf;6 z=Iv{FKfqP%BM+QH$J#ENj&MVD$u6=yttcjcX#wNvUN1k}-U?obW2} zlV0iA6dl>&MaqCjT<0})(+AmGu#0bW=SJ~}$V+|s$DNzPnBsrkSl?ReQvAfBFXQJ1 z#;IrKN^j6SEC;^l1KX3q^)le<>c_y(){mpWQDdz<2|VYez|$B4&nPncB;fga3OtRP z+T+5r0C?sB&k~-W44w_gf#)45@Kg+k;P}C3i_v3?fQxJjzp!lz7QS^KzV$r(_O>k( zo44dl-j7RHlkHo!^|VsQ_FalTX$8O!Y~Ok=zjzd%u$c*782HB93lm;shf4Q9wlnv? zXT0Mpx8LD?x7<5v@V^I}P{{o@f3Vzp`r!ZJ0dk!s-w8uIO>8H5+}r*6Iqd^~yKerQ z)Td`ou4?cBx^NJ?Q(|*e+IE~#Skp(PdCwTyVCcpSA*p6=DzkHGnYeKDS zks;R*o3?z7(OQM=dIhm*l1uemGM(Z}_sUknxp%+Cr!MTqN5GYaqL(+bzRSq4&i1RL=fE z=Ux0G^=VF7gIk8(T=QE$M&-Vm9d0=`^?LloyRp5$f*tIIvf@N1zLrQ9yqf;6-Dwo8 z`;t-HRBhBgFMF%-f%bPNeJufEg?D2o%fqhw8=m`48L_gF=N&v(JG;p_)xmS&%PYy} z#VOC%raXT+`P`fGTsf=U@8!!<{kza@-THgU&*(n?HP1VqEKNi{7_=)tN!f17)>0M# z=LGjWbKz@Gd`x-OkoSL>eE)dmpZ^!dzYm@Tk&0jL9yH-sb`rmcBe(JE0Jgycl7+w@ z=yh$C$EZCXJ{7{lE=a*A`R`qPGSLH^^?hP|>M9%bKW(9n2G+CY_5gOsy^PDX)%Ut{ z${O!Y&gpRBw_vKc58!72yFC8eyy(oa&5Id(%aMWYnVeZ|mpzne%k`H~-gS6jJGQpI z7Gmjq^>@AOXB+{16^gZjzc=eyJNOg#gbK=c7+2Jt?&Q{A2Q120dzaMh9<{OqdSB*C zOE0Unb15Dze<o0c}aE3DI5}>zO#V z3Lo@cKEfFPMc>V()wb`nl6Vo}q(3?L@|}V|+tG!C8u$6H0}J5tQCs4%V-{@{Z4+JX zU@x2ELzmNjaLa*Jr2{Kz}d({;XzCBUOzjNl#(71EW(bK@V9UrLc zuU^i&YG>X08JipTsCa7Pf3|l#hYuK?&7~hM+)4#Q;N}Nzmf#Kj=m2M2`XO0Wu!8Qz zJDwwE3BFcA-`jWMD*?{!iwE1^L0z^iveReld_SU|j>qMPL6`S9wwL4K-_SnwLK9p* z^(W?0eJWx8j`oQ%txN38io4lvUF!IO#ltFrfoPYXXKKrqGkDhm20q@?deYhn(O2K; z+B0j`^zse+%ePysIelXxUzHfno_WDjb+~oq5lfU1wg)?^lh-{Ozql<2UEMO)*=LU^ui_QV^Sn{Sfg5)% zj@f!gPEfwk>N$mN-&HIe^kpvc8hC8$5wab2HR2yttWTrS+OyDT`(V0}*oQ4m^19ZY ze7MA%$xb;-?`1#f#L=w-n70JVmhYax7FT6;EoNKyyiQWJzMfG^w(?EtU*>>f-gz=46gir zY2tnK4&SQtpB+tI`P5T;@XkFE@wckBXaDj8$EHxv{ZsgA53Yb;a$dF-E_gPCJlApi zs(zoD-4r}4gr6m?FP*tR6TNROK90wrwRPBnMjQ1TB9l0SY3rqjzOXxV2zjug6&j$p zj26CW;(nbuy04t;^L*EZELaULD&}8y(k}80ceC%}CHkUuueeZTk+z?6&86Qvxf1`{ z*3W!JCJ?s`z8v&U46eyy9$53vJZNuI{bKEXo#DbC9jKeJgVVG3zPozQYU-CQS#;(8 zETat@c!Aniyw2z{}9k%?jQUcKST=-WoVi70t|cY8twkDaG{QC8(#UQ}(atkkc?HUOKku+1;baHv%8+BUi*0 z=#%{SabjZ^P9i4Z*4D_?uyflX!nx2W^`!Ylgr0d)U6{4W6y z^u6Rh^n_p~@!oo_z0Ypl;$PBh-1`+gpES(aSTYk?cRVp&^jR{meI@>@n|tPnTqF4M zyhht6oNMiA&NVTOYw0<~foJHuVjAaT_rHdG?vEhL;(Ll~{nzr{LDuHiiv3NGu*bNP z@jE`1>^Sw=ZBJtVn%Zw+?$v&~`a%1eBfc+C{}ivl|60jKT=A0+WD7TigC*pi#&2)O zjYa8;@J2LV^ZR+;v*gF5-V*BD!mGO8l1v^L=j_$;VTiUSUpDk#3m^C3t0aHekKZ(2 z>RDqJ>?5z2aGLn%<}JH8;||-^a$=t|y;Ga)xns_RN0N`6dCQEWPi>sXH=2X?lsU+U z2CYjQoP)I|n1eI;R`Db*{7Z+xKQ}LA?*+6DU$`gt)lcr<#`7rS_>|gYP9iCDB7dpc z)O=XU`Pi*K4Ve$&yXK;oZ;v+@Z}MF8VEpvPJ=iP~p_=*ql?Mm5N8x4K-#KZ=!|Vy1 z*f;Ts`!_wMH9?$YkEyd@tUkfMgZ@pRFV>427F!bs%X=svrSiN-7Dt~OEEf&Z`nEz3 zFD|+H`*uBk$}GItl`_jGbnldJ12>WejA)89&+Rp>O@Q{qR4jn;^-12t+rvC%#^K#}V zIh^97Cv`@dYmMCq88>Wg{IB^v(+p%GcpSP%FMg5kQ|lLWt+{J{&m1E$zIEWiTymOL zf?v{C#jE{B3v@m=7yy5J?i>~yAPz@<-Co|$U5!5znK4ygIdIvf(5OqGRprpEGGgdT z(N{`1v&U=eE2HC*l|FiQUIsL5?V4k082*?H`Nc$UM9XBi`xZR#)6ku{)YEm50k76x zBYUr9{DC5)c`naBsb^*GGbiu(#uY~MCwUgovqkPRr|ux-(<$$vevP$fv2ipe^B`k& zV={;C4Ym7Bo4Kq9m+p>B_Bk`z--SBI!0dmffqu7CJMDf-=NPcg-1eehG7=uXs|3cf zt-Wuz`Oz~PO<)vgIkr8~y^LgAr%|u(0^_BH3yde!AJr$CgD;SMnMS-Cokin|RC{Uz z=xgCMMr{DwYXDlZ_6ARF)i;!{?Zh@Cd%VCgb-bc=nj^(DyYu6rAMO8b(3Ued^3xx| zzudmhEz5`}xOd0jal7FC(fCC7tjLL~8#|4OtlYpkBQ}=PE`rX}c z!`1A~lC9_Km!roUvkZ8om4vxyo9ccgrBC4(Jjd(}9q`I72i3&fy*wY?-wzK3mMA=tW)`?@OvX~*!ujmqL}pKwBife z(zCIDA*WoqI%A4O8)2bK3=NesglVbbImi z%$Y@rVqGG%U2LVM45{>;IF7IZOdrY8|XPgWgie4h^QDWi_`xt>JYZNu6! z;Z?+!*m=WrmW$R)8Tt)zoqf|7<0a6vEj(Y7|G7g&=n%>mTaJEG!?=}?aE>>tTz&ez zCnMdud05*m=-t{!C;58QouLf}bL$s>_>LK{_cPGHb#*yQlmmlcxaNi4$$kFX+5Hyf zKK9`F=o5aOg4BCrN(ils_BzG61clEGGL^iMW3BCC)>|Di$@T0n`!ju&y<9mKh>47^r;fWH-g?vJ z$U05@?;<|-F>rhgxRsAA{|5W$OUcQ2HhROqpWeBN{nF*{j1FxWC~)+ufu#Q^*BIT` z3J#VrFUnCji@M||`U*Ou+6-a$9W#I2X7t8p<)|45kk1Bqzsx78owJd*j_KE0ZO?}+uJ(RT zdv~4IIr*+pe7RlP>z@?D(Z)8r1_39L^&jJSQi`zbczMr0T z-|K%mGB8X3$>VS5%t)h-WtqnQUyFv3!{;L2$F_Z+g?wp^Ccjm~=lgxgtqYM``{=J} z{!{-|)E}E*ymSih^6eAp*dEe`^*<9atxoC0&l3xj&b!akwQw)m=tIvRJx^+`qYpp)u60MpW&=7U`hLFJ%tF@zFJcEQO%4giE`tMp` z?&`l5`mf-Us%Kf~zLGawz4t_V7Imkm@!m4zqT}gV;w4&Jf{O=S6buzl7U<4vPGe7N zpms&SzSX)`x!_^^BJ#TUlHL`p^^SkFMZU7o{u*D0=w<|*5#9)|&wx zYtq(DU*t3KrNkGzeNcQcyx5K}{^`FV1Elm}D}7M=@2P!aAO)uxYQJ$Xjv*nN^fE6p z!7${R;W63HWjF7kJwtm~u+_^?t+T9UzpnyU-UoK_YrjCO%q!@}WxTg^>23W>>2seq zn>-@voh75wo6_LZCBku^@f2%we;M};@Mv4s1_#y=Thg*}VyG`;3WpyHZ#4U zCHCdrd>>%!!s~sMYfrAmTf(>D3AZ{vtTycFYj zl{U~HX9)(P0c$Cve(=G8iC`g^2p)ou;E64>Ej4bc+g>xu#Vb2qVNAXY7jIY7FZmSn zj1jGQ#&CYa_<8wx_?i5SRx9tq0)HO%PU0DJ3yqa4s82FSCjIe^zGFjLXhidj8?{fv z7cchJwQ{Dz{zCK4))hHx7F{^Lu+@&G&M8_{Jn82@*qU?KqHA-$v1oZt;iAf~FKn%8 zAl4W82|KNwb1H3=uW80GWYxmq%{Aw;rw!Ux`t?x1#Tcu|i@lZcS*OvT(@xSK!)l(< z^$+fkIkLHC>k0bfr$7Fa^e5zNp7BZZ9}FL>xn}ova`c+eyVko<19 zd(2pV-ZVR2T=cJYu@Sp%r%{jw&ul^8%_G0>06B6EWT@~qd=}_kh0@RB{KvP_3tir7 z`+PIvzab7senj7VV*-0Y+e+}c>pfzbGu(I1gTCsWu;K|+pZqbkue_?`>i=OFv%!=L2g zQxMS6N&l1Rv#hg~#H$NDNyM=y5zlU>{*qhl?Mdth^1S3v2LEG0SncHbDejT@u6R!h zu#V%xac;Bpqxcf>LHF3(r7w>BA??`JiYm!z4EGL5KD5dC~H@CS8>dL2&%>*&_^ z!9dOxfmP~X8+@mDH@F}2t~U5C>63wJCE24J7cU;&SXwJ_>C_Q?XD7Fhz*V+kHo6?M zb1i$j*i=HWZU;UGZEXZD2eyCVf!S|u&HV#21m`AIi~rq|g~i0XmjL&KxcY=1V(jqq z!(V2Eo~Q34?52mYH408U&e7ga#Xl-@&2Fpd!(%}1pirb9MP5r z9Xo>gF9g;a=)G!6M7z}23xDGvPmJK8#4uW7=sY58IBrnwF9z%B_6F*y#26~0{;eRUgldpd%x86_7M1SnSUP+Ogji%CHMo@ zTpE}veHVY~2R7sc`FC;#;8)#C4iKRs$p!LAc6{Rm&14ZB9CmUY=Sd&P7)ze5kEoBV}@gtH?hO>`9j+#tl+`c(a2oCC_fp+%Yswh?o@pDT)UdmG|Zf3%zdTz8_N?eU1_LtHzwAO8HU z>qixgult~24SA;TcqX$gA3mjKFrPx5&SjOl7q{zBP62)WTcD8NFn*; z9({ixA3;!Fs^5^~6In@g&^*9UixL+^5^60hvwZI?79%dcI`9938*1GVR zgLOk={v{FKDM`i2deV#jckgsnv6MBsECHXdwt!BnIK}>JwZk+?)j6WO-yAwAXQld!GFN1!LF5IxaE zwdPMY<`wqLzbz>*o7qrVaRMFLe5Q=vDMXsrYeK z<)_a4qCIA?@BiRfqrov?689#1r}X#70tfxpv_SiJl@9H>975m=l--BjImk-x4@3vd4?8 z*e`1uGOT&5{poV#*5bwZx1f)4B5%vM{utjXIe&~Ceb|vBT;;=*e+BU9^N>0MeHrfg zA#+puV&Yj6`wqIJms>Ai)%9rjVTmpysPjQ~-D|Y&8N*tEPq5!KN^G!d_Yvgu z;ha@mNcsGse|8$5BoR4 zyOa?=wmw=-n?+v^P`}t%a_>`9|DE-L94T?KuZ7w;fu4UR_GO8=JF-}G8lyZvlD62- zI%NFrQPU29d+|R!2;RZ9>;H15x9|W--%-<6J(18X@8rDOGeI7$_--}L2LD(^-0VSU zB3Darb)ZkFvf#r(ZY^@oRvhOXmR~MVyXTT)Vje!9a^9hdAI<@Go zv*)$fmfii#-<*#hYIa`9I^qm>HC0`&`fFoFzi#%7Ht0G&+cW%%Ug7-1%Ke|{Ed~s# z|Fe5EcfIlXCX*3e26!-q%ei2b;gU64VyxC0N4P98@vgjZVtvJjKReaC4;mM^)1u;C zws3Sp(1WZGk`H7x^wPz6h)w86HS3y261!rfjxp4cuMKzYB^P=*a}oVdk$UuBd^JY1 zD_c`tE1@3;>-@vIFC6EHat}O>4$2B_$Dy(B0_Q#O*%(CppOLG)Z=Bto%YXDS_**a9 zbAY{|o&Q23lB?m&i-GYzkgulh$qzjr<@qT1{M+E9DOc^DBRHllInQv(nsuy8madj$ z)t^E?1&6oe$FuNT!Lcw0#^S8e<_U~Pw5uvz^&5g^%PD(lcCak@r)Au(DO*9kj{<Ptgfc_ei#U>Z&twnz)?aaRBdrKF&e)`WqKMh(`R|9m@0Npf%H#Dsek94(Z z7FQeeCiV6~lQ%_0UafC2|E0dVYw80Y`q_5jiL3DRVVi02SN#J#DLj|&;nm|?(D&>c zB{}n~9-YR)zx44g)~N>Y!8wy%uhO4<`g>DUv?~pq2)%c&v0rv_{+jHu+K$-eYDes( zlpRUSlXoOdGV-hVO*SJZMb*Btm3>6=mS>GtMeopNRVDL+`>SmZ8cV_LUE#D%dxDSk zz$5KT+xg*x+OIhlX`t;SE`cKp7_x!E7=&f~j#OYtoiv-@2Z5&)c!u(u%`<_mZtRN% z$z!({Y#;klft}d*2?{&I_G>^;oLLCG3zF(lJw;v z{+I5!by6eG>iGX5{i2_fvc_&L*hYU};QrRcodxuH`D*&RZ|pYu{X&6C+`@T$FBQlb zjnishIgUM5`hEO*eBGqq{i?qwaZtYp%^`h^%%L&L4vf*6;24<)jgfXNGK~IA;3^LG z>q+|Z5*K{}w%FzG?wC2LANb$iF?0FT+X(9F&a1jt>r8XC8a{Ec4`yF@hXK7EgD0XGR}3EHw5x&D}x$ z*|ar*UzrCXy4x3LY%}mo=&o~wp>6+Yt*ygc_eu@4*24O-C5id{fpv!P1~)+ydFX}3 zUvn)o$#!_TE3E&rrwA-dm=6Mrz$S2Y*BqP6JXjv2pXCCd%!%2+#+=;h*mHz&a`&zD@z$-NM z7p}LtAO7O4%P;V|8=CodXyhm`z75>a(4@aWBU7!r3u0fqb<*?H^Y+-+3zGQmBd*(C zie3KO#1{&tzeNA}zEt{4Ux!hTkMF;2-C1yi|J$LpI>8C=C-W|udf%j-Vb<3Q_A}<+ zr7p#@k7#!{?aBHi?SxTxH@Gprl(anjrKCx3jW)F13GO~f+*QDsEU!u2T9A{ty+AQf zYxVj1VnIig*47ElXvo=uM@0-q!+%(3$l4<3Lg=_e9+<<~zw^w*in30nVMEpZey?Bo zdYTsH5!{|&EygwmJ!M}@Pkljp(vHoQIXjsv9K6W9y)}qu<}PbY?4%jYLz#mzj|Jb) zFh{=uuK&#MYh2gyK9={Fc=l`NG;@2>MexjAp7aCj8wHcOznePGQ}(Zv8O`+(?_@0g z!u28a^Coo&9)~htzs)$kq1TtX{33W956&lBUoZF-_iupj1;ALC_{)M-)cNPcUl&YH ze52qI%HRD`?DEZtZx-D1QtYIMsc$P|wvDm+XzZ^FPH=yb`z&z1f_iEbw-x-Ax+=Lw z(5E9j+ZS$ZlQ}Ssu{b{V&4Sp(cGip63SQ*fm-x0b%FxDMH)-qGJ^I>G$JmAgdp2`G zXun3*+YyYLR`*I4=Zxv}k4)F_9`w)psgK!g`yQSC@v|OG|H7;OE4;n%x2?!5ox032 z%G0zX@az~oZ!3Iy?)Cva&OQ{UQA7Qo+?5-Qv;P)+|DEvvv(amc-8F~&eF2{);qfEL z2YR|i^a@|^U;ROhcJ*AQy^;0`k>`Bqn?)CW3E53-w37eipvVrf_KH*7OH3N)+1gCR zz-3_XJciBRX2&-Tp8sxidEKkmWOT27GNboEmjC1rRr|@+$Tl-X794w3u8{K~gx|kt z9P05KhY%OXx$&#<&x9B4L;o@G5z(vYAkfEnddDGaO~gkZ-c#!MHh8+svjLuE3{%rY zUb;|9T-+pVxWI2Bk5HQ0QW%1(Y8(E-XF6u(BHN*dX+u}XHI!=zS2$M~myyfBrE#gY z;t#dui@H+0LS2#k zMUE+2doKE+R$`NSwg=8K>qb5~ZX9F#o=@`UC}Q^YTb#5$l)-tRjt>Jluyy?=d}=@z8jgNO*C%^k=nvG@ z!I_ZO7`vXQ*E-x@k%TPVy9#;zN9dTt)MN#JeF2%Ecwbn12m1I{WDMOOKrcg{%YlIz zqri0*c1nTiaXk-^vMJ6I$U?@Je#-MI;FA8?u`vL@AAc*q#I0Xg$ax>szhyDHMA|^^ zo!T30W6NUnR@CpEviVn^5h3S7${cZk6PZ_{E7?!qM1NAE4A?_Pcv9(?$h95NhWyWh zW~HyXtQ&mR^V@-EMZON$UPgG9^Iq2lGiH*?A@j0`uz3Yhji(tO^}aUJzzEYonN0yj=9dEt%MtkmpKM?3DpMKK2XZAB7I( zyNuvBeasow0)Ok@2Bzt{724>nQf>z_c^Tg#qsKWUh7a9A2oOeOe3(4NFqjAGs#8Vt{815+1^-VB;Lb)(&l-m#IGT(9`_Y(Zan z0zb|#!^cYE8!r;~+{+qajxo8Ue}a!ba4Ptzzc?^;F7=9zPUu@~gt`2`S{G+#2yV9% zv!IU){uU>Kanz!JZ2c%eOZJcOML`cGbqif+_?F}YztBZB_7lNnFSOYT&B^;3+Iu|o z{^aNM(a5t=!xLOG576(l>vIshi7~_ebO|O~)w#WrHtJdL#rA5hoT2CXb{r=!B;SP2=oUX$iI0^rlrgh+ODyXu9rl&z z&7^@)JVo&48p{a!x3$AJFOsK;Be9@!4C1_pH32G)vz|C8*^ih6pXC(&=h z$6wWNzQ&rwxQVWI>fl^1?BA>-x{nLFfwFbodC13wyp$`d4Jy5b^NFgVFKd*lNQOQ_ zI@5G%i#oA8OcNaEQnxAG6fuH)?2;R#Hbr!%!#&TSukB&}3tXbZ68bpC?<@3CeB?uC z1j*W~;A3cOx9BS4S$|U-a(ubyv(kV+q&uFuEs)#1Soi?=fx)o?|I9yrA#1$Y>t){) zJW87_k@$DA-WSoHobPf18$gXRvfdkX-E0Z8=^>7{n|IY_aGE3i8tJ)TaEc$Ec`SB! zXrq<=+eg1o>hI${vNs5Ah1ShfnLCt+5Ao-c37L%%Y0C+lpQO?8!2Sq!`DX_Q6Sh1LA7r(Uqk@|XO8r(iU z0{9~A?738RB>AC~##-v$`*TA@HuZg79T&+B5b8rJ``y(#o=a=2kUAD?730v~${33u zcL}j@vWIkSW&DCU5zz7af5-oBaG{?q2JX-U`(;e7?r$T7F26oDpv5@Cxs9_4LgVoa zVaJX3VU16!yQIx*Y)_}*Ir@w@d5AG~!Pj{$#Gqwr_*&6l=TLN+$j0Eb2tRZ7 z!$?mcK7}(_Vhjc46^}jrJ&_yHHLALjf^?%Lq9IE)oJ}G>TwRTiR|B?FRaaV2 z!X7EUh}FoS>6IBPiMu5(ew0^y_U5qnAj3F`4~UbT2u8~OlDYMDWBBBtF*M;TaCHn1 z+|u~|&$P{A_b7&z%81jEJwo^tGkoj_Y(EbAhpyYUH(OPR4xIjB!?4=$H;s3&m$k04 zE|9rFj;Q&6V}F)8)6HHcbe+Q*GU~IcBlkiZ`uqX!QlBbIUzr{u{J>~$7VyivS-cZC zL^md5Gnx9O9pP_nOCNhW0(^-qaawT3@8b1Ux=$Q^gNrq5=kdFuP3Q7Cqm@qU7n$@6`M>fjv;qTYi9jMfL_Gd!o>7Xb#JM^*l5ydxP)~ z_0T@K*QX*s%$G5@-RoFsT4`I!J~3b7XI9g;;O^izSsT6+mL_vS_BY|_coFt7(m9#rzG zR7+l!aOAZx#>D7(NZPQde)>{$+%TH;>^e^k^X$ix*Gu*Y>g&Kx#2!Fjuk)noYjj{e zTg#l}THv128s>}8VsiE5MwyqghJ2r2{n>LPfpL__V6QH`g?>Ft zKU!!5KB!&t=XGGu$%Vfb|4PA=_#+EnvnVaB5<7BbrWV$(SliYOF}u9b%#wLoE737m zsJOYS_Om}PWo>$;a>>diIdlDxDAz00y9}D?LVx7sEY6qHRHgXX|9?f_C$aMieGjJX zo-K?Od%4i|0mdT_x;q7*Cw!rXzDshGN-mX8?~!v`?|@cw&}#(wh5Z5h>_3|i2bc>E z=EAe|RmSdpWN-01`i%8N@`B5l%Q|-1Xtre>&Di$b(ntJ4zsCRn%O3vHq2j|HFC zvv${Gd$d58d8~<6&Ej-GPrcM7W0{784G znKOFf0bixBAz0@JVNFF|83mlrof){=f8EXq-KEl&(3#+YJnYU6&aer6pB4I^HCtq~ z(DV2A$~6q^O3o)B=zO(2~rA#|z zgjW!Mh{5qI$>b3G$M`ReSTE&C%E;Ewy>Tqe_CJCyLSkZ}jol^thBa=2hb{R|HayA* z&o=6oJ*Db927d>$%b|KDKnZ{&Z~ z6vIEj`E~hO28_{%B{!(}v$qEMdy#QcW3wu!7ol6pRqf)hQF7Dz!p^o=SL|Tiis2&z zcpmQg^nK;NlQT^EfHyUKwvX5WzZt)-wEh@kpzQ6pN10q@uh$mlLM!kr&Khj3!e{!R zH&d3mQO5SuoS}_RIzooFJzUx}3$ThI|v~bkG$XY0@^oPi$N-y0h;> zv+SK-ElCwg8@PQi(Ka^r{98~(76(w*ve#I1%F?Au7tV%Cxw^k z+gg0RE&z+jt#S0H%80*@p*f+!_)L@YaczO?UZ-yk^6W$|a=%oX$*pQCF*lcK)&=I{ z=nXg8_Xr*Zhl(@r!12zsn)Jr$S*fmE%Aa~k&fm4J5d3^sTiaC6oIKFgLCJntnc7#}IWmgk!<4?0?tbmo@D;c*Ul*TW};g zwl&~YA(uG|p!H|SZ;tFHxsR4Kc2>49CNIM`mzT*t%=xLnB5Q@S!tQTCZ!<4hHAa(< zP4>`O_H@|`&lzKFne1r_{pCZIeJcmFSf>pbW1p~Znopm*iOHgD<7Cc6!#QjQ2V`}@ z7r3;rEZ;Hq*`AkL669PGiD}GMM%yCAS!=QNO=sgaBupmG?i_3IR_H|5qkd!Hd;9;3 z@89G5uWbAMuWws?edXIPZTFviD={yELwql$_JOnd`)2qqviJOi=lC?lwJ!XI?=$|x z7mjp5_r0wB@MaaO;T`mKnrGr8Ci9E^sL{k2EP`(kx!d(yEZOf6=Ii6zrJX=d#c*N`GNSM z>`+YGn~`dB^>lddgd%cnsTqO(S#6Ke*N$nSwO`LWVS6%OZI*JxJ?iC>>HiAKRZsoA zoZ#d!%86VmbAK%7k&ougB3WnAh4^=qvm*i;4C2xDE@eaabtB|FVDLlPG_Hk{)bva6 zgwkdv{RhWIrhynzU*J>r_n|XPvuX}hL~@x6)jP0gl=>cXY#*X%isE!jKK;NHtO z&#t%o&fKQCrOdDHH#JYhXDi@;HPRzFEZp!7rf_T$L#x~=nyKrxk@!(BCbyBgju_&^ zDQWq-+b=fQVOH;a8Dampin)>ltAAE4IX$#GysN{~Uxb%hfb=uO_dHwa*+O{I6gd?$X5eZV64 z?ZsaT+OqX3HGRwQD!1&#au(1D>U!@w;Go}I$RBg{Iru?twjJUf`bg@tr|WG1? zl}>xEa&!(Bv+|3->cix6lR78Df1O{f9sYzqU7&86cWG&lx?6?jH4F4@?rLQm-r&8^ z^=7WU(9>e%BAElZv@7Q*A>(*5wUN5tp#^x%CEDR~QcVaSm|nuRMPH0%gkL?HJEwElt63GYiqPH@}ZGXErIm2vM98j|_ooTY}h8mcSNj}1?& zxzC61%$#iYf7Lm$E1CHCRnKYA!ga30l<$2RA4TZL1izQZ{+F*+vnHzPyP=asMzuod z!8yW}ur`r3M2jewcn7hM$$Qo(+v}?-2d-TIF`$o;d=tso=O;%ryX4!rhJ??@#Ny39 zI#3ijfpcJx(a#`<|3cFmU*-SDv@hRI9{#f?MIT}e_DZWE+N;VZ`;Kc7wip9(OXTnF zWbU;^A;&-?$=si!57BSf-EA6vrquT?_5G3hq%LK!`=vfjQ5Sg|VjUH}WEElChJRVC zqCWJy2FGNd@HL01^B8q%+zXE)^mdl-$7_6*<$&VyQ0l8twj@z<*k@ zrP&FcD09cGsPNe3LrzPD5-ABFjzv5?O9CbEX*H zvFba@e>3zi@~GHA{$yrdCD#BpFI`3x|K(3tbKVfL%V7DeI|BLaHl@pFw=*vO!SY!S z^4V=6`D}zI5xxq$;5G7DtH@`i$Y-p(gXJ^lvqAX`JK{oJJ{#?=0e{j)NIq-r3CU)} z&dA(nzK8Vq_%otA5}z133*>X3m@ALoan&D2c#3n-St@M}wg>$)e(yhGuJR_H!TjEP zG5`PI_v-NR`C57ZHv8cL<88Xkulw@Ai(m_eP69Ij%rBvnm%x$GiRcQmjVk`)jdtSe zthS5$ZfrEvaTYB$w*`w>Z-2hFa5Hw|b3Y}ng}K^NsyJ&|wU-&yQ)wlsjh~)7d<}im_C$BN)KT@|SJu%@|D}%loE!bB5sX?rBcDviL~f!(ndeuVavopc?s{cApCA2o4xnUk8x? z@S_r5SLU?NGbetI^PUr0<96^K(5H{}$okM*zCxd~y+6j5FbN$rGL`6VgkQRtDLE-5 zc5~;j5nBCG(I=7{GT}!%pK0p-vAum1GN_ff)-4lN5&BnsyhQ&ZW44Mh>n2anyu0vw z3F-=*jO{LT1)1pOyNJVZC(m;ZD zP{ywCSflGhV+^r=Q8uZ!#W2)+8h^CS`+m}N!Z^hCHt|_?VXFTHyJ{?kUwH}JF?-C6 z0TtgyM?n}2G{#C^$HvUgVY-p?wfHI z`2Kk2u_MuC%Vs8(E%%+{Km8qcj5)GXYgyQj?nHRIn6i?Y=sAW7?{}+uDj^fUyzcg_ zRp*S+w#gh#oC)6S;N&beqyc!cL!Ijqk`LeFN)F>33i{M3I4Y_=x@eT@C%;%KCZ&-la;7@Gd(ybo$-A6Bv(kMRLEN zdab~sm6gs+4pYOD_GGPkNZ`Z1Tmf9ifltQN&bVZ9hR3oOY7$a_D+jnrflF@}nDztH z9gIP#$>^#Bp1PvCqb(+**Ti#y<5kX3lXDfNUHQMvkTiY#V~=e*`S@d-Rx_tQ-2PPI zgR?v<#+N5)1W9;izV@$Q448LwjI%!cQzGpV>174BS*ty22; z0eC)XjI-^~d^6T?oic{oyv8tFK4atLvXzzl(#o8^Jou4Qzy_A6zc^ zK!#;9HnIko4wlSBPpQJ= z1Nyfnj2J%^;oQ-&E@2IQypjG42u{?zRidkD5qzG&?sPf(i0thmC!OT_J3a{?qI*4q zKjsTAjB#>yThS`k$L)-tjQ1I1qD}6j7{@kX-%DTQ z*;~ezg(tzoZE;4|F{8zKi8c9&7k-{l3UB|UX7s*Y^yJZFirjLH)9r`9>ADkn?rjx( z9g^v z-me9n-`KLpW@5h{R{g82Rc{&V5?YA4|E+ON!XoOtgpRFEOUM`A;t!m=cLtsC`noEcAj@{N?&_l-Z|qrkJ?+bGMPte1oDn|5!iPk(<18}qmBOk--;db|?1wPWjW?LS6r;NlwNnm+N1(cJ_*?5szsLA{IJ* zhq=EAJ>*1sN_cfy+61SJrU<9P-c@t8w}sc!Yd>A&QC9_ZrQfnix|-EiwArx!&T6Bv#)^tbUXp ztN%ekgT%7om)RB-X(sar+|wiattcGlG7+N+9tj>+eKFc+@dRdneQU;tCV$u1(P?;6H*HEg5wyE5%dX2syziH1oQus_5agg1od9i~HM*KS zlzEDF<^MVU|AO{e7raZUdt=!xK0VGD{KK#5a+t)25?|do0RMcA95xO)Y*RoElN^xe zgL0SyJDJW$!`Fp)x?ev7Pxt7xa+sg_Ds+*)|Hj4>+?T@BhUBpsGw#)GWn}3Xc zGS!G4jWbRq5BOI6SfxGDVamQF@%4iV7Py8 zjhBW_Umv9^<;*^GMcxv|`Z{>dfZzTo&ja9Puw796p24+k;5K_Ba@N<{2Gg{NE{Thp z1C9hY@B;n$#71I6lbo)V4b$KSv`A+b^vxPk>63LG9KXo#0{G_88Nzd(6FarYO8Dd4 zvZ;`KevKP8$$98o3Pn~C*`XxG*eJ5fK$XR4(@Q>PuC7 zA^qvtaBUx@Ka#HpzrM|<3 zDzQ^3>|fqNcB&=VscfP*n|WlGOLOTqs-@`k*#9bSf^Tk|}qGjs_>4e0ykGRN~Z zHDw8QE3sdRzGf}oSn0xfqeP}5qm6Pd7K)hxER z*KU(_aD+#48vRvlS%rc3Z=m})5M`Pn`U`o#iM%}~@LtQW&_xM;A-|`*eLglZbXMpv zIG6a5m8p>r&1lVDr|TuUSPS30VYaT{w6I_Obj5?Z{#10GyT@g^>kSrHt1)1wX+^($ z5k2exyqE!-czwRT-A$h0wa>S&5IctGD-`2>kg;|AJgXg@$5d-Ixj?a*Nt}cDqKjRB z^v?RGJ><6+x%&-#y``-9X^tAF;j2mA$i1c<{FerXPValLBR!sd##5Nz?u8c_5oKI} zt=HMd_?2nq{5*JH-G2uiyTD*(oyQj7Rm{DYfWxXrdwbFUkKXxw)307@PDpsYsmXD9 z=yW@0UrxjKwU_VE^;F1rr>I}{@IH7SX(I`K{S$09Qt#RgS-w!cjnpe}OWii&MWs&? z!y>sQW-ZLD#pYW{#9p+fuUVKtQ z_YX%0Y>49T)oxeQ(No%lE<_HfVcb%&AJ*S9yxDSZU@e<79^J#Rd}0Bto-vbkAHR1^ z=&wACUmE-OC&n=z^yBR&a`1{id*M>_OVBgA);*FVwhtLc+7=t4tUI3qv)B=hoV{?8 zz2W}hYV!f?U1l}PCH?5b-r_^=T7|vqIm4zVvAMJu61)avt#y2h{bWY{|IKzgu+81W z)rZb*EqZq^@8)QuX5<@3%{UK!M?sf&FyEe|zB=md1&?{;=aC#W1K_W$a_q2rzU|{( zF6S9yG~M0H|9Zx-kGev2h|Os{_4ugg1Ik{co-XQOUH9ZsM+y{nShS0*Bc@@P_yZA2>f$$F<;XAVT_0OcHn#Je$D3tosSzQ)HS}X!|l{#E-?w z8Y1(@Z&mGGBUF)}F}OTj={h>eCz@W$9z(A39{kv+W83>FIGc)p%2f6m>2oi(*tLi3 z=!8YbJ=T^AuPb9w2kc^xEH#+BE;7dh<1*ZpTB_31Xj^!^H;vXkEAjP`Z>RBHJ>x5S z$>HbiZXdch$q)7%^^DX;boGF{52*K~ag^-@^{q6;&S*7o2FYVuzggovneb;_bD8tz z8vJjFXL`6Bq@qk=k$_#$N-Qz;v2@+cD%> zm%t)0eHAM?g@$IL-xv9@9@}#tajvY#T`BzM42H&0^m``d z-eNu&Ijbc!K7z;bjDf)32&^XN%9}=s{Tc147y4#g(ty`;IqS$o>PXW@x|RT=;IRSx zq|rvMX6jlOz}w4$w?#ZJ2XDE+CU!~`Wd3((SJt4*rP=OG;}~x$HY^+MN?S7b@}cK- z(7O4|Kv5d~NL_uOkJ#Hi>(GJ78aEGnnb4}-pYjeAt)-7?(!S_@~4<|COmSMAM9 zu{U!$S!V{@o5j}b#MUhNXdLLN#O`<1p0^afj4R)4_b=fRd)_?F+*O7hkTdGKmePM& zTPE^O&xykSmw~k^XxDQ(v;0fWW$EwMVFPqJHGlaz&2OO%(^5;bg>_JHX2Fgp^`!D& z?0TvEM{cQ*xM8c2oZ{>e(5odkTFuaL!Tk23^L?aLJA9FTirgl9r1&!o$XdudS^FJg zf5z{+jQK1%aJ{_STcYNe$?!$*+5w_{ol$i)z zHf+{TY}5ELc*;vOe4i4$``}TRbY`XN{@T0~TlP4fiLJYbv0B8ho8O6t?e4j>UrXB} zQ}zN!9_=bE0(*3P*I%AO&H~8Vqj$^Z52v9BQi?4_-jdHp<@lWd- zA$48<4|TZ**_vBJwr1AOt9IJ|VO#Up+UH`h&*elP)^ot-gf-TqPZXX=&o|9JDE79C z=vBpD=fmD%g0HT|{`Og^q47HK77N||2zvU|g^mEf;!o~T{$G0X+{MJ+7ZZa&?^$BG ziK#DMU6YZ=I2ErZZk;&$R=%BxzknXUSrEIRi@D1=m+dW@$yoxfdySF0J%RPHeIoQb zm+`XK?9a%m*_V-B)0wekwDOnKsJ6xU>`Fap$afbeg}HyVj2M#JpyR5jw7#lv_l0w2 z_h;l6bAaDI_Q-*UmG}jF&9VR7=oaCx+Rxvo{OQ;dQ?V7dnk9x$c>Lk|8HTCs|Gng0U%)*1E9>W4a=i3{C)s1P zWXb6`8rfka@hnl`ca-fS|2M^{&Eo6dF-c8JC9(cz3)s6Fujf4B;kGmE8Gh#JMfTBO zZHsb?pAzxR=$_TP3(=hjTo>UB(zII}d-iLM(}C;25PSRg9(DK}@WrF=$6uCychio4 z)4;R7hwbgp5!-@&LO(xfOcF6Z;J^`$pE%`1{pbcq9Z}dMk^3Bs%hl)9Blh~Z&4Icu z1DkcInw-p9DgG~lPr;+$crYH1z_VSV{x;x0zB;?DXL!e~V)7T1)YfDyuC2}xyd98s zpg*Z!;{63DNjH+4U}#QSnp&gFNv6u{hrv79ezH;1ah7xg@14k}vKBDsYk;G56)<#m z>gNubqI}bP>A$H4UO7@pEV%z7`2FQJ^6z4o{I_9Ql>>9gG4|T*%2CiJ{N=kQa*M~0 zvsdc+E;Bf>qU*|G&EZ@Qp@n>Ko*$%zT<|UDT(=4x67FDkh2%%yI#&NPOVWcGq9LAgR$?m@XFp* znm>zgd*-0iqfQrlZSNz2I=8YWCqZ|D=S}GAWNhYxZ~6Tw_2rm$T1{<+s#%?p z64f#5_-gV3)zoF&!gpJ++e;a#PbF)O_wy`wlfC_!^&1M`INP>DV$!mZVR}zwr`NM@ z9giq*+kxpW${pW6-`&^D{Jb&7ZJ%iONAs+A6Kev`@}JGBG{K|w-WcoV0MMza*kn@K z+eGhi9GdKghdRNyrj(#73(}^YoF77aLU+aJ7JHrO@X;xtyDu`Yt}Q&pcX?%HGuMX2 z&glCUK0Ly&Ot3VcT5b2=@*BI`Jnd2Uu@ZFP_*~6}A2OrsB>}A~bys~;9&1Gl@6zDU zEj6lfB3C~9w3BO*7UMnjC})YTR(>abq!)ql7{| zmt5KCbNqe4AkV&7_gwf_2e5?dpX<`)C0p)B<5?#O9pl#OU zU71VbKikfK!F@NjJ@7YGAJ4_AF@9?x&+t~>OO6ro?>{SLfu&XEJ!LqX7&!r%LCVN~ z#`wRu?^&JG){9@Zh7OV6r&ZnYf)8TQ3(0@*pFK92JVwa{G7iSNo@G5kFL#VuR)?NH z$ECH^@GgseNOa-3vKC~)(-~rC^e%wEV9nC)672hK=BcboKjZSJkgO3+@<{6&>_kGdo|`m)(P3OV$kj8e0|)9jHme3y+S`)pa&WY?C zn_o@zZ8C@H4MAR-8sgZQy_Tgq8%cx729bx;gj{L^8k7 zVM`2w^QI40y?z|~cnSQPoV#S=Ip;ii`l#y^bWR_p=@Qq|tBsi=zCXfC6W>bN z7|*1E%;^K2#)^5!Y|Ey(5(a9F73(LjZ#qP~ZCcE_KhkC_aO3w-vGe4r*UuPZ^)oeE z4KXegdh|YUyB>NLy#;XEL>Fxb*J-p(zisub%d!sQx7jY|4oZC2l}Got3f>0$gq=5r zd8VRQ-A`R6aL0VHh3q38>$T1B7y4OWGUo>S>0NpBS8mZ?TrsM~!TE9rCc@+Gx9L7u zpIYsWVn6tcA-Pd}2qiZ_2mGAydE&b_<9pJc)kb2*&9dKBEhcWgFryt_W2g93y-y#Q zBkiC2Q>pl#aroZl$Q&N-vCFzjEVInVH0GR1vG=kT2(CNPxexZal30%8%*o@rZ&kcU z{B)k8U2^$Mb)Y|Wu!cL37er=pptH>Tf^St-&(L)Jtf)bLRpo_`wU=!R_*6M=`Tkda z%bKqHR4J9*==fWrf3RlhiokLai2pU)5KN+4AQUTVk-fTfhwariFNIh z82H!wRQtfUu$AER_*d*E$FP?yCFi^3jFInjdkNp%&UuIT zwEYj;OXhuzz2v^n?Ik7K*#C*g#UJgez2p$E3C!?kgcBv}_7VrQHiZ5p5o7vwsU ztSYRxTH394OZ!&jv`FTiBL%&oQN3YWQ(HKS_0NHA!I47FH0ILc+tE8KlXD$w-vg90 zQ>Kh~!4_rqitHtM0IDc!iVEaN9`&O{?2jWo8udt?kEa@gIRYrN6;SKcdHSa8`&(x1VaBvTx$MP_7ssOM4-6 z(2DQZR{ERDds(9$yes2fAN+VPSxA;oBCqCgW+orkWZLCS?>P6S^2r#$c zJ1Ba0E4qlEFGMdN2QO(hxyD?`JCYlPt^s|&Nvp0rzd*U~?zg-Btk2@#6o0R|c{I5< zknKD^)^X9T3>f0Qz8jQ(@06&;}dO2^e%?St*@>wJPw@a zjftM#A*ymq3cBVgs*-<0agdZRtva$9xf>FL##@V6_fgwLH(U3o@yYy5Am zv@S4>Xh{%V%{ur((M2xOur1%c?r5(;Rf_+J=(P;2g(f5N412H1s4CxLjvUZBD#;lX zC;cREkkbb38~|^EU(>(;a;4yPR1jBU)A$amrgDs#vAsC7Xf z=NmfN^Rbov?Hy>}iQicy^{j_h3bLt|Xm z&{4`iJQ3RjbEOLZL=R)sZ!~u8=N!`y$i-m+7I|K=v$5&7J6AXD-`cV;6Wh{w+95HA zNBSb`cim%_=1fDFH!jKUf1qPMzM-++ut=5OLA~QGDt&ykN}mke^1O!e=+@OtI%gbrjLP82-^V`gH!Wz0kmD`S+OCA!u`Z#J^o9Q1sy zfg5McC5LGXKF`UtGdC)5FZ{{eX*uq1Pi7s1MmDCInqTEQ$NxiI=d{>4(T3->M+s90chectQ*Hpyhn7ZOBAPT4YxVGDZ$_zh}e1vwvrv zZXs7iH+{*ce)#i=LX%<_lw5zZ*M;~g@k9M*u`>U$PWI6-_R%QfN{z&oMiW;WLynGE z@*~8NM`oBimwnWXy`z^sQG7x~FC%b&Q@NW(FL??-(^ezhWH5;qq^n}?>wH2(rx!|%>}sAgl+A;$esmew!6c!#u@u5*m%FBr>1kN=S|zw^kU z@C{7`*hG;h8YB7sk9}27%N##FEwZ_7tJb(Hxp`$Qxox&;%`3NsS66OlAKA4g!@X_2 z=5DJoG|D(iTiww0dd6Y{8=xzXp7VHG2yibL0yo~?<3Vgt&!v~z(fNeW4ekpv+ z@Abg80T{msUj${U-WpirK`>E)TboQwV_9^{Y3A89>*uVInrt9t`P7u9Qk!ga|(~&MdQ6rN%kCJw~ zX;1iY@jsGS0r79{ju_$&y_2;|_WHAwGgIEe^)dGm{GR5wJ0kpQS<%y>18DDd8QtPv zA$I)F@Ui~cIJ>_enNjp|XN+TP2qo@$!Zu~GcoR~(o9nmtDH6joE=nI|4HuY1e!ajRC+`%#XXM?U`aJJ;A(O&`_>;l6RcYRC^y`zg=!g!@ zJm)y^w3DCE7ASmJlkvU(H9XEP;aM!I@;EYHBkM+{VYGK0@b5C%(v2d+;4!szC-+R9zmsY-!oD{IWdz@kj{^qL6He^Z)s zD|4fJhTWe*n^tgU24~&335?O+XzzFwb@42*(98|@1o zyYI5M$AHUj#^hGo6c%$QT0*HVDTmw)f^R^_Aw?sL+^A; zUoth#o4l*0>6m8l?(3{=;!Ms6!EevdA?_@t&5`~j0e>>}-$0#$1Ht>3;sBTh2m63c zzEg}*Hosf>9v`*JZpNsZ{)pdVV=xFwT&rqgI|m+=*PN+Fg&#+ZC-?J|~G*uURG$2y*8TR$3@ z+6;|Wk;A0oo@RK9AI+wkw;?5}ta zc1?XxN=hEyYy(DtZ!GYQ!=GR34ArOWQo-$nFVwq*^Ke8KkX$N;-PMKhYemmf-7fV? z+h%xZ>3ccnS(7gfpPd$3gZ=PYvi@!v`b3+9+*A09q>p_l%pGCZ z4)28*ynw&)w)6j$p<=5u+{T4IEw(1Z6sFP*rs`Sov6;gdu4fe zeuQO&stnnaq1mE{v^(5O*&CJ+8$XAujZ604b+UeK@yB8MnbZm&V9~$T)f3Cg9$cO>6 z)S{cC!Qt}9W16EDuPKa3i*D{`EY1=e8B=a=zxA7|3*UWp%L?JqC&Q~|8X~+Y$h}EJ zI?@L;%LP(#MQrN*~+VTzdJzBZ3o=N%lqUYZ{LpfP6p5 zZ(;f#oPu1EjI2El-f|H!M)~*}rXWL2j#YlK;R?=Je~Lu!8<0)t6Y%F^!>-3S!OSl_ zvp0!ni{jwt`JX#N`7iM8z$G#it;O zu@oAXG7ZdaX9@Nsep}F+_plzZ9@@lbeo}Z_^Sj8f{ajW;a!Uw79MoV!7l#;C~k9xjr~fAIKiV{hBcQ(=B24zl9stG>y9@ zx|z7Ut`}6COJsyPekIT53o5GX!47r!2XpOnk(2!|#Hw9Yk>sD&|6lK`s!sHkRucz; zEy`ZkU9c5ACGo5F^nc$-EXta&XwHcY>w1wjMPfJi)@i=|&_@mZAa2f68u?b!cLj`aa3A-1qAs?p8B4wn1Yk_8HNIGlq@%jA2Vwnx6Nffbm)e-IOtY z1&ocIF+y(p?pOM{Q2mo@{ks*pIK@T~ zPhWNq!A}4kvST0lXM_h~?X2c|u|q^QkPFU+PX_11Iipvw$b1BPjxtay~F`8B36ZUw8+A@7S8|7zyABo=Xh^1 z^exXKp8QE6K9(+dcblgCc~`R9i>^=fFPIJ!h(G2%2WZZgdMb{V4`Juzn6QS>WahAJCp7WiB=Y7GlUdoy9 zsXt}QbSJ^rp`&Zhr<|!naL10}se7I~n!z(m zHM)HR`b65XR-^Z${HfR1HHqI{{u}F#rr~psZzS!byRNnR4nd2bkdIq(ar+ht{@>E^ z|IhMT%RVLfCd}v$uwB`vGY&$Ve(q%rd@p*o???FTNICJt5W89GU8d%d>}wx$7K42j z=S_=l1=&P&M7`fJHOu<*27Aw5{Lc(L_uO)a+YNs!@h~@!ChmYe8vS&7H*=hMH%#{K zdAyU@O7?WyP58>A3t-G6yvfXO>8qRaUiuh<;V^9%r*nQJaJA?@>j7HAk=`%4^905+ zbjoT}b>W{4*pACr`o6(FI|8^9%IxhQJ<0i|!2L4kgbCcT7ncv@9`Q2oS_@6hvL=w+ zrZJ7HN;7#=ptB|6$hO8nERV!U%U<@BA<}gQ9Z@uMB7*%%^aSg9wwG@V^e+=0q?kTz zlyds_Q4_Jv6>Z@EL&)}j;A+!iy?5~Jp{S0^POgeL^j%z5gXX+-r^I_l6Vu(8a0uS^ zQ0J{($KYGKpr?w_cK=S|@RFnBT$I&)2$RXNIa$SZ$zJ1PzEr>y@x8u>E=7;AoV`zA z>F3+fcjfG*gTHg4QtXK*Rxig1yAn6$Y#;=rg2sw=a%9V zsr5_TfcQtALNDV%FO&B8JLEUG^GI6w+9n%o>>TtlOXf#5%iJ3PmSbG#bI|XYyxY(< z{*iroBkS(R{7Tz0{vU^TR37G{PtG>*)CugF$a4AIr+o6n5jnG1Xs#4qriwXK%U<~d z_?W$H%Woadxn!q~2V(91FzS7h-(&C(vcEh@nPV!}Ifwg9LpWPF@{Pzr@;!XUUgX22 z+{5#DZ#Qk1$x1Vu8!0!cqA2W`%NlZfru>2oGqV4ba=Zqz1^b_Pz zVV{Xduk4fOPml-V82jk=_`SzC#xlShct37q)BDw9e2K*NeWXTM23TW%$FtvsDgS>k zekZZz%bb#R^bP*+9c6I80M7P;vlQYoUII7dP4EnWpCoYhp)s2KFt5<7@JZqixRy13 zGc+K+rIN>L?J%B!R~zqIkgMf8a`gIbj1hVuujGSpv3FFNE#3(3B_2}dtgOfX!Mqfn zb}DmK>_3k%M2IO6MOH`-i;yglFWn z^%%iV@3x_hBiXz4bpbreIxxHjpAG!=Wu8C3+|)c4zaa}{^M|V4xyTs~^qaY9cK?_t z<-adY`5(=Jj>svV4G*4&JT3aGKd>)IJS{wzX9+N#;cOtsPp7d2I6^e_)5_HtDf{%ZFB1zKcE&eYf}A-5ZY%pabjPHSbb6IC*F|b`9b(EBHp_ zsmbVjj>B6CEhS^S%*1|B46aicpIUIOhICYBL%TUj%~8tWR2{1m6nr-{;BBBjs~YKb z26e*%W698tN&~vO(D?%Jap=`Xcs>@pFusezr}-kJ&FegBHD~;;R&5IYbId@Pd(1@T zmpV*8RO!X^K^ax$X7EiJ_oLuV=qN8J-#I0JKe!RUERpd}v0q9b@=L^4VD_fahdJO| ze1#>K-#U1y25d|s+iitzBrk>!-v#-`#5clA)iMT=eAB>K3BRk`o;t}hdR%ggM(S(u zR`&Z?gBo^@y2!%`KM@<@gpVCy?Zxk*s2_fwJYMO$kV%e1r%Cu0G1uR)LictZUnZ~k zG9|&w^)QZE%-2rz8j>@X|!s_lmRS;rE2MF%bio$y^m(^c-YWIVV7Px>4uJ6)Lne-_m?xo7On>zKCWM z^AX?pM(p6|oJ=;Ml|a74cs;+JoAvPWB0K)cffzf%g`DO7vlGnCoWS|JYsrC7Mm*g+ z4|b%dY1Uyc!()lPM)t0}@VxxBecU-0@B`Km_te%pa^ zoA00@WFH&t?ZH+IZ(T|5pz;#tb``vqNi{Z^4Gm52l=rUeHFQ)SEH6V|vN-cuFJG=b zy7GJQH!a2prw1Asn4l`Q@oUw_I(v7uH03jorC&0idtZYWkmql-G_7M@9zZ6x^V_=^ z{~(^{f{$K&K3RN<2FPDr%x~|oefm2`@Etn7BKVJrYJPk71>V&M-;u;m1Iyg*{nJ~O?&FPJs)e*8z%mj5%W}Ttgh@uesivFS}8u6Sz1Jw z(#&1sp;>Gop5oPGeGc9|O4(|BM-zB{PSy@Jh8VW$!ol9|cD#Ivm3eO&4-~Tgw%Q5_Ia-mCEe?@XS zF?F2MtTv6*wy$vw*1X~;tYe>e6CjW$AMhEnEN)FbcA$vJM>6T0E6k4fws z>()EexyWeo=B*Za={lVzC64>FvE``bk?Lqni)W3Cl#7Wa0!WCs~}ixn^0Sw5SNQ9h?oFfCJZh?lor|&Xl*lt zv{kW^-rFys+};M$jndlIwwDBL&7##PO9Enk&(~)mlNfOM-S6-5`y-D}=JPq{ea?BG z_j#Z9cHU=g^;Yd6*!-O{giVSuQGAJa%|Y_~U3u6$IJ`BN_2^|in(LbNsQqioc(%lO=v{qKYAS>G$4ox0VH-N!@uLBwthj#@F0gJX&d z(Onkg1t-_EoAXhwfaI)%k=Fe;rIU>nPqW^_#Maj#*M`TZ*Hpu!!rZxmu2)~pd&vu> z%xBRjbGIc>R=&@5Y4Bitd)k+sGDV;Cnliu6Lv_U3&%ixg0#r$A4qr zL9^av+GtyMMy?NEQhS#VdwQwiGuu_nxqLcrK;H}SPqyQq^y8oW1~|z_uPgdp@dH`U zRA&ii$T_AC(TX4MAG#+;en?`@UEuCj_)W&wEnlSiC)}cM%+xuO`S=)B-YM(&7?b*y zFM}tkKeEG^zD8iWze2v&wXV$?`&Q=a3BLV<--=m3b*p7_jgMJ(a>J*MU1ZAavs@!* zhrh_#4RUydczVgP5#n4(l)vrlukvpw)*=%eNYB-~T;j#s_{+mat9)zs50QL4DDVxQ zN8K4sHxf_n^`yhwk?Wrd6GLI0Z?78?j`#*wH|4sF#L20_O$q$%qs--*!BcBR|BP+% zppmmaMLS8fC%<^aMT{5x_yL`J;rl*UrfE;i_at^8Ym%oip`)7TMtI3~zK!Sqq!fG+ zYd8bM|Eg1o4p zS7{-0DSNIJ2k&F6h_}GF$-dTz0P7#0Nwu)uJ`VQj$ zhw*!Zf7rHbh#9_mzY96h8++ud1zjWHhn6j3SjQXBJiPTq&PHLw=#?& z{GI)shaSRulpa<3ZSGG5&-weI6=*7Ve|YO8;row9=hMv9LEg3V$9@EUy-oSxbHOw0 z9fPYQ@;m9QRY?nWamG_I_`zq*{sBY%%fbGU?Q(S{YR(IcnpD9(DgZruQ%ewQ? z^gTw6LrrF%6Jw=Q$;CZ2y!9mO@?2|DF(^gs?M2uY#iz@8>YT86R;Xd!)&&jgx2As< zSz_7zXtz5Jc|E;jQ1aqaS+0zx0{R@rMw{TuV!dT___zqloTM^Vpfq(_c1Mlb!4 z|66CHPbXSuX8P|--c8kgd_N1Y)fb_=CfL58<*p4|WlNZWk6eBTU->P>cDnz*ulCv~~L}@Zm8X&E&tUK16;w-rtYj0}2-IY=Gr3V=g+gMZk&o^up&sy?}$jj=Vi~jxDozkQ;11<3W=YXX%<<9RP@jD;i zkoS94@Ev#OAEs^IDqI&~|4g}kaP$fGkI+t|<{tJQ*-4eR;~sd7a5)D2NVi%HP7e;h za_>R8|(9%PJZNC=%|CZutopI`zd)z+x}HhSijG8$#U`E&+zU|%36DU zVr*(b(zZ)?dTXW@dd>Pd-Y_R%73|xdgV3lFB6@{4t!?ye_Ou8^}RXj-@S7%`_K^fqoK%9USv#PRCkWa zXQ;DW+$D^B=^>}In;0!CXMO9jo-I}56dRRg`VEg_M|*{H_s5Yx=bY@>BKzSH`R?Gm zHzXIEH2AmW*buQl<+{RK-=XXg=w=@_fbEYC-n*zG)Kxd+iZ1DqIxpu}4gt>3>D-)m z8E4`sC%fGO^p9=pOS{sCZQtAWU03uzXkR&sWD6`Hu17N6YnA4C_m}~liEduux9C!9 zO20$+F^yjbyZ@s1*u}DgMyG+DQs4fpcl5o7zJ->1w`Hv*=Y{AR{Y2~gojb5m49!5F z9TRJX4{E+G{WZDcD1OA&v?|%fI&NdG+7hZ(<$HV`vgI5df`4%&b|>b@$q&`WeB=-I zb|i@hV^c(?Sn&pYznC$045?a$?pIUJnHRMoJG*#=!S}0)Bfbs(VdhkUZwG*XbX*bl5CWbsybK@t2e9lysCc)*{ahqfWXRj;luh~~^QlAoGy9QrPL-9O*$+0u|~ z`3au4`9SSD*Y4VN#_n2o)w~zp8x(zkIEB_B%)u@Ab?FzjvsD|w6J??&X{Q0$xwI)? zOD=87*K!$cTE3QKGp}F>KSMS)xn=a#9IJFl{?~ji$M+!pb0Xs^LC!LB<1nrY=-+RT zTkA%8d=cftN#u&cFL50CU%Kc-=I2~~iFL?_ALN(t(uVfrqxd5@?}FTwO)iP-K;nM# z7q!S2G2HY;EMrXZzKD(ZA{0|2-Lni`$?-)HkGn^H2>Bz#Q;uQ>kUyfCXV5Sb*xUDv z_i7DW-wKIqEj%-Hmh=Ys8?;Z$H}MR4zXYd@r|kVL*sF4EABE00)SezXOMVT-d+9y> zi}O)%j)l2$d=%^PX_`5?4bIZA#^j%<;$HCr#uV?LXavXGp~HXCSK{$1UZ1@^YZ&%` zU%8SJlJHCH#vf6^99QrxrS3D7*F30yea?M?_hZ*CfS(k>SFVD;TuDsb709~W@vz=) z>Sd}Yo92%mf}flFojaCr!J_(hWcI{Smi()A8=lOXYq=_~h_x;`OgQzy!zBxfU%cq? z&i;kron_s5={^&2uGQaV%Y&r0qzN!9h;>?}jS0jrj?kC?Rc8oia#iyK=#gjT-e`e#> zM&xYbAxv33k^M%rCt3Ura8_Z;;@DBtN5-Ss;lc^+I4kZj7#USRr=ne&mE*E7Zh;N_!Zh55e--d%*u ze2H1s)yckR%E*$9&&v4)rPO~rn(pOJFGGI z%Z$3O6?C_$9P%!7SJChZ;HA(64 zuLwxKItae}t3xZ>JpMrbOyjNse$QH+yK*OYbvt!K)YbjmMZ{Rh4q6VA+N4Jwv7xZY;ax>bdUWN!SXno;zgtM)R34Jjt!! z!-rq}9(P($e-dRj4jw(4JdS}$#EhuyulP1eb)5G@^*+I@Gl}Qf_lbHxeE93gE|Ykk zeLuoj^)h{xuVO7SuC;#CV)rmkY(me1^Z9>3bYqY0f= z>~H&*-`lko-q_01I~X2F9x}zQht2#RE;Fx}$|#?ng^y(Nm-LMTJyq3{uKn$UVha49 z0j^Pd{Y35>!v+&e7{vayruKU6x66L^?}rzEwV*q|6aK#m?VopbRv;?|nIrO})^A6KacSKmUsNJr z>|mdhE)s%YBslPyhdN-I?=Lj!MO$i@__#$4=uaBI6F;?s^J)%$&#aywJvo8=hzBe` zlIn0C4BM!DI;pWj#_$;9Y4vc{l^C@AXUM6C&Z_&$6(^WVpJn%rFaH(0eDesS-l@~V z-Ywf#El<^nFTc_$pWIu18L_DG@|e^`t@&t1PqFw!wmBc7FP*{2WnQOJW)HTpMa1xi??7(EHWlLkXo5uxzD%PY{+mvj zdeOlj-t3uO$G0%gsCi$libv*a+4Dmd|Q}=m_F7Nr_Ab;rD!T$1}4Dm1j z=}`Yo^b4BJGii36k++23W!STB;91G#azA`>H-!J@rdNp_Wq2pR> zIo0G9dAu_Q#l3?!%;4R)_;>JzDZFcluM2Mo=-pX<0X%raCwUjdjxXMToh0R6=58jr zNb59r9-|vwb&ukZOq>icx@S`+7oOpTS9n*g?2_FugpF47em~DCHjGsCBnL*_AYh>T zm@pEI`im$dynceGv+j<9(^cTJ*<)DvWPJ;tb>OoZe1n^@+GmN; zxkB`-0bNvmH2a7BU;Qf|f1`i-)~b51D?O21<|UljIeb5P$U4S&OI{!2EBPjH%g1N< zZ`?mI@}yzxX}l;H&BWI>$CVMu#ixU9xAO!xwK~38ew|F#ZAR=K=BoDDD~Y|tj>meA zGM3Zm+p*DwdAqJJTGOnctXR`op#Cpz&#BchKT)PKj!Y3Pcr0|!;$PIub3Qs;4glM^zk zcb75_(XHe|@zD75W{PEpFYJzoyA~Q5H_n1}!2_-o(Y7}U*>(nF#fIl0Ca%oLMm`pe zCq&O+d+ff6Je{RUjAa<~Jv^#2QYNi3-r84;L!#Z2_$5X2qIc2y2KpJ=#62M6gY|o` zS!hiAX`6c+R_J+xF|^X(BKlnfzOUpN;(58AHr~BnW7d7pZ=*X{Uk9HH?Szhbs?B=- z?xhWfmO~dU^gFaHIu<>PmSYnxoa2F({(78q8?<54^-$UqU5PIB?3piG z@{wD|U2}4wWa>odC@Cs=TC$`=Gd;A6oVrK*tBYqHGDUU{HfzTB6YN;`u`fwJ!H2yk z8TG_O7PKbD!4H*_SnIikzOOa$m>gSa<1t>AU50FQ z?AoirV+lB15LGT``fiTNV9%4iZT-W!zu{6Kizop~3$q^_S=KCwHIA#Mp&0E8s^%3WP@c)bX z|2l2=ng0W#J?l*QsarkJ=pb-x=~dz-qH~?O)EUd5SLcD5f1dX+=QE&#@DO6$@muLU zM3`84{ZA~98K=iy$#>)(<~8Kd!Wv`hPUur`Ws48PR}@Q=4lb4;&uASjheokS1T5Po zxd$opz@~yc@vc=*7UV6iw)jFLYh1i8hy6eOK_i+|=Ba6Bel0mNH5LR8vO}PXyU}$| zT4-xQUNF1txtrg**B6mHXB+=jn%OSaX0m5=~G_lNo)K9@_(B3S!bH#KXIRz z>^H*4S-Xw7zGYL8-R27L#~r4(&WA<|$+uvwxj@`}?|)EnCqIiGx8qKZUF#+vg)6p$ zyZ2;g$obY>Qy){l+|ATu&CSp^$*nnEM$MzVD~o?ulu)xla~l8dO9?e!wcknpOf&J! z{>56vA2QWVpS1?%cMH3rocU~gzOnGvhLGHwU-_zWAipii(UMS0*ryRD& zO+UPo$9CXxnR2*2F3I9w7+_qVu0_1Vw$%HMab3&1alF&GY}vD3KE^OI zhUPAuR+uN=63!}=Oj_T+kME4g?h@_QLc?qMo8qmi_YLAK3VUD&G#p3@)+dq=M(3C+ z_&qWd%)69*?RESb*SHc(!uW24FJcC>_VN7TQx9i(*SL}=L%)Z34wnpxzujOBWOE2%z6GsK#V(?~-}rfM(@}Vn`YxIpNsP*Fmz(pk2^|ga${wvLYyn>Ps3z^65y@(y* z;y)DR^>7YnsOu|PuRZ7+^UM7gM_vovGUo?nMxJc{!ii}3ouLI?;t%TcM8-gFtJpf^ zLG}4k`rf%ex2dqTx8HA~^lbSY`6Q}O8&n0_j}aG>UXl27+|~aw>~s<%sZZo z0(U1EqhCw9GVzxOZ=LhnCk|)v{jS%z2Uz22Wjw8n=T~}yTg9UGc(l(AL1uE1LvAQ* z)XQ4+!Rr#(?-HX6;B~p2h0uOy}xhwl)-A0U3B;>AxgpTv)Jad(vNuoG@~&A(u86Zq0S zWW+=JCEK#@lsg*zb!^19wn{uDcGLaPJ8h~x&WDXsU(B{>uhQeIcu{uW+tbI~20wd{ zd5WZtjoh}3Gwg}n-Ezib(%MGncp7N6AQi#s%ET$yQmx zlHJstJK#IzDj0tSFu~c3?VO(y49!(@V#B@@*vetUGG{!uxHVJu@_?e;Ubo z1I93sF_aHB4iO7jF&V$Uml$rvi~kziUArd`xCETv22W^maaSj01v@b{F*3}R)Rd5# z5b>q@BE#utk}D}Pf_ca(c=-AXJ&oGCig`BtedS@zPrdR6w*>R<=C_~UOL;!VvxDab z-tXa=%3mITyVhUOmHs~~4=?8b#`|2G1(W+X(6`xdfO~*v1$;mzgKeuHYONs3SZZ`gK$=+V>BvU+ZKKAq%6>mqspX9sb zJ;?!&^Z$w82BYu+;$G^mC#K$C@A*O(KL1E!SLNYK_!f6CL?)jpINVO`oOkNRt@(r9 zon`n~+Tgd1tkG(BYJ_{w4$sIbYSQ|SzP2XnH6FWOa0M>~ywoxd$$0nEp3dLYf)oAL z8orBn(k~L=L!t}O#FjUEX2MHigLx-7exvqm-|!zaX*{B5wPUzk+{2L)D+7-3`w!~m z@J?gBiFeLeZ{&YxoF8?3Uh+Dn3|`Qr{2Y=Ew7*CWXu}?({Z#*pKlat3OW>cy;9vp# zw1}9PtB`xHjKXV8x%~BerQ3XXzS}&?*pmX!-NQ4DefS9bXM}u4>Fm+XKQN+ENp{E^YIHtNyy-aJKS%jGcxpNE4&H*`AwQxs9|GpjkAb8|7h#zYVd-+e*cg7lA&zRLe){WUe_{;Ng z@QOJ*rm|!TL1L-0tFz@tM9V z;-a`;40`bsck=W@Y1;@+yKWb>G(9JE+XDFRa_EWNU~kP{YaFU}B}6h(lOmH?m#5NG zn=;|OMbOu>%>DDKbpHr3B+WxzyCowxGA`mnJ2O04k-OblkvyI!Sod$>U)cv9CL{ZC zueRy0-VA-|EMFBgHrA682`#^;s~Y-qaDcIBQOHdmAI%}SH`ZFXkEgT6;37;Nht8_7 z8F+!^(AjG03uY(|u4t`n{rhOGMzmJ=0q{Z-$ej@f>uev{_pClbcm3AF`=M zV(4v*#=w}%2B5dhIC$;&W;AAvS9gl-V*Z8aCTQvyXC2?Q>5X-N2z(#f?lC&wz}FIn z-m3f2Th%$}?aV#kIF8<`YCNPg=sq8nC;kAq9~7%4Jy1M2nR};NxL?YTeiB0d zQ#`+mxXyrqtqnP_l;7wurhXCO8M=#eG|<^(bd@>iA(No#u}0OV6#S=oz&kyHxZe>~ zqqzgM>y7C~wEbdNRQleo36;@y){AoAbFPNGQwfoF#+KpnMYKOkCaz*{&6nKDz8zst zJkGwLv#T!*a~Fzxi^h z^e0zjt3m$jAAt|;km`OIPOnFWWn{}0Lto(dh{Y?jO2X@rBP8lMdlduntZ zbbCuU`=N8{S@4w3qI6@9{Ep7v35=#3{lgJS=M zZ*C#`6-pd-F^`!Gc)`YC*K_cz_9^bD?uM?$_Tk5F%ic5!f5!8i6{^>rz_}&45!p9f zIFoEUY=a1v$nngUxq4WuD&&FG?V{kvrAQUu4x!iG71_ zj-5`=TuSECorpfLRkw@(Q?OKz#?N{{i8XIN|n78wPrDW^Ojgeit z_cwDxq?~pR(+;v@Kyr}QUM}iGYX3$4E85<{(@+2Ivicm0q6g@^x#zpML-sX%*V$!n zOBQZ>Ft~|a_uK`sed)$R!;J6TO?lP~vC6|bg8%GU)I*GM1+vGmHAA=ki#k4VU|eX7 zR&MreV`|07X*F3#kpD)y6N^7nK4p#p|NE_LSOj}cpc6k_J$c}C#$I<&$(A_bD}`N` zUmo0hbLh@F7XhczxU^#MwDnorY3IkrV_8QGPsLYq3m%y2CLa>Eo3+4um9dP2uFrd4 z=lr3E&e|#9!$0TjfMQ$3gYM@4WALQY@S!entFtY#%eO5tx?f7f7C+y0==2t&zUx}< zJYnf&lhKtv*m!;?WyK3z*g^Ms#_TEG3qUii4|GDfF#Ae+ud;6H!Hu#;zQ_^DVd3PGU@C3B*pYQfO zKh1+qkw9)}+G=q(%=@m#ZMNyAO@o|H%|rO+**13^|C1zk^T~^_51%H!tPooa>nVth zOmrx_m*`ObfwTSQe2e=1E4$xygRL_mMin`us*K%+0esrjvt?bu?pHPhcf0teF?qtA z716jp!Cl+TNi+6;^)bGGM^%@8<=Fk)Nk4=9|1Y$f8YG9y_;nN z|GMQ1X+_3U8QGqt3)b=dGVoJ3f9YQBUHaCx1V1=@Hij;l&mP=zix~?R=$Sv1yQlh| z4}bSgox8QpLe;Vt8#i&L1YgL`yP3yq&auGze8io*)*ni;QSPJaE?JG853wgMiw1O|1!QZw5AQdTM}LF81Y3}KM)qH<%Qw;Gb${Zu&pf(S=bno>FOg0CVbsrdC2`hZ zzJQbXC&Zk^}^TvwL)|p@Jh2klavD*2=h8C+nV;mAs70VvN_1nwu*V%XA?}v+BV@krA;mBveUp8ZCO*guCBMVFZ3Msz? z--YMG%<4$%1f#npG9+sD170bcakgTo(7#$I=nM{bgu}<$uL9SeOS!L?yOMbCy(Me< zTllQllM>tEt%6rdKm4x8vg$l3U9A(nP5w2b#aDDee@}pxh?-v*7R5KH~KYh<}~U_>nbBwUu(Jy-AHRX=SpMIoG%5V zxzNLZdKP#6hi6e&GUtiI#0kvgTzfe&1Ir&u-WGbuyDj>VZ`*TAE{i6D=WNFI^h2rJ zLYz&RXwOYK^Ab^hNA|j9nZ=QD;C$p=rk^R6i;j1sFxXl4(tU@KF}F&WOWD8OJVWQ9 zjQCwG-z4MqtRQ~VGZuT;7;G}!YZ~xI(sQjlmg-99L{IWva+wtuksN!6-{`v?weUCX zsp-#$m;RG?I={!6!OjRa9<{%n_7zu93$K}aFMedoPcff2b?sPxV^<4xq!-kZ^JoWr z>hJuADw?yRO_+p(FM`dTY~k#OSxojFv|I_Sf=sg(Yc=}jP6^X z+!dHq5dGo$)UIC*mR)XmQyOvBKk}q@Jt4V&u&=50Zk>G_(X`cL;AZe{L-@47puN2BXUcSR>$7QO#;C33f7 za?@iQC_mOnvt(m_e@*ROyb|3gE3%<-?6x1RU(}U!W`s#slX-@rt9-5FGsTZbp{v`F zv;6!&Y|YqhZ<0f9BXl;AcRz&o_EGLFp1+0{+`+Sw-y5L6CSU(z z*)NB#LveKdXX<2grH|;k9J==MCmr!5aX)PnhDAl!Cx@gnKk9#a><^S*#hSIoB$~*K z{Z{Ro{ZEgnUA3um&j)#L@;S4=nXzA(6Msmw*UTiI;>G#Uw$@BFYi5`+44ZoK<4J2WwvAjfX4@reGPgYn{coqt z#LCQVI$QW#dp%5EGi=+x*r!Llr~S@cFNfb`um3UM_fdX1>uK1t4{vQ^9cj&!q1zO& zhO~CJ(5JiMljgc%5BehdM3{B6optjr>*fHz?_=F)od|Eq(3R%)tJLdeedt_-=6^Q) zLO887$8F7jBX}Vm)5PENtf`fJGkLT<=l7UpZ|G{P(77^qp_x=Qr0_4r@#_qCM}ayA^kYjH)Ml!w&X{8=StdckJ-o z)O8)dwO_o|an;%VLi>dF3u1^YST|o5-DJahEDly-KUkkW53FwXNbO15e~w;;OoATQ zHU+scZOc;0!8$`e>HlzU{Mumszi!4xBHTH(6TZ>Fz z>-j4-@3CFu@axriKG&7&;~oI|;K=Ty`Tx{>?svI1*sbvn=C|VHB+u(!phUZ@^Sgzy z4B?%(GCNtiG`_HD-cj3^!oT)PwwBBzpRjDjvf20_3T|4GUA8HMy}cXT-6?E$f+1N+ z@hMUGHTJI>)!j_4kbTg15Pxt!a3&%Lo@Op2H$AuhhP@Y1e))w)GCaGpc<_d$I)5!6 z<2Y;%hRf*w^_`X-PB}TwduwOgl#*y}`K&qPkPGjt z3~p+poyH*<+pvS=CFootbNddy(0o^7M>*$v|H|6?B5mtT(#b?C7mJgBA03Z)Bl44= z-?m`Sn!!_ct(k+!uS^aw%V(~0m8r1~=v6uVW)X9=V`)KDx`h0Hv(YPF<(t;-7IY2e ze_4i(q;LPj`%1Us?W}W1Cli%Z!pTQJa7>=&Ua@x4Woqe*;-QxD6dx`FE^%`8=qY>5 zm_20OiB)#29(Fu4?t>VODqHs~N6#ulKP0z^>0@(X%NA?ueDL{m#qp(rvw`Bq7TGad z)pj2ZY)~!4RS9Rpr4JmAz- zIC#^XjAN{t6LiEq+$Uwui^dVWF&HI|;_O&{VUMNG9!t>xV`;F*Ql%$%6{+tU6Sl_g zhJIseh#S+nVlj2+ff?`avEstMr!m2|o!rGI@oAh`;vpVoP*i6bG_HdVtuZd;FJ5Mj z&#gPN_IUV{uA%XjeJ&U+iyPm=_V`-u@r4E$U$Z^FT6=uvIFowE*~&PZ`;D_XZk+0y zGk5H5(CXz;D-KTaZv|1^OYg+?musvCl&57V=eJxnC$T@BSmI->31+OR#@Yrv#TgQR z$sBrO-{m=OP;j@_)_8BjyymYPyIU_Sh#tkS+cv#0+CIh1T^X5-oTz=l=ORAksfV{t z8D{C@?NbIv+mJOLMSj#Cuo3xEx!!vC|6fl%%KH(KcFO8^F?#=Yo*nZ!lm67kt-FaS z_zi#lGlh>A^QRbtjr`q-^{|L#yVsPq`fZL3)B@ey=&dKfvPeshRCO=+8^Sy%l`abp9h)E}JTs9>7 z2DGC27fp;NQaYGx`wDs0igQJt|wl_j^y5nUcZRZ0^wg;20DC?)* zz1UktL#@+2_}~Ub6Y#C|r=M>V`!4!v{gCuiW0wy>Kf1?A^ds7FeZ{rg1?`AGX`PF9 z8irW^8wPgJ?1p&`9f`MnSXx?l9$H#`PFlL!rlt4Ca4&o0W_NM!A=W$ro7MzujXA^+ zB44mJyL;fXJ=ocLuy^)gAMNQG6z%C5%-@ix>}cLm?1crv&Q|VD7`vl7%jFKvI>r0C z(1z=Ci|X!DY`J`RufoTyoKczNi^`5I#HKkEKIa{4jBZ|S)Mw|pSG3?C%WxN&^&9KL z*N0o<>VNnB^-qF_`1%Ft)EVy2nDs;L)z^F5u}=Gj-kYg`2UJ>HqJ7e`7p(I3F#jZ=sFc zvBu0+Xr#+CHh|o+r-lE!1%syvW4d5unlP?6VPwWO0i#wtk}^jrOaB756W{N^3}*t9 zz0HKj(}c&rwNy*2^XEy>1T=!caZ~^GX3FRLu|YQH_ZK% zt;ove_<5Red75x9?uGl_J(`ou*r%QGQ^pzpTzn-CJTG^9Xihl`5@==r5-u9`WIW)c zTexoX5NqM$fBF{Y-B;M-w3iv&Q)$|AF0)`?%h?F|JX%-lT%tOljCkN%$T3^SMmW>qZ>6dPM3@Pw9vNK6I|sbw#MsgSSsDUD(?H``aU$c>KHnS z$|O^!l5+v9TlA~sz;ocP4ftMQ1tu6~E{`z(>sO%_f7ZI0S>Pe~aA&a+03hL!cS;qe=pF`bj%Io|_D>yqwT=ls5Ga@_IyAJ)0 zwP?L3CY+om-Vq-jX2LmO{xTjW`B09b)82i!X9oSP_pT{B>>bwda_jGVh`Y!NNbg+t zdwf`SpZCZ0`E7Lchq<@)74Z(y_XN?TwP#Fn==+VHnfL2%SNI40ug9OBeock+#q-CW zO2^VUn?___&fsuH68(6jK}=kBmtuE{z9K!`o_FMB&HHcYPslyMyxZUZTi?k|s5wt( zPI`0}gz>ze1$T6CRf2L! z^1HZYaLw_Hjr!FIYU?wH9~>TB)y_H)UfVbic`x?HYT6@l1iA5j7VX-wz6~t&|5dB= zKXX`RzQt28vZ$LoR5^P4man1w>JbeuZ|3h5xeq=Co#kE}T-gHMs-D`crM*jr8=J|U zwIT=G(>=r>9_72EXS8vas*K$HdM7{Hv?2KPffL#p-0RRoh&^68d&g`3p%?E+i-y;N z57F+?hcEY|had9$qtZjiT_2wwt`I#OkUhdW6Ljjt>Y_J4bu$B3B)|Y%RzE1{M`r#{n>MUUGD4%!A~5O=qFX;bAZFUEf&Ci-z${ z@6Ec!M$KYuvl!=6#>u@T=AITFZSjKw@dtQ_c*1g< z23}@AD=Yj|L_Dd)XKXh41ozhyC%bAUc|@MynFOyIxzO1skGQRUGM>-u0Ip!(V8hgY znoHfX!Wj{7%a9tu?wM%RAD`ffW{`;-jODRriyt^|PGk3fnyFd~kE1QNbN%!+oB!RciNcVBb5Mez6whgOHr$ zqMV0v`Yu}c@lCXx4xQE|=-vfiN4Z_DdqvNdCG@fG%HUq%*lkpecJ_oa==ID{#?Ls_%hg}v!dfMpv)121o_G2s+R*n5V#rg+;M;Zgl|$~NZ<2R? z$lYU+tu>Yu>g3Wl$=B6GQX;ePQ~x!~7_|_3s`MmVYXctc$P)YEucC*~0ZTmMZepif zufjG|g0F*ene(SdrYF)r`fsj5*1h7QMB5JjMcY?XU*&V@i$mL)^d&STvkz?-Qm(Zk zSf5KQb|!zEF}kjtwdU|~XslvA>p-vscNXRU0xwe?mF1jkjeJ)43s;4S$_PyS2z2~8Q%u6v#8YA&+L zv#7pC-JBH!-&%hTk9Z56PGeEukl`f)~4PUOUi=ZbL+4#^Lon8OJ z3HgH@UfF-`e^=jGFUOaFGjzIyWNXbt#0QvR zbj9Cn#F^PI)sz5E}RJOI6^f7(AahArm1bn_i{;LSfVf2WzhwddT7PI512fK7RY zvl4luq&s;#bT%U%@7K_mHf$ETgXshEm->)EyQ-&keFJAYrZa9oV-XFvi^s*y+dS(3 z)P3PJYyjx%$ra_$rz6|!u*-=@O{bjV@lCrJ?cwKGCEJ+BWE4z~h(5`e7MMxDpBtt# z#@T^)UooPm*(+o(Xq$rnfHKH&qr_*%5vQjZsJ1Caz4)}?u@*;dPiBok^R2RVux2#| z^&j8(ieU1>2f*c`!^F5B!!F{bo}SJ;wlI$lO$?>K!hvuzi~b#kzc@V8q1pHD?Ag-D z96CHd6}-K0;-SMKcRKenDt5Ck&wrcpCr2BjW+H2x)_tqA@3hy!w}!$w=KR51H{T5n z62D-^2|Mz22IEkyMf2zz9|$pyZ@kwt)69ix%aXP9AG^#d-S>R=aHD1qXY_rvA^aaU z;UhPJZ&a^7XI|1IVn zdAi=G$8QH_#zbS3Wa?~BUzvKXCwloMppE4r~C%4b0^UXia$5yCKbN9+(Z*>_3C7g*? zZm|XAg0c33AKb!TF#r7bisl-2G>zOzR24suUM0^b!^n|r}S&(*8QJx$jFCn? z$)$~7u;kKmyL>0*@8dp$I&4a(RA(~s88WkMmM<}PRpe+dx-+=aXW$y{I%!zWSLn{y4p83~d$-)m@{#deL)~TTPoqlB2Mh zJMv01^RSDvQ{r{f@lDx@HB?7_UGbxP&3>j<`1{eqGJcB|z757T<5*yF^!|zJ@$R_*hXOF9qXAPd8iGUog4_3Y!%l}$yL|@HY3NHa+UPA&8*K4 zI+uB_JILbKMLPPC)m$aeT z)8g$5@pJ0vjn@ND_}vPQs>BN!-_?xio8b6}JJaNY@%0=WUrs&oL9LCyzy~GMR~6=& z^~v*W+9$TdBUQJJbM~UwczJgQ^`Ag~-!jYMU7EKkysOfFM;|5vLwxcivQiNGYyExc z$}XFKnKmVOWy9#tntKv)yECQh#`m*@wI!HYCQPeeR0Z?`92od!;ij1R8BC$~s6S`Cfry<{%grX(*nj)s?y zGNy)YoU0E%2F5XLR_o&4?c$yK8AfLD=Db86D$hdcYZjmOb!g5MKdAbOJ#*q4zs*<% zig_F;FMN@?7rBW?brEA>#L~GO-C1{0;Nzn*_oFa<328nUQv&N!>rS$G+mJM5VD7(+ zE4zlWb@tw+`BgsISgLz8FALp!ljji0qgBSko=&Ko& zZyjREK;^Wpa;22pi|tGKp)%k}C)xjMbuTM@DJM6w=E0;lm#;$i#0j^mcOCVlgF86u zD%E*AD^B!$=QTep?(%>?5bh4L7ashAZ(D!-O{RPw{1MZWMh>MXF5(;~b-Lp47{uP; zjoTY#`_X#%CV496g2(ObOAdb0fh&8)W%fQOoQL6C|mbw zRvz!lY`po9|N7(X8enFoBbW6Q9A5Aa^TQl%V6Hd=AE{>EG-t>0YirIDn6F~y%FA4F zHa-%te{1fPBOrmfDjHQ33GiINoaww>E`NW#Fk?Eg^@%6&)%$(Ms3Q7zf_Gz)r=#Rz zC}-^|-dX%o@>LZ%ZoJ5e!oyzV*)Go*Q(lx!^&U@pWE;HBTm!7x$~ajxi?OIq7#?Wx zPHP`ho`mp2-Z7j%>LZg5r~GN+toEYwEMkpI{!7QMCRs@*|spgt^ z6nv&}7g94kfpcW$yA8b4ooQ8<%VpnV4l9^D&7tP$KITvK zKbJ8s;BOarsTdPnbwBf{IO6hbY(=b7-sRoMIyKi5zeNvu{MH)NTy-QG^_r`8ei!RE zbIILW5v?_6orzww&Pw9eUomq??t_Tdo7SGzTnYbwiuo%aRUEmD=WmGfssbnK`%{d! z4!r6Acj3{hQ_H*D%8W6>LAfU@(YwYsCVmfhaPebs@gO|xMsy3!P1*$+)6t*m(|L*p zw4Xt?Q?qM!Ynz;+iyQ$1M`6TaUlRI|p zRjkh|S*KU9UN1+FwR4(!tk_@m*IM)EF1NlyGSkQB-FGu)(dF4S&suLG&yCuC(&pDk z;`sHgDj&zMO}@#zX^l(%xAWgD7zDDB7Xn60XWFkGfrT4+QOdd1HU=& zw`+Ot$lu$*lPQ0r-)WEixbpX>OqiDZ{WV}p*Z8>dcki6^%Ha;59>-h^#GjSx^PKYe zIrh|H!gIfQk?#~d{Wx@`QSasH-|w&SUN@ztay)(&Xx-$$JKgYm$xc77+rgRt-u_ze zPA(U{oI_VQM_<~PzrQco>eQFVuoXUL_vbP7rx+i|`}!1fN4dwql=aoG)dTeF(8uW4 ze+|$t;RxJ3roMUUk6-u!U&4>@Bpijl-;1Lg2k6TWKSp16^zRFL6nw|jqpEB<$OR3D zkbxb%`CYS3e5qd{}OdD$e(IYU&1KS=bTT+Any6hy~=Hq>=y z^?|w|cNz4K$NHxC$IGqw|8w2VuJPe3Gw(DwE}hi2kvck|qm#Z;-d9hO-N2Fimm&Ap zF&?$AeL~~VK49sqy*j|}f$=2q5u7bF_f(VTBTF^254B2fPm0y z-%cYsn)Z0fBJ z(&l@{QN#Ns$a^4sM{yLs>hxaPx z`&{3w{ptPp)hUm-{G_7sd}Gjx^>O3)GW{UtWtQ5NeP8psJx)&ey!qXG&hIyv-$$PF z`!#(3$wPw{rn)lDS>|%e+>4wlThd8*;!6*?7D78yk8uu_bBUZeA8OX!V)w5nu75MB z8@BgX(*}o(7P?4wLh`~AA34m%sbk}J@muoA#ne+dgL_)E-WHwi*>aTmkqxrhl~uIu3dfFWf%>zbBSz(JXMGzElUSwG%%Vj|eVyh-x#Y(6VRdf*0)v zjq*X|7%Lk4(PxWIpOw`0+OV}3Xw2FV#Pe4&&X-IZIle+@_o-8s-F-Xpb*66%xcz-w z%WSyiz?IyrIJYYK_Tu&$!QOO=H9)MJv;XLwMf*QRud(*c{%6eM*FeIhmd&$2j!T3K zXix1q_Mr`StmTtgmTlpQ3xj#mJH8PJ=54vevM)$ym5pI3e^d#e`uZibsqeDWIkryO;=+l2eMg_5+&1u0muOsG_LqB+|H}U@HxfdgQ%*9)%Bbv#C6`C}ejPcmqxvQue(Kgj zaH=`A@{xTgU(Pvf%J1CDx)&Y73-2rB?mE-1j4uaTJNQuQ81CCzNDd&=z8q!!Is5)U zsHgIOWS!SNls3joxeRP5_n|v?!+(9yiumPUDd+ffE(RC!C7#4*9Axe1VoNE%(%ReQ zH#!IpcKpvF+FFWFM|->G!r{YZto0svt$fgGN3udKWz`qKoyEN~r_A-=tDp7tlYD@G z!N!w#ar}6rad?Wiy+;SIy?;k#nLEv^=1l(l5ObT(yw>4sH|N~enMJqF?);a8mmHfu zG~eP)@+VkxF1vtZ3qODV(`;UKq@T}j6@7|dN9WSpSD&$H|KO0+_v!4Re&c!~Zd{G$ z7?w;=J_TRch@Q z1IkKq{=fM3xnF%1A7c(SAos|2sXajBmEB%zwhdd9e{fnPYV)(|IDYmF^@+Ki(S;7; ztWn|8!K22phr1SK0~8;hjlb8CBjSBkvg1Dwy~rMD;llBErS+kgCupxu^wQra7Dq1| zDIo4~omTz(K1(naeNbE>4w(kCW?j6*50e!O7j0>`2 zO`eEbOSkY{G`*L+SMh#z;Ztkv3-seR^R8ZZ=>biTFgr;N3Bd-oN`?q|t4A8dn7wPl?CYk0KU?tdYL_s+@XtS|jJ-S7nqr-~RSt z`FeF6UoHV=So=FX{mJ3-DOxczxy*@h_YL%!5V^nwa3DT1k9t00`}Lde-5H-P z?~0PQum2u5opSK>4BGqG`*};n)KXjBi6p=%yqn8f6JFN=O4|7^jYB|e!juue&j{joZ7gP zTE37zehOqwFTM_)2`rEEX*IlS>4RExj-RXWWAta{|5AUxH9&tZ{22WiH9&u4(;<%P zE#b!te$L^``LTDuuO{AyasL2)>c07-&)MrY_nWix__WkV?g%pHQ9eM&r=|X%&!=@Y zePx~>JD*SMG-b}>;T%3Kr=55_>>2%DzE*^_G$U$ z&w`(d{~fu|%IDEIfN$#>>dDq=`Lt@JmUM$I8~yElDCX9Iq;{hg(A zex4f4n@Vi`?^;Ud7;{H1JTNMlx6$P);oj4dsR<2B4R6EJjX5JrcIS9X$Y-6n+hru` z&Pnp4kNVA2qh>93!KYnGiQFmMQOo`qK-a`(v0@^Ag~?wI&LPirNd@DmU<}1M!%B!f zO1zr7`_Z?3_8xBSDShR(U0>`;*VtM;Ndfs9s^VmZ?}1y*f$-jcF2BvU^VtYqlD!03 zs_}gLIO`_@97o1FZu^k>`=8IH`#(tC5dD)JvYxN)v+!A8?eIz;3dBOD^$j$ zQ_JQTZ|nOs-!w0>^+`rkthVV3cKJFE+A@yj+Ue&s=J@^nK0p6Bmp?q)?z_nk>~-Yu zf+yhxsU|N-i|MS_IM$x#|DZjN0QBjLTW8J6SHU`4#Qz~0#3_8f0d zcXTz&c5@C{*0wqKw~u|F{)j#uUBM@RDf6_>q%CWI6Gu#@f?H5v1X!2^dn55!(LAP$$IHwuRtHtbB!VTdLqBj112 z9sMR}mOf?sA&Cny&vA%9B~f1G`uidKpJ8)TPU}N!L;fQ9B;{`!%latlcdl(5vBp){ zHJo#8cD?IV&zwtqxc3SFvN?XhxE$IzT4v2%{Q0Xz4$jE^5zhMXuzouLtO5sCmQ5QM zet3BQF#x>D4!jHL+xQO;t8M^TSq`l6z`E#zVL7z$gbk}dEo_Ds;^S4S;VGhpYRa2? z8hpp`No!x}fBvSDa`CkA4VxB}D`Fr%saz5AX~g^J&eFm~(86M`zkl3Nyze=ezU6w! zk?fYPKDdVey9b{Zk2?SUnHJ~Ii^lE!*Q)>Gm+Xlf7_00h(iLRWl^nVkAI=ii+KcR^ z{rPf`x@pP86Eo%`oFUcuY2nQA9XmPBW>L-q-%@TQ@vbW6Sb(2tPrmF#&z70kN4H!E z@1%^@ZGiGlO!AFyn`h-~w6`=%KgTAjb)py|oq=!YcLqMbeVtL)c|M&{AJ{(l@o?rI z0B3XJaF)*9mN%F|gTW*r9B)M8LsLqqlW(?KL zd%QjH0QFvAzP+3?)jjWR&{90kWnE#*p6Ay(d$#$9B%wy^mQj7k5_d^JMQe&XDup^X<7yZo*FQDcyUL zn7uH2wQ_#`X{_=5G3KrAfN`j;=h5qRN5W3si&}*ZZ47I7ywTk@jT~D;$bq!(t8<&z zeP!;cY1|*Vb4c{w3-Q^Mx}*Cz_aPnjcleuiHbVF8G>$Z8ddU~_4!KjvpTWI|+2n5H z{?TQbHGcHJ6yT?gBcCSuGFp`*nj9bGA;>#UUTN7L$)&*^iespkLSAVf_xl*Lb*Eo2 z$oWC?TkM-fjy2})Ah`vesF*Q_{f&D#jBYP5i(KKXeF0-djPHy2KbQ6dgZQP{Ii9S@ z7d=@`$|>*@a<3|{Tsrqmkq066t~;aScIbI##mYI{$y%`=dV!v6)K9_4eQ)S2_V;wf zttr2Q&y(JycFLe5^+!JL06xaj!NxP=(RCB}AN{B12J}spYk@}QQZEfXcRPI!dxCk{ z<=8p8$;I+8`Z3QV^kEp!S0jbdS3JtKIX2cxZdK)MG>H4j9%M|d1>gI*qwZW~^!+FF z^Due2_L3_qhc=sue>n=QeT%v8#>VeE{659sNzN0Q_~{xtdoT4W=Lb6rXXtMBVD~-T zyYm$Eki+O9$dL*(8&&Yc-`)9_gkb5=(EI^?Rl<>X!&55FeY zR#&J&ez$4Nzy`q&^=MUgY$4d(AU zWQEpGH>`?{XTPK@dxceweY&j>7#9Us1$bZSN-%Z$4o^Z!jQwsGGC>U4hc>Z^Cs?qM zVOrr$VYe|$cf#oZI)hws;7jXEV^SPM$jF_Yo6cPV{9nXV?}dxg{_o|!HMeh z5ZB*4O?MuXvwys+W*IOa=bP3hzPQ~jIM|fxDKTnVK5a+*v-&)_k3yjfq@PqvQ z?iD*2zwT8UMn2dg`t%yH{EZJ9Gl>yi@yD+j-5q=nf12{}1C`@Wi_MLc`#a@A+%tI) z|5!1xlZJ2qyj=Vx%46TiofLoM&gHs7#?6zstKaQdOx)||M%3g(UqR@uu9&&v=_6J= zf%|g;ISJc}eZ)3nchT8?z02jD*9TvRMwwU60=lltjv6b9SV!U!xjBtn{Z&=J_g6K% zjSr%|ioUW3Km!jwt3H_RlPm3P`yn8OF@z7osI0!Lb z^zgIo#gBI_GQKlj->`x%bizG;#w&j4|D@}>{BIg7!tjd#V_uMRaBIL@_4|Og;cdy8Ty-Bo-aqt;!mmJj>uR~r6)R_Z{$>~pTqM(;H1GPPxJq`?o6(El)5UXv7Ur?hq+_>?0Czv zYJPcxYx6kfRpUjj8*sci{pMHmVD`~9W?FW&YlU=!M#iKu&{n`7y_7LjKC3;Tk+Dhs z(%k^F>67{q<_`9=eb_ju=KJ)a+3rK#IcThX1L5GT!bX#22KKsGvi%uiK3Z++7J{JQtw|AV7r|VtYWJs zcu9cP4Fs%%SQWZoZtXTRifa{H)4EHP-7Sc=T3TK0?$-deoe-^ZQ8Eaf@ALKf%qN+I zsJoB-{r>qqet*nk=5ywJ-shb6d7t-r-_H98XWFaC)1=t{nEF9Xy@fyFP4UhuxB3O& zpH=@6dTs ztslXbj3C(T$%nhCld%5JkL9NR2mcBEFMcK(d;6p0jsw;I5#>}Z@|99{u^ut&wB+@Gnv#LNDn zy+nM;&wlRgCE8<_kZZberg3-%_GZ1KoUGxa53ZYKdiGYD1ue!0=EzF!1$mmg%oX<& zC^mjtSxig=YqI>U>XXH5iY_>Bx;bJE{CoCWzLN8%yGJYm&*x1aY?mEY+0ay(*Df1u zl%6*|GgUU+E*q}0kt2qY&vP{G2+oK6p1oi14<7OQsiD9eYL{`R>v_|?sj^JF%&W5D zsj`tHUO&ORqm0tuX+K8qC$D?eH^4{u;|JEw@{xb+19NVSF?BIsjjOJlJ6OsY7w2k< zBkxaVT;I~Th7C5R1|#;kJ{)9^%PRY+JubV!|gI_{3BCkqwF$k{8_28 z9J|aKe{QNQ-!9A1m1_xs4~Q>=l)HN7!ZH zTlFk_4o{Vhw971fj!Knf*<}_!b5dowb{Y6QZ+d>Jtk5pYSJ}8!nQz4FpVCILQTj{@ z@B530HFg)ad`=#>7Yt)+{9MZpK9zI8Q;`p|!_cSfGFq=5?i;JfHA;?=kH?~I{yTuY zQ~+(?g3PCPEB-ok+CcAE^;whT4~UJh>gTqUiEU)&)AE*2SBehrj&)>q7j)UMv4EuM6;APVR?WxSKSAOkeFb zO2z9XbH)S4l-3|}3B1~tv+}Kb?4_U8UdDM;c>jwx+HzOT1oj3$^~a+}vM+dxLvNLp zhknW)SVeBc!@HB;U*~zT`Mp+j&?x7sg8W~d`d{}t?cx8xi>uy?PBan=kR>FS7ys}I zbf%nG)ss!@9=mAyx~k;PBQN}Q=MnavhATPWjgGd%<3XNUJu$LMu|QX45o4OsH3K;- zj{aK&E$w!-H>m&K2H&LJvDNchW3jva5BfKHPc`oIoZ{{T)0;VldcS<#H?5ZYVU-&~ zyx7`b*rznsn*Wom%0%91T#ky3)vq#QhjYjj%t<+^v7lNZSFqdP2(^| zt=fPcS~(^Uo5u2aug+RI&)^Qu{l@0I$MXryH`gm4^ZfT21LxWX8iR3o;4$nT($rwk zp887O^hEIkBQ2bNsB`@({O(C^T1VSUGZ>SHd8_-f^B4kF{QE4Y||QRrLVG+#Lyq>$ZIolh_;*_W zoL>{Zi9fK%LteeOKeAb6%#m`kT6Oa-ju;Py5*sK-hf`hF9(7-KM;=#Q%2YSrI4Iig zGCq-fYZ${gQ|`0w%la#^*>P-dlJ_d&tA49G&HmOSsuMTbkEp&=_wxyZqDNBoYsuLx zd)+GNp!QsNCG%2yqml4pgF;S_0htFI4+uhrrJrbrrexu_^{2cC@WuBG0*22NDtVqp6p~TIM_o&86 zE_Ttue_jt=qTi&)@`(rUEhE&Em$pj&5kX(A^F4tVCZ+_YIwSySEQaFG7^8I zXUk^6|0|3{jh+iq|D$i;rf2p5>wWZvoAiwSZ9T*Lt9Wk2R^j+QotXL)-?Yzyr01lX zY(RVXyL_h0viCLvNBu5XP~HIVm^^EcalLp(JN*4JzE>5Lw|OqcMln?PAY`GF#Wv=g zja?`ZYREW0)G+4a_J-Wj_6DLXRz;m=);eJG|9syX>~)6BY97jYEHj23J8p zfh|KLs}19fb8EvTmEO#jkm-9{x_J0CSE=;NaO$^*-_5DtI{R9|Z*P%ZuXdr?P%|fV zD*VVJ^ORTCf9*4O$NsczU*?~e?K7$-j^qqrgYl!H3ya~wM#%V9&4`uL!wbom&i@+2 zy|<4J)Wytb7``%&xSA#i z{mGF%OaJ4DCjw9X)&3)%2WPQ=&3Mdzs-h)eAQvy^yd-ykm%$T4;G>hfth`0Q8_tLS zeEF-oOv<$;MkzLG;+4?1FKC_FWGtP9-o2H4hbOwDizi~s)%*mnj4Dr)#lzrJ9q>jM zaUYu)u>eKjrJ6W_8hwkW!mm~5T-s1S zWGkq15#xZpAUwpruUPG;_ua8E)lx1Rcb;eQT+6$HW4)hYv?<4s*7ng%JFi<4{nGqX zCx-pTvUSDTCpD&K`3X~F(s-_BJO=;C2BbDL9v`_Bis+*?H^4ZGzOPt9;VwP*`seep zul38lE+5Cy)Lk#fxI0pJyx<40{2Wh>#ZJNfx(&zyQ>#M>!IwS5=GDka9qz~h#@8So zPCu8qu-gqWrir&%`&jG9$aw5q-}nRnU7DXILi~JI-pE6>Y?)7dM*Ld2*UJ6w$XV z@^Jlef)TkFo4@SkGmSAV+=13ML$(ldMHS73uErZv{PVG0vtR3d>2KxkRU5Jm&U(T> zzki*%e$(PfC92~!IcLRt0dVG`zdd7m?!w3c#x$Mr7@5u<2QJhii z`g4(RG%T(D>-koBkn$SthUkHRmoKuF`ezA#A#=~~{op-1kv$jOl_AsaCg)p^y|Vqg zzYT&f*(<4U;qd@xnl&EN*EFy3O!fqqk@$HPc;No(ICtcPnU9>1J5s}c@@;r-Ggvb@ zv5kyhdn$W(+vYrD$~)|-n(yN?h7;Q^KZq3{W%(g~NL|$nfm6=qM2;^c2mT!M@GHz^ zPy5K_Pth)ZxrEv-`Z_XHjxj}THl^CC;d${t%#3C-m+-2#+2f4Ftc#7dA2a6GEAY`U z-uSU(uT7fqI`mOQ`3Y|xcf-(5T7CZ))UP?3tlBW_jA<3rU!(e*QxNNPC>fxEupXu(()SMdJ@ffC0UhKW(0<~zmhVf}^&ba(( z<3i4y5}t_6LBFM6sI8)M=n4N%4Sdk&spyKHfjt@Al~G=jhSTQGfpOX%PgX4(>Y3(e z4$l38J`7FkLk;&g-a{WY4+$lPGnRYlLpwgD&B(7_;SC=UI16q@UpPn4_?I@14kgaw zx5voN>~tHm+wmRk#=o=&KaxHE2cNH3Upb#*(boq9_qB-f_XgYa6^GW-WyA&K-99#V zPD)0+78&sxWJLRJ-_PM6PR?`DPJbN#hFrtWoM6N58Q)`!`#X%U3Ef5G`##U)HcV)2 zYxEm=O?1ZH5r>x}_iLQHkp(@|jnR}XbtC_K;7wOBwh0s38#o&AuI?%uiV}vYS1>4?VB_LhnAtdtTN;(Fn=Y zedFpSPix;b4ap4Iv8Uz}>%d;y$b0B2JG7Q==Uw?2^nZl^8*e~&o?}0+q!Vo;R9)uchWz@fw~%tQik;L_ee_h(-dh4CU;z_D1-~;MBKpujk>Z?@>mA z`?hv8b4I%v*>VfN&qF3#!f*M5E&myMpZ4Oeneg(J#&+o$=VN<%19|9?z|4JXyvFD| zYrj=;P4VjmADY90OKLAD(SGoudw6iucEh@RziPBeiUpN-`(sEmENd3j81UJ3jJ4qGt&ASIQzANRoMQC2PjL-PVn*3>?Id+b}j^6IET=i$2AFCY-D!W<&C;-dVUc6t&ix>FQc3 zdj|8NaSIPFJ%d;MUI1S)JWcb8c<;;b;HAFsAbd=|Sh&cJ=?p?TE;@*7`VM%Q0u9!J zlNRQ2F}SFM4*j$*e9UeLbgPfD;b{JatFi`v_v!b2&Vt@6p!=^u|5sy|xQeqwS90f) zouBlLYmpt%jnw{d==BZgHOBly`{bq^9C;f2O4kV1E-tA&dv8Gu|J$KIo6oP||3jBN zc0~9HPC9sGHse|IuS2m3W^~2D_lTTO$@X!fb-w}Do4{CGdq>HIwRe{I&_9gHnHxWH zj|hHz_L~LY$Il|&Lv85WK(@1Vk(IsoKqZi?yQ?!9$1v9I@ThXE--s^49`$H^413fy z7e}_zzH}4aX)n1*YgzobhViJL_)hVo1(B`jr8iN&Im3~oDNpGp^C&OkF6IXIHk~#7 zch+(q>&6B&4#zW23gVKb;?)D-Yt6bJQ!N%N!-6qYj+Qyc^dx> z_V_D49eDgr$l7}MYt&`$DV@yzBz_6KOfH`3w&dHV)KBo@G2p}3nuizRHwrAW^;gf? z#Gw@X-r~NEi?^`ew0FvfrsojP|E_fp{?MH*8>fkkvq$_`_x>P15HnJuHKX}cx%8v6 z@@Fk;Vm~QcWh{Ml%nvqTkLp^*x`ww{d$SL}YMhv~GRhfeRq#}GN%h�q<1vzM*g4 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≠coEDU| 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 literal 0 HcmV?d00001 diff --git a/android/libs/armeabi-v7a/libgdx-freetype.so b/android/libs/armeabi-v7a/libgdx-freetype.so new file mode 100644 index 0000000000000000000000000000000000000000..c41ddd0dd883aa5661d974b4ef9ef4802bb6f9ae GIT binary patch literal 757848 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/CqBF>da%l-Ym2p~yAH0# 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%0AEW8=0r2mR`?2_?I+C{u)Wxq!_5k9BFE^q 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

h=r^y=Sj%4r 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

HroG``W@FkIuH1yJWy48=BN*!bD~(T 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%0DgO&AdOf`B}tJ%+9G#tH=wxw@ps_cR8 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�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 literal 0 HcmV?d00001 diff --git a/android/libs/armeabi-v7a/libgdx.so b/android/libs/armeabi-v7a/libgdx.so new file mode 100644 index 0000000000000000000000000000000000000000..3fa255ef6af0cc82df9d8519d7822927f595cd2b GIT binary patch literal 160156 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 M1>Sj|;O_DMA7eu~hyVZp literal 0 HcmV?d00001 diff --git a/android/libs/x86/libgdx-freetype.so b/android/libs/x86/libgdx-freetype.so new file mode 100644 index 0000000000000000000000000000000000000000..ca71ea751e2bd51932b67badb2166f0854710b05 GIT binary patch literal 853248 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̶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 @qkR@k zLjsN>XJHY!V$h`*yT$LMr__We47)}UAtl=GifYKPMj6eMvIfqVvTkFJXC*Cv*xt^d z_>Ecs-OLDD&6r=4cCit(%1k?wQe=6~5H3R@SiqtXhU+fF*&kN{KlFh$J0)H{LGt9T z%H4Db`p0^zAXoq*@4q-0ep*nozRRL3M#+ZE|BQ5HN5*zaq_1j1H8LrwQKDnurCWYs-p>u3Rz7obq_9f2TBB*fiL<808VV5WGjz3{B}|d z@JYY|zA*%>5YoU$J>Zy=GQ`*km}*!CC>O}>_Fm{H$Q_obRf}zig2YLJLJ!W-patI@ ztPHo5@K=p@yNkNS6#Jx+R6?%wC%m!q*pmE;Wr$sw0F!Q&0}CinwIKh1wi_9DPQadq z8aU<($*d3T5!$hFs+<tuHr}Ai6;W7s%L7+n<7#pWUDK?TGYS zjYqA2d_FcX<(a?azk_c?4zhE103+H7qmi(swDGeCU)OgBU&{Ydm7A~A^IS^Ptw?J{ zkx%M+rJ$g&pliFa#kTlU@6(GziC;|WddOD|TAn>9wBh71Klf zlq>OPv*|Lj@`$llEe&{c0z;t|sMRzOIbrXx8eg;;PoSvA{huO68SMesv^K1!VN!C~ zr;sh0UW^>aW2KS8$9?gs7fUVkS8OsodnlkqC0v+!&o@SY>3F)icyc}ij&ii|u zFMkVCZ#RdmP}gRzaMW^hpk&s=sQf37veHbxjbhMvx{=x~{F+a9+?cL$tNobsP?>7k zx**85QcK&&W1S2QE0g_=E7%+ew%ZSVhXVK-2b_n#r>4i{HvhAO#l@)pRQ0MW(JSIh zgQ)jk{vqG>b^U<9K5W9;{mAP4M9R^rvfXmwc(VYbSZY9FmHV=5uL&| z524kq$rR~!dBgthWHY+#r&gU#Puz@YWL(v0Dzbe!cRLTia{}3{8e#CrG+`SF-rrPh zH!UN#LkTW?Gx!bj+mw&xG5Q}DJ~ink@S<8T`WvRY zKYsVeP#MqTBO8U_BCWw7jZ7P$s{wR1fUbt7e%HAK=vzJL^H!|zcm8UR2K&-#l-(&5!$c+KtUjL^p3m zf1|;4ruTMZ#Z$G^m;OcGoEQrqvmMO`%#ip^1nr>-7?9xe2k8BE5Rq$*ER6^} z{IpOJIkDk-w?yi%xit=lsXyZiK$}3zVkTyb-N&>fvWb;)AQjWgk?2QF9H{m9b}}bC zzI&vDJSZ$TkQk&jm6Y21wS+ZiU;3)51LakxykcfWZud$hULIF@4lp)eN5syx zG<^-rf=w@(+T=3DNVF09d1F8$K{-=Dw%SpmdmcVq`#pKOrf)IxBOAX`VXVvYhiOax zHIDHbRWviEb6L*E*6R5aCNNwxt7K~o<%zbf@ka8lEb^PM<&wxA>%j*hsqu#K_V(B- zL-5t0nOg@uo7TwycUh zQmb3XMVlc|Q)n6Ga@XR=`zWRC8D3tEY%!O3;%osVW=I(@}z z((z$_NFeb+-i6}9-HDfq7(eCBNUk5pSa{G;7j8yriG#W@pW4It?|@F#$7KDu&{kWf z;X!6K-LnsS=#e?&Yul}Q-toR1ToCXBdV}c?0{7xh zl7CI8hV@87*fH`~&y!qggY9ql6+FJ-OfR0iDAx;MCZCtfxS1niuOx< zz44&ojP!W%$eN0l=DPwY|JBJkxafg~8hKnbO4<(#n?1YK{bj;`a9_N}O>Kg_9QPwr znmYhk+}x79EDwuw0!3>p?6p%7%LqZzoIY|UGpEBs9KG%dD>KP3x{$SPQ;EIX+BSDa z(FW50MEdV*iS-u|1feNq<}GRwlE_0RQ2k}<(<%S~lKkT;YI z$(c63Ckzn7Ridhd4gy}#BdiDi7ggDNow=l4$dKTCLb<4nfd;U~%OpSAjkQi=d8P_4 ztwn}hHbE{sH_6fSR_fFzOf6?o1s^V&U(`4i>Y0iNweFnIj$g=*pjYAM)P08>$Eu9S z660gIW9vw(;f|iSTw|6yW?#76u`$aXvoFfkL#Hvz9kVZ7?%0^+j@cJ3cWiXIW24I* z8(r?$Xz-PdYH+z@qsJW^;f{@P$40ngV^e?QGPRsq%qS$EEj-ViBP(y`%b(MGn5|0# z&iz4W)ifwr(W)hg!so09Q&fb1seNL?(AtI0L}ylY?6q^zg$!uGWszWPq{wycBv8WOKx#J~o8{fU?PPI+kB?Ed73 zzyUzeLHqt{vT0TIx|3!kI?q93QZG{?@Fy(=$^SD&<3);P`VEot^PU53eTzui>pG${$(1Z!I}{JjM+c$eK& z-?Dg$9v^p=HtJ;-QfaQC(NWN!_ z@ICuAUTMFU+nFA1;t?ocb{jM4YMdu5S>(cok4zUt2^ zn)ii{Um@c5H@IWc;Eu_{(G;cCh+eHV&O(o(G`JK6S2QEuGA0Y5rA<;zAijQ_$~rf? zF3daLJV7DuX$Klw8#GhX@Y?`PZ}bm<|NimK`s*(Kxbyah21o2g!MIa%oi0MGi94Tzt7laf7SQEPc=J#i%MBwO z+GaGCi;P5QuPMpQ?y=gR{u|o=PNw~TH5b3R{jKNzQ|~=xuv7# zHcgb3b}Ib(t|ipni#u!o+Yv?Zm8|}`Q%4mK@*sTxL{J3g=@(x?XnVSrUn=}ad;y}M z%X4_b!XEETFwuBwM)f##ftkM5>b~TTN@g4>=o!s}Q&vX$^v-`~30hZ#w>OrZ3Lo$e{Q`$c%DH z)qG{FN18Qd-$ROw$hp-o@_?AUc=bcvr}sIN;&pgFSoMhV@#i|CeAI*VqR9W86a>n3-2Yl@JB4CK9wx$w51x<0~sfj4c151RcY@UbC)P&N{+HJ*Xdh+|Rn^jLo&J5uh2$Y)Ekf$0FL1BOc+i$W;iuhCqQ z)A)9dlxFCiD<3J5rb0YB*oUsL7s4^8^*2-lCJ|q*=#nXap1tpf_X8bs0K0WvHO=4U zYe^o;Vr{JctkxIos-exI8H%1+-G9n2=<;G!t!^o;&J5B?CdgMrk|CM(t?nL5nao5| zo=o7*zjI-tUINTb5y}c4c$CPz>o;~^;%}8W*A>KT%PC`6Mjhb|0eif?$nP=l{zmgI zE4dqG+a8Mbmf0uME1$iJ?^23-U?VTvSer5duSX_*$EIwwb+aQRn!%^Z4^HukinrQ* zlI@@wf*xL&zEO;99oclFR=iQPPtI#MV!phJ2&4CzN;ImIohIeT7IPTcpT6kXT7i@e zAqKbU-R|-dy)ojiOh*!_C)%_8{jM(J}S|bDw!$!ai*3HoqRP~8oX1MST zZe5u$whKepKH`S3U6~DGGvRA2hOtA}a+y+c{q_9kr!u9V@O7GSFr~o>`m4!1` z?NtEuG^g1Q>>;>E*xFY2MP`LT?%%7JYcA~FrfaMF^N4^{>9njQ5yB_^?XjW4^&gD~ zx5w`fk^Z7_I6h0+kxMHN$NC3jBc-d~PrX6IN9EUWJavS{VjtIoR2fwz-YP<>%EZq0 zA@!d?^#9@xE_N!0pe(-XZFIXg3gMWfP-Y9?>b?sjlYLkTi%t`tdWe6DD#_mwvqI}n z1+37DQ>9i#zt#8LW~=Y*pHq&YRh4hw$8VC9MsKuR$GK1ci+itF+hhO4Gk(*&S5$2K zAiw=Q2e#wfr%_RK-wue!h@w5tZ@S+K-F6CPc>Spgt75O!_dE@r^%`t{nGcAYIrgs< z27vUd+!J=&PNT;Nt3A$dn)`bQuWeTZ?{S_}{y6uF+f6_3K5JJFrn5ZfH+?+Tr<7Y( z&!q?+1e#dgof@5xpG=S|PM`$cbIz(bVfFnIK%NsIgzC1x#xH@y$LQU0?$bo)>b@N; z93zDIIKOG`O|R8UuyhRUm|hbSd=I^C2Y_Sr{y4vB?(Y%iJU|8b${nhJ9=5+kLG_ql z^?2oTOL@Tq(+wV&Zg9U*Uv1Y{B%3lX2}d?BxnH?MU-3XAc8mwd`Au`b@c=Iq`ickb zV9#JuFS%a1U0s(#t)(9PnOpy)vP%#;9&1#ye!UGE&u) zGa~~X~1t@%gILrGv5YDXfmP{;gNBj0Ns8IonU`d zCRoz#pr7ADr*Q!+xA#>J!F>p50jOZ*5jQ(@iG2{l{9~aikQxT)7|{(U63KBigQQ(9 zH!giH4NqA!dyK95wOhbQ+<$$n_vIM*2_C&gy`=z!!i43iZ0h4K28>J|ayF|!j*)r< z1bezWtwmf|^Tpx#$6$mU+w0}RL}j07pP(|G);DUvdBR|FbFZ+mM|JdB^Y<`kLe7&0 zn04dz_L@2Px|dgKa9JwGlq{pkp#9-Fz%||Ba5qA(aP3HM< zyiv#xrZ3S{Opn*!_##C(%0n`2zfgI`-g%vCN-fcPjL)(XLv-@okA3#W752hAH@AL< zyhFE<{*AYGYcoG3cI$k*VM*6WK_?d4@AP(^E$D<^{_*xMYImPK7kDo4GxB1X=e>b! zoK=p=h|czW3o~|VGG?2I>s$Sv5oJH9eNF6qQzY*;!?VD&ZXHkkIO(lE@bT~)nR$ErqBQ>e>6Y7eC@ z6YoqFVHneJ$6kILrU_ln=brJpw+Y{Rs}TN*8ZSSqZa?!GIS}L7F=(C3IUz%j!MTo$ zUmpJ*^2_7mm&bo+{Bnm<+qwKQJu%mPuouE|=Ff4^7s11eA<*+bhJ!Me{{;?uSS;^9 z%|TJ0`R>2QLqWC4vNp*?0sGmd)dF7>ua-ABv}&hje*Qc0RKr7^%Q%l?{+Y;jYteQs zYG-jU@&eJAES*KWc~B~@gGfZ0^Pi#q**Drqp`Y~I^RnBd`KvW&zs|RZe*bRC_h#?V zWKKf1|EQZ;B6_XUri2n#%1&q!N@S&RQ<73{1_^sj)*kzt+ncWTP*vHhT;zB2DLMD9 za9ixSEVj#s39RS9rfHt{$9B}GB~GJq>uB$;xs`2;R<Z$pTC8we+*V65HLF|}uEJbql2(zgN*ucD zJ3MzTJ3Y%+*l{yW%c^?Ua#(Db-7uLOWgb5mu)-TSNi0S32;D-CFS zl2>p8JgwAR<{6Z8;Z}L$LAXvviyZg^Mg-+w$wOR2F;R=P^#FB|ZIn_kOG>oZn^l*3 zPAutXs>XjOO=zsz5M*Qhr}zb0tj?=&xArhUq3S}xlLqZc_D^^&VY5y-#?H@ykd_U_0) z#{gR=BeC8k@kNR}t>3AHeLk$eSwz?aNuA6Ek;nruA1v@|)MbNNViUf3C$Jdnz)F#X z&Q7}F`7FrU&78bbkPccEU3V*iQ!yzTWeQptxOkzz1o-8x;CMMu_ z`JNeG@HC9OAih#5$li-djWc(O$C0x9(8U}5(IUI4)bmvI&PDQ!uvH_x?s(bc&JhBE zSN0I&ABaDSF?rdYR7|bojBT!v&QHjg>@M)A%giUUe`j!hE4xsI*0#&o?A+Tv;c&Ex z1hpG)Zik>mSmPqh&!TB!<2LlzKEbLX^I+LVYuhRObl%e*d7cEPY>%Ajc$FwOHgX4| znIx{GPAYThVg}!UTi8$a&-TZ5 z1ZLjGAU^O}#x;L2xbw^Sv$<1@V`)sc>P)vdUdGrx*ZGl*(G*uts5*v5u_2gVX75mv zkRTfU7jX{ta)h9FXL5ub$SB0xVm+)4*~180Zmtl-5jR)JVX{a2BL_Q7U?27F5f{CEjOPIR0+5BPlel|SOsBvi1vzbmlid+DBE1SWq|P7x6Kt~o{e z(8@HjZSNAcZU$c!z59p+?CFe1t{<9jqwSR!t;kTM_d}H-ewVu`K}eg_tb`zUeH`{- zvMR^}>wG88%>2!#w?DZfLvN?MK6y^VZ4iyi2nB=>adg;X*WGJoL&%!7Q(U~IHTnIQ zjRfI2>Sh5}{rUFIHn(m$K1Q!{7IM%a!c(2<1>P3dQ%a5%GZ#{K;(Y7nDETbwFIS{G z=LB<`KXP)pKI2iS?2!RKT?gZG^)Y5(fM!oDNZ!}BWF_x%2+D2iROFrJb2aTNE|bF| zmG(4H&@-uXbcUMI;W@C(GG`t>Z&vpl7+1VIEO70!cXslF>zwM@FS(~LwUGD5g|WnW zzxAZzuIs}bRuCXBM;pK>E~(EmtogVZRd~EsO~)Sb>7Fz9*XTK ziS?H}bun$?@j_=%sjJhs=*!fL>Ypxd=QI06K8dLz;aV-Pfk7?kxQ}Ww>PL=SvELJN zFGo@eIhUR;^hJ}nvyTfI=N{Z;Fn8d}<;*o<+af+ZFrA?z=A5o(#pKQ)%SJ%S4{DP? zcCuZPu&e=$b|FoScO(tcZb{s^k5flmMpg!rA3N@Ch*>@JA=(($p4{0rEP`zH%;kXw z-3&C}1*4^zp+3Y=%Sl+nd;@*;hFSH?rgn%mskF$i$IS{+skgNUoY~>HMEwAM_jJgr zUQ%yy%vaAf)Z~F^JfiL6B-@!1Fmt;Ckc@L;>eF

GYV>rJ$)&iUxu-SXPx_05sjZ3TX%{~5ZpAMzI}^Pblinl2aYK$h|Fr- zJ{o;<3K&KO+NfnYmxM!XjHin7skViUN$7wjE)wr`o2g` z3I(3MV>X*ESuZZfnu7U4>BeioK-ttm#88gfQ_GR7xf_E>)_Vq#!j;BcT_iJf zNGlrYZdWS4E3~rvrhX-X znMf5$IwIT?9xbY3&elK2K-woj%)BEjh-ttTHj*n@&^{ayl5FWUz$@ueM(%EYD(sub zIwEEMh})4F_R4Cb0vX;MNa2o>NfZeR^(N+ozKtDufmuM9x=hOz<47Twib06dGPKHt z#T^D2H&fG9SDx8-}tyPCbyK@4)A(?8fB0aLnMm7!dLd&KJhoJ@%!z9EvF+ zalGrM?z#WK@kf6BZyV0`1!l|e9DOgT>8@0OTYXo9Gz~?fK=WAYx4hHsgvE_P;)l@C zm*K>Tg|he9*S$7Q)ahwRHu=k zIgvl)lK2fY)oM3L6(jMX+Y$Tj+}!g1)&!S5E^AZlv}x&3X}b-9LwkipQiZ+3G=``a zDE28=T;BjFl{Rw>M1EiXya;A#N}{s@j&Jkqi+QEs#!Sh;|sTksF7hk@vc8i;n!3^r*awIlp-V>UT`3_cWL)*>$}s@F$vW3}N=f zDD(vt!s4ewG|Z_3n$7_zwN@9+?^{v706}I_-_MrGGF$YSKQm-0jEI@d5vfMP2qQW4 zgN>Yo(TtavEUFrlh7%-8@(-D9U1>u2+?XWEV;ay~GbTw=zXhJeWW(da?e9ROd{B^* zD~ft3nJ~7f7bciG6O)Y`iT=sAOxGsX$z4u>ruwPL>=X)pLR`9;*VVC}1K%JsGBz+h z$7PO13G_2&G-dCO&1GpX3&zX|9U*%(F-7femmoH6HcUV%bG$mf-zAI7DPbs@6r!h+ zpVZoZIQ3gTH>0F6SJzU{^Ca6HXBqoO2%~Wx9`DLHvzcng1X1d5_};)`&P9<`!vG})mI{YeJCpPW8`{V~kDTWTLM^y8BV2yfN$D!Um}E|~`#^eT|Ws77;P zJ~q5?C35C-ys$UViRenT{{C?{j9|Qp7_kr0sGyDy^%R)sR`h$&waC%fnar;@q#r|E z`}Nm&8p&xf+D**NtVDs_SyJD6i(zjrNfc-D4aV z_kClM(KEbEgFM9#=o8Qk>AP`R_4k37BZXotz1<1)ETZyhzGY zN7brSQ&a&xOhxqoR?W$;KS2_*)hiX<6=5uQQvb_6#-J|IV1_|8*$or85f#eiMq}T* zf)e6Jgq%3QK5L&&{V@ZV6LINVb60%TYGBb!Y)mJmcFWjAg#Fn*>8b=b*lpFuvRj#Y zmbF^$dt(3`R~XUQ=jXmgG~@v@w>tIY2;UjvGOOv-Y{@)EC972!Nwru)p|LpIQL~+H zTq^A2C=-M=oKGDT!n#5WrF`RQUSRj9MqM0I5ksgd7ov$&QV6#?tM_%D+2=$R&E9A; z``uHt-)*twm`9Cf9~x?e_9jxrw|Vg46!igW)Y#-vGHxXw$^jpsM3IboL=UmweCor# z5}I7XCm6?`SD7f#g6@av?pQ4RCT=1ZjQe7V0F!T>EmV}nnEygvKBzCQEh>1y^;dA6 zm@r1QmuTUxIBd?5(yHP)T|P`|2dj6hE~k*D-SyIvr$^QgL#|aM0m->Nt{Qj2_#Ird zC{&ZzP!$CUwL9fMnzuIAFJ^!u6GYJjGPBfhZV)SX|zz@)o`8H)9rJZ zHkSMCZXHKsT$q!a{zD!}Bu4XxqN_^^+=wc6GUqUvIAkrp%9&kkKiUS^Rj<}QD)3*p zoz|^6@$@y0xp&{DEoyMw{uz&VQ!M9)^FDv8G4H84kNnU6T>TuoN)JBFpX-ka&CKFn zKOgkx`Y$ZQq9E6wtKyfYrVsdY5g9-hOcRf=OVWbuWn^62##%ifLVZg7zd!v4TZ-@# zwTE6_(KDrI_^tRm*8MwAX7Ehy=g_OXTWw5X9yQB$zT9y38FrCh)*q~v<%gr^m zVfNmiy}u}Xe{uHS(tR`$i0&GSp2M+WCGx!Q^++J4(6=!l?ZH@MM%Dxw4*c{Y&{bFU zy1hSFzAQ5Sa1fYApIOo*^$#>l<s7-_n)F!!X$BkQ})iZKaZ52Ws*4l)A}`ZUQH>c*3GWN9Q%K9#~= zWBG=+cbgb6ztdjntf&s3dZ@@*QBi&n(I)3ruX9@fhneP6IMbaW_mI_;kn6yl1X(pv zdYndKB3ORPzAfPCB)NPIyz7SJ`Ma)!3*`>!&#b633=D7LK!?wDrQX1Wem7v@4YG^S zn-K5ii$@=aYgbp;XS*&$X8Ty~{{_^dcH}4lFAL6tktw|N+AFGO@gr!R#sCJ?<{^{Y z!WTUYlxOizX*w$rV;?UcvKz->q`bfD8ld1JFb*SkaOzRM& z0MtO(-F~~ha(rgUn-4a;tAKTFUkpu=yxdltGQSA z0e)jEGi05>xsrVd&=~ziQP(vztPRV6p&Cvb?|o7=;7Fu^>}VnrNo$L|&dn3x)O|JD z`-&;xtof=p@7kAl?ay5sYglBDGpAT-YH2sT)xa0IGyycItNMfWEp- z4e2qHZQbRjxo{ICyb?0KxB7Odh~|IJG<=sIBsR)EzUglYSsqhOs)}Al&rW-h8BK3DEeTmK z=L2Ax==%|GU(N^9>idBn<#)u*#`JQ2SFJurr6wR_&C3%|^(QY+K;+#oYu!!I0X{xfCID*~O&@n9J_y4sUeVP&g6UL&f)%)4q>}PVkobV279F zIaiw;-s82CAKCv++y7T`b~ze3?aT=w=&GxBxQXPIAbGUVY8>dCj3f%A@01{L4`_n@ z-7r@IsbdR#;hkN7fMZe>0pQb|CC}YQ+H<@0x%-@3Lbmr?&MGg@4>~-E-QltIdb!8B zD`ZzY=^el*HdmPI!cd4qMDfq;y3AR)`9603?XJyk9beT;WDYBt&G&)i`{_fxH8IMwJXvTS<#a3~w z*Tphxw;wY5Y7vB^Bv@U8Psy543HLR+=eI?_m7fcADn14oixAnME zxzbiyxjbcCA-O<$ES5*(sBF~AoE6e{d_&oa@}tJX)|6Jos>hIvjDV$K@qUGUh)ipy z;!_+H);vhfCFMh|S8;ssZF?8(chS3)m{`|#k( zA^TiDHEr2q@WB4WFPvLSooT=vjQMZeFe<-xYvbS28L%M3B!_R8#JpsN@z}l3X&9Z` zOYIAI*+SSP7@|9s_`hO#8GOfH11Ujq&gRW3xv6BJoP?o8<+5>vHZ5@-Ezyf%)7}eH>_MSMfC(9Gd%{pdisn*)L@#w!7vAfV;Q4t=k>^k@%Z&k z-eUx;j*#?#Ev!uok9knY683I=V=p}B^_&a8w$kje^X=lk!(G#bt2`7}?HWk-9gd9P z^~DQ-t*P1th1F#gRIAO2lED+h`)3}mZF=rLR(6;M3_-y@ZY5NEZ_Hm)e#n#`D|>Hj zZpQA9ypdYQ7sf1>)BQIaRUuNHTUJQgRlUw+`}JMaT*|p|&F8Z74y_m4=Lg>uAEwA0 zBTLDWZSk6P99l;o;1P*U3gwghBXb=FIgg8~aMaOS<{2)dtGxwo=JWyJ>q(G^kHv7*NW(k?g8Ch_eUT07nql1`{w`-a@*C@ zIwvSj>kajo%R*f)XC)oZ);FFV$sl$j1+NA>C~@cgg1vlIf|2A<~6a zJ960F98%}=5d7df6A>)@OrpPOMSwVM~?E4v2N*`u-*p%!bp%67WN>v7s!oz?fne=&LZ_^kG2@i!+k zvrj7eY*B|dwxSiWMqmzbDd1HobioR{U`YxCnhyc0sL^6o??O}DM$~uaq3TRW4dC;> z32PY%oOLFjKlO8DIy{%CZ|Us1{|n|(hDXUae<4cDqlYnh^2GB5yfW>{+?11D z!}p8Y6^=`GYZDk>;H+q=T^Znn#%lE}_1Ijp8V+e^85$t?7m4w*pn7l<+<0y<$|oYQ1F z2viQ*@<|>@%14=s;=kr>MgLR2$Q5>cN2;*r4ezG;l~0vM{5`LFxJrBb=T;WRqVM8G zWPfEd72*LC00wXBU~R`?5De^ZTan|t3|!rG3|M|Wtiww`WSR=(42ugOjzdGzO6*jQ}8#U=@O zFIK+uIi$oV?Dvf+&aGbi;P5f$u0YItB|yv^a@GcCo?nWF9hpS3C30;awMU8IK5y@| znhu5!^M}W^^Mcm=Q;%IZI5K#iDQ45Z7>wO^JyGzn|IIbahaJ{UyJNF63NY&DRDyTN za&iDh4BCnKuZwV}dI^JB!QeZgDL?FimvNOlZ*9*wjdC3c0%m|vq0#aq>u#5P@&%%! zN=y^zx-sVcwCnK-gfD3gWwlCk^m_(X94_JelJ;e)ye;|T|1_*J3*!nN0?f&zcjD`` zcjiI+q%zmL8C=Kt75ksx@DS&XKD$)>8c^z#4lki)hhrsIM0aIo?y?itt_^Z1%;S?F z;8^t);nP;%C%JSYVD%xn+vxNtuYC$<8I;sH?M=UNMauG)z0@> zn>Cf&j9FdCgB|3SAjf>$7?TI$Z%i&9h^_b>3c*b$!E!|*Xu*7GHw9enG| zuAa#MLg~94mz#mXk-i<>zc*G{C#wjyl|oZq>JfbL!FSYfJ$b43`hsJ)SEmA9C!Gi< zn90~$yTS)ftk^k(Y5Hi6;9Yvx_btoHTXIyMdpkaULmS>bp~e=5TFfv)_V40@06mrR zF+Vk9>eFG$Rqa6Jw{pQk6%y%3b*v%y(7B`7-pLTQSx+Cd+ncPX6Lv!jJ-j27Xed+Z zM8iV;EKM}bXQ)<_?&pNPx-`*Hp{Mp8ZT9DVyrbf!(be6I=x4AhICqdtN{SSd?3qNv z5*5wP-ZWKhZL40cD3AS4`xrJ!pX6;|@S_^5#K znAh`^mlxhH-;U&@O>-+B(@CV-87PibAEz>(Q%$+yP*KJUunkpe80h*k#W`>@}T(5!DAI|$=S5P{D%J2 z_Z6%^_GwH5tTXMA^k0s(#(I|;2_k5w#{TmC*3+x}(~vc1#CpCcghKvrj2+`r z>^W!;39CbfTBx+-2K!k2S2H}v21W*y-U3X8I+S_9pX_Gefm`Wqbb!`S1!U!5aU|{V zexz{fZ<&q-B9XB|ptUiAUG1^PLIxM*bQw3Mp$WYeao*#%o<3GS=rj|84+8KzT_3cb zKF?4#l^@dDEE+F%Y4b)AV0v~PnHr{39UvlulsYbCGI98m1DH6#vQW;@2dv&oBthx| z0CR}3#g|;?i&vu5(E;oiW{}kjYvUec`&|?cp-5PBhBdfH zX|TfJr4HP*@PA2i1c&|Tk4kA4DmG2`ZN)wi-BpzOCzhW=rbY=!DPGL~`t>Jg0&kW; zzC>{|ieD9SLR=Yw<_Le5QE^m}JD_-ucuYx0=}zb{hkIX8T4 z<}uDKG_>RkpHBx2#pUi{BJ10`Smz;{&lfUBZ+ZcfC{X&kT7}+~f!^1hEN=H@gH=i?zL>JFFcXrBP!#JI)$C{i(5G0?VcRUm+@XM`}JX z1ZJeH-k6Bvm#9nDw)WPg(X)ltqpxx2G?@MR9lE@uL_r16U~JyI{8WOqg-~&I`YMoX z4)bhcPz7w+Qk=%wz~?JfwQ{=C5{OmD7|Vj9<(kvW$mzxD6kE1r{Zn|)1Y)LyGxdHS zo;FZ-Q0F={MJgy?Qoh%9hz%&3s?8VkKNgL@$H@)p5;H7ge<+IrRwXSEsb`oHg@fz5 znD^^y-#)_eBT`^yOHTyRm1E!P!YK)%ncmN)$Vs|DSA33lORO_v7bhJM{=rl~N*kw^>6^ViP_F z+F*3&dpI9rz&{u9z?^CBx2L^aXGdrbJ@&cgye1>ayNe{+JC|- z+Y{X}5_xT@wQh&)COeXwA0ue>E}(g8b?Uxhd%rS=K``-Vnd*fxab+Kn; zfG&C}V4jo++@^=0kd|OZbGKhq-zeaoGQ@=C2>9Gq2C8ukg*)8Ux4A*)r z_|6>xr#(nhWm18+p9-J1TD7HG<~b_9>k8E@Wx>;W3Rr4^HE#JqRgLfruyiQMC7>V+vmD2MW<@>k{_dd*zPVifi%B%9;xWdth)+d zxL8msL_zufaAgE)&e-@-K2m|TlfI;?n8$cfb$}dOq0~<)XG5_ILv^#Hd%13=#bBpQ zmPR=*u(V50ugb)L#a`{j`F;u7^hwzswd`f`D{n83{EE8k@k+T4OHX}xU)NQ+!RHq; zS?}fD)bPH@X*PxIO3i1ECo+SNfVt}rsJo(e%9`&ovzU^VwNuuf=2V?EAwuxGqH3Dg z8*;Cwnb#K?m?}(G%&H9D0VYiaJ;2wf>n;~T%YDvgby!ZfKl%%w=RA3r?d85`eSjD@ zw!r>_Im#nDIG!DQ+K(fmbtbS32R^nsx8mlO1wBUT@=K2{kdeq4Z&{D){h^ zKvNLIEW+Qp-mbK^E%%d?)pJS$v(0U0H(34;up4w{tEtb#ZdOwjG_{i>!uixR^>OFM z@usS5AfN%#Usb4q^v@t;^bl~}Sb}Vf-JG%KRgfoi_$a4uPy$-nPq(4kILuJV=@E}> z1Cl!MPvO1tY80m@XRq07aPi7Gvf#WO@rLzH`8rK@A_TQ*N}pkrGcw+vH<(U$> z!tlBEEk%?%-qnCn3{c8Y0Q?d8*m=de%?(6TUOsAXtU|@5O|JV z^0OM(tRA_5Z~gS#oBoNdC>pQrv3DotnjLMHE+xud>`y<#U%IBe+9gt(OV_pMbx{#Q zU7z41AwtkGy|i^?Dl>mzfP*#KGF!H4JeGv&$AGga#tPUggkvyzNvjzqHBMHL#YxP| zeBsW4#or_Vxzc)k2Dq0q+*%6QM~*#9wS8AKzjRU?}6sAr1~X%^qX=Cr%^mZ9Vap z_LCSjJF%1%s*G2q45@!TUWWehaV5~yyk3{0Y%2%h-br`JyrBq|8mF~)p{w|{y362H z=daEDCx)JoUwv~(MvKTNa&{}`$SuhhLw0#M(B;A0CZ-`mu|RRcKc2x_di6Zf)OfzZO4N zRCG7y$92mv>AlcHql3xvbL<)MMb+!G?)DB3_8pCs^WoXP1Kl%gJMQf)v9^!IGet$~ z_^e}DXbPEWv)>)^P04j_+_Yn^a`wzI``n!yc3yg$YoD8g-t8r7^azVz+2>xf_hs#K z7sEU;?+s!6Z)&+TR!>$}C_<7>>~X(6g~exeD0+SpgT`w2GL`a%inc!boa}QW|Aqo$-;$Mc&ZB$jsd`=}xncVN9EbE-*mC5t+sAwHgz4fB0C| zI41;~u+%K_FxGushS^8%?Yvq>!}w@X(L6Bx$g<(%gvy8e;*lHS;(&dO8nM}SS6~pU zU4CyT2iM)@x3=$M>za0o8u(_#vYxlHR=XpE@01Vu#&SXDtaY~sXW<%21x#zVW3Bro z8r!(F?xX1of7rb9Y1-Qv!HDJ_>@iEoh1GSVY&5-ZfiIY=?{8T&!Z3);dg6m|&)}A_ z(bWr?ivBEn=iC%ZeT!?DUq!p?!^4sgR_r~NapqAAX8>BLXTwKk4wR2NZ6T)~e+x*! zKdakkkHkj`k+7StSA9@{vre;GvDMq6HH^aQ{Wf{RM#3l8fGS*Oho17i0DuJ?#SuS& zb6H^OkP0m&VJgi@qWkQQw%Eg^_PS7Fc0fh#hkbS%Yvj4D(nbA5xBXHOvyd2r*?PQ3 z6Y@d;m@SXBnIq24A?M*XlZ(thi!j(j@k}9<7jnP7E?^Ib_ph00 zZCmAMgO52$z|us3w7i@Y7Tp<`dTOb?$c1r!8%KQF9oRHo7~6gJf-HcN#;O3BhbDMqh!f3qIrV~7>y}8tizA1#N&tQnG zGO=Kd2Ict7L*E zM#OcC*$(`KP@v^q!{XG{LhT;6k<##}6@9>MH=sxTa~F^vaiNyD{>UZSv9dcB#%?B( zAY>oX($R|6@Woh4UKfr9zHCfgHYu(?6)Ys%+#_3Av2_cn`WIy3`J&(fHFo#n)FQ!i z$P9FSDVkUGs2(sVdemPJJlzWmB8C#|?l!x7VQf*U-6mgfzd1)D`VW+^+5u$6*0*=i zOMjxl=z8M=mvG}WPMHc| zK{5pFc-5I%%bOmnpO2dy=|Y*Ovlb?PD;6b(F!P#jVl^Z_$qYHyPN0PAK}CSJ%hJy#jbI9gJ3e(Igt+-3tZiUq z>OqwgG9)o0MfTl`=|r*Jv1DmtF2}ghixQ_pS<8x@juw7=42w`v$}t1~#!mG~Gn%l7 zlK+=*Hb9x-6U_8o_nT8;INSFqp}?H`>mrhI_%MQU{wCy?sm?Lg$+OI@ z((F#C&PBCdzn?kpMS zPEB!!J0(iIE{C?F41%zF)F&P`xf}|=>cD3BRVlA4SxFdvO+8M{S}zsjA-*b+=y*1^pLxZG%j4Fge-E|*&o3jn zbe9%MJ3mX*FuUB=f^)Eg@rU^EE8I zv5Gx$CBJ-PCVL_gdT*d5>#qpl7-ccUCv37VVGq4`spy`gaUj-p9QcU?LYk9CCrdLp zJad2f5Ibw&wv;1>dcPsozr$>N9Hs5REM5(OBPm7FMKHFonglxm`({narD|r)b=J0r z(YQED<|U2l7}rl#8dLZjZAf3RX?sYV-k!(h_C4;t2KmaUxb_b5cueq8FLze7ha2r^ zNF#;E+e5YO;_>@craff0x7qE6$IS~X+Rk(E6mahNpZMG!A}<-7-YHHGuA98{r2q%E zTH6j9t>-rX(wEAlUzB1b2&`d;X)kO(RpI$wNr&ia!{K)+-;+|fd3 zgP17I?l1g`S%<#);ajSMQ(Yyt%;n!>_NtO$<$Usqh1=(E65$!y9sAmo1b$0cyaY!S zVESMRU6j0x8<&55nm7TcXSJC)xnjQxKIWN!_zrlvt32JBtt+a!Og$Zo+JLmUBl#22 zf7>B-WVOwDr{-k2ur7Gx3KS+{fI zl6Z{&$JZyY{|}lB`+M<@VJU}q<}r4QAOA6)Ztrx>!c$wvpebfA0JO5_itUNqq}O*;<0& zsiyN&)EZQT_`(pLr0ag4Mwxz0aETgkzqKv-;CEc#SXtRVJtlxtkI@~7j_;bb@-e*tn<@p7c0VNhhHaOZTf0sd2;`hpZ4sN*?2%Ul|48M zJv7~}DZ-q2ZJi@?F#nKsgufLJqSk;Xx8zdA0 zlAWe|EL>Cwjk2hQlzJY4CN8n}$=}PF*JhI|akRg2J_(r1cUzl(%b;f8@lDLTL8Q`% zbo{@1;cjCZ@0&PmkoEUA4X=>TNlEzpy7riNz*#upEk9V>8L(pOMfAmpr4oAtZ~AHF zN3ExKerx!==P_X7xdc=#OOUdyEk%Wps316h|Gz1ZuNedp1Y!eqw)(8D^bk!2D zq^MJuCF&S$@ck&KD}E{+&LgKS1oS~Pn4InYj5#EOlr-lIruZrxU#WeP5{?jg{L?P6 z2JFT>f`Xg$AkmmpJl@WY|9fVri|v+5Z3t9)4m#Z;v3>TrfpgHCy|~PC$aBgb^qgg} zZ+B^VuE@nI2Xg=a4+#6AyhUJz->5TU6eh#?5t z%n8FRLFVAek5At9Iay;S_$yEFcW?Q@@9gjXA0&9pk-qt*z2DW}eG8*+7z7vmN?2p7QipA-RJtK@5E+wtDddMI>58>q+ow*`#PC+dX=Wl+I}&+Rgaf*32FPY z$uG2lCBuJoogCpW<_abdA(>gx+TObQJi?NtH>Zf=7XM38W|#wg;o2@MFxi?$&<_Xa zS$%!H!RGuhizPYN?^HozhOAzhikww`*LNPc{z3PoL`BxcR%fiIN9-X^zd%wISS{y0 z+H>sIgvIX~B8hq^t$$qhx>wq;tTB(W8<@z3I%bd?ObhAxI5uJ0o`WBK52ZK`fGd6K zG?Y?jjk7{Rrrv2U(|4|8L{oU@x}Y&>g-@=#NJpw9H?!!N=x{IW=Q-S;V>OUB!lI{% z{_~N~Kuz$S>u>+c)Blsd{T#PE8yi+xwDoUJXRK)(o}<3Y(O<-jcYt=7PDSQ`>lA%{DG9tN!+N`9W!)oQcb>PA6mS{)KWPu-1E{;}aB zwBK$5e3P|o|4|-No9L8p)5V;uh%IP!Jh_JZcGzdFUYWjOA544;-TmxW1*X;ehML2N zpN;lgIZBpu$`&PypBc@7Z<$hNbH=3$Ka}27U_Q0_u9xg|@gpDpmG{Npp6uMb46oJU zBhKvB_=(9q58ur}JTGbS6(&m%U6LIApo2fe&i()rl>Xs&HiRpY4^Og$nm=gubcb8CxT@{)Vi zgo@&KK99NPWuuKdx8^;Ok;*^ei7Z;!_`Knf$Unn8c@7v(BPo|#Z0}1f&QYNwzm9qT zRUz5Y6GNU8lU!`oQ^;6}~8wv1;t$C`r&!8hvCrbMF?)JB^jKjn!668T9P_d;~i4TI^HhI|~RQgz$_YnJ!39U$s3DKuDDFuq4yAoS$mSD9J*u54k=QoE(39 zs;8fvdW-Pd`lKYKRXeZDwXg7Dar8uC{OnYF@LFtG!>><&y=o80P%sZ^s zUDO_k1wX&3ccEGb-h~F%q5`z-Rov&dIG6{pQDro&OQ)i4dp0$~Rkt+;0{b z6d1@r=&5T_&WDdqKTvhbg>3(Zvty9$gnWQ({rezeQ@womQriVjb|S_Yt?JqjfoYNU zB@7l_ctCt@C$w|DOGl|a7z}dQ#NH-ip~=2XL z`ZDcL5j}D`x9IWLAj;kg1FnJ=cdlCjB@_7*ADwEyHa42CVWKWBw2%Byfh<})OC-j>xSA+ zsB57vUA7Q)?H^-^{V;?Yn0~;wGs_eQtk(UEL10s`GF8HN?vlP(2d~}o16RAqLX>`- z4A&q=Bha-}9o;iV9DCf34vclwC6d-X7)WlbDBnq6S2fbDpws(}ch%1!)s#80iL+8X z|J|RRp4!{0*M6KaOwHGXZ7d@|w?alRP0LTe@(*OqB4n0)o=JdHVjK4&Z1-40^G^Et8t zpdYj+Uw__U@Wn4M%D4(~7**HrB@Zq^$s+Jvf$*mZx&m3Z|L7uHKtD#qlOc+b$0TsMU~bj1q0VEsiMNOTbwXaXi_R$RI#To6Fkx>@I*?#--bdj^DDgK5|!nPOH z+4r>C3);p_I@FYYQ+`=Uw+B3nk`)Yj-g3q0Hxt(@Kdz+rtSK=71+ahXjBSq8_J)!_ z(ER_A@xB}0{Vw1c6k;&!p%Qvpk*kPK`B|%Dhgi)i;)T4bloqwP4XL|4e$JS$C&#Ld zD<-I{k7w{Ctaj>K!>8Bya5(UWhu2=>5Eu1OW%%^kYr`kk&fv*aszdt;Ev@|2+b#JW zXKgF2yh*D6@_u`877bBz0558&x_mEU0xwKrGIrWS7AwW#N)((R)yb|{_R?{f{)JMyZ|{x&st`Y0l8I~>l|Qw8a@8+m zD@!q&bTPf1FH|koquQ9yThju2nZ4O8PI7^d zt8lz=h@Zcbo zfiSKZNUpm=%kh@pc{^U%J9Uxa!k{&I5422`rtqIqjE&F84^uVSxz|2Iuh5G^>~E6t zqAK$gc;q-_9xY?+a9FdxfBdOZYtDHF<364czoUXG_A)S%knJ_f-fN$WpPRv$v0ra} z|C~NJ#@&)LnkOoa7tq^`j^92W&&)WplaJk1*_^$6T#wi0_mA_`nzM!?>@`C@fx)*; zx$SNv0!Ruan^H4yk3+Q6jQNCo5w5M#`aUWEu)S&WN@y!6WPSgj9ssNy!>M1@l*-ct zxRvaJJp9%i`3cJY{h<3?_D`cpG5OugEB~c*gwAOBTFq=H4hLXrS zQKhpL%6O=#3O_b7s7}C6Q;bZ#N9SDef$bSylAU1@}iiSTL~Tx z)6Je`x;3O!bEKamUqT`OPd#m2zTdh$&d;k$t(8NC5E#0untmubCD;yXKn3?N#X_ZUo5s%JBKM zwc)dCZwQaB{WPyWg$suk?9ir#@Hh0NY%X$hht-jU#9T&d%CX}Y64UV%2iCqE3 z=jPidPR`F=iM^_lF$p4)nggC)#IW_V)p^9ZCupxK^Xz7*_Il#RIiVDD<|3ago2vpc zXOc}<3;5=0ak3fKJ#3lovJVf8*v%E5*Z6d|=ZJBAkR^1H-*s^?pAxHCj5c37{`Ii~KR~R7j&FR&s0kVa~&}4|?|7 zyM|x4T2Q%r_-56O^dsi2SD)YuZ>;1_jsQ6nj zej47?38aCI3EE9JMs>x>GTLC@wv?H+ca1cfL^5SeD0=zFe>Y)*%bVZZ06MqlfY;=I zlrzsYv}w`9X#3(BT)C>ldzotXt^HGHUS)XiS}xbz2SiF2?tH#g0!c1AQr{{mFO0Ax z;s*z)!~Do0MS)KhVI4P768TK{d?f7fEsI6O2j`0r?<{V271zos2`DwxGmnL4fBsahQF9)6H!7qSvfh!nUhEl&VK z@pPUcIO@Qav8rW%>-9^?3N}o|&}CiM+L{wUY^bfB+#Z=^_W9c$gab7>&JC;|q{v9v^>fCHx-oDSIWdM0 zzo6!(@24mJHIHzri@iH~xM0l+swhTak{);XZF|&uT9Rvk?*sNO;x0L0L~@p`@EJ_( zLc(s^4UnW?RK=XrR_D1HlrsdLn|)C*kfCQjEyhT5%Q%VP6y!Ayp{a0Cl6?p&-!ttf zN3I+%?w-V-tHIXl)5lgnY2l%Tqhv%bz_ z)>b|bKp*wo<5SZMLu_g4$cSPhEc3eQOqFd!IuFoPL;y zQ!FTP)7fCixmBH|OTG>LX1V$FNzY2tX_+#8!mm(di>(PJ)h?_zeJ>P74sfoEhu@}c zqFDEV;B0^PjJ1z*Mwwt`dT5~*)!@uiWR<@h4|O&vJ;ZAtEGImcTA9|j8yrhk4b4I> zcem6w)~s!$v0!*!#X5z;`kmX#h}NLZVEC*xe;>vihZ7U82=7@pTSO8IMri~OuZjP% zrWm=WQyCSOS$$8j;uWQm>W-@vCp~BQ)cp?k)jeHv9FC$_%~H$QX!a9+)L0*5zq7Nx z76XuYHL3-%jd!5IRHEKhyDz};j(stWCWU0Oafj!KhUaHM9}M4CvF}VMb-2TG-kN_XJ3Kdp53cjY zs?E?83(4U3ApHWrdUaB`?H6vl1NI}rtrdM&gco=pUN2{>nC(f)R@zG4!JGpFm>gAZ zPcVcx)}=4c!f(jQ3~}$@u^cV$hN(x%|zKmE;w*=ao9fc?id*xr{EU$TJu+_fk~(vrt>ZnZcM zo5(P0`|QG4b%I@~Gep*z_4e?tf)km~S$#hj%`i2?;H7d$LFUDJmb{6BN|Om>k#W76 zmqwWLYi0*690|^GJh5P(TBiaXkA(_{{f1Ox_~aihy2DSI0Iz~9^`i=PQ(8f($X=^? zFOqLRRr@`pPK%Bfue>RqD#GZ91Hzl{kwq>qt0D1|-sAjfJ(kuiiBm)HqNL>|n`$))<$hvBG!Ggp3qc|DW=^`zVO;#$xP#uYP^Uc42%sSo3&S%#3R0#`FKM@ zAEy3MUsKLwA`pCzdFPl)XKj3im$RPOp(0}qJm5AUtLTKvu?)q`2OARlAl+eVjcxo9 zH=ybXY-8VY7^ApVW1FnOH8iIS%KujR^$ z|5{6amiT1+NrrC1c%dJV3Vs61bLIjmp5&;L9V|Fp;F7?no^v{1_&@*f5C1ScbKo6& zT5gyp%_w3CGHYWN?U`*F3E{ptxxm07TW6hu-|Ta9zHK?%nEER+v{A9WNOhNT3TkPpG)#eo9rh`tg1yz@q{8L|cixXQkhX&BoDS0^j)A0>Dffx&}%+~zp8cN)>q~5&>&U~{r zW``~d@&eO{+y99m(|>*Jm=6F=DoptzznO@V#eX@@W4ZBC{FQt}=J;YQMQrcfv|E<{ zb*e-0KscKevWj}T#arZK)*Am8-8oq^92mG=lNFasqYoDrbp3+k$I(Q5@uXLyJGSj* zZ7;OXd-`KbrW9E>9Ya8n0DL+teVCRZuH}LBcXNw}oJ^Pi?_GX* zj~)|{7_|s+DBhgFmwa*Bk0E^&V@V=cQh+CLK6k*a0N%|n9vZ|s|;IsW*s ztF(jb%Su$p1YN{rZSJox_26=`=5Mt@S|8HoUz^M7*zGZ%N3!YnbKUXMu3XXdFW0M%71 z-Xcuxq8MGQjBUs@*ZDch-?~W5oP3z35Z`9hb2#tYjG1V>!JVJ+&|c(%{$A5>Px@ng zu0foCO1CJg zj)|2{Ql(f<-O)--rCKNJnYPsoV5|;RCE9;MdKxm3HCZ%1qToHP2V?UyJ?qYVDUu40 zcK%n-y5TQHj`yq^>5d%fSvUHn$Y9U9vtNw-6daiYCBs9V_n>Cg^wfMQa&4?-Qut(N zNl&-uOOeZax(mA_fu8Q7FGVis>Gpn+KvSO?_eGh7p=D69aZVzC*}ELYurPEVPavEc zH1KCX0IEsc&rK@PxLUzxbfaTw4eePl-TRS~) zy+{0&3@M&U{?x}=$>#=;WbuX|v#ERG6qK!w1k4uYUHv zuO1wKRrkKHzBm4=Yr?Cw0fwf7zC6d{(}YQl?We9Kzb5vwK}SD)ws(ypmJ=RZjn4&)<6(+8c6+2JW7F3fpC z*z0>W7FEUC_GvCA^UZcqYJv6j9Y|`0p=>jy&UD=XCS%b*V4^}a-u7o^8U->kEb#c_ zoOR0My4>T)RL2{N?k1wqpAFPaG?$usw{JXPP*rVh-*`}0YNh6fnGD1F#9afZ?>45C*2z*s&h7e*S-0sxd~~gdqV+KAZMc# z3~qwlM7N7%3he5T^>~~Mp%L>4DQ9W`qQ2??==_t<^8806C5}jkt#f*MDCpEzgZ4`u z`Si-c?N;=p3`=#SWEVtisx4g8X%h9Ougfa7*&k}T7pyE8l2gwdf9(r`VQsT&qD}j( zAZX)HU0d?xXL4=td4Jn4en{Kt?_m#OYOgo=HJVQwFnK$YEl(Iyi6=?wujqVjmX|W1 zj7sx-XXAH-gyuG=eKqZboaNf^t3l4y7r_|()_w8*FGtX(1QjW%AMz*P9yII@7W{Qn zx_otiYxUiM6kn>3ra(nXPyivvGtp6G-)AM@H#`0-{~u*<0~l3x=Kp7s0VXhT2b^l8 zsZQ&(hDx_V(>8&q0b_V6LZC=&WtCRSTGmyB89)~?$<5p4GKkfmx~^;ewQkql?eFJX zH-NQ}2`&NJ3P=~NcI#VfXF9f`wGdv){661vXC@QW{`Vhc?!D*zJm)#jdCqg5^E@c6 z{383hO1xr5<8-B-LCbarGMC{orh-(8nlV2Y#UA}L_U@pie zm&CmS7N1$b-%x&$pfBLqN#^dV}t`>tuNWlem_yrW`> zu4GyragqhT%x87~4A+C+#Hwvx?Cekda*|o3y#=-NabhuqH^3NAR@iC4m$V<0P>iCZEaN2(0 zeMHTN_#a|^P6nq<4dLT$^PvhUPBHr9RpI)xx2t2Ab-mO}{{zCnqW}|r^HJVujA1Vl zPv6Fx%~x2tro6x;2K6d4x_A~ue1ffq091`QD*d4z!7XmL`n-I=-^^!s2k%bJmK-1R zQ_NnMY}k#U5Lu>y6EYp#81U=XY-31u;h{1$abuow7%#-Ek79ET7D_dD0Sy4CW>d&= zr@k4dL2bEOQ~;@}7N=fvawS+DI^duJxdIDvClB>+KCt@;zE$87>niCrSEN5rs(e55 zy;q&2b-LH7I-LM_uh(0L;nSUN;RDFkwylDfG=sMalBahG1=_Y%=0dIZ|9GFmTlLNV zCF$?;$#z4RNpM}0=kW8$&oJc~PhJf@6kwTTiEy2Ry|{3l-Ct&`Y}kht6O3*|@bs>| z`+$9V^s2Lae%AV*-)a5x$W_7C}&1+PV0%0tMbuT&?JD0u`DDVv;E?wIGtTlvQUF7&S6n= zc0mQx6qr^608M$Q$tE7V{l1cP;~(>TQ(e;tG^aLpo6$^PL`3RyT?I*%CuJ(gmx}y% zelLJ<62v(>~E2F-Xd$md&T;?zt1xn1gZK5mwYQ;7cDu6y~-$4xeI z3elh2r3s&p3z;~DcyXc(`MCFQQ~wm=#pUOl`u>uMQ-~KQI+oA(tcg>I7bmiok9)+# zDa4C=L~+Pl9h5J_42;`lLUIsZWl}4|OWjjc(qa>*5HC&yE?>)36Q>X_PE;))cbB#7)b@d`EZJC5+izHXsAGpedV)qpzr z9VMF?RhogBRVJxXmntOKU=mb%2_kw3KKblR729N}Y0e;FevjzkvVK1dpAU@ypNmdi zFt_Q>TIz0-3{xwiE%7FIq5P?b83k5Me3A6UX3&Alj5{>E;sl$G7hHlb(&>Sfxcf00 zr`4G`ws>Lo)@7a;ayL7Pa@uR0iu($};=r(jp~u>XCgF#*_X4$-i^@$^uzs;GyCVy& zb*KAriA`&v5C(02-&v~7>v^puvp(2kr48-)?5lmQpJ@ z%Z#WA#ynp^#63&3nh?uWgv z>|aa#aG#9_It95%Y#a(~PS>NC)g1G~J}eI0x+4d?0ZJHt62< zP3b$@Uxqz2>)x(Mi0s+?zxf?#nsrkwev7R9hwRtUfY3o{RpK6Pfw?5WqFS5n6*)wVwU=7M$<*kcj_5y83v^BW>WKb8yWTEC zbULC>m=8l`U?R-NBVMv?<|DT`*4cq;h%^P%@FBc!j9w4=Ho#ym)u9$A>g3?IX-bn!^=|^}2O*eXwXpD}rLR|i#R%;TBxBG1Lr)mK_ zA`iNP1nSJf+@|#a*WTlIctJ4;|DMcu{7wfEJc-t){;t(b$mAf-aH@*JuPzF&b-RRG zyBh)}M`#|ji~!b64dOiUR1go^RvJCyIpo%zb49?tYgQT_il zJgUm7qRZC!CQQ@Gz6`C6>~6v%dOVQ6P)jIC=eGTlfw`#d=lq)f)WB4cus(-AFhiYv zB&>*yS#GZzcg|XW>%2RBi48ZQd?0v&=F6=$_Dzo>Nowx12QA!@nL(UoMy@3_g*Ndj zw+Bpk3UA;lsdVMqk|nL+^&b0$5@ZC)H$rH-k)TNpnETOb)I7DvY0`B+nGlFN@_Kb4 zWRH4~$HQPmQZMJKC218^`!+~HIOJ=RLDn%CIBH=NDJN}&-snF3sNObfelZb)M32D; z2aNn9gp|aWVx5=+$?S#}EM3CAa(*}xYfB&9jgdL)9DgARmPRn|zB^!NeQTfe$m(A# zG7p*HUn*1A+2GAIhmbuB47)ZMWTBTb99_-5sChD3RKwLHl*F9Hm7oNM_Y8){&Q3H{ zkXr-CIel~Li%*-49hqw#!xHgU@40Z|Em9CmP05-SNP;Ql)j80RaB9Hh6dVT(>!i2b z3e*u5^<)tm%&!1yf9m}8Lkm%E3C*uZkZkUE2fSrtpaE*cxS=CyBor}s0mg}{lCS%* z2x9L(GG%Ywdux|KYm>hXjkzO)ncKpjy$h!o#G-gU>5vp`{mIPvzMmXCnS9fa#0cNj zW9Clu*By_YPG{qC*7;zu?c@2GL#Cg31MO3`}Gq zw1XQSp(TL8Ag87cbOV-v!+ohcx0_qO0DX3(^)??uL0zG$n~uSVHeM*1n-f=ai1X~H z`SJ>f+Fc!pf0Jv#eg4Eo(`Ss%j>k(z6E~lbUN?<)X4Gyoa_f1ho=Ipur@pKyBu6-U@W`KojFZqO%;&0<<5**_69^3!PYr}2FHvwb|;|v@nGr?XBmj2@gRw; z8T&Eb7=8HI|KaaGa_kRzQ36K(^a27nq`Z~tU#H2HpHJ{N5>V$+wBaNudPh!kh$T5d z+|et;tX;-3FU((;8E8+~YlP{Ha?}&37x5Ajsl$F61_IvG>Uu3 zn&2F>?ilwxuf(QVHLwMdBFuwxv}3JoPK~(G3_INM^FXY!K+r(Yf}Fi#h?Hr#V$r#& zn}H$N!hmNUfGN+$Dw4k~W%+4AOdYRC?O$u6r72k;bb{nCZhI<;hA2j1Jc{y)~S@HG~!!cCHY(6{xbomps3$?bHyXTtuIT-{u4H zA%C%yw~eNGu+ex9hsSS@m6mK1gHa}IWCW(+Q{WFr(J*8Kx z>wGUK?;-~^Po$R89JJb)irj;g@uA~NZQAn=Z(MQEHZwN|7NieQXTGdMia+4CKS613 z%@c`vra#*Y`5))aZU2F(%fFc2P_|}E3&$CkuEw0macYDe+U>6{Nq3R3(1&(Da@|~O z3Rp=2>2ifWqgQ0aU*m(j08hpEw7TY+R300EDrmN*C*?AYhIJ}R8n06mmDlT(m&M-# z7#4Dg`unSLR!&T_YD?1ZK${EA%J7kE)@vf*?f0r#tIVsYyvF#T(ntpflR7V{lPADy z`f0{rDXY`HJg}HTdWQafrDsG-t@cg4T3g#Al(gI#mA<1mnbwtDvTu6Hq~V%stozMAL1id_uWcH-9jzZ-KKQ; zf@6HB;G1}EY?q@@I;AVH6s#{5{AFdx7c7Ifxq@qzjDmliE4WJO@&$jK4;6eC&yDR* zdj*f=gM#&?g5P5^UMTo?eB=s#l~)y9LSbt0ex)O;8HWB`I!Mq~UfuREsnWBHlYD0= z$-O2?g_3-RS1OP4uFB)ek?+;t<#K>2-%v6tugX=vQ0aI#m0!t+dWAVGdL`{Ez*Vgr zz2-{=S1Lok;4mM#UX?2u1RTAGf_jZDQ_@R2tFe`Al5qY=J(fN#>D`S9xRc^XRkk zrTa_~J-H%wnRto_o>9d23q^=IEEJ)9={rmj+DfPut@$GMLX3)AaYLbquND`feCesC z2rd6ALI-H3BVA_{5h)aLc5xBPmzHI&!dRCOEhHKwaHFxX1rlYH0vMSAls0s301xpB z;gUXtkmfm_g=AZYl4;yX_6QFplkBaKOr6M;*2yc$9`%xCZp)2wY^CD;tG?y7OU=g_ zmAO9G+Sp>um@eFCW=+qi%q+KEA};u+Is=3DTZ_RMi)bKMaonF9M5S$k^#A)!Ins|# z+lcKPyk&>1UDQ1#O1~ye)dnuHSKW<<$A8bQdD5(TvAw3)T@<_6EOG1!DRgnZP;K~j z`$v^z{x=#M4HVwi|13qpM9BVQTff1g()4G{$8%oHx#r{N-bc`UyyShzPk3AZFTIcV z_!!22MpAT1ccCu%16|S~qn7U@q}J9``0;(>wZU>{MWmJ>ecmbA9U&eCo2c&GO9oj4 zB_%+@h)t*6VO;p?syp^5*yM)l8ZSN)e+yrlI!|l7`2A^D2Jhqw!6m1rT@}1zv>UvH z#n%~~VK0g?cBD2-uyaE7$=DL=!-}JGF$SgahQ)@|*)t_OP=HeW#Et2M7pp4{Mjt9thU`D!%_Owq~e3N9?y(=HdS| z6w`!d&XX>}NiK0bvlK6$50Ts)P#=5wM_^x(@fu2)HunL4Z0h=1iTa7c4#0%Y z{qLBfL7jnzt&VHSVTQ7?{ZzX7%eqnU}0|0zP~ zxRJbhF_nrLB`K;e{%KUu5K2pva(nhpAbWM-f;oZYYZfLFXGkZcLVzqB!rjPq9>Vgo zl=>s7Py9`>aKPKIe#IC_w%?YB%zeU)6erj)yg1~Bqyo_t<8c||A*bk5vSvIm zb)zxJ0|CjonJH#GvL8Ag0~(JP84qr27siA0n3`wuBf>yg-#h7z$h_Q$jATTf+p^^^ zjt7Qg|HtETNTcB1XU2mz*ZH4eJO+HzE^}TU8V^~`1FiwV)r&FX5oA09J_8OjD0d+2 z{LnG^AaN?%e|zfzhkqBOwEr%;!BdeRhS)a{vbdYoNY+dwV&Uu>e=5aA5$>fzpEvmH za2;jMI0ivI56gaPCuCegs1P!MQ0ni#siI|u5~VKtzlnB|liszD2Ubr&9GBiffFb3E zIbdq|?bipLU^H>tAnub=WoTq^ocKoBl)ZMgV%0+I7eciX^-tOZE2r$0IaiD?=11Op zVmSA%E&6#xKTqhVPd^9r^O}B+SmXV7*~y6AcPftmIGPdrET*;z>*K6u#2Mw1BcL1s za@6gMA7M5Hqpa!v*vEX&)3X8p){<5_jYQ^1{JkN65v*KAvdPaZ%cFe({%voQtt7=i zoxeWv))_;vF28a?Y$~k|d7yS1mO+2Qx@d}}B~DiN@T`bU#rXKpjWIX2h4m{q%Z&w= z;5Bc3aIV$6K5&g2+i?m)gPW9Kv+OA)gLN;)kTG*3 zHZ!?s$hXCA{F}9kVVOXLe)}nwWfF&V+qy%XC%Lf?R6om!-Tt=QSdZ~nB|E}vv-dhU z;J;mjWq{0jg33RV)GdY|@6@FX9LNjPc%K(my*M?g5cWC3685eKji&g7d~m)sR_98J z+jjfvmA9n7p|=}j%hsAD&qMiIjj1C()0tVA+nxL1(mLNA&pW>Y zBObiQ&X%r<7)9A4Xi{Fy-F3U~r~pSmkoRZ>(4>aOZKtRs(+D<(v|zdGzq7<$a{no} z{(g7v-KQq)ne_amSCel_Ie=pg9hTu7J~jUvU^Qev*BQLebJJ2*L1cqHlAaAve8-&I za69EK!Js1way`W$!BVr?*i ztU7fsqKa$~=vfTX-s#T0XDOz=U;{v*pTGcOsAtiA*T|RoCw73x1q&~(|H)~jx)wkWQ7dQ^4YR?bEe4AgX|9@xCHE|G7d?GS<+j9cKL9b;Gb}h@WSFVfdBY{vxMWI^L|w>W)CZSMXcl zcek4{J5jn#fU>UWPt1~53=X}y@{2ESQK%_>Px=T8I){tKMz0t!^Ob130_RmRYE^~# z1}NTX5cV9>pyFVB&^e4-=P}N&4yI-F?YMKeF4!GEm-Um;2(8+l$(d`}GUX@{vEMqu zZsMT&kQ#H9KD6q8WyDqlb8H1uEzr8O{LT+@5XHN#A$YLADa@}!uNr*zm$@Tft5#Tp!kQJZI#H;EuhVtT5jfh&4WV7OuHaXAi`G11mw_FwWDV`?}5n=j5?NzC-jN zRx#9OH@w{m@6c8X3vlok_Q^7<{cWurOe~Ul@$RDSSfAK|rJ(HqYzI5F?JSi$j7jE` z@mJD6@}S*e{KA(MBVD_-!{h;9e zU^O6lSnz&W@P1J6ey~|#g7?FM_k)7>gDVv#ct5<--W9QvMeq(jY$tJY^&n99;GHGc zG{JisnUH9X57yZO5gfAvZ>?K(1Hdg5yAGRd2Ytt#lQcRuaR}PLv%cM_?_zFnTR;9D z*KL$uIahtwBy)r9PO!_J+s+2F3#UQt0iLY7?O5XK!VoVEar_k-GJqVRRxwFg6aF6q zF)1a5%i09pNhdI)2}P1c`_%1UGt_8GACu%GnE3n_s%XDdm~WUWzu}kOd@C#(_iHR+ z+|O|<42i>iR{NcVF_+|9OO6COWoC_G*X3z*B2~{Gv3cIXwQTg@9m7)c8&Kl8t-SS8ItW9 z@9i4zXEff=G%HNwya7nvT*E2Jm2-Y(gc*;bL)#*Lpg=$GdD$D!ZH5Vek3||*;;vkVRdg-yn3NWS3yZoIhgLtD z>#0n5S1h&ub6tGZClWI&#fK(>2{E7`BIGZ#lMVZv{Pz~3Axk5Wz#FmrU&IO zqtu;Vk^c%HXw83;1RbJ4W&`<1s&sgS4w54Cx9;?svg!3@(- zlue9Ruop$v>U>nL5_fuW6s3}vf+Mo-oYQI;;$e#BUnnI=u^B&$!>cJr+wMTNj`7W# zp_cY`gW?;$;kM}v&afCqGvmM$24UKhioBzdu?x8MPq2aboz*KPt*NE)*VsR_q|W&& z6WTa$K^h+aDYFs%2&pBfK5=b62ECQ1rC3u$8`R38_Gu$mFg|t5;nJL>jmA{L$VJt7 zcZRH?R=BrE+!;{@IWhm6b;&hfP&6dO%-=Opup^r4nC0QpFcmy{5G8+QS{IrV^KY=W zw%lMe4x^M{gn~F+?3R{=4}WMAtgYki6BDfVM+tCen>(Zbpt${smeRWZHDmMD(vVDt zwbkP3%&QVZmk4iUW$9kVoD#jz2^Lt%PHM6|yr8iYqLDQz>j5<~LX*(jm7i8*kDXs4 z6Z*CU%5tyYoy8U1C45Byk2GnfdZATZ0Q29CW^Z5=3NvhH#dG~WQ%OBiAPuFSy4uh} za!R?cQ+83wi5XQLG;vHM=4`{AUJ%T(Y;0pj2y;PG3q{&4 z5Kl2?Bd;`#+qtaRIJGSK8um)(PAz?)-0X1(M|!&5u;RwI8XB~I`1Zi6yD6HZ81*QI z^@so#@K1Vms@cY?i)s7?G(KU!ebJw@as;ua3QfDzdtU!?Q1g+Zu*az~lG%dmu2lDe z!Y&7V!#&F>NnYhF9_8gR>|n4492zsrU$^hvqjmedZA{bd#5Ye}_t(3IrjmIp!q>uj zw(AgJ;1FljH70rhbeKEfJc2lmT1HZ=CU@^4 zUeobC!i+lKRb1cFzAtvJJ5sCdLIkBoEmXLr%}(YVw_ExyE+*@JZnsg4;T4+6p^^r; zbzM_Q?BnER=Y`0_m^{;do{Ip1beF(`tbyAIOym_lFgU1-4$>V%+*ixg6A5uoMipB{Yj?SM8)jt~ltcIK(xw8Yi+a95`60Dq( zZCIY{Vx@+s)#c01`$;5S6)7mXqnK$WR!1A}l9@2WvTKm{GalqHLX&7ko{EqFBu$kR zM@CHGeiWoc)HL;~|7njhw^inpkFn>^gTmG4-q?dpp1`yIhS;3?Z(5zDv>-8aBy=PaJI}Ir zQIFL-bA&y3ht=K7hudNQ`aCQMyp(+{VgFcnoIpaSUZg$%%t|u#VuKPhN1GBRTDFFk z63QuI?K*P5U762)-nWP4E+=8?3g{Gbd45`IEGo(SOUxW+$~$}Y7bt72%9>1B?@O`I zwB*0;8dla=m38bZ=GK)=gcSN85ooN=FH$-!HYZQ%S0Qrwit_c%I$$3!x4OP33ORpd z{lfU?ak>{-J*o9hUt{d@%;VrqrQ5a+U_Iu;c_juu%!fTN)~QQxCRaV?MkGj9Hp{-3 zH?pp`I#;m{8Gq7N$KPm4Vqh5h$yi+l0Se>`pjOE-y~ebX%N1<8>jo`b_dKm$*uw+% zU^#k@e3~TK4K~jR^QvbJp=4pJijnJzy8TuH5p#)e5T?=@X}aIxqvkZ?^pg6|drMei zW~tz7*@tL4VgohHxy&omgP32XGWQYuC(TXx8f*>ZL1-TjTip-H-mfWSGjAJ5;mw}g zRjp|t`1JmJ{+P`a%O_Sv?f$6bJ8P(r)h${zb!0qEh1zVI`LDfE9cDPiR&LB!T=_h7V6QtPU=NOoPlRM?s_KY0>TrE-p-jc6B~`*=pWT1jJ~49bc=z6W zei;D|U(UV(R@7#`#&2~-(#mQ&(})(q+{E2t@-v?ytUec3o48whfXoEK8ggOL#NFBf zxaID}nZL@_-8f}$f>Ou}k%0{4z7?C907P=%M%rJAHN(DRFxqRy)#%hiOGL%c3=L6Z zNw%dibKYN!Z@^j&l)B?(Hi7lujh{6z(~z$8KE5fil7($ZT0JWs%`^Vnm{rodsVa%T zI?xo>^@npr~tDC&Q8e&slXz8fN-9Dkw7(}=T}vgQ>d7iSmOP>ek|!rB}Xf@lpM zIQFVF3!0$w9hk1f-C{o4`0}xy%AJ^+d}E4101qltC#an=NV(jZ-l#ZQUzvK-3kF5B zz4xw)?JtB$T%fRM>PLkz@n8y@ocfnS7^|=et4`fR7#J-+f-<9O>9GUJ)VNQVl$4gR zKA?^v1d@mz&%k#Xh6&M63c3>T%> z&p6#bB~@lr4%Z6IUGe>nH<|?X4}ZKLne)A_N2$O#*D^lx zG;r2jnUVl43Xq|@b)#0xfj}s+b{W9riZ4ZU_7PGM`x=NLh7+;R?5W<2(=9Be&>yj4 zTc7CQ+gPyOe@*+rY(a14|8h zR@JM*2&o;@Byf>kPyEZn)A~)?Q`3ghsxi5==kxTtG*hXK$nh zF5}|aU&p_YmOM8xPtvs@3`=131+5#fQ22?~4W-ND=P)hVp_bdn?^rvA+Z2OZ>@XnZ z%>W`Jt0q!k>|9)Irf_= zGSMW4gnr4RNb6;=DU-x4Q4YbCR^sD)Aw*I491OClP*sc{hRfk^$#;^q%3dd4?_F=z zQpWHd_3F%|{fU{rX5)}vLn^yE_X*A_ph+uV=Z}@AX+4QUuD@ruAKOk;Ee?u@hz9kh zA7KocZf49ksXDJc1!MrG$`(XB_3wyIwah3i07dkuaGrbUxew4IT;>Q)VfRVVq+)1I zn;BUB`PSNNhw;pC2!!U{4o&!~z4pC?xNqFHuS5 zs&Mjj87|Vs+B=2HC9!oxBlyU}R)cDFjwD;6yPgE(i3~N#-dSrhozLEDmVerOTCfes zOgWlxFBPAUm9F%^cmRp!XHw6l~q^ zX}u{!EcA0$N7J`B%S&#c^LSLeC2|eqk#5oX*xA4(+-#^}>VoMW>>>7=EIBN&I{)3H zcy8+t7;~YU_d`82>+T`(UZ9J4aZeMwLIh=jw3-9wx(;gQtSmw2m^S8d1pP^|PWesUdQ z3&6~9x`o@BaUN^?fhD#!J~6+%LV;_TASH(BP2WyIsjpwgtS_4H&3S(B%|7P)@cYlW z0|>e1oEBuRLgyF~=-w(c(y`lu>;i))NmIIzL$`O?pHzaAk&9RcG=bl>=Do{q;Oby3 zZr>g(iQkfFKcHj~qJ&Ys=dB{q?x#n*h3#h^Ahsm7luC4hwGe?0D+~D<4|g>CjEKzM z{tVvD-aUf;8UbiW1pAkj1;W7g%l5eAjJw(Qa%Y?suuxY4FO1-C8IJbB&s!4sc&0O(Ny7@NlC$! z=!dSUgC2bc@zw1Q2Z(?H<5-fIURF1_x<#`YVZ?kF>*^i$kxzN@2&>mu|IJus{j&HM zxn}*%cy;S-ETo?WfBYq}3)25gU4-8puONJx)o~l;70)*OF|h~_t3TpFz#Xmn8(8Hv zwpdftGy_RmYgr*@YEA6RZRG!oG?Y?(234wcZy#Q8exyq!U-$(`QAD4lJ~*ruIWmQ= zmhNdAOcAZB$qf$}Y0i*K6W7R(Z_T7vX>CIMlt->g)o7YqZFL^j9P?0*&6;|_sttQH zNqQ~S38f&==7%c{W0B zmv}_aBrUbNUZE)-S!*ziMOA9HcVnF~uh-15Iv@3x72!T}HbBW$>LAwLn2@R4rw)-f z1?!Ze_6*uKX@I5#e90DJv;f1JGaR8k(x%m}D)rJ|M8$yOWT^hf3SXOqVa^u}B@qVw6BySW`>*!_>n z`L`detth8f_>amt#pE>dn2izjg09g{L7jgeg_0*x#P_Zrk+7cg@3#%2}URQku?8wbe=;F2HNPm?dD0%(RO4V2t0z%ZMvEFVZySp(8 zJ&v>u?y=X$=CC0@1OmqjdAo|VIES;})=(EsP9rStGUL2i<7`s`H4-&kR}It z3lJC813cG@=3?Jy%7uK_3vmcRbPPRmo6uN^hUs@u zm7p|#N?tf7iFjApljWR)_XzJxzU#fOV<+Tp;_oS zSe;(oUBI_5Yq;E7!Bz}9{n+gWKztwklZgr%Fg74lL9&M7SqhT9v(r;v z0M2;N<@cs|wU@e#b^O!)L~cxIMc@24s2_i~-}M+$uZJzkFT^^HI9^1eb|=j9Y3 zCh9Fkox+9IpYWWu@-u>s{{$gfmHQ4arxk_YV$+DBsAIV*O>IY2+xwDkA1=3i&sp~D;9Xd;)3E{dm?Of z_XE8XXBb`>(7=mBw$fh)R7FGpc0wxR>AS&1 z-Yb}J62{KM^>4u49u@-6uiyYf&I81ARHp3D7^Wg;n!i9|RFJiKju3i&MGfc`==&`+s!)|Zt}ogrev;+TfstS{jNJxgqgRuBT2U4UrAEF-W;9MttlSdnNt z={eLGJY}^%qMYZrI2mD)5W-Af#&S`ms$567BORT8AdxmRC~!fY$C}(oLOP|p1Mv;5^AfmXL5Z(K{bqY$iLX!O9*I>E zt*=gPLrx)DKMG`z(znh}s-6>kRVMsB&M}w6%f_usd**Jv2HhJBS}#IVdh-lsoI0w) z{XKTyQpb-w$skjm^`k%^nD5$rGUZX&HnTqH&3Wy(sG$NIp)XEzOr7~d$fA+9Iwdm5Z^^Y`Q7>O4QjGP&cQsZ^!GE6gxKC*u_ zV@7lQu8&=Je1tb{IQqTSKM4``yDCTsuM~~#XuQP6GH!UFngwVXvqY26gF9E&TT&M+ zHG$ZVp&Fe4tnWb$AH~cU;+K)kbDvn!0?!z-Tp6$SO=(>3wcZlqiAkzx=~Oj zD|AXjFAQ9eAAO(~|N8J@ukeO_VX7qJkr%JlJ^!P@b__7ny&CBkGWQxVW)i9RML7ag z7|*u1U!yJgAwBYcKEU6KE;2+$n&iO42d}A{%1!%vCpIcHg~AcrAjpfu{hS z2(~$Q3B}!U?qWvK+Wa6N%n>yA!C%AzoI_XU6>i;`TrmwYe@7LT?Cb(FL$$PRRN>MG z->3pTGi>%ikb|4>`v0V|ka&JA#gv}WMKv73dlbmrJj!vKk<=HBA;X9S;VMx%5t;?l za~XMTZ;f*n2Z~n*fwpLMcxh68b@0wZQP?|@ADEUOXkcXWkjnV4IoqrgXUEv0O?-3k zx@(84>=nkB`#YSbQ<0XJ@sv`St`+X=p}Du!tOrL0y4aWW0|39!; zP)}>}2;^qXP$g2sUlD=lsY<@jIp(A;qbk!o%AiU-! zL(izDvinTceUY8Bm91lk6w$fcv&{+aK$)F^2(|T_CiO)U^UWnPFc8M)86BUoDGRQV zyPE)dNsJbY-7={==Fei7r3y^&f_NsUx)wDRq{O9^f;^G{FSj60t-(qD_Mwe-80^u6-FE%fP0+s zid=b`Kj(Dauhx9YIX3ClgYWoW<&yeqe%J4-I}kgY`mii;vhG)FUoWx%(J95SKuj0; zGoPE1#Rddtve+4bM!f=|k;4xxeufi&?^Dae6`3(+kIl_7k)iR$rV8`&h%@Z(ee*Ho zjUcf7=n*hO{w)V5n`wl8?irJv67ujoV!vI`SGj-^iZvapC{BtqTb?rI?1YBv0Zm@F_S5fYn-?rhy}!$(RkF`&Yi?4wn}14Hv@(6h0`aBQ3!9p)&e6o% zJ9>!mTiuwB&&~ zlinPTph|ph&bTkCc4*Oc8dbZkeLIDAmtK4c<#zX|+%{DvI?glrW*=9d!^KDjw8$4h$VNI)l!+gRan5m!+J`06DLYT5_N?XZ?b%j7`|Cxn8 zPMYFE#|tTwOEEg1V$4tq9iAm-j0KU< z%%1@>&s*RzKhshqbGQ9gV9MUdFhHM7)X&CPnf)raXi807GWq()vGr}g7GY~F1T3*% zD*5Cd-yoNfrJ)eAj5`@NnOL0ckp8w_1Mx{#@9ksl{&4`FyQZtjHv;ARk|)Fr zI9p_DPRx#Sg<@0nh+tOJbX+?!Rh5~@5=vqCQ<>vS+^zw!b{;6-r+lW6P_EjB*aGF` zFdNq{^i&*`R}@Q3Y*J!|&aMb=C*0Xhfxg|$5x?vat-V!sXf60fhC8cK?HVgcX7by8 zBQyZYycUB6v}LQVAXxh#I?jFC8seXrW`RAol_h^0C?Al&;_^Yq2#(Ey3;#&V>^>4WJ0;#Y5s0iojmeskAB{9)s)@wy_-tRWl3SGmUzAYCXTs@neWt{N+i8BcS`YJ{BLlFH|n; zJ0d|WTT)=w?8VKww7a%r~u=ih=2ss(fI2L=Qm# z0m}@2?wl?|_!y2}(74>Wtx4#>`z*8>=P-gChIaHR1C49CQMAh2zC&OtVdQWRUzs{~ zgGMldg?ErYDk9&jgDZLrtEw`5u{jhQwBI<*W^TDt?ba=K)|DpT8p+Nu`P-4sI>Z&2 z1FKr@tPHugMTwkXBEu%K!dY2qbF(`+3(es8kC`eI_;GIXFLy$2`EqAgY4VMcPBS!V zq=N(NW}Tl>IY!elw5;(G4r_w>QMqCvz{q}8T2S0+nBUQAE5UB_I_%4H^ZnCAnSdu+ z>9~EOe03FT%7L^DcM;Cimw}IR)aCH4C6r8G%qd{%AmU>Q-bNXYO5QFHPJ$}=efUC( zNp8izy@;I`^K$cbPaqV1nV02{C};~`KVNR$bcm1h6ncaJ1gP^2y z3`@ZB{^iyyJYVIRd5*Ayg#Cmtp0D!E?6d#SYWEMq{@+C`xtA033aMY^nc;h7KO*W| z5Xvs!lgq|4!}rSM)w%LW^$G#6^30HH!;5y(?~ca~#oQCRw8{1NcfpC}&W5?x)+Ssn zHqGPN_^mxZgU3jw&pP&t<<7k3Z}mAa7RgkY_=TXRuAD^5SO<7k%I%_SAAn0TuBz2i|p3-+zx#EcPbofT+EU&nhfyI9OWg;FHfZt2a34gVx1_)Qwhrll?} zoEpTj1cv+10iCnGnrwK)AFCjFK9^!oHtJy3Xis5reK z(vtdEKD|D@^gX#Zx9c(9kgl972HVvMHR62po75t=`9>CZJZY%UOoVWv`w{Og#7%3raf)U~B{kIWuG@7|MRB+^k5)xRcB^uw z9vSOF$M}RJfMJ#jhinfdXmQ zp@uL`3tQt$-I@5qIe|i*Gk-nAb-8^TZeRjq{dCruxqiTNnKdx8Ms>T5m*{8%j}ViI zcFiGq-9BA1kP=h~zeB0!bB!(vO{_TDCWv8=+L&FKS>?{JNoztGh_&jCMt1z0m~VxXMWfNQAnZHaSK`N=KnhW4orfzb>X-==J1>D z%(sDLNHQ!+Eo*y%Lckut8m5imW+q4^^~|FPhKB(48MT4s*!W!n6tG}N`%6)q(OvyF ze7=6`aXCa*e!0Ypr1m{AEdN_9MQ+R6w7SYU0z*OrYPBl)5?pPRAR_6Nw#hTWAEUJO#L87mJqg6I7x*@BM|sXVx%WZ183c4f*}&KmfcU2LT&^)T~KK z&i8m}q{_LI_Bkz;&di82KU!?T?nbL~0wf_%LotAOEzDJQ$%fh=0o$yDSyzUOV{5B- zA`w{V7@K@k8x>#qPZWi)qk6*x-#+#T^{ZrmQZsjQM#mskZLe#5D1uOXUxVXe(9!-@ z-3$skFA-kRoch0y7jP|o2WmVVMpUXYoOv?0t(gOfJAKv_$E~LQDkoM|mt4(G&3Et} zj9NYpE|q~NUd#4cTgg_6i8AXanSPkFs?s>R@VeEFK?q;QvbJKH!fY+}D2ym2^2f)q z2{I@BgjQxgX7(Q1vj*V9>7%h!Z1vWUmT+36OH<_7|1C7z)DA}rA5o5&88)Orc*k>D z?ztrQye9Wtq$hlB1TY~&wlt%3;8NkX7g3&mWV|4}vnMmzx1a0cc`~FqUY**Fl$O?* zYXz5+uEM>$S~KCeL7`f>8*6Jrke-oEl(0A3HtOeNSOw7YK%6!XjK~}@N1B=FN2p~M2b*z3kbSQ zW+HFW&pQ2Fqo&uVG83rrxd{A#t|5@v1L>px=Xf^#C()Y5=pwaKrYI%>U5;?4>roOv zK$EdC7QM!SX5sL26nhkHPuFhETsAC<&gcRLSb|riz@(F0%`VQV=tSktMCG;E&FNkX znnJ64ZsAGHGNJyRlXlg;YTdO&L05Ahc-HFJx4z-bX?AAJO?-7!@}vwQRXSf=w0p*N zV9H2m4z|9MZ;o`nCc@W1q^zHXOh`m+AVv$?(&WifSvY#L&-q%_v0ofK?#!7yFe68& z{g}BZdI=4 z)DdbGmNvn<HT7e{`f8a?nZ`DPsem>! zMsZXf{;6{nY45eQ2?|ggc{`Dw1BuL7xH7Y~2MV6|Uzl%aeiKpD z-s(Jm_PuX=@WLST)j_zj-@%m~7#Jx!V5fQCGtdMXhA1%ScZfa1W?1)?r96*Y-Iwxo zcNi8Lwg9~WlWfh6Y;wzGG;I{ZI_J`Ki;25wioO~-({(SLWUbDVkt{eR+ z(ob6(TJ`R2)OTs(Oz ztRL@rhS`!m^oDzVzMg#vAG z=)X}ONw-plvqz;sW2)91KKMH^Hfm}j81k}>A)D1J0aoVYa6{&mN%vJm{h@MNy8t;t zp!{X4_nK_^AuLtV*x1xn|3>Z6%%ftTOv|Z~ObblU`aSVip!|S2sI_{7h>AjMm~vvBa$U%toMIe(-t>6vcN4P-L|btZ;_pT_=&!NmbaFvswN z*%yF+%$G{LKRfL{q2cQBo(ElFR%6KTq5By&L5lFb0UOjsF5wFW_dq)19C2@vd%ljUu351bcS-i|BjI`hpjsOXk2`D!K z49SeqUceX=0ADggD=I0*nt%vzsK1e$?*&A?0Bo)Xb;{#p5zwE;UOq{PKYdw zdl)~FnX<&~R@v3TqsdkjJn4S}?vnL+`M$*N_!ehifL;q~DglfP zL4tybnPqhckjyH5zn6NHVP58Y%!}1~XKDF)Vf%rhAn6Xz=;7^<`@hSv&efzhlu5I_~${ zdpMi2rDGo3o_>>-CR#Xf)2**+{zX%7v0EcLKY9}>iaLV66ErKrO@aY6&+2$uIp_E} zt*o@Vzt0Cl905oS-Bes5TKnxRCdU#)VDT?vwcEUrQ_N23@?>9Nxs4I44t`5xALG{- zf3VPw+O#g3*xBeRjQf$Jce)rq=AHFG`2nYi`vlWNUch)00M9#pf(e*?mKpAv^c=AR zv@>&-87d8eI+Xd8h(uxzhQQWZR__F7@r?=p0!gRW%+tWJc8J~6{V~@bN-f8 z_`4oH8^_xN=0uou>P^kinQg7rDYe-A8lwRNs_;_vD7Na@TLVx7fa+7v%~N@ZOmBi& zsxcMD6ZEu_g=##_47MKk(Tb}0IC$(Ys~h^t++x3enqni^XX`!3kdv8^lNZW$y({R1 zd!YZ!AK=td23Ry^PUA+IFVc}3`Qm$26lAH=7rVfmQnX-cuT-g`=Rmcgp z(aPX1hUP`LG_=X(G_9l}gy}JBtLigzw2}Axe67V&)kt$t;4EIpqF+X-6dAo}UBub2 z9?r8yv#^vQ-#!8;+P@GWCm&3ClTH>aU)RZb#Aha<{dy>w_CqXTmF(9dNw}9i*5myg z>=-2-)?S(gpz(?aY$F16NPte=nH@AhX3=oET2)aV)>h{yln2hT#Oj#9YjRmMnG-jOaXnqChm*nUb<^vL*Y=I@vK$B zW2~(_OU=|WH~P?<3TTlDN34!3K=;H9nOmhDW>6^JoXMEeFyp`>^|?`bMlr_#6|Dy$ z=kSom$#)!hpsR9PPLv6ACXWIh-{XUBoD0BV5`TJfP&_wDZRBPGm#pJ1YhC}PEPWM$ zx@MTk*Vg(`k@Z*7nY!KaKNd8$Fr zb5$?{(>dh@XZ+CY3lyp3TuBbo!=nCq{2l&Qc5&WJmnuCsb_KnfDp&V0qUu88c26y0 z+8sfwJ8KB(*UDgL{BF|{hO5HYKW*_+adT^C+x=zOO9U9O3o;{8Va`XgYnG9&a$)m| zD3~}o^`}#Si7m33^2-=yb6EAylN# z6dhn@_>#`c_8Xz(@BBXP_bb?1`A!%DHx0>C_d*r9k0WyT)+IX2n5J)7&xHSI^0m^k z>B|y9DZsGA?4_b0ek}8rh{bK9|J!?x)Fu{HV=y|3Im4jU@mrFcnG&Di#b!R{r8Vid zlHNmeCtOXV<70D)LMD+_6u+n%p38FPRtJvm^2a}xXaS_x!+ZtIrae=s42c%fXh~$r zzaH^Gp!_FB+Y#2vD*pv}!$S7}_7!f2mz$`}^l-=@PU3b7)ycBe`!y9!b|^AaEjZd_ zmpn6kbQg=)1m;Uo>(T*lxj={1*sf-|h{$r4@33?0k|883vVcKJm8oBr4WCd&_*U3| zeWgqLi6LQcVIr}&*w9=OZ-g1T2)XD?9~ck%FdMR8Onu`^-iniSnzTvOjL;TLmdzKW z{+Vi-4{lR){tEq26N~4;rDrs+_`D>NXXc*n)DCK>eLAFJ!>Ow*_U&^^tj;66GszRH zeA~4;PD4`D{Yzf7dZI#ZfsD=|Ye)zN;f|2#St7jHprh_8c}pM~!@7c`GeeA?rJkE< z);}#PQi9T5C1<8K#HbzjIP)8@t8K6ja|dxkxlzK#BlaoN3P#vSe3+1>*3P}<2aWfm zVB$6|Y5KubP6scAG|(R5bNyn7Am;rRvruNs_dE53&0Vbh2zK`ub85P`{5a$mZfgsc zhe|QCFJak`0dg6%+mm0?Q*Zk|a=Z)hyrDz1^F!e2)@guQjkti{l6w75TAd_)Ga&f3 zK+w;*06PuLQm$Q%We82to;i>^Nj}*qF7Pc+_Dj&j(dPmwkXgO6%UGHGJ#$7dg6=B6 zZ}&w{8UC6;XB9pc?YDf+zJtF*beyPJg)a%E#%LNeA>h0xpv5181NCTL z^v(^8Fnhwx5-I~BV6u9K0Fk*%o9cOfYwrhgH;yCsqH!av-q^U2YCbcRSw451(XU{e z*sU(5`<<5XfOO=9*E!|TI_DYfU_@*E|N;5yM zYukNKJL7pSDq)7qinsn(Xo_gP)jLLvOqtu!m5Oph`AGIPdsk`QA*);a0xWes*LTWq z?KlN4hWlRg_YLyVC%};zVqS{fUH93|gUWg=`&%w*sc@t8v*QYFv%}VoE6h%}D1C>Q z{)lrDLvdG((56Cu{*IvS)2oV3nEdII|^Lx2Npog_} zj1~{X(^upe+y7C`t9^Bc4R%=F+U__;vU5Cb9j#TS^TaN}=+AD2)xDUgY-;N4xKd(j zp%wvRd#le7DCE~C@O!d285L%nBYal}bSwQjG{2u$E`y*-0ll^!e-8lzT!!uiKk!+J!=CG(PmAcRLUS|hnYMW)HrVEQxu z!}|jR$q*I#qg?1Joh(gUo3$S5r_u11H$#3ug~z}1oPCo{sAIj?XYC`t&R62*0$YDJ z{(GG2?FV5{wRhfyrG!cv4l^6G>8x6{W;E3V==48v-Y@u$=f0GNU|3(%>minHr(0>i z)wzOhq(!I-{pa2EJ)bAv?QP0n`o4F{D?~;FfXtWkV@fiko!=wXw=i2D-NiHA&KD%? z68ua-#r@yS;J!j(oi7j_ja^N~$QHm6 z?V?D@s-2ps``7p=0LWa7x-F8ZIluMtl66aHtPymfJ5498&DWC__Mc-ztMe$vo7uc|#3E&bfzN5Pua_po|z+`rteV+6+uGRys*)jd);a>O|d z;Mid&RmMKgZp=&aDLQ2JuJR?{ zf)|+q*M78ox9X7Y3E3P5h71FZV-PTqJ>u+(b2&6~VPb75N~+ZHI+7MPkA`cP$m@9d zK=QXb;s`kFLn@=vFk%uVej1l2$P%kPOK0T$XOs6bvkh27-dD^2m86xgO4)51wIrm5 zAvA7?Pe^RY0jkmzF*5V9#D-E2E~6E)6~+k>8p{lv)!8UOw2HNje-hiVfU(MJ=4)sv zLbYHZ%!W6;2#6w69!jv&BmhD%#WTeQmhUlJ-}GmNOvjNgbE{2<=s_QL-vJoXt_f0% zh29Dc?=<tUxZ{iGLo*e5Ww=zPs5FNq3%E zxzOJLa8^eR^?yb%PB9dBL8gR;sgs1XIKDQfIdH#zi zr0s+zRD5>Z-**xD{Zca123 zc0|*EAb|XgiM6?kNiWd4D=Xkc{P`8l^`HJ|U6`^f0*?Q*+j!cKch|p^43_e=pECnL zni^oQdlsuj=1~WqMyJ3?d;&-xC5mS3E;LsAbiuZo52>&2ZDvp>Cu-h9mwUDH1#s2p$W>uED!Bxj~y+bS%o@OcJxhVJDoO_y~ zg5%EvTwWCnHp9+4qo_ zs-tcIA9A2bEwBh@49hJka0VZiCUuob{Y~}BOEeiX%fTn9uAc0*JjIPKBC?s3WD2EU zr*4`M+{|K;5!)2JXq*WNutJHA=K5!*DtS{h2!(&2ir=ppOrk7-N-Ismb{?&pJkN8Jgoe`97UhjB{kk>kHt z!W{wUfNxJGqHry0riib5MVR%c8S03wR7It*3PD>J}z_lrp@!O`7{(x^bL`qZ*l64w~RQK)lkU8R-F}~MxlK7!#D(Rms!7kMeTF%r;u>RjReY9?Q^ne{ zcgk~j2;iEf;Pn5vd-wRbs_X81MjGs~Equl>fFJ@37>I-gNMJy+1<1CL1sE)du}xx9 zlM>euC-G(EOCDcFnvtxd<1r=yQqnXfY1*b~(r~LUgksB3$rxg6lY#>&x6o!LL-P8P z+PVhjGa4DuCwZRtuh)Fg>~qe(tiATyYp=ET+H22hN?ifBhMSuGOaVNZ3e%$~ zQZ-o9x4zQW^3hQ16!lJ>wZFF+AFN(BJNL_*Gsv<&eGsqqDV#~L5163{*7U7C6XSbB zeeza6-tX1c&X*V2;YJ~p3CytNAwU-?A6RvUwe#~~Yv=lE|2rbW^}&@>vqWSOtwPmGDxjCu#$ixc{tsiSNwmA%*<&y^m%w?vR2Cd5l(4 z>`<;!#i_G2)*imTstc>xu=`cNNbPuHec(kJs`EB zScE@y?EzgxQ{3dq4ELlC<*0dm?Wbr}fY?Wqs~EARjMxdX z1R1qe-P1~aHtsd&WqJpP)ULe#g>Quobv+E zcp?7fzcRy#DZfEE8~1P< zBBzE(2*>d9tI7OUnQ#U&5rh=0wK&!Dw&{6J3(G&d{nIqP82Xn-Ke_%~y+r#3Lwl|6 zC4oBDD(=OWM-5)`n{QB>y{YMe!kfYbo2=;-d$QU;5VFsJiUZ{btjD_XLHqjd(xX`e zgMAW}#($!v$H$`G@@pS5XHC!YbmE}78C8dr#7bmy&mm5iLKokWn*JY1@`|j^N%g3? z&`dg-ZW((F*UE*W@Zo4Y; zThR~0VlcUmMpegMLHlcx+!@r>qY9-41syKq+9AqfoKGv99>9kj-Ik-NMcc6t;5e>C z0UrQKA(cYhACp>#=bY-hDeRva$Qz%rL)Utx&LvN7fbzyCH^0B}0OQjfY*}CQ|2+TW zx0`Qq%-k8gmh&IKbV=Uz4fN*04)3Kq56tW+nV0(8?AsFcp{JopKiN5vYhL>g<~+Zd zyWAytj@rH}tgUK-W9wMHDQK?_*h__cYa_^r^*A!|Y%2PqmOR%lu&>B-K` zm3Cu&?sR|le1GmZzuE5?e*Wg~?iV!%ojZc5!Mg?Guv6@cJXkpxiivY>-(~`@fo-yt3my zi;Vb{M-|=Brc_O?iqpffl{!Nee6`rb?d9&4cs&L5%=1* zazqs5-2E4S|M@@TOuv03)15l_pCY4?@bj6)r{ZTGQBzXioex&H7U4#gw?I!Ig5AdF zb?5l49>NaR^hK)x<My4Z`U!n5(i;G)L*F35jFO2exKy_fn zUpVX7C{J;c5qjkt)t z6s(n?w95SN2d!H&=PLp}&-T&G8SZW5M>EFjS@wP+JA5KuThWq-@spgqPO-3A*Is6%l5SH;nN?zqMJe z65J1*dCG;>g(45yH>eXCyAHgEGnYw57+v*}B6$-xB5ZVS>2|)*NRxjtgxFeHXtf!P1CL3NcK~`!cbJ#2S z3!CS{8>>am?l#p;3fORNdJbSj?Gs%E_1bzaW zM|t(zSp@*}%m)A()Et5zF zV&@OOO9N5i#(urL8`xIY0ts(<(^f>Xe`!fwbfA`&D)(2(e&?`px!dYHA;bq z=BsH`NFR5j>7e!(fz|B(rhkY$jjT)LCx&S$&?;uT`d`GX)e0pX@C!=KZ$RuWwTv); zCM$P0}ae-Lj=b{&AJ->=NC!6&=H)(JZ zded!WvRU5E9A8L2V~Wj;e^R1Lt;z|Os+Vw~iOa-cb}4YJ~E+!Vd9Gy(zrz-l2tkp&6a`uLr5hW0v&=?&71K^q5t>)~8k7 z3;^0S5~6UKq3qRYfsCkB&2OBBW8ZCItF@DaM#tUROby%y zyda8t04-AJ4n#zr{cS&iNwMzLOPHaqGQr8MSahGPP57+REU8&0#lZ`&aAj3?w}ABk z|C7nvoxlzoQ_F_8{6511`y|ko0B4yaW3>7aok*^L z&6XG}D)q?E%z#9Iy`(1qy8xsHKfPYcuxWWy&eWe3F{5?X#LVb(vwg*`XL7i#JN4Kh zzt3|FFH^I2Z7_W^zz9v$Cfr2QbG#Q>kkd1Gu`_Qx(g3BB?kr@FKk+H@5{U8Z(l#TdU7Yu@ z+VIXF-qN~ZE$JAb*V2EG9I2(}YH}?Jxu&Hj$xBP|f7HO|^P-8vYVRDXeZwcz{`sNW zi4)=0E|e(R~VcM%{FbbDCRaZeBS3qPTDpI1ACxRA}AL?2WE#%gQ!YSdO-G7R=V zSM6jpu)Zj zvJ&2C@5x!M%G;%KH1 zO?#O{Ob)rJXHBh}jOa8Ze3^{b{d-OT%agy}Wf)SLc{mF_G0#;ga#ox~gjwao0Bx*F z$JeRW3IV#6d_Et3FZ8}10Y7x zZ0it0jksEkxH>Aciz4%pSmY<-ng_VStwS5zT_+3ff87;gi=1i2HM^~u`{Qf4oZe!q z0uv)gS_m%H5%zQW=)v{(>n7a@{Vx(^kXcr!#vwv}*yw=`u1Oe6`e1VyH!4~#Yq}#f zj@^;C&d;+UL2V5=4Iu`HuZ`g?!#uyV(noDQ9B(Ua#>WR~C4~O}o-}jn3q}lPr zpR>peCg)pz#ZB{yRfc=`yj|9WX%+mBHE^?1<;@|B*I`xjg$_bdmiK}%-s`Vvfs}{4! zi#t3LzW&zKiTE9kt*-Y)XHh>pjRi)aS|4z3mm5z|XnB>Wcw8mV)D74H0wIR<@>%aC z8xnT?8-dumu>T2vSj%6qBQSxD+k*VSuX*j4W|`5&YM+@flV%&~Ow$zq0c6^#je(W0 zaVY>ngI?GnEX9}l!Jb|Yz&GFJtP00A0Psx);PnNZBLLE{3vjVuyC4TJ!`kNoJSOjD zJt_=rj6*frVlMc2zyQIUkN;Jy{zg?%=z_ThUo*JH8Nk`rZL0PF53VHoXy5_A0-W{t zm~jB$3Ov6Swe4De7NPyDZMPS|{+zi)RGT&ZBwyf)i!f&HB0{gYsyAkN_{!1uu{(gF zIjGY_b%j>q7`dTxvudmlYyb9_yos#`Gc%orkAr5mCk<$SmIcjflZn#WHhKuW*#^9M zS@1?1@J74!4Id-ZRkrk-QdYLU<}Wzw!v=y|t(~ig^8{(ImSKfqEa6--`L@1lwrX

0DR0XY34yQyGN+e;h9WiHn{lItV1g#J#omRqftjT4?b zUxIuV*=rk5W?6(+Xv52y-wv|}4vqh8%@^4NA+p6EqQ5Cx@KZk%K8up^*B|0eN`KSf zs)eZw+(^Vi!F!;D4f`ctPz|xr8>Ldja0;e zehl^_FiDI`)=(XWPY!2^^A1`Q=AObdvwTwbw6-?_ALktG_E{zovDABU;Y~7w5O<#FQ0Zcf1vh? zBHWeSZj#beY9pzC+toYRW8TnUev4W9qdnIi&iXuq_8@!$vS^J?-m%nvXlZ~_k45=w zKUPN*J=5w`k-cLzuRv;Y@@TZokp1LZW!a&O4C3YtLYTy^$CVdBlmCr_H}*1lOq;F3 zOcSDIFv(gcgQ4;AE*V@I;Dlk_D`v*oqq13!NIJe}wVRUOz#mg7l9Srx zz+_Lsv%u%89UYzbtaeyxi=y|Zf2k7G;>$GI`|+(cO>u#|Rj>2y!L;sDq$D;@;QI*= zu|6WWe3pdq?;{~v_BKJXGjeBbD}iAAi5R}y2PA*n$j+2@kxHT-{-?y_M|Db zm$QK0=>1M$0 z_>tZsoi{ARlWcR0r_P(JiNO=@`?N&s5`#El!!#}o*JGtJS$e;b^@zy+zBJk@A zu4i8r1jaGkr1K$n`P#S0%>orC+O)Wg9?eai`BT^NJLEj5F53Q`b+mxNa;eX1n++#o zE3uNH4*HtUa2_PS8Fv|l^tvOW?Dzx*jPx9PoMMFf+`^CjgrKxLe!ySBntW&$A;)ZU zb$jxmisMQ@%(tZdkMkLi^3is1YCqQt@Id1Tfe?3xKA@G2S` zf7v){+IJT@jZ*dl_U7jVa$}jjd6!94utu3grM-ENNldm)Fn$LeWAlFVrq~_swXbV3hVx`pE?FpV~`Og8iduN0P&gpIL8>?&E*1rTd*!)}4JHO8dBsQz#9iAkl z!~0xj5^h@T^X(s3{g{$;~s8N#o5{uy4`N26oyXO()|j|TEq>}x>*7_t(7!#ld^ z)Xk@-#CQqSOrIY;&7MC0X}`nafYU!AUL| zo@L(PRx^uCmH=6dr$Nx!Xl^}__BDNB_w;*w&PD^~^wo|#SoZX_q|}z(YW|u-kZBWh z{bP7&K0Wak=n6ESo{j|pm*jzThXuE(bviZlZ7)5af>&EN9pMmiz_)`-Bz)Fwd!%@__b&K~xDp8MWxdjxt~KcGqdYk?aP$I7>M z7V3Ya-P@I#=yl3@BVre4a-TGmfeHaY<_t`!Ms}WiA#Y_Z|Ege>a@Q!&hV|qZZ?_iYMYz+|LH^23aldl1r)Nj+B?O zw%US0lLjgyY6uPpAWQL@^gEd$X`0uR`mog$6d+Id<2y`On{|M&I?f%%kL>DbVTgR) zEg$mNm)vofzs{4I_EH@t1MUNaHD1-_f+8IaA2JPJi^5dRNrPZ#4QPLh+BOmoR*I4qm*`gkG1tN4JY0DSAGmH*xK>Dn~YdnJ0xX@isIXg zXj41uL?F14qMSm!CpN&g!d0raW0&&nLzCNRJ$N&37R9%}$Sabr{VjP2pg^~<1B z^Snt0Xz$A_!@nqKR!?gge+LIQ%D5VEwy5XZ_4vsrR!;N9e7;Lmh!m2N!I&)GriNH{ z3>|ZUhxuyae=60}QcAum+VJlpD&x{Zx3EHaeR6x6heK_iuGa0=Vzt*QXzf-VpzLWa z;_p>Fcel!v?oa<~fHCjeh_ZhH%wnat_Z?Ys1*D>D(6UqaHCzM6viIFuR5?1b}_ zigMbYPr+nhtNmQ7D8{jcaL%3CuTJ6vA4}{_t<`*4eO`B>wVs5Z7q$FqgUeK69HvZL z_L0~?p&5);5yJCV^9Sx)kzPl_oUaWyUl#(I@|DS=JAm9U(d4GbOyf)g;?;qW%4B$+ zt&`M&?!;qi)J!1z;m6dl5XPqxHY#R|IcZxmD7$m3!A2Kn1>@ZZn2i-RZ<`Z*#Vf8N z8@vBcd_;$nCAR(Cw@iCQPpGGxzNP-@nj_1;oArRYgPCWMb`(#_cH1s<#&Ct3d(1nh zLUbpdbPUBA3O6fioNsUGrCK5t3asR0+mOk(pENKf zwrJjoo%WQ!V<*gY5o;dtVDgv@`x=9l%v--N)rb>+g#wc zx9T`GM+&Ugd!!(CP<^&Wy)U#{Z_=2+^qfln@f~V+=PhKSVb0XJS8+w`9xHxftL>z-JuudUDyBB zxng-6V9&R8*{xDNV>fUPy~iY}!WVy5H0q0fCHa)dd1yo5+IoT0Ajg7$%k2IK9;Q6D z>bCcucr$?#bHKmfFg2mUFjKqXBR2En-QlUGx#i!Be=XpPUSvE+b6X=CeX9*$tGrXs z-K}PQ>ulY@N4qEa)E0i}bI}&3^+zOoS|8`H{;`&Ft9$C-{#iy@Y3D_F_AN%SS*yFK z`7h~S4vR}x)wPC?XlWH3R-3u`try8G9Dnw4RkmiF+b}1SGLJgXswHPO!F|-S8>>K^ z)7m+~+IAEx;<`_9-^lUih_#Klq&pA8eM726iZQ0bX&52bF8xSlL4ucu@}U}YM5TG0 zu^CQCCn%y2ifiv=8XHlRv2|+k;5yvfe3i5IP=M4&Y(`GQE?J3PQXsT_TMdyPM`$j3 zDNrkm+750wlUou=Dv!SMYCY$M4&%&2EU*yPN|`e!c!fAlGYwN^wCSV)5=^ctN@cbg z^R_4;zD8KO-6ij6)+x~zT5w8OQ_06``Dn&mW?#FMmEQKJFH{LZ;X+_N_%)_!=5O>W zwPbs4EAtcWdB2(>d*0A_3YkS2(I6LI&P{!Z9b7R#ISR?!Z<17S+@{wA>>4(S>@^q> zBysrct59-#rUyy-dZriYC%efC2OipCP5ok99!Rnmry}KT z#CR5mJbOco7E@}L{n?PJ$=Mpv%-rp;6%2WiBjKn5n*mOY{tY+avptjPYaXhcv$1as zajPv`YId(E;o!b~13TvIL-w7w>bKAOBHaA;w|njW74L2F4kl1ZYq11#qVTORDu||@ z7fRCQ=+n>RSmjGkBxQG z5WF+Z$WZp+IR@Twln37QHMD1UpV(h0f533(**jqnk_gK3v4MOs?W5{Y^lZn^Urrgb z$$<;ut<9{eBe4LLQuE)rKz6f8^QD6)H69jIf(O`6Un(ctW=O3qm^viG-kOB|z`HV56WH_V9 zL(UgPpJI1^B65BVh2$aUMQ zZo|sJAja8Jk28RVpR-OGG(GrM6-l!#T~;JUeDq+ba|Wj0n)5O2$7u*mdoCBo~u zRJ=2-AUxzKigyogDox6vyOuv3_$a$ASj}se8tIBVTB3x=?ihGWXAQy+zHX zklq|#M7VQ+aKt<

5lE?=!TxHo{J=GKKwwe0w{7I8b$b%>HJblwATWA#Fg)d&I7{ zj46-bqV#xm^yD>G+tW}e!DUJa{q_Tr`4p>h=3vRC~su^ZXD z$*0hOC{$aCBU7m2&q1MIIhLi+5__8T=^TY#Mp3{}kk?Zw^jyuB{{vofuQiN9pOOah zM={zzfkN{bYwI&v$}}7$ac!0&C2KIeVYw@K^!QS`n6L4Z)zR^Wtw`udAA(pIU0tAT zP<((<4^C|=wUXLO)GI;?WQU61`Jl{DoA63!eYsE>GwFr6F+&*s>$0~Hkek2S6r6YO*%->p92&wv71UMR6-eF zn%h$b@%8u|FN{cP3{pYOQplYn;)v_o`K+Fo`px4;Vd!Zv1-)$rlOZxM^|S29h-&p5 zzPd-59mw2SnALdh9nS7orhfQOdFn#``JkLX$Hj!D$oZ=+>S?IMem2ZiZO;GTsy6U9 z##ODyby4eSs25=D%a$5%weyS%8;=v@$kv$WyH@`RzH2E+XUKPL7QSl>vR#qNg1+)6 z`{(8BN7r3WU;ilowcXz{&Yo__4lXL}}_SBaKoYldu{;_s=A7NmX zn6od?c~>~r?|;f4JLu~OTZ`g#a!2znKX?1{8C7^V&wub6?9a$~(D+V$lCRUnE_f_i zRZauGP5^Qt$CGdZ%L39j)-K|}U#N@3tk(nGfphR+qWNJFI#1Of&r#bF4DrRI%KwdT z*>}Eca0C#S{87GT|AYRS-~UOb{{;VBUxxtlGz8V%Q0F%;T?VERoXUp$-Nxo%TK9kL zQ1-k#-TrTpEW-8vW%cd~$6Tes&faX!1+{*LzO zomP2<+3g>a#{2Qv4xaqZT_w@T_Af!CEdz&;8ke8bGO#2;wt<~r;&Hn#h9ow<$9~6d z|3Juiv{!#O2SA4Xe2~BS>}^E;953_uLBQEAe8zXCv~WacI~(QEkbLk%V+i3QoX{PE zO+ip&ZQWy>IBOnMPGV4z9j@m*_uz*-!;Z1C;GP*a+}Ww`2*8^&qgs08uH!to!~l4R zzs|;l((Ngw=Pt?hSv!NsZqJ%t_nBUw+0v(8?@*tgb^Cn4e)L@xbR9G{H=4Auxow`M zYM=L=+Iz#_;f5cH1qGdlzR!Z|JeiWD(^Tx(KTv{8mT{79#LX7Hf-~0yjQIRLFXYWH zx40Q)4jg_s^i6rP^ACPI!bC}*siQPu z5LfTrT2ytM)jG_n^=^O7iD-p{2Pg0Z8Ggr6;wfXBe~qvcpg1u>`nYz1vsGk=kG#ry za(rlY9ub~zTx#HPsx#xZ;4FHaTV8+*^G=H#5PXD?{RL)qCXD$ z;`+86cxv{o8eh1aD6T6<695K;H|A3u^?UMward1dnR01}_?FXOFI*ZXD9HKF>f$^M zQhpv}fH9p2-pxncJ4NyY0@0_$ffPe5L#&)Bq}%wNEt&?-odH~A<*}E1`W5`5P?+Zq zKA~xH$KcZY1`nbx1i+s%C6KZKU_Nb z?~6s9nx3{Gl4ROU5RE&;cTNf3;?1|=<^Saq%FF9y6MN2S-{WmX|J*85`abeO$3D;(tWsg0Qx|?RCzgZ9dNMD%O9LZT9Og8G|Zzyl9 zl{A-$)by^15V@7*q}aZSOM7DdW1~f}{_~>TZyoDDz4^@@RO$0#xx&?S0!-Ihl!|Ex zE+^0{WoKg}bFTdL!-$g_6OJ5@(7k4^xzBno{2y%3pKDT{uPob15jLXEre|)5~bi-Up;5Z1BKCZh>G;l&h9r8=%H#IF>@4(OSl~gJ^zR-mkNJm0LuLGNYaB@#yAEz^jItfWjU9qYRS=ZkRjc>7q@L0*>X zWo9{(w{qx&b0w#n=P-HMkgKdYW+fI=UCqFX%GlJ40pJBcHR$T_O52=cCN~+wsf)Z4 zY^k#uD!&Dlm6MFUo6Yy@jg0cw3WHE;-L@Z&Rx=ImjI+O_wGQb!oEV?SM`u`eYW1 z#3RblRnx!XirAEkRY7yPD2ULq{6E<)(gAIixy>sBnN{HWthm`>4GxT=IQqqwz7(Cd zHirR^2@$a;7+-`jc*r!DWg3_zWOF~zaEX0@OH;5uL@zVh@G8I{cecIf#37PpK2Ba| z&Y%oUWX2|7gg*z!p_8B7PR!l1w3MaYEGp7RHD!01y$e-O&x`0x`~~(?#*?4W-SOVi zRThARoo8D1OoB@H4gMD`bm%gWUb*f09=5mXj~P@=DQ$9b#Et`X5!)dOqO~ z;R&CdyfqnE3icI4utaQ}3(VjP53YgLsRI9TvZPn?RCT)X4m+m86LFQ$Lz zvI`i=`uX^sWX|vpCTn;44<^H3rwdrL*UxC_7Xa3SzanePAhV`u?VE(^hQ4`$pAw#F|>fw0SeB>j*oF!7Gk z&$H2FA4qS|n**6MIYvM&{RRHr#*`GQi#{j%viEo`d59Qo`j)wn+mM9l92{@hM-ArX zVo3B9e^0#Yc)aho%YV=|*!=x;HI1ac@t9$H+4+w?T482C_s^V(LpAduxtjYo;)DNT zwN{CqYM{hoqF2W+=BaZcOkhAvU|KB&<)R8_qKhiKR6QB9XNr>nFDb z{l5^EurtM>62z$sbuAcuz}Wy`FtY0d88TbQ#w912OL50mJY%^qh0Po?@1Ip4m?|bh zQ@FXn-fQD}6r=?tC#b zS4rM@aR5s)XR@dgYOmi@-nDWi`+U=naNgp});7XX9n^grP+fFR{J&0;2v!~3Vr`uq zvS04X1pP}-I%b9Z_rI!aEnRwJZF@;q zRd1?lQS#ji(PCtlqI;gt_SMs<``|~%m!=Q?0TZ1-nY7O6*zJo=`jAO?nDj4AdXq_OyT)!`NILyv zy3skauA`x%bLI>>GR^BqcS9uy)=ue(GjoaEE}!nxN--nYUXP@d+s5(M+4vzJ?e;p; zO3I`KA%5{2WgP&22KwYi_1TuB;_KYV;ZR>kJ8A|!G^P%(=f>dCKF7S5*~4z1PdcA= zMC4ie&ezZ5=SXMq0#a&X=0p=6C0#5eh(M|yF(P5I{W*}p2SkF<;-zpToq`R!A34Jn z>@XQ5*&iii)l0QOtM%VW>2{Xh^*_|J6w*5C0SznnS79 zy}L-wng?Co`;v~aa86+Pdm%8Acyt$ak=XR;ev=@7NiIJz5&K_D|CMW~|KmE^cm7HJFF}_Y8vpsZ{wy4!Kl8KwS!@yz z@Zwzlr6c5Doz34N7)PN0`KJGBYNY-TYi`8;&!_*&<@MjNy%^8V%%z-kGKr|&uGYCy zc(vWW$xVIDZr`HR)|qQN+8-t*aw*`~oi6W#z)zYkgRmr*WdM3&UW}|B3O3E_a34

x5_Ue`HyGu#UI*`qcztyaRVINv_5SI|Q?GaZ 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

XX8Qq5##=B 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%0A0b2mvq9f8i%pIbF($ORxEbN2}U~X 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 sCVQ&+?Yhg?^K0c=m5=0q031;bX8-^I literal 0 HcmV?d00001 diff --git a/android/libs/x86/libgdx.so b/android/libs/x86/libgdx.so new file mode 100644 index 0000000000000000000000000000000000000000..d196574d0623bc878ecdd7fe5dba16e0acd8b1c3 GIT binary patch literal 189668 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 literal 0 HcmV?d00001 diff --git a/android/libs/x86_64/libgdx-freetype.so b/android/libs/x86_64/libgdx-freetype.so new file mode 100644 index 0000000000000000000000000000000000000000..2532bb7ed4c19a659294a368ef04f710babfc45d GIT binary patch literal 888928 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

f|m62ENttc$<=9XC_ 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

{CW9y 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%0DO*nmUoD(%>(N;M#* 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 LBYC&-S<(Lwq4H1h literal 0 HcmV?d00001 diff --git a/android/proguard-rules.pro b/android/proguard-rules.pro new file mode 100644 index 0000000..35b7942 --- /dev/null +++ b/android/proguard-rules.pro @@ -0,0 +1,51 @@ +# To enable ProGuard in your project, edit project.properties +# to define the proguard.config property as described in that file. +# +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in ${sdk.dir}/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the ProGuard +# include property in project.properties. +# +# For more details, see +# https://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +-verbose + +-dontwarn android.support.** +-dontwarn com.badlogic.gdx.backends.android.AndroidFragmentApplication + +# Needed by the gdx-controllers official extension. +-keep class com.badlogic.gdx.controllers.android.AndroidControllers + +# Needed by the Box2D official extension. +-keepclassmembers class com.badlogic.gdx.physics.box2d.World { + boolean contactFilter(long, long); + void beginContact(long); + void endContact(long); + void preSolve(long, long); + void postSolve(long, long); + boolean reportFixture(long); + float reportRayFixture(long, float, float, float, float, float); +} + +# You will need the next three lines if you use scene2d for UI or gameplay. +# If you don't use scene2d at all, you can remove or comment out the next line: +-keep public class com.badlogic.gdx.scenes.scene2d.** { *; } +# You will need the next two lines if you use BitmapFont or any scene2d.ui text: +-keep public class com.badlogic.gdx.graphics.g2d.BitmapFont { *; } +# You will probably need this line in most cases: +-keep public class com.badlogic.gdx.graphics.Color { *; } + +# These two lines are used with mapping files; see https://developer.android.com/build/shrink-code#retracing +-keepattributes LineNumberTable,SourceFile +-renamesourcefileattribute SourceFile diff --git a/android/project.properties b/android/project.properties new file mode 100644 index 0000000..aab9a82 --- /dev/null +++ b/android/project.properties @@ -0,0 +1,14 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system edit +# "ant.properties", and override values to adapt the script to your +# project structure. +# +# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): +#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-rules.pro + +# Project target. +target=android-19 diff --git a/android/res/drawable-anydpi-v26/ic_launcher.xml b/android/res/drawable-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..6c7313a --- /dev/null +++ b/android/res/drawable-anydpi-v26/ic_launcher.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/android/res/drawable-anydpi-v26/ic_launcher_foreground.xml b/android/res/drawable-anydpi-v26/ic_launcher_foreground.xml new file mode 100644 index 0000000..4439d22 --- /dev/null +++ b/android/res/drawable-anydpi-v26/ic_launcher_foreground.xml @@ -0,0 +1,28 @@ + + + + + + + + + diff --git a/android/res/drawable-hdpi/ic_launcher.png b/android/res/drawable-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..46b36d4a09fdf2fd150642fd70d1266606503c46 GIT binary patch literal 4774 zcmV;X5?SquP)plbK8=`$SVD z6;QEQWYb~=3q=J*%cUsyUTDBpisJRwdbLn{l})fMR>fYmRuQ%J@!nhS)mE+cv75DD zzxU6aGbeL~NoW%m;XKd#%zysMR_Fvc7J?h6EsC1)1n zhYa%JSw`J?PY^%JjBhbMWl#X%hp^=Hjv#*Yj2jpqGH4ti4&v(13xfFRW4s2x}p zF=K{kbZ2L$kP?T(Ata@tp@G(1>jL10AHom^ae+|!={Uo4))T}}I^*78dL}I`O$;B8 z#{+;QNQsb`y1F{L>n1mSa@-5R4L^h-4&o~5AXQmeS;#XOQQv3S&pLwmF*9yv{2{Q? zadB}%&vbQl0ca$o0S(1a64J8n%ML-zUr!7Q{P`6x-EzH<3Iu%2Opl;yz?T0dw-s>^ z7ilyk0hN`NWHOn85%o4>AtU095X4Uv<7i;TA|fIvH#ZlJ(U2n#Eey5R)>a`QBe!?b zL)+YR_Z@Atb)5j*@Ix5lATH9#Lrp^x$|@`@q{zs~U_?E~XgqBM@srBf9%OldDH%gT zUHOv^EeyM=swyF61qB7d?#a&12H=Jt!Vm{>gAFweAZZyH8Nu|^Ul|WFGN+6nek8_9 z#z%p~L`O$Msj4d*a%eR*HHoQv?ob2W`PEk1d$*H*{2dp)_q7EGEx_Ss~XNhOG%UdAtj=ow7Cp(+b#hE{EDEp5Bi1zj@{ATH8qh8pq?h4S)p zk|Ze@QUAl3H<4|X@rWs7JQ;{sIL}j z)lwvrG!dduXVg6yNoeEtQzj@-30tjJs;Q|#VW&zCl&fMfL!aERs0j@}6(9}L$`&^A zJXMkav;l3=>^=QM1VKdA6@aKi_Y@Tt!VXcUbo@d=*4Nhq&>Mi5iDu23MI|LALN6>| zP))}kc4+YXpY_x4Ug#U+_rY_$^ov7on*X^Hd1ix!tq_hp;a^r(2GZ1qB=`|fF?!}qmNhFK^4>Z0_t{+fImZcCv$qn?~x4)R>Ryn~u5^C?ZQ zr=?u}CiY*#zj!ar&lhz~F`LQ3b?8u`gzHi`eLBL?rpYI0Mp~L6=6AfZ{)NRt`%Na{ zKF;nmt|a0$N)r48lDI+%4Eeo><4orYHWVb%cUAF#wM=44atvi=#?zp6w2ap{---+i z4L2v#VP9DZ+yVD(YN85@f!^Wp57}=ohrP$Yc(39zs##*w*zawASC_Gq%Pg8of)ez4 zR7e!&lq4Y?FPqJHM^D1Q(-4$s@Dt><7{%;Yk{m_HeCcHD=5)DU3ODf106aNm#n+-23nP{G!9d=zacunhA3k$I;%AX6lg) zN}Ai5)bOy26oN8%XnwILo%Z_PL5zjduJRFt4$HP$#}IT4*C{_gU)DiWLJ$-nNKq+uhU`HJ8cBPXj3CVNoxUuun*mDQS=A$ zR}^-w*+BgrxvZqe=JAo@4o*-cFHYA;lE4anpT=Q9lr)Cn=_RNrFOPB(5)|aw?PCZk zv@^=7!oC+I(X<-WzFqz4dm6URwp zNjGy@An3H}AT$o*zn0%MI*19%h|-TGh$}zhBV@!RQ7Kpa9$%V`u$P)rXm;%A`%26@ zX1#_WZ&d>QL`4vk^u-|vf)0YA3Sxk%o5fTF<@si@gX7F%=@x$jXU9lnVM6werqSSG zi3zhuK?f-WK|#N&8Y-Dg_+V`kJ>kpapSj$)*jSo94najlMNk9SGMPF%C{bkxwMZ-t z{4U!;%OnZPQA1FCfT0+{!{LOl;+r^bJS=0&XquNeFS8+H3_(`bOIu7LTrm_gxnp+w z%6X7~B`#x)(RfmVwy=8^NJ1ytY*T1Sr=-wUU&TPoBR=lqL^O^V9^~2KQVy+x?0@h8*JjAX{FbUYrI?^*ivsq&1 z#hNIUr2*Tt=_Z{L$D$9X93DnNF&nz+vYkD zB(VL~M#^TxGcP+EI}9ir#-O~T0JjDRn@WNvytN8x!ZybfyStPI{qk^+m}YNS+)8V& zbAU)ez>)ji2v-As2orH`UeS&;NQ*q=ILI4ipsZ8biap~5VWv=e^stJcH=pPglC|tA z2laX?v5h(|L5S1S*+k2}(1NtcLym*IQ3lFFndclqXdL&lCy*cxtAMzpapMsr4;!S> z5QMx@#smpMm<&uPX9q!twFJQ*Lt}yxq{P)q(8LIWpJp2vq)#?M6FT03qQ;ge(m;Xl z+3uwGj`a$>u%}brHs$a#TDhoEY(qSHw*%n{K7O$uenNq-THHv@&E<-|I{582+VhP% zdUQuUJ#bg+cm!#Pk?$fwGAE57h$9NoLR%SBRtgUnQ*Mq)0=q($eB+p3USZC?aB9f-15s7=B6|JG--@_1Jb5urbMUUDU*=Z?9n#K#%R+(J2)C ziG7nOLG|@T^yNhk+OWz=*M6ZHV_tpZLLo_gg9DXO6O?4o2?c%gbrp0)oSz^w>!VCl zXo8yaqG^VTpewPa3lAe#Nh0O(TFsuEEK9X~NQsF8#GtOSWzU_Q&*yC3QG)hQB0(?x zz&}+3Pd?z`!m5IumE%`ga&)T*isxP)xy?z3b~VWaDW?zz7@-Jq7TU;N8cYAFinkH# zswlBTs7SL~YA}m}n57HqX~*qt^u6sadg{CWcD%N~Ytjf}aqJGXQ@GF$^bRVc8UMiu z!s*7R#|P=qy$V5UjH82W^!foe<;59km)V~d+as7Q%Vy3*9WcBV6XWhXob=AqLRx}> z^P4;!#B6H`dh>7}dI(}HOHoLIQdr5}^rco>I9y7@QIg`{BI#*3+NdSSokvHVl zwbECY)lpGuG!1juuYK{~v{M_kgMl6$@g|-T?D`l15Pu< zU?5^euAb&Ita`FD+B$C)9Mz? z4yYJJTs?yb>AEDwFDcp42739i9@>6eEnODvA0~F2VGKbPI$cnLaA2s;t2WDu4KnfG z%LL(41cp0?{nhiD$Gu+j#_1sFfi1#hSKmaHjWQ;#OheHB{%C+6+15yNV^jpiPK=;T ztAD$ThzLQD zTha@^WhMhnV?vy*C6vnU#Y`NC!pX=MmYh6}mz$BH+(AOQIA+EX_l^zK8gic7(@pgi zshSH^lXeAf-o=IVtD~Z4*eZ3w%9cMH07=Sv$J0?m8&;Il$huMN+E^*lymiDw*IZVF z28hoSyq)><#m^Vgs;g%zN5|jXP$&Gl+jA*3HC5aQ`QC_2T&CK&p@NnSWYFc#RJv_R z0q+U5Q;)kw*h343Yv|Q|{VX|y^zJi#d}FqQJ~-AZ%KiVJ4A9c~#glafPa&y*@wn!8 zt09tZxwe|_+uV+d$$P!>azqjJ)yo<*J^06;4^Y2b^fYt@h6A=du(hEE{1ApX0H-NO zT1|dymewh0p5Lq0m4A3?kha{^Kqg5SjGQBkvMIX;oDgS5??Q^8tRd$3#XIy3h9HbX zzFH?L%h&6?;&)r%#{ zHclh*cpfAn&jF!J_V03uI$Skete&}qd*3cLE~m#%@-^Vl-4B(Iy%`cc_Zqd$u3`A%Qq^FR8>bfzvkA$of&K zJh-c!)?Zi7_ZPdlycFCzQ_{S$ub14-Stq+leltTl?Vloq@g=8)b7qRM{->9{^nXwF zu*iGp8|&(5;|(=DJiO#?FTgCuc1ksMwB^#Ux0v32`eY5AL?_c@U!}Zx<03!UOU(qv~l=OZ0A3du)@GNBWeUr|c$k8W0J@X_;LwsYL{__w?0!L1%K3wpb1 z>9qq|{q!Nng^3Xv86M)3%yaakUX#f{UG13OTj<86Z43vaomMSrrVhBQa-3Eg>@H;;XAJRC@45L|_&Y&93x^#93mlgWWFr%cURdM++=}4|W7J}? zg#0Z0v-rmXxElm%kxxtH6B8LA4@-}be=Kmm{56Gqt_6UcasQg)eEf40tj~aue{OQ& z?{Px>J`6pHRCwC$S_yDl)fFX9?8KI2NtRda*piK9$Cj7avE*HnB}-oL zo{$8S5Xc5es7Wc%0HF!#6evw0g$yZMLuS$}beS~J4qJgVB~YLQ2u&$l87KvYt1#gNWD<={V1_?)=0Cmn{(bknckg}ozpoPjoG?+~l^~eNF(y*^I^sd%F{1fv zLx5Kvv7PvofI!O8y1cI}0ba?(TH@aX1X)>G3OXWeQ+<-ZQUrMQ5HAoA7z_r~*482% z4lC5v)xl&k>505dEF>l!R|33d5)Tj%Bqkt*s5s&CR%aT}U8hsZ(viU=T$`MMy|U&`5kj zY$LKJoB*#xVuW~?fWT(6p{1n-ot>TN=;#my)$hyK1n|jU2NkYb8XjGsP$tyW)Py;G4G4N?im3>s zEOpYRnVFu1Dwma&Vak*#dLs7_uDA*CvJh7gA8A5!b8|(3*uZ)P+S}XF+S-cq&T7S; z8$)>Fj&8j8`v{)g+a-0jVU5vl$Hy z4Km1>%4?46@p$m!eLeW}nZYsf{JlNWNBZhlVH9Mg($doOtMOLU_a+|=frA7D)22;B zb#=7}9TS@4YO_Cos6iAxBG^Y;1vgBl3Y&O8f-`!p( zmROUqA;XAu83vpk%EP&R1-Q^=Kv%W_mo6&Cazipor%uHsD;nXY+*>L47NU)^eT|K% zVBL^tKjvs=f5Kubo3 z61IqFrc)`U&E^<^eh$7cH$rS~z6IWbG^Nz+l&N@ANSCBxb+1Da_!ocY7!nnM1(_zS ztjmna=pccYc@I!|jXm(ESGXt{82Kyx%9WC8dUkTLMwtf zW>v0ENy1;K=*mJf)(;m60ad@unu0^DUz9@vH4)i8{GH87$>zNvJv~NXgwME%Mw->Q z5TGNA!zzJ+D1pZ~=${Bhpva1oqvm8woQ(TO?gILT$6-?h_UlYbPoRVKtLRHN^6ud{ z8i51i2dt-q$4|gJ#tM{h1=^wn`Z&nx(<3G{%oUhpHR3&%r*lW$O9I=COgHSQia+8DgrH>%?-4DMV2ddYDq-KAlpQ7ML_2RVWP3LR7IxvqtHnw;Q$ACkixbQ zud&=jJJk~yvPP6DGl&_a;4PLjINLu?Hz`M+k}ydT=pd8&^em^Q0?tENg2M6{QnX#li4W*eWTqPq; z&NahMlHPois&{55V{VZJ4k6HFM@M=p+<7Lv_joTBd9u+HZURS4AGF-((C;F-&+Rvdu;O$tMwYgrqM`za@9dU(ft00=ZC>dkeWjky#&V-0 zr4{2(Kug{vmw!4&pgo%B)XA&kC<3fgZS!Y0NMEU!XGO*llRMT;3<2gWlE=gd+;L00 zZ%y$HBwHda$4-E( zMSwtWpRxDZQ|XlZbXcD<4fdoYDXWkyJWs^^bkWPQc$> zjdPa;Fno$nRwMQ${d?H3Z-u}Ex*gV7zdk2uKp z-jx-KfZCuA8%Gm3%VopT`Yb%lwpWQ^D+xHAB3C9znbLw&nsC#V0o=DeOea@?AU*=G z@gXgWy!1eyK3a?-a0++bUtJ%@f zBT1awty1U3!(RO7iP5j2uOH|=b^?4zFNCj)joQ0xEIM>$Sfd0|F|x#qlX+LkUtTI! z6hz9i?G~&oju7y3)(eu8Fl08sGBpvmlZ32REu)zne62Yrz_G?4@K8Ji_>f-6m213` zPK)AVuga0<*&`;ioYCd&M+dMZnxHLpm}3NnK1X0#QG|4TfeD-G_)n8SO@6+}rqfp8 zl|S^24}r_R?ZyXB4a9_O{=QF~OKeqjbgbf-ZpLk!gG%7_8~pmvs+@X(&yLeQ zSy&v%!!vhxV?k>^DyU#@O%CSPXCvrH!;mK*3tMy1 z{ZjwzhwX5=T$nddgA!(uPN!3#%5(Z=su|vT)o1LSG8#yrm_8RX9UQ)^7hQhGm!%HDSl=&cZb8y(tt^@QsK2xFUXBeqp0Bhn<^zvJz_Mcd*Pl_7AE$J+XZ| zyHHV@5y$cRIDO#gYcImH_kK3yKE9_Lm(rB(-WC>!xhdz>_xU?F$9X-@I6iPpz$c~z zzW4UDmtgD0Aa-9D!mjJW*m+$Cu2~nxnWwg5-cS>ET-%M^n?u-kbpZ4GU9|Jb|H#J=8WN>sXO+ZEJEWE05{=^c$afq+vvS849Pu;jHy^sc`K!V4{(RCwC#)w_!mQ4|L7&Bi21ObjszhAEOF5F#NU#Ju0{1Oydq z7i<(Ov5>VC3$b1HKiJY%ti-}bu&_{qA_z8uAYvgt&`6Hod~o5iFc-zglHED*V`t~y zOyGPsXVyey&9!&b#Y#d2Y;FL105yQ;@Cwem0sJSZEZhUxrA1Ofq55bxm%c-;U1bqXFiHO%AjNGg?*e!p)wnGGKd z2K>L*>)CjXdt6g{GMS95udkbecmmA>8vx3J9auUwDHe-Kv)QyqjA|^Kjk(YH-)gmN z>RrG!6#_oPwPZ4B2!ZZG`oIK$It-ie(WxoHU{H$1qD-e#z4<)tolb|L)a!M*e4$Uc z<~^)&j}`)-Q7V-r6bhL__zbt<$i5B$bsAoq=6p7rRgEJx+i|+t;6|gt7w)a=L;3Xd ztc}-|O2uB|9_&@`1wKQ`=kwzC`%OW-ferBNs{l|Z;h|~HTb9Mf&1N&wPe0~6M+{Cm z8-4TIP`=I2$nxbmTD-7B7;p`HxEG(%e+BBf{B@+$X?~|6h{sS_`2bMIU<-bLD7t7g z%9D%c=*=f>^l+ZnYBjlfsV85avGF?I!y5NsuRe;@^YriFo_IWN3SkL5aD3$gK>Z}= zN}!{v&T!4_GubAYNoFQ9A<2ZDup|T|W-|$ENFZU8f>J<4QBhmb+9K|vJ;z#csi>#6 z+9Fs{DcaK(aRC&yiVHwrUmI)8nZ0kWQP+6AUMnE}rTHeVfdGIE9~`g>9}FHmm@89ZgkJO*uKwLyW{R&~?-U~qDW7?He$pGVYl0@fcP_LUcUtZpCO<}EG9sc5b~Lm zHXt*_ODku3^8~Sad83%zP)&ynAkx+c@%OM{!*~sKSQl-~6tda<30QG)@saeyW1xzD z0{}jL&4l~XY|uG5Ika4q$)+QE7<#CztP~X$6^EH$R#qlTOG`=k%`#kL9n@u;G(?d~ z1kdmHiz9@+H-dtF1^_-8n#uN&$sidLfazy8VN1oUT0N5a%NJIQTdu4Vn>RFyNAGMF zyEjcH;Wx`}xuTABBnXOCWTKF*Y23JR!sGE+0r82Z>+HuB0DMjcy<##bh5%sdan%`2 z%u@DC(F5<6yQY0cjd*rztN7%FSyZ&$Al5}2wnZQ8ONyctU0_WF4ZG_|VU5>8(|a8N zd}1`sti#0I_R1vES^d)Hrx>WNt`-}wZ6;HXhHk&Mg?*qe=^LcG3sn8kov`V zj!~F6Gc%Ku#bDEAzS-)h7|#k0ljZ> zGrIPQoKKhWh8{1JC*wCA)5nYd{ju|C0bpD7!M@O^k%xRVKy)*#L7pu+765!@5tp+erbC9sjf7E99YWkrU+(yU0XYFfWf_ z)Q*pe97l#I^*NF#=CuotGXtRqDrn(#qP@q?Yf*d`<~YTFU+WO%VXw${*hC2Z=Yw3J z&RLCO?FB6&777VF#OO&F>**kjoxg1;D~Uu7hf2a2OAgwF9S%Kljzt9pk{9I7aRp#F zm><9(b|RSdMOIc4eGIzD<>I8V+PFKGVuJGeUZ0P^<)G|WO8ZOjzrgS3P8eP47gwPV zecvC!;yM9iS+Q`qShHe`aN9Ey{qfqTpj?3S#J%+*Uf>ZAdOR$D68CW9en0=w4AEX6 z7Q?UrUe(&DbO2?QU~VKopK~n2SZ;E=c}-7OV{EZturC0h0wMz+QVnO);}OWREz z^tVH~*F21)JRVO0;1}o*^X_{QM5T#A$btPGgzGd-7buM0li2z;n<)UfuGAfnk8hZF z?C)>dO8pJ$*zo@|t=>|!J9A-Ne7>&(VlEkge}J-}J8T&zBmt1^vWf4VIaDn6bdBQ~ zv~wkP6Y6aSspA+F4yOQcJAUV(FGUIW2>`SxCMgVk2aLjXGJ2L${<6=<6=nbcS8k5m zVF*ABVk;XWLzds=cC-ICH9*#5`%kS7QVDw;T{=M09Iuo0RRD6KpufFzusGetaVVn6 zCJNC0R@?)ClP*R7u|U8OfN*xUYKZg+0F=>9-2mVdgcrmP$9eO34 znf;L6Ul*+?)w^#E8A0VoaSihNihZSJo6%Uw?Pvy}|x&Z3C<&;Hp) z0MJs(#`RwlFbx1N0T5>=13*zYNb?2c`2s{Bv+VQ$yoCE~aJxyBb~_`b{Rsd%I&fZ8 zqQirUbsK=PNUrc>o1d@LZ*n-;|7{vG{s~F|z3#jT&;cm`kUm#_TLHiY0ub6zE@>1N zPc%Q@(h8b`dIJ>z%JK`GPSPu2o*sZaOj@0IIaXT+7=D@J7sPBf9&UG$tg!KSqg5eK$Staz4?db1}t?z~se%0Ix;-o`at`q=DpaXE;$((GYfbljP#R!O&h|~c~&|a1|YEL~jD0NpK ziqq4Q^4T(2CMoD30Ezzi|C%g@tN19F_K=$9k*0E&)F=JvOe;4HCF%9vgiePg6#;}+>Il|wyBLkukD>D=b z@RY5+A(H5W?c;^HVo7^(0szwfM_NS9=)y!;feJt0>!oEEg$^q@L_F^pihJU>DaFF! zJ^>(IQuBUfz9&V~eH*5dAu7#nt0DuhTGJx7-8mf!pZ|Gec>m2jZZsrZV;#h2*k=1( zt?UDB*{7~P?~O6YJW@4pD4n?tOaNr&!{!ZBQW!I5W+j=12Ql#AMYB9NPOMNcxy1s2 z7S=&swpo8k3;V!-_NlASd&`W8uN44l;?agym7f^Yl z5B4Piz!`G8`0$xl<_%fwfOInZWOg6#b36br+J4;`G!L*th&o0PcL`@@F_to}Bv&+# z$xEVQzfWYrGcDBOEfdQ9{2fU627^=U|73lYSTrLlDofxmz!NUi+C(Ff#0qEVygZgK z0+|ju4}?sH@(P>nm;kVFT9I%fQo2XEPrVN@ zDC7~{p#<2F$3#)21AyNqtDc$GaNwAPymQkG>X*F_%;k2vMx0N(RH<&-Ara+vloC)B3 zmoXg)0LYZ_^2{5HiB{IxOY0NQCli3@w)XxGpp}6EP;p@p{8rvpV)+1s`tWs8VPOgY z0k1QW;!U|dVR)d&08BoSIr|hlvb@BFRFXlNqReR%?OvCdj(URuHiB^SaaNV_oR1OX zp$jRtcHBGtuod?FgT224nEStaMYFhJU5mJ5{bX_VnidSSidzu_~c- zh^NJJ_O~X9&W5la0G=Tu+S+XZ=1+kL!is-hsgKw`L5zhwVqWVIhPaUjL}p4cif_5< zIUhaaAqBV)o9oAlFJA6Y05}di;K@ysQ|#~epPmg+>gjpvB8z0Y(X(Jt0|2rBz`{8b z(O{R!p}5SPav&xhh{=>}Efbcsj)z9hj0_qUnlV9=@27xxrAK|^x@Pgx_L<_} zuUJ2^`QpR94**b}W;%c^Hyeg`$@uO75Xo_gFAsDcGXPGR5@lc8H`dSzn}fP?_b7+# z1OW?2Rkqy8ty62o{zqr4bL?{fcoWmt#XQ@=)r85&x0T4}a!HB^A^-*=i0x}@Dn8?!-f_LejIar9g#YIKZzCXPB@4TKOrhfsjZyNzH zrBzEQGv#x+sztlyJA7y2mppIG7R2)Vn-R0eANd! zmyM|V1;D;O-T|Z=FKeV?(}^KTmS$){CPE2UHi_%Ld$Jf^mTHC$i+EE2 zSO9-w`8;C)f&jn{N9-Y#@Avsg+3+>0DhkBOO2))f+CwDLzmdnKkp2A+fPF^*;KAD_ z(_)YTE(6<|J7Z*dBn5z2o(p{#=>Tg0mdz_O1^|J-T(>>R<1TR7#KkLyh!H-AnsUyA zd5l+DK8&PJX&TQba0V0ryS6YcuEy9?0KiHE0AV8~3@d1sc>AeYqP;GZ1^{tW0E+XH zA3dt}!SO1|7OhI^;^SI+BCI!xANh(LoGrkxXz5=7+;L64)gb7MsESy9DqVdYK_nP7 za>V3=+SCC(1b_**L4-aQcO`jI_T!02J{zV!?O1?s>EXkl;UXIT|MspmD9S1f&*(5J zj!BBMg_@XG5D*bCc7fR|7nfZwW@_W;sAE=+irSQ^gEIc`?wHmOFR1Bs(Hu(`1R7|f z(jkn36dW&E4Kw|aEVG=kCg<(x$pgz}FDOFM_v0Ow@0{;^yYG9>dC&WN=R7ZhLX#m< zemLv!#{kq#mrxbtq>Yg)W{5 z103AGhz(?{hwn_~D}pFQ{fv}fS{N;V)OntYzN>J`Ea$i`szg{0R;@^>BfNpy(!pYh?g~er1)T}9Df5Gpix7l4;(1AHc|q6W0&3V z{xrZN0ljb!uX9B+|LIXOQrC}d1Oekg8I>Lk1FTq-B>5|1u^EizVhTij00*2F2m_(+ zVEBT_@KDAtkS3^MNp4Y+tLFZL6PRnK^Mh&v&6ddv(DUtNi*^HmPgQ9yQADylBZ= z940$fM@dP60kB7g>{@RYj9Mx_%@Qv4B`u~LzP|kaV~5;1&(6lSPVTkJ(8mTmbh;X4 zgg{?}O_L_*KpB}XUwkl?Koy3uq7zmm+lqFWqXT{dM)2%UK0C@oAXEy3M#cY}q7-84 zCcK6+J{xtF@YPyNa~0#v2!ONJt2KF6LB@1_%`o!`$1s zFjju7%EU2KkgdMkjIdrScgU482S0CJlgzravZqL6B^5*X_wt8RrKT`LDo>C*+6%kB{!-v@r>a-H?TWj-?)6Q$_3=-Hc zz!zy>+P{*v65G<*lQU9dILxuKU~gNWtH*oPOj$e!IJ|M3+_^yI$)T;uVu&3nMF%WU zQmPoIjFi!K^rB9tP&RyB8Rt8!JNyD3B&O02x<7lA^FSWcrd); zZA%NfGuQqU2^|*H&9s%i4H4vvxHTz$7~$N1etZ`81(QjS!tq2Z$qu zulAnFh@@kMk#GjsAO^!&nUNDKOXkM{DfJnZvd+>4u`(ko8cWKNXhTm%m6;CgDcY6T z)T^(S*`=;H6^_{^mB%fzVZ|gkWCzRZ;Dl3>NBBeB8vLK4E}knq+#m+&#ce$m(W$OI0yq)@p~>=SFD zGktz`97hBMhG{14+rP;~=MLd=^sSvHpY2`3t52tGv^T}yg&clt3h3oCg-K6M;&aW@ z4-XpHPqwc~l$+HE#A+$>TWhJwrhMsgaQfJ@F-^r8h^$Sxm*uK{Q#-ey_ye0w50Dk1J_wc0c(If*cMV_X=$uFn8=N! zO;DoRfk$vpQQ!bqBCw}$CMCGea&`UyF@~1N?Lku+B9Nl;)jm|9s}%QCh7f*MPI(rL*mxgwA1FLT4?d zxt7#lGr;{DVi06EplOe2002ovPDHLkV1fjrQ{4an literal 0 HcmV?d00001 diff --git a/android/res/drawable-xxhdpi/ic_launcher.png b/android/res/drawable-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..fcc0814be86f8d68eac5954d3cf91e74196b522a GIT binary patch literal 10114 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 literal 0 HcmV?d00001 diff --git a/android/res/drawable-xxxhdpi/ic_launcher.png b/android/res/drawable-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..9c268157a37c346653df4ea8b8d78ce39df83394 GIT binary patch literal 13695 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

Dtqwj?VR;N1AN@UI)Nj|^EmhuuUU7>BfkmTl;H z>&WnT_pGCBDD>7y}b$A7|IeU9HDh2r8FTHLrg?X@#1 zKe%lKPvf^DOd-7`RlQ6O<>8to{ijCP^VBNiez0lZ-=M^a9La>5EuvOLFSCv;PNcm| z@V&N835EToE@A`z23=jQzm|(8ty!y63IWmWI=BAHKWDagEp!Akn_rVpEID5}?1}wA zadwKDMy~iSDtWy#SH<%_*{DG2-V-Jo7?sXV0tZ@j_lV6nH-vCRx=TB?ezreAybqTVM!ED)MgJ56NGaiFKX)u?v}L8%^-smNL__dhIz&H~>dT@_F_ygg(S? z9u8+j-w1roReo?@$DkFnm6p1%|4{*7fUAua;`%G~R z82ua+6`mb6KzDXTU6LA;qrh-=l4m*^7`R52?Kb=F#uJe`_VMdZU^z+QB`396h5N6* zsHoM2dESkz*G~)7g-e*k$Wa!aZ4fK=wUV`&O8r|HNUq2kDf0O!C)UQ(W8N^@wb_hK|PMvec{blUr z{gMb3kT(~N=Wy_kxK|jiIk;{ZTYvD|s=CmKC94! z*UL8poYi?d0@N~ZwgoH;^X|Uw8jJenVbokV9>4)UNf3?K>k_=P+BdyADvk|5t(~#3 z?aM+8)a9^IuA%f$SyX7|-vu|lfR}O^yAnS!EG*G(*N!ZIo@d?#NdLo7sP>3a{l(;u zGdZ~!8w{N!=uu;M)^zj=GORAABN@jOu>lUrnI-Ejod zpB+`Vw_cNuQy4tA6eZi|a(V&yPr^TwtnY`5mF|DN3HKq*`-_Y;*(Gz+;<#|h#3sx5 zSN|8wj+*JmPmQPmVPLLwWTmg(-8f>j>NgUHW9 z6)`Kpr++t_D-Q|9_e7J(hEt2i!BA3Rx@eTvkH4yD4EAKxv;xd*um8Q>SChD%KUYRA z!*=}G&E9!;)svVg%M{8>)hQc ztM0~ra}4K5d}Sy5u5-ud8<8T?AtQ0wXPYImQm^I#Q6;YPC9humFO$W-`S0yD{hbz) z-h&pr9%deBry_G**B$Ko^gkX|Hxg%_8^)t;KXrB+8m^;=gZq$_bOlP!OQf2ZjWbg> z+BMDGlKlGDhcrv^Op@KKr6)VmNVLq)Z-z5-WOW!*{UE1i^5%oVnblkyAr9w@-5dpk zqnnZA$DP*9IW2h!=DsU2U*3=%!rJ3{fq<~a5QJK`q!j{AI&n)1Z*w`^^oFL=vg5T ztBIz)WywxQRed_#VkZnP4OCp?Ryf)iB3AX)C86FV_Uk(aKU~rWc52?Woa<)SpLC@O zS`xuvlnYg+Yk*b`lIm;Z0A3$f(>R0Fcf@4EQ$ts3iQ z`k>Jq*O_wYc=}zq;|JWW^`H$SSi1X%$ItL}d4{O^6B6ajT6DN@NDWqWph-}pva5MM zED5CrDYJE~8mJzdOF^V6>Rq?^-Z6q$#aqo?k9fCe z29!JfW;5zn`*;&5!f5*443n#0g3+ZyC((>C&?A4Z>L%!h9&x!c>hf#Xx7~W4zpOv1 zuBb>NeiWUocB_IqN5GYB+O{?4zbUWDcoM#%*^Ni;#P;;F^&}*I^js;faI1t4F@|K* zLLM!i?%^Sg?_92%Fcu|7CnS~=0&RvQLpCwW-rXXXPPM#;RA`~btVRfoVc(r=-LRfK zg{Ek1ZLQD6@6Z;yl|kc*=LfnCK4efi7|Rf~rkGm0S!F<53AHVx(N6zY0XHl~r1{`iBXcYZR&TLk zxmzJr_XS;jAX!-@Q~@IZxqdIJ6u8m_Y2cE~u`?D*Q6}vhJ~wcNu=BJ+7aOLFv%uoV z!}s8pIi$nXl_=^7Qabxh8$u|PvFr;AeM0Ydw|@`hAVu?7fz`cz@Xy_Es5FVB@)oNC ztldcKWAo5WJ5bkfy)fG`8Ko0r)6wBIaWwSfpQR6k%RuCSM~BT^(#S`9EihnR4n&CA j!E1F0Yb3gq`tP`|0w6l)$eY^)o|EEh6}c)I)1dzYCa0uh literal 0 HcmV?d00001 diff --git a/android/res/values/color.xml b/android/res/values/color.xml new file mode 100644 index 0000000..c3d3cfc --- /dev/null +++ b/android/res/values/color.xml @@ -0,0 +1,4 @@ + + + #F5A623FF + diff --git a/android/res/values/strings.xml b/android/res/values/strings.xml new file mode 100644 index 0000000..7b2b200 --- /dev/null +++ b/android/res/values/strings.xml @@ -0,0 +1,4 @@ + + + Tower + diff --git a/android/res/values/styles.xml b/android/res/values/styles.xml new file mode 100644 index 0000000..ce3571e --- /dev/null +++ b/android/res/values/styles.xml @@ -0,0 +1,10 @@ + + + diff --git a/android/src/main/java/ru/project/tower/android/AndroidLauncher.java b/android/src/main/java/ru/project/tower/android/AndroidLauncher.java new file mode 100644 index 0000000..025ceb8 --- /dev/null +++ b/android/src/main/java/ru/project/tower/android/AndroidLauncher.java @@ -0,0 +1,18 @@ +package ru.project.tower.android; + +import android.os.Bundle; + +import com.badlogic.gdx.backends.android.AndroidApplication; +import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration; +import ru.project.tower.Main; + +/** Launches the Android application. */ +public class AndroidLauncher extends AndroidApplication { + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + AndroidApplicationConfiguration configuration = new AndroidApplicationConfiguration(); + configuration.useImmersiveMode = true; // Recommended, but not required. + initialize(new Main(), configuration); + } +} \ No newline at end of file diff --git a/assets/.gitkeep b/assets/.gitkeep new file mode 100644 index 0000000..944e008 --- /dev/null +++ b/assets/.gitkeep @@ -0,0 +1,3 @@ +This file can be deleted if there are any other files present in this folder. +It is only here to ensure this folder is added to Git, instead of being +ignored because it is empty. \ No newline at end of file diff --git a/assets/assets.txt b/assets/assets.txt new file mode 100644 index 0000000..036a748 --- /dev/null +++ b/assets/assets.txt @@ -0,0 +1,9 @@ +.gitkeep +hs_err_pid15412.log +libgdx.png +pop.mp3 +pop.wav +roboto.ttf +shot.mp3 +shot.wav +ui.ttf diff --git a/assets/hs_err_pid15412.log b/assets/hs_err_pid15412.log new file mode 100644 index 0000000..864b2c7 --- /dev/null +++ b/assets/hs_err_pid15412.log @@ -0,0 +1,1353 @@ +# +# A fatal error has been detected by the Java Runtime Environment: +# +# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007ff944419693, pid=15412, tid=7916 +# +# JRE version: OpenJDK Runtime Environment (17.0.14+10) (build 17.0.14+10-LTS) +# Java VM: OpenJDK 64-Bit Server VM (17.0.14+10-LTS, mixed mode, tiered, compressed oops, compressed class ptrs, g1 gc, windows-amd64) +# Problematic frame: +# C [msvcrt.dll+0x79693] +# +# No core dump will be written. Minidumps are not enabled by default on client versions of Windows +# +# If you would like to submit a bug report, please visit: +# https://bell-sw.com/support +# The crash happened outside the Java Virtual Machine in native code. +# See problematic frame for where to report the bug. +# + +--------------- S U M M A R Y ------------ + +Command Line: -Dfile.encoding=UTF-8 -Duser.country=RU -Duser.language=ru -Duser.variant ru.project.tower.lwjgl3.Lwjgl3Launcher + +Host: AMD FX(tm)-8350 Eight-Core Processor , 8 cores, 15G, Windows 11 , 64 bit Build 22621 (10.0.22621.3958) +Time: Wed May 21 19:59:54 2025 RTZ 2 (s 11 , 64 bit Build 22621 (10.0.22621.3958) elapsed time: 7.023220 seconds (0d 0h 0m 7s) + +--------------- T H R E A D --------------- + +Current thread (0x000001fee418e9e0): JavaThread "main" [_thread_in_native, id=7916, stack(0x0000003ffa700000,0x0000003ffa800000)] + +Stack: [0x0000003ffa700000,0x0000003ffa800000], sp=0x0000003ffa7feae8, free space=1018k +Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) +C [msvcrt.dll+0x79693] +C [gdx64.dll+0x20e6] + +Java frames: (J=compiled Java code, j=interpreted, Vv=VM code) +J 1185 com.badlogic.gdx.utils.BufferUtils.copyJni([FLjava/nio/Buffer;II)V (0 bytes) @ 0x000001fef155dd98 [0x000001fef155dd20+0x0000000000000078] +J 1249 c1 com.badlogic.gdx.utils.BufferUtils.copy([FLjava/nio/Buffer;II)V (45 bytes) @ 0x000001fee9c3360c [0x000001fee9c33180+0x000000000000048c] +J 1278 c1 com.badlogic.gdx.graphics.glutils.VertexBufferObject.setVertices([FII)V (38 bytes) @ 0x000001fee9c40794 [0x000001fee9c40700+0x0000000000000094] +J 1241 c1 com.badlogic.gdx.graphics.g2d.SpriteBatch.flush()V (206 bytes) @ 0x000001fee9c2dc24 [0x000001fee9c2d860+0x00000000000003c4] +J 1396 c1 com.badlogic.gdx.graphics.g2d.SpriteBatch.end()V (66 bytes) @ 0x000001fee9c7ae1c [0x000001fee9c7ad20+0x00000000000000fc] +j ru.project.tower.AbilitySelectionScreen.render(F)V+242 +J 1493 c1 com.badlogic.gdx.backends.lwjgl3.Lwjgl3Window.update()Z (312 bytes) @ 0x000001fee9ca5a2c [0x000001fee9ca4460+0x00000000000015cc] +j com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.loop()V+120 +j com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.(Lcom/badlogic/gdx/ApplicationListener;Lcom/badlogic/gdx/backends/lwjgl3/Lwjgl3ApplicationConfiguration;)V+269 +j ru.project.tower.lwjgl3.Lwjgl3Launcher.createApplication()Lcom/badlogic/gdx/backends/lwjgl3/Lwjgl3Application;+14 +j ru.project.tower.lwjgl3.Lwjgl3Launcher.main([Ljava/lang/String;)V+7 +v ~StubRoutines::call_stub + +siginfo: EXCEPTION_ACCESS_VIOLATION (0xc0000005), writing address 0x000001fe8d657000 + + +Registers: +RAX=0x000001fe8d656980, RBX=0x0000000710a00010, RCX=0x000001fe8d657010, RDX=0xfffffe08833a9690 +RSP=0x0000003ffa7feae8, RBP=0x0000003ffa7febc0, RSI=0x000000000000076c, RDI=0x0000000000000000 +R8 =0x0000000000000020, R9 =0x000000000000005c, R10=0x00007ff878c1c2f0, R11=0x0000000710a01dc0 +R12=0x000001fee418ec98, R13=0x000001fe8d656980, R14=0x0000003ffa7feb80, R15=0x000001fee418e9e0 +RIP=0x00007ff944419693, EFLAGS=0x0000000000010206 + + +Register to memory mapping: + +RIP=0x00007ff944419693 msvcrt.dll +RAX=0x000001fe8d656980 points into unknown readable memory: 0x4410800041980000 | 00 00 98 41 00 80 10 44 +RBX=0x0000000710a00010 is pointing into object: [F +{0x0000000710a00000} - klass: {type array float} + - length: 20000 +RCX=0x000001fe8d657010 is an unknown value +RDX=0xfffffe08833a9690 is an unknown value +RSP=0x0000003ffa7feae8 is pointing into the stack for thread: 0x000001fee418e9e0 +RBP=0x0000003ffa7febc0 is pointing into the stack for thread: 0x000001fee418e9e0 +RSI=0x000000000000076c is an unknown value +RDI=0x0 is NULL +R8 =0x0000000000000020 is an unknown value +R9 =0x000000000000005c is an unknown value +R10=0x00007ff878c1c2f0 jvm.dll +R11=0x0000000710a01dc0 is pointing into object: [F +{0x0000000710a00000} - klass: {type array float} + - length: 20000 +R12=0x000001fee418ec98 points into unknown readable memory: 0x000001fe8a5c3db0 | b0 3d 5c 8a fe 01 00 00 +R13=0x000001fe8d656980 points into unknown readable memory: 0x4410800041980000 | 00 00 98 41 00 80 10 44 +R14=0x0000003ffa7feb80 is pointing into the stack for thread: 0x000001fee418e9e0 +R15=0x000001fee418e9e0 is a thread + + +Top of Stack: (sp=0x0000003ffa7feae8) +0x0000003ffa7feae8: 000000006e7020e6 0000000000000158 +0x0000003ffa7feaf8: 000000000000076c 000001fe86866d3b +0x0000003ffa7feb08: 0000003ffa7feb70 000001fe86868f48 +0x0000003ffa7feb18: 0000000000000158 000000070f4658d0 +0x0000003ffa7feb28: 0000000000000000 0000000000000000 +0x0000003ffa7feb38: 0000003ffa7fee00 0000003ffa7febb0 +0x0000003ffa7feb48: 000001fef155de38 0000000710a922c8 +0x0000003ffa7feb58: 000001fe964d3ce8 0000000000000384 +0x0000003ffa7feb68: 000001fef0f88439 000000000000076c +0x0000003ffa7feb78: 0000000000000000 0000000710a00000 +0x0000003ffa7feb88: 000000070f4658d0 0000003ffa7fee00 +0x0000003ffa7feb98: 0000000000000000 000001fe9797dae8 +0x0000003ffa7feba8: 000001fe9797dae8 000000070f464eb0 +0x0000003ffa7febb8: 0000000000000000 0000003ffa7fee50 +0x0000003ffa7febc8: 000001fee9c3360c 0000000000000de1 +0x0000003ffa7febd8: 000001fe8b5097c8 0000000000000000 +0x0000003ffa7febe8: 00007ff8d710aa53 000001fe974b6080 +0x0000003ffa7febf8: 000000070f4658d0 000000000000076c +0x0000003ffa7fec08: 0000000710a00000 0000003ffa7fec60 +0x0000003ffa7fec18: 000001fe86866da0 0000003ffa7fee50 +0x0000003ffa7fec28: 000001fee9c40794 0000003ffa7feca0 +0x0000003ffa7fec38: 0000000000000de1 000000070f400078 +0x0000003ffa7fec48: 000001fef155e20c 0000000000000000 +0x0000003ffa7fec58: 0000003ffa7fecb0 0000003ffa7fee50 +0x0000003ffa7fec68: 000001fe974b6080 000000070f400078 +0x0000003ffa7fec78: 0000000710a78be8 0000038400004e20 +0x0000003ffa7fec88: 000000070f50a010 000003840000076c +0x0000003ffa7fec98: 0000000000000008 000000070f464f28 +0x0000003ffa7feca8: 41a0000000000000 0000003ffa7fee50 +0x0000003ffa7fecb8: 000001fee9c2dc24 0000003ffa7fee50 +0x0000003ffa7fecc8: 000001fee9c1acf4 0000000000000000 +0x0000003ffa7fecd8: 000001fef1562185 00000000000052d3 + +Instructions: (pc=0x00007ff944419693) +0x00007ff944419593: 8b 54 02 f8 4c 89 19 4a 89 54 01 f8 c3 49 83 f8 +0x00007ff9444195a3: 20 77 5a 0f 10 02 42 0f 10 4c 02 f0 0f 11 01 42 +0x00007ff9444195b3: 0f 11 4c 01 f0 c3 0f 1f 80 00 00 00 00 4d 85 c0 +0x00007ff9444195c3: 74 15 48 2b d1 72 16 44 8a 1c 11 48 ff c1 49 ff +0x00007ff9444195d3: c8 44 88 59 ff 75 f0 c3 0f 1f 44 00 00 49 03 c8 +0x00007ff9444195e3: 44 8a 5c 11 ff 48 ff c9 49 ff c8 44 88 19 75 f0 +0x00007ff9444195f3: c3 66 66 66 66 0f 1f 84 00 00 00 00 00 4e 8d 1c +0x00007ff944419603: 02 48 2b d1 73 09 4c 3b d9 0f 87 6e 01 00 00 0f +0x00007ff944419613: 10 04 11 48 83 c1 10 f6 c1 0f 74 12 48 83 e1 f0 +0x00007ff944419623: 0f 10 0c 11 0f 11 00 0f 28 c1 48 83 c1 10 4c 03 +0x00007ff944419633: c0 4c 2b c1 4d 8b c8 49 c1 e9 06 74 6f 49 81 f9 +0x00007ff944419643: 00 10 00 00 0f 87 b3 00 00 00 49 83 e0 3f eb 2d +0x00007ff944419653: 66 66 66 66 66 66 66 0f 1f 84 00 00 00 00 00 66 +0x00007ff944419663: 66 66 66 66 66 66 0f 1f 84 00 00 00 00 00 66 66 +0x00007ff944419673: 66 66 66 66 66 0f 1f 84 00 00 00 00 00 0f 10 0c +0x00007ff944419683: 11 0f 10 54 11 10 0f 10 5c 11 20 0f 10 64 11 30 +0x00007ff944419693: 0f 29 41 f0 48 83 c1 40 49 ff c9 0f 29 49 c0 0f +0x00007ff9444196a3: 29 51 d0 0f 29 59 e0 0f 28 c4 75 d1 4d 8b c8 49 +0x00007ff9444196b3: c1 e9 04 74 19 0f 1f 84 00 00 00 00 00 0f 29 41 +0x00007ff9444196c3: f0 0f 10 04 11 48 83 c1 10 49 ff c9 75 ef 49 83 +0x00007ff9444196d3: e0 0f 74 0e 4e 8d 5c 01 f0 41 0f 10 0c 13 41 0f +0x00007ff9444196e3: 11 0b 0f 29 41 f0 c3 66 66 66 66 66 66 66 0f 1f +0x00007ff9444196f3: 84 00 00 00 00 00 0f 1f 80 00 00 00 00 4d 8b c8 +0x00007ff944419703: 49 c1 e9 06 49 83 e0 3f 0f 18 44 11 40 eb 2e 66 +0x00007ff944419713: 66 66 66 66 66 66 0f 1f 84 00 00 00 00 00 66 66 +0x00007ff944419723: 66 66 66 66 66 0f 1f 84 00 00 00 00 00 66 66 66 +0x00007ff944419733: 66 66 66 66 0f 1f 84 00 00 00 00 00 90 0f 10 0c +0x00007ff944419743: 11 0f 10 54 11 10 0f 10 5c 11 20 0f 10 64 11 30 +0x00007ff944419753: 0f 2b 41 f0 48 83 c1 40 0f 18 44 11 40 49 ff c9 +0x00007ff944419763: 0f 2b 49 c0 0f 2b 51 d0 0f 2b 59 e0 0f 28 c4 75 +0x00007ff944419773: cc 0f ae f8 e9 33 ff ff ff 0f 1f 40 00 49 03 c8 +0x00007ff944419783: 0f 10 44 11 f0 48 83 e9 10 49 83 e8 10 f6 c1 0f + + +Stack slot to memory mapping: +stack at sp + 0 slots: 0x000000006e7020e6 gdx64.dll +stack at sp + 1 slots: 0x0000000000000158 is an unknown value +stack at sp + 2 slots: 0x000000000000076c is an unknown value +stack at sp + 3 slots: 0x000001fe86866d3b is pointing into metadata +stack at sp + 4 slots: 0x0000003ffa7feb70 is pointing into the stack for thread: 0x000001fee418e9e0 +stack at sp + 5 slots: 0x000001fe86868f48 is pointing into metadata +stack at sp + 6 slots: 0x0000000000000158 is an unknown value +stack at sp + 7 slots: 0x000000070f4658d0 is an oop: java.nio.DirectByteBuffer +{0x000000070f4658d0} - klass: 'java/nio/DirectByteBuffer' + - ---- fields (total size 8 words): + - private 'mark' 'I' @12 -1 (ffffffff) + - 'address' 'J' @16 2192805554560 (8d656980 1fe) + - private 'position' 'I' @24 0 + - private 'limit' 'I' @28 7600 (1db0) + - private 'capacity' 'I' @32 80000 (13880) + - final 'segment' 'Ljdk/internal/access/foreign/MemorySegmentProxy;' @36 NULL (0) + - final 'offset' 'I' @40 0 + - 'isReadOnly' 'Z' @44 false + - 'bigEndian' 'Z' @45 false + - 'nativeByteOrder' 'Z' @46 true + - final 'hb' '[B' @48 NULL (0) + - private final 'isSync' 'Z' @47 false + - private final 'fd' 'Ljava/io/FileDescriptor;' @52 NULL (0) + - private final 'att' 'Ljava/lang/Object;' @56 NULL (0) + - private final 'cleaner' 'Ljdk/internal/ref/Cleaner;' @60 NULL (0) + + +Compiled method (n/a) 7135 1185 n 0 com.badlogic.gdx.utils.BufferUtils::copyJni (native) + total in heap [0x000001fef155db90,0x000001fef155df78] = 1000 + relocation [0x000001fef155dce8,0x000001fef155dd18] = 48 + main code [0x000001fef155dd20,0x000001fef155df70] = 592 + oops [0x000001fef155df70,0x000001fef155df78] = 8 + +[Constant Pool (empty)] + +[MachCode] +[Entry Point] + # {method} {0x000001fe86b3cd28} 'copyJni' '([FLjava/nio/Buffer;II)V' in 'com/badlogic/gdx/utils/BufferUtils' + # parm0: rdx:rdx = '[F' + # parm1: r8:r8 = 'java/nio/Buffer' + # parm2: r9 = int + # parm3: rdi = int + # [sp+0x80] (sp of caller) + 0x000001fef155dd20: 448b 5208 | 49bb 0000 | 0000 0800 | 0000 4d03 | d349 3bc2 | 0f84 0600 + + 0x000001fef155dd38: ; {runtime_call ic_miss_stub} + 0x000001fef155dd38: 0000 e941 | 33a4 ff90 +[Verified Entry Point] + 0x000001fef155dd40: 8984 2400 | 90ff ff55 | 488b ec48 | 83ec 7048 | 897c 2428 | 4c89 4c24 | 204c 8944 | 2438 4983 + 0x000001fef155dd60: f800 4c8d | 4c24 384c | 0f44 4c24 | 3848 8954 | 2430 4883 | fa00 4c8d | 4424 304c | 0f44 4424 + 0x000001fef155dd80: ; {oop(a 'java/lang/Class'{0x000000070f464eb0} = 'com/badlogic/gdx/utils/BufferUtils')} + 0x000001fef155dd80: 3049 beb0 | 4e46 0f07 | 0000 004c | 8974 2460 | 4c8d 7424 | 6049 8bd6 + + 0x000001fef155dd98: ; {internal_word} + 0x000001fef155dd98: c5f8 7749 | ba98 dd55 | f1fe 0100 | 004d 8997 | a002 0000 | 4989 a798 + + 0x000001fef155ddb0: ; {external_word} + 0x000001fef155ddb0: 0200 0049 | ba12 1ac0 | 78f8 7f00 | 0041 803a | 000f 8452 | 0000 0052 | 4150 4151 + + 0x000001fef155ddcc: ; {metadata({method} {0x000001fe86b3cd28} 'copyJni' '([FLjava/nio/Buffer;II)V' in 'com/badlogic/gdx/utils/BufferUtils')} + 0x000001fef155ddcc: 48ba 20cd | b386 fe01 | 0000 498b | cf48 83ec | 20f7 c40f | 0000 000f | 841a 0000 | 0048 83ec + 0x000001fef155ddec: ; {runtime_call} + 0x000001fef155ddec: 0849 ba20 | 6775 78f8 | 7f00 0041 | ffd2 4883 | c408 e90d + + 0x000001fef155de00: ; {runtime_call} + 0x000001fef155de00: 0000 0049 | ba20 6775 | 78f8 7f00 | 0041 ffd2 | 4883 c420 | 4159 4158 | 5a49 8d8f | b802 0000 + 0x000001fef155de20: 41c7 8748 | 0300 0004 + + 0x000001fef155de28: ; {runtime_call} + 0x000001fef155de28: 0000 0049 | ba80 2070 | 6e00 0000 | 0041 ffd2 | c5f8 7741 | c787 4803 | 0000 0500 | 0000 f083 + 0x000001fef155de48: 4424 c000 | 493b af50 | 0300 000f | 8711 0000 | 0041 81bf | 3803 0000 | 0000 0000 | 0f84 2400 + 0x000001fef155de68: 0000 c5f8 | 7749 8bcf | 4c8b e448 | 83ec 2048 + + 0x000001fef155de78: ; {runtime_call} + 0x000001fef155de78: 83e4 f049 | ba60 7985 | 78f8 7f00 | 0041 ffd2 | 498b e44d | 33e4 41c7 | 8748 0300 | 0008 0000 + 0x000001fef155de98: 0041 81bf | b803 0000 | 0200 0000 | 0f84 9b00 + + 0x000001fef155dea8: ; {external_word} + 0x000001fef155dea8: 0000 49ba | 121a c078 | f87f 0000 | 4180 3a00 | 0f84 4800 + + 0x000001fef155debc: ; {metadata({method} {0x000001fe86b3cd28} 'copyJni' '([FLjava/nio/Buffer;II)V' in 'com/badlogic/gdx/utils/BufferUtils')} + 0x000001fef155debc: 0000 48ba | 20cd b386 | fe01 0000 | 498b cf48 | 83ec 20f7 | c40f 0000 | 000f 841a | 0000 0048 + 0x000001fef155dedc: ; {runtime_call} + 0x000001fef155dedc: 83ec 0849 | ba20 6775 | 78f8 7f00 | 0041 ffd2 | 4883 c408 | e90d 0000 + + 0x000001fef155def4: ; {runtime_call} + 0x000001fef155def4: 0049 ba20 | 6775 78f8 | 7f00 0041 | ffd2 4883 | c420 49c7 | 8798 0200 | 0000 0000 | 0049 c787 + 0x000001fef155df14: a002 0000 | 0000 0000 | c5f8 7749 | 8b8f d800 | 0000 c781 | 0001 0000 | 0000 0000 | c949 817f + 0x000001fef155df34: 0800 0000 | 000f 8501 | 0000 00c3 + + 0x000001fef155df40: ; {runtime_call StubRoutines (1)} + 0x000001fef155df40: e9bb 2f9f | ffc5 f877 | 4c8b e448 | 83ec 2048 + + 0x000001fef155df50: ; {runtime_call} + 0x000001fef155df50: 83e4 f049 | bac0 9775 | 78f8 7f00 | 0041 ffd2 | 498b e44d | 33e4 e93f | ffff fff4 | f4f4 f4f4 +[/MachCode] + + +Compiled method (c1) 7149 1249 3 com.badlogic.gdx.utils.BufferUtils::copy (45 bytes) + total in heap [0x000001fee9c32f90,0x000001fee9c33908] = 2424 + relocation [0x000001fee9c330e8,0x000001fee9c33170] = 136 + main code [0x000001fee9c33180,0x000001fee9c33760] = 1504 + stub code [0x000001fee9c33760,0x000001fee9c337d8] = 120 + oops [0x000001fee9c337d8,0x000001fee9c337e0] = 8 + metadata [0x000001fee9c337e0,0x000001fee9c337e8] = 8 + scopes data [0x000001fee9c337e8,0x000001fee9c33840] = 88 + scopes pcs [0x000001fee9c33840,0x000001fee9c338e0] = 160 + dependencies [0x000001fee9c338e0,0x000001fee9c338e8] = 8 + nul chk table [0x000001fee9c338e8,0x000001fee9c33908] = 32 + +[Constant Pool (empty)] + +[MachCode] +[Verified Entry Point] + # {method} {0x000001fe86b3a1c0} 'copy' '([FLjava/nio/Buffer;II)V' in 'com/badlogic/gdx/utils/BufferUtils' + # parm0: rdx:rdx = '[F' + # parm1: r8:r8 = 'java/nio/Buffer' + # parm2: r9 = int + # parm3: rdi = int + # [sp+0x60] (sp of caller) + 0x000001fee9c33180: 8984 2400 | 90ff ff55 | 4883 ec50 | 4c89 4424 + + 0x000001fee9c33190: ; {metadata(method data for {method} {0x000001fe86b3a1c0} 'copy' '([FLjava/nio/Buffer;II)V' in 'com/badlogic/gdx/utils/BufferUtils')} + 0x000001fee9c33190: 2848 be50 | aecc 86fe | 0100 008b | 9ecc 0000 | 0083 c302 | 899e cc00 | 0000 81e3 | fe07 0000 + 0x000001fee9c331b0: 83fb 000f | 841e 0500 | 0049 83f8 + + 0x000001fee9c331bc: ; {metadata(method data for {method} {0x000001fe86b3a1c0} 'copy' '([FLjava/nio/Buffer;II)V' in 'com/badlogic/gdx/utils/BufferUtils')} + 0x000001fee9c331bc: 0075 1648 | b850 aecc | 86fe 0100 | 0080 8809 | 0100 0001 | e9d5 0000 + + 0x000001fee9c331d4: ; {metadata('java/nio/ByteBuffer')} + 0x000001fee9c331d4: 0048 b900 | f606 0008 | 0000 0041 | 8b40 0849 | ba00 0000 | 0008 0000 | 0049 03c2 | 483b 4840 + 0x000001fee9c331f4: 0f85 9400 + + 0x000001fee9c331f8: ; {metadata(method data for {method} {0x000001fe86b3a1c0} 'copy' '([FLjava/nio/Buffer;II)V' in 'com/badlogic/gdx/utils/BufferUtils')} + 0x000001fee9c331f8: 0000 48b8 | 50ae cc86 | fe01 0000 | 418b 4808 | 49ba 0000 | 0000 0800 | 0000 4903 | ca48 3b88 + 0x000001fee9c33218: 2001 0000 | 750d 4883 | 8028 0100 | 0001 e984 | 0000 0048 | 3b88 3001 | 0000 750d | 4883 8038 + 0x000001fee9c33238: 0100 0001 | e96e 0000 | 0048 81b8 | 2001 0000 | 0000 0000 | 7517 4889 | 8820 0100 | 0048 c780 + 0x000001fee9c33258: 2801 0000 | 0100 0000 | e94a 0000 | 0048 81b8 | 3001 0000 | 0000 0000 | 7517 4889 | 8830 0100 + 0x000001fee9c33278: 0048 c780 | 3801 0000 | 0100 0000 | e926 0000 | 00e9 2100 + + 0x000001fee9c3328c: ; {metadata(method data for {method} {0x000001fe86b3a1c0} 'copy' '([FLjava/nio/Buffer;II)V' in 'com/badlogic/gdx/utils/BufferUtils')} + 0x000001fee9c3328c: 0000 48b8 | 50ae cc86 | fe01 0000 | 4883 a810 | 0100 0001 | e905 0000 | 00e9 0500 | 0000 4833 + 0x000001fee9c332ac: f6eb 0a48 | be01 0000 | 0000 0000 | 0083 fe00 + + 0x000001fee9c332bc: ; {metadata(method data for {method} {0x000001fe86b3a1c0} 'copy' '([FLjava/nio/Buffer;II)V' in 'com/badlogic/gdx/utils/BufferUtils')} + 0x000001fee9c332bc: 48be 50ae | cc86 fe01 | 0000 48c7 | c358 0100 | 000f 8507 | 0000 0048 | c7c3 4801 | 0000 488b + 0x000001fee9c332dc: 041e 488d | 4001 4889 | 041e 0f85 | 1002 0000 | 4983 f800 + + 0x000001fee9c332f0: ; {metadata(method data for {method} {0x000001fe86b3a1c0} 'copy' '([FLjava/nio/Buffer;II)V' in 'com/badlogic/gdx/utils/BufferUtils')} + 0x000001fee9c332f0: 7516 48b8 | 50ae cc86 | fe01 0000 | 8088 b101 | 0000 01e9 | d500 0000 + + 0x000001fee9c33308: ; {metadata('java/nio/FloatBuffer')} + 0x000001fee9c33308: 48b9 f8ad | 0800 0800 | 0000 418b | 4008 49ba | 0000 0000 | 0800 0000 | 4903 c248 | 3b48 400f + 0x000001fee9c33328: 8594 0000 + + 0x000001fee9c3332c: ; {metadata(method data for {method} {0x000001fe86b3a1c0} 'copy' '([FLjava/nio/Buffer;II)V' in 'com/badlogic/gdx/utils/BufferUtils')} + 0x000001fee9c3332c: 0048 b850 | aecc 86fe | 0100 0041 | 8b48 0849 | ba00 0000 | 0008 0000 | 0049 03ca | 483b 88c8 + 0x000001fee9c3334c: 0100 0075 | 0d48 8380 | d001 0000 | 01e9 8400 | 0000 483b | 88d8 0100 | 0075 0d48 | 8380 e001 + 0x000001fee9c3336c: 0000 01e9 | 6e00 0000 | 4881 b8c8 | 0100 0000 | 0000 0075 | 1748 8988 | c801 0000 | 48c7 80d0 + 0x000001fee9c3338c: 0100 0001 | 0000 00e9 | 4a00 0000 | 4881 b8d8 | 0100 0000 | 0000 0075 | 1748 8988 | d801 0000 + 0x000001fee9c333ac: 48c7 80e0 | 0100 0001 | 0000 00e9 | 2600 0000 | e921 0000 + + 0x000001fee9c333c0: ; {metadata(method data for {method} {0x000001fe86b3a1c0} 'copy' '([FLjava/nio/Buffer;II)V' in 'com/badlogic/gdx/utils/BufferUtils')} + 0x000001fee9c333c0: 0048 b850 | aecc 86fe | 0100 0048 | 83a8 b801 | 0000 01e9 | 0500 0000 | e905 0000 | 0048 33f6 + 0x000001fee9c333e0: eb0a 48be | 0100 0000 | 0000 0000 + + 0x000001fee9c333ec: ; {metadata(method data for {method} {0x000001fe86b3a1c0} 'copy' '([FLjava/nio/Buffer;II)V' in 'com/badlogic/gdx/utils/BufferUtils')} + 0x000001fee9c333ec: 83fe 0048 | be50 aecc | 86fe 0100 | 0048 c7c3 | f001 0000 | 0f84 0700 | 0000 48c7 | c300 0200 + 0x000001fee9c3340c: 0048 8b04 | 1e48 8d40 | 0148 8904 | 1e0f 84d0 | 0100 0089 | 7c24 3448 | 8954 2438 + + 0x000001fee9c33428: ; implicit exception: dispatches to 0x000001fee9c336f8 + 0x000001fee9c33428: 493b 0049 + + 0x000001fee9c3342c: ; {metadata(method data for {method} {0x000001fe86b3a1c0} 'copy' '([FLjava/nio/Buffer;II)V' in 'com/badlogic/gdx/utils/BufferUtils')} + 0x000001fee9c3342c: 8bf0 48bb | 50ae cc86 | fe01 0000 | 8b76 0849 | ba00 0000 | 0008 0000 | 0049 03f2 | 483b b320 + 0x000001fee9c3344c: 0200 0075 | 0d48 8383 | 2802 0000 | 01e9 6600 | 0000 483b | b330 0200 | 0075 0d48 | 8383 3802 + 0x000001fee9c3346c: 0000 01e9 | 5000 0000 | 4881 bb20 | 0200 0000 | 0000 0075 | 1748 89b3 | 2002 0000 | 48c7 8328 + 0x000001fee9c3348c: 0200 0001 | 0000 00e9 | 2c00 0000 | 4881 bb30 | 0200 0000 | 0000 0075 | 1748 89b3 | 3002 0000 + 0x000001fee9c334ac: 48c7 8338 | 0200 0001 | 0000 00e9 | 0800 0000 | 4883 8310 | 0200 0001 | 498b f04d | 8bc1 488b + 0x000001fee9c334cc: d644 894c | 2430 6666 | 9048 b8ff | ffff ffff + + 0x000001fee9c334dc: ; {virtual_call} + 0x000001fee9c334dc: ffff ffe8 + + 0x000001fee9c334e0: ; ImmutableOopMap {[56]=Oop [40]=Oop } + ;*invokevirtual limit {reexecute=0 rethrow=0 return_oop=0} + ; - com.badlogic.gdx.utils.BufferUtils::copy@27 (line 56) + 0x000001fee9c334e0: 9ce1 3607 | 8b7c 2434 | 448b 4c24 | 304c 8b44 | 2428 488b | 5424 38e9 | f300 0000 | 897c 2434 + 0x000001fee9c33500: 4489 4c24 | 3048 8954 | 2438 493b | 0049 8bd0 + + 0x000001fee9c33510: ; {metadata(method data for {method} {0x000001fe86b3a1c0} 'copy' '([FLjava/nio/Buffer;II)V' in 'com/badlogic/gdx/utils/BufferUtils')} + 0x000001fee9c33510: 48be 50ae | cc86 fe01 | 0000 8b52 | 0849 ba00 | 0000 0008 | 0000 0049 | 03d2 483b | 9678 0100 + 0x000001fee9c33530: 0075 0d48 | 8386 8001 | 0000 01e9 | 6600 0000 | 483b 9688 | 0100 0075 | 0d48 8386 | 9001 0000 + 0x000001fee9c33550: 01e9 5000 | 0000 4881 | be78 0100 | 0000 0000 | 0075 1748 | 8996 7801 | 0000 48c7 | 8680 0100 + 0x000001fee9c33570: 0001 0000 | 00e9 2c00 | 0000 4881 | be88 0100 | 0000 0000 | 0075 1748 | 8996 8801 | 0000 48c7 + 0x000001fee9c33590: 8690 0100 | 0001 0000 | 00e9 0800 | 0000 4883 | 8668 0100 | 0001 448b | 4c24 3041 | c1e1 0249 + 0x000001fee9c335b0: 8bf0 4d8b | c148 8bd6 | 0f1f 4400 | 0048 b8d8 | b403 0008 + + 0x000001fee9c335c4: ; {virtual_call} + 0x000001fee9c335c4: 0000 00e8 + + 0x000001fee9c335c8: ; ImmutableOopMap {[56]=Oop [40]=Oop } + ;*invokevirtual limit {reexecute=0 rethrow=0 return_oop=0} + ; - com.badlogic.gdx.utils.BufferUtils::copy@11 (line 55) + 0x000001fee9c335c8: 3479 9407 + + 0x000001fee9c335cc: ; {metadata(method data for {method} {0x000001fe86b3a1c0} 'copy' '([FLjava/nio/Buffer;II)V' in 'com/badlogic/gdx/utils/BufferUtils')} + 0x000001fee9c335cc: 48ba 50ae | cc86 fe01 | 0000 ff82 | a001 0000 | 8b7c 2434 | 448b 4c24 | 304c 8b44 | 2428 488b + 0x000001fee9c335ec: ; {metadata(method data for {method} {0x000001fe86b3a1c0} 'copy' '([FLjava/nio/Buffer;II)V' in 'com/badlogic/gdx/utils/BufferUtils')} + 0x000001fee9c335ec: 5424 3848 | be50 aecc | 86fe 0100 | 0048 8386 | 4802 0000 | 0149 8bf0 + + 0x000001fee9c33604: ; {static_call} + 0x000001fee9c33604: 4c8b c6e8 + + 0x000001fee9c33608: ; ImmutableOopMap {[40]=Oop } + ;*invokestatic copyJni {reexecute=0 rethrow=0 return_oop=0} + ; - com.badlogic.gdx.utils.BufferUtils::copy@35 (line 58) + 0x000001fee9c33608: 34a7 9207 | 488b 5424 | 2848 3b02 + + 0x000001fee9c33614: ; {metadata(method data for {method} {0x000001fe86b3a1c0} 'copy' '([FLjava/nio/Buffer;II)V' in 'com/badlogic/gdx/utils/BufferUtils')} + 0x000001fee9c33614: 4c8b c248 | be50 aecc | 86fe 0100 | 0045 8b40 | 0849 ba00 | 0000 0008 | 0000 004d | 03c2 4c3b + 0x000001fee9c33634: 8668 0200 | 0075 0d48 | 8386 7002 | 0000 01e9 | 6600 0000 | 4c3b 8678 | 0200 0075 | 0d48 8386 + 0x000001fee9c33654: 8002 0000 | 01e9 5000 | 0000 4881 | be68 0200 | 0000 0000 | 0075 174c | 8986 6802 | 0000 48c7 + 0x000001fee9c33674: 8670 0200 | 0001 0000 | 00e9 2c00 | 0000 4881 | be78 0200 | 0000 0000 | 0075 174c | 8986 7802 + 0x000001fee9c33694: 0000 48c7 | 8680 0200 | 0001 0000 | 00e9 0800 | 0000 4883 | 8658 0200 | 0001 41b8 | 0000 0000 + 0x000001fee9c336b4: 9048 b8d8 | b403 0008 + + 0x000001fee9c336bc: ; {virtual_call} + 0x000001fee9c336bc: 0000 00e8 + + 0x000001fee9c336c0: ; ImmutableOopMap {} + ;*invokevirtual position {reexecute=0 rethrow=0 return_oop=0} + ; - com.badlogic.gdx.utils.BufferUtils::copy@40 (line 59) + 0x000001fee9c336c0: 7c17 f9ff | 4883 c450 + + 0x000001fee9c336c8: ; {poll_return} + 0x000001fee9c336c8: 5d49 3ba7 | 5003 0000 | 0f87 3100 + + 0x000001fee9c336d4: ; {metadata({method} {0x000001fe86b3a1c0} 'copy' '([FLjava/nio/Buffer;II)V' in 'com/badlogic/gdx/utils/BufferUtils')} + 0x000001fee9c336d4: 0000 c349 | bab8 a1b3 | 86fe 0100 | 004c 8954 | 2408 48c7 | 0424 ffff + + 0x000001fee9c336ec: ; {runtime_call counter_overflow Runtime1 stub} + 0x000001fee9c336ec: ffff e80d + + 0x000001fee9c336f0: ; ImmutableOopMap {rdx=Oop r8=Oop [40]=Oop } + ;*synchronization entry + ; - com.badlogic.gdx.utils.BufferUtils::copy@-1 (line 54) + 0x000001fee9c336f0: 7141 07e9 | c1fa ffff + + 0x000001fee9c336f8: ; {runtime_call throw_null_pointer_exception Runtime1 stub} + 0x000001fee9c336f8: e823 1441 + + 0x000001fee9c336fc: ; ImmutableOopMap {r8=Oop [40]=Oop [56]=Oop } + ;*invokevirtual limit {reexecute=0 rethrow=0 return_oop=0} + ; - com.badlogic.gdx.utils.BufferUtils::copy@27 (line 56) + ; {runtime_call throw_null_pointer_exception Runtime1 stub} + 0x000001fee9c336fc: 07e8 1e14 + + 0x000001fee9c33700: ; ImmutableOopMap {[56]=Oop r8=Oop [40]=Oop } + ;*invokevirtual limit {reexecute=0 rethrow=0 return_oop=0} + ; - com.badlogic.gdx.utils.BufferUtils::copy@11 (line 55) + ; {runtime_call throw_null_pointer_exception Runtime1 stub} + 0x000001fee9c33700: 4107 e819 + + 0x000001fee9c33704: ; ImmutableOopMap {rdx=Oop [40]=Oop } + ;*invokevirtual position {reexecute=0 rethrow=0 return_oop=0} + ; - com.badlogic.gdx.utils.BufferUtils::copy@40 (line 59) + ; {internal_word} + 0x000001fee9c33704: 1441 0749 | bac9 36c3 | e9fe 0100 | 004d 8997 | 6803 0000 + + 0x000001fee9c33718: ; {runtime_call SafepointBlob} + 0x000001fee9c33718: e963 3e37 | 0790 9049 | 8b87 e003 | 0000 49c7 | 87e0 0300 | 0000 0000 | 0049 c787 | e803 0000 + 0x000001fee9c33738: 0000 0000 | 4883 c450 + + 0x000001fee9c33740: ; {runtime_call unwind_exception Runtime1 stub} + 0x000001fee9c33740: 5de9 ba04 | 4107 f4f4 | f4f4 f4f4 | f4f4 f4f4 | f4f4 f4f4 | f4f4 f4f4 | f4f4 f4f4 | f4f4 f4f4 +[Stub Code] + 0x000001fee9c33760: ; {no_reloc} + 0x000001fee9c33760: 0f1f 4400 + + 0x000001fee9c33764: ; {static_stub} + 0x000001fee9c33764: 0048 bb00 | 0000 0000 + + 0x000001fee9c3376c: ; {runtime_call} + 0x000001fee9c3376c: 0000 00e9 | fbff ffff + + 0x000001fee9c33774: ; {static_stub} + 0x000001fee9c33774: 9048 bb00 | 0000 0000 + + 0x000001fee9c3377c: ; {runtime_call} + 0x000001fee9c3377c: 0000 00e9 | fbff ffff + + 0x000001fee9c33784: ; {static_stub} + 0x000001fee9c33784: 9048 bb00 | 0000 0000 + + 0x000001fee9c3378c: ; {runtime_call} + 0x000001fee9c3378c: 0000 00e9 | fbff ffff + + 0x000001fee9c33794: ; {static_stub} + 0x000001fee9c33794: 9048 bb00 | 0000 0000 + + 0x000001fee9c3379c: ; {runtime_call} + 0x000001fee9c3379c: 0000 00e9 | fbff ffff +[Exception Handler] + 0x000001fee9c337a4: ; {runtime_call handle_exception_from_callee Runtime1 stub} + 0x000001fee9c337a4: e857 3d41 + + 0x000001fee9c337a8: ; {external_word} + 0x000001fee9c337a8: 0748 b9e0 | d899 78f8 | 7f00 0048 + + 0x000001fee9c337b4: ; {runtime_call} + 0x000001fee9c337b4: 83e4 f049 | ba90 5c62 | 78f8 7f00 | 0041 ffd2 + + 0x000001fee9c337c4: ; {section_word} + 0x000001fee9c337c4: f449 bac5 | 37c3 e9fe | 0100 0041 + + 0x000001fee9c337d0: ; {runtime_call DeoptimizationBlob} + 0x000001fee9c337d0: 52e9 ca34 | 3707 f4f4 +[/MachCode] + + +Compiled method (c1) 7181 1278 3 com.badlogic.gdx.graphics.glutils.VertexBufferObject::setVertices (38 bytes) + total in heap [0x000001fee9c40510,0x000001fee9c40df0] = 2272 + relocation [0x000001fee9c40668,0x000001fee9c406f0] = 136 + main code [0x000001fee9c40700,0x000001fee9c40b60] = 1120 + stub code [0x000001fee9c40b60,0x000001fee9c40bd8] = 120 + oops [0x000001fee9c40bd8,0x000001fee9c40be0] = 8 + metadata [0x000001fee9c40be0,0x000001fee9c40c28] = 72 + scopes data [0x000001fee9c40c28,0x000001fee9c40cf8] = 208 + scopes pcs [0x000001fee9c40cf8,0x000001fee9c40dc8] = 208 + dependencies [0x000001fee9c40dc8,0x000001fee9c40dd8] = 16 + nul chk table [0x000001fee9c40dd8,0x000001fee9c40df0] = 24 + +[Constant Pool (empty)] + +[MachCode] +[Entry Point] + # {method} {0x000001fe86b9e198} 'setVertices' '([FII)V' in 'com/badlogic/gdx/graphics/glutils/VertexBufferObject' + # this: rdx:rdx = 'com/badlogic/gdx/graphics/glutils/VertexBufferObject' + # parm0: r8:r8 = '[F' + # parm1: r9 = int + # parm2: rdi = int + # [sp+0x90] (sp of caller) + 0x000001fee9c40700: 448b 5208 | 49bb 0000 | 0000 0800 | 0000 4d03 | d34c 3bd0 + + 0x000001fee9c40714: ; {runtime_call ic_miss_stub} + 0x000001fee9c40714: 0f85 6609 | 3607 660f | 1f44 0000 +[Verified Entry Point] + 0x000001fee9c40720: 8984 2400 | 90ff ff55 | 4881 ec80 | 0000 0048 | 8954 2458 + + 0x000001fee9c40734: ; {metadata(method data for {method} {0x000001fe86b9e198} 'setVertices' '([FII)V' in 'com/badlogic/gdx/graphics/glutils/VertexBufferObject')} + 0x000001fee9c40734: 498b f149 | b900 86cc | 86fe 0100 | 0041 8b99 | cc00 0000 | 83c3 0241 | 8999 cc00 | 0000 81e3 + 0x000001fee9c40754: fe07 0000 | 83fb 000f | 84f1 0200 | 00c6 4215 | 0144 8b4a | 2049 c1e1 + + 0x000001fee9c4076c: ; {metadata(method data for {method} {0x000001fe86b9e198} 'setVertices' '([FII)V' in 'com/badlogic/gdx/graphics/glutils/VertexBufferObject')} + 0x000001fee9c4076c: 0348 bb00 | 86cc 86fe | 0100 0048 | 8383 1001 | 0000 0149 | 8bd0 4d8b | c14c 8bcf | 897c 2460 + 0x000001fee9c4078c: ; {static_call} + 0x000001fee9c4078c: 488b fee8 + + 0x000001fee9c40790: ; ImmutableOopMap {[88]=Oop } + ;*invokestatic copy {reexecute=0 rethrow=0 return_oop=0} + ; - com.badlogic.gdx.graphics.glutils.VertexBufferObject::setVertices@12 (line 142) + 0x000001fee9c40790: ec29 ffff | 488b 5424 | 588b 721c | 48c1 e603 + + 0x000001fee9c407a0: ; implicit exception: dispatches to 0x000001fee9c40a73 + 0x000001fee9c407a0: 483b 064c + + 0x000001fee9c407a4: ; {metadata(method data for {method} {0x000001fe86b9e198} 'setVertices' '([FII)V' in 'com/badlogic/gdx/graphics/glutils/VertexBufferObject')} + 0x000001fee9c407a4: 8bc6 48bf | 0086 cc86 | fe01 0000 | 458b 4008 | 49ba 0000 | 0000 0800 | 0000 4d03 | c24c 3b87 + 0x000001fee9c407c4: 3001 0000 | 750d 4883 | 8738 0100 | 0001 e966 | 0000 004c | 3b87 4001 | 0000 750d | 4883 8748 + 0x000001fee9c407e4: 0100 0001 | e950 0000 | 0048 81bf | 3001 0000 | 0000 0000 | 7517 4c89 | 8730 0100 | 0048 c787 + 0x000001fee9c40804: 3801 0000 | 0100 0000 | e92c 0000 | 0048 81bf | 4001 0000 | 0000 0000 | 7517 4c89 | 8740 0100 + 0x000001fee9c40824: 0048 c787 | 4801 0000 | 0100 0000 | e908 0000 | 0048 8387 | 2001 0000 + + 0x000001fee9c4083c: ; {metadata(method data for {method} {0x000001fe86704648} 'position' '(I)Ljava/nio/Buffer;' in 'java/nio/FloatBuffer')} + 0x000001fee9c4083c: 0149 b8b8 | 9795 86fe | 0100 0041 | 8bb8 cc00 | 0000 83c7 | 0241 89b8 | cc00 0000 | 81e7 feff + 0x000001fee9c4085c: 1f00 83ff | 000f 8411 | 0200 004c + + 0x000001fee9c40868: ; {metadata(method data for {method} {0x000001fe86704648} 'position' '(I)Ljava/nio/Buffer;' in 'java/nio/FloatBuffer')} + 0x000001fee9c40868: 8bc6 48bf | b897 9586 | fe01 0000 | 4883 8710 | 0100 0001 + + 0x000001fee9c4087c: ; {metadata(method data for {method} {0x000001fe86703330} 'position' '(I)Ljava/nio/FloatBuffer;' in 'java/nio/FloatBuffer')} + 0x000001fee9c4087c: 49b8 8893 | 9586 fe01 | 0000 418b | b8cc 0000 | 0083 c702 | 4189 b8cc | 0000 0081 | e7fe ff1f + 0x000001fee9c4089c: 0083 ff00 | 0f84 f301 | 0000 4c8b + + 0x000001fee9c408a8: ; {metadata(method data for {method} {0x000001fe86703330} 'position' '(I)Ljava/nio/FloatBuffer;' in 'java/nio/FloatBuffer')} + 0x000001fee9c408a8: c648 bf88 | 9395 86fe | 0100 0048 | 8387 1001 | 0000 0141 | b800 0000 | 0048 8bd6 | 4889 7424 + 0x000001fee9c408c8: 6866 0f1f + + 0x000001fee9c408cc: ; {optimized virtual_call} + 0x000001fee9c408cc: 4400 00e8 + + 0x000001fee9c408d0: ; ImmutableOopMap {[88]=Oop [104]=Oop } + ;*invokespecial position {reexecute=0 rethrow=0 return_oop=0} + ; - java.nio.FloatBuffer::position@2 (line 1516) + ; - java.nio.FloatBuffer::position@2 (line 267) + ; - com.badlogic.gdx.graphics.glutils.VertexBufferObject::setVertices@20 (line 143) + 0x000001fee9c408d0: cc92 9007 | 488b 5424 | 588b 721c | 48c1 e603 + + 0x000001fee9c408e0: ; implicit exception: dispatches to 0x000001fee9c40aba + 0x000001fee9c408e0: 483b 064c + + 0x000001fee9c408e4: ; {metadata(method data for {method} {0x000001fe86b9e198} 'setVertices' '([FII)V' in 'com/badlogic/gdx/graphics/glutils/VertexBufferObject')} + 0x000001fee9c408e4: 8bc6 48bf | 0086 cc86 | fe01 0000 | 458b 4008 | 49ba 0000 | 0000 0800 | 0000 4d03 | c24c 3b87 + 0x000001fee9c40904: 6801 0000 | 750d 4883 | 8770 0100 | 0001 e966 | 0000 004c | 3b87 7801 | 0000 750d | 4883 8780 + 0x000001fee9c40924: 0100 0001 | e950 0000 | 0048 81bf | 6801 0000 | 0000 0000 | 7517 4c89 | 8768 0100 | 0048 c787 + 0x000001fee9c40944: 7001 0000 | 0100 0000 | e92c 0000 | 0048 81bf | 7801 0000 | 0000 0000 | 7517 4c89 | 8778 0100 + 0x000001fee9c40964: 0048 c787 | 8001 0000 | 0100 0000 | e908 0000 | 0048 8387 | 5801 0000 + + 0x000001fee9c4097c: ; {metadata(method data for {method} {0x000001fe867045a0} 'limit' '(I)Ljava/nio/Buffer;' in 'java/nio/FloatBuffer')} + 0x000001fee9c4097c: 0149 b8d8 | 9495 86fe | 0100 0041 | 8bb8 cc00 | 0000 83c7 | 0241 89b8 | cc00 0000 | 81e7 feff + 0x000001fee9c4099c: 1f00 83ff | 000f 8418 | 0100 004c + + 0x000001fee9c409a8: ; {metadata(method data for {method} {0x000001fe867045a0} 'limit' '(I)Ljava/nio/Buffer;' in 'java/nio/FloatBuffer')} + 0x000001fee9c409a8: 8bc6 48bf | d894 9586 | fe01 0000 | 4883 8710 | 0100 0001 + + 0x000001fee9c409bc: ; {metadata(method data for {method} {0x000001fe867033e0} 'limit' '(I)Ljava/nio/FloatBuffer;' in 'java/nio/FloatBuffer')} + 0x000001fee9c409bc: 49b8 6896 | 9586 fe01 | 0000 418b | b8cc 0000 | 0083 c702 | 4189 b8cc | 0000 0081 | e7fe ff1f + 0x000001fee9c409dc: 0083 ff00 | 0f84 fa00 | 0000 4c8b + + 0x000001fee9c409e8: ; {metadata(method data for {method} {0x000001fe867033e0} 'limit' '(I)Ljava/nio/FloatBuffer;' in 'java/nio/FloatBuffer')} + 0x000001fee9c409e8: c648 bf68 | 9695 86fe | 0100 0048 | 8387 1001 | 0000 0144 | 8b44 2460 | 488b d648 | 8974 2470 + 0x000001fee9c40a08: 0f1f 8000 + + 0x000001fee9c40a0c: ; {optimized virtual_call} + 0x000001fee9c40a0c: 0000 00e8 + + 0x000001fee9c40a10: ; ImmutableOopMap {[112]=Oop [88]=Oop } + ;*invokespecial limit {reexecute=0 rethrow=0 return_oop=0} + ; - java.nio.FloatBuffer::limit@2 (line 1529) + ; - java.nio.FloatBuffer::limit@2 (line 267) + ; - com.badlogic.gdx.graphics.glutils.VertexBufferObject::setVertices@29 (line 144) + 0x000001fee9c40a10: 0c63 9207 | 488b 5424 + + 0x000001fee9c40a18: ; {metadata(method data for {method} {0x000001fe86b9e198} 'setVertices' '([FII)V' in 'com/badlogic/gdx/graphics/glutils/VertexBufferObject')} + 0x000001fee9c40a18: 5848 be00 | 86cc 86fe | 0100 0048 | 8386 9001 | 0000 0148 | 8b54 2458 | 0f1f 8000 + + 0x000001fee9c40a34: ; {optimized virtual_call} + 0x000001fee9c40a34: 0000 00e8 + + 0x000001fee9c40a38: ; ImmutableOopMap {} + ;*invokespecial bufferChanged {reexecute=0 rethrow=0 return_oop=0} + ; - com.badlogic.gdx.graphics.glutils.VertexBufferObject::setVertices@34 (line 145) + 0x000001fee9c40a38: 2431 ffff | 4881 c480 | 0000 005d + + 0x000001fee9c40a44: ; {poll_return} + 0x000001fee9c40a44: 493b a750 | 0300 000f | 87b0 0000 + + 0x000001fee9c40a50: ; {metadata({method} {0x000001fe86b9e198} 'setVertices' '([FII)V' in 'com/badlogic/gdx/graphics/glutils/VertexBufferObject')} + 0x000001fee9c40a50: 00c3 49ba | 90e1 b986 | fe01 0000 | 4c89 5424 | 0848 c704 | 24ff ffff + + 0x000001fee9c40a68: ; {runtime_call counter_overflow Runtime1 stub} + 0x000001fee9c40a68: ffe8 929d + + 0x000001fee9c40a6c: ; ImmutableOopMap {rdx=Oop [88]=Oop r8=Oop } + ;*synchronization entry + ; - com.badlogic.gdx.graphics.glutils.VertexBufferObject::setVertices@-1 (line 141) + 0x000001fee9c40a6c: 4007 e9ee + + 0x000001fee9c40a70: ; {runtime_call throw_null_pointer_exception Runtime1 stub} + 0x000001fee9c40a70: fcff ffe8 + + 0x000001fee9c40a74: ; ImmutableOopMap {rdx=Oop [88]=Oop rsi=Oop } + ;*invokevirtual position {reexecute=0 rethrow=0 return_oop=0} + ; - com.badlogic.gdx.graphics.glutils.VertexBufferObject::setVertices@20 (line 143) + 0x000001fee9c40a74: a840 4007 + + 0x000001fee9c40a78: ; {metadata({method} {0x000001fe86704648} 'position' '(I)Ljava/nio/Buffer;' in 'java/nio/FloatBuffer')} + 0x000001fee9c40a78: 49ba 4046 | 7086 fe01 | 0000 4c89 | 5424 0848 | c704 24ff + + 0x000001fee9c40a8c: ; {runtime_call counter_overflow Runtime1 stub} + 0x000001fee9c40a8c: ffff ffe8 + + 0x000001fee9c40a90: ; ImmutableOopMap {rdx=Oop [88]=Oop rsi=Oop } + ;*synchronization entry + ; - java.nio.FloatBuffer::position@-1 (line 267) + ; - com.badlogic.gdx.graphics.glutils.VertexBufferObject::setVertices@20 (line 143) + 0x000001fee9c40a90: 6c9d 4007 | e9ce fdff + + 0x000001fee9c40a98: ; {metadata({method} {0x000001fe86703330} 'position' '(I)Ljava/nio/FloatBuffer;' in 'java/nio/FloatBuffer')} + 0x000001fee9c40a98: ff49 ba28 | 3370 86fe | 0100 004c | 8954 2408 | 48c7 0424 | ffff ffff + + 0x000001fee9c40ab0: ; {runtime_call counter_overflow Runtime1 stub} + 0x000001fee9c40ab0: e84b 9d40 + + 0x000001fee9c40ab4: ; ImmutableOopMap {rdx=Oop [88]=Oop rsi=Oop } + ;*synchronization entry + ; - java.nio.FloatBuffer::position@-1 (line 1516) + ; - java.nio.FloatBuffer::position@2 (line 267) + ; - com.badlogic.gdx.graphics.glutils.VertexBufferObject::setVertices@20 (line 143) + 0x000001fee9c40ab4: 07e9 ecfd + + 0x000001fee9c40ab8: ; {runtime_call throw_null_pointer_exception Runtime1 stub} + 0x000001fee9c40ab8: ffff e861 + + 0x000001fee9c40abc: ; ImmutableOopMap {rdx=Oop [88]=Oop rsi=Oop } + ;*invokevirtual limit {reexecute=0 rethrow=0 return_oop=0} + ; - com.badlogic.gdx.graphics.glutils.VertexBufferObject::setVertices@29 (line 144) + ; {metadata({method} {0x000001fe867045a0} 'limit' '(I)Ljava/nio/Buffer;' in 'java/nio/FloatBuffer')} + 0x000001fee9c40abc: 4040 0749 | ba98 4570 | 86fe 0100 | 004c 8954 | 2408 48c7 | 0424 ffff + + 0x000001fee9c40ad4: ; {runtime_call counter_overflow Runtime1 stub} + 0x000001fee9c40ad4: ffff e825 + + 0x000001fee9c40ad8: ; ImmutableOopMap {rdx=Oop [88]=Oop rsi=Oop } + ;*synchronization entry + ; - java.nio.FloatBuffer::limit@-1 (line 267) + ; - com.badlogic.gdx.graphics.glutils.VertexBufferObject::setVertices@29 (line 144) + 0x000001fee9c40ad8: 9d40 07e9 | c7fe ffff + + 0x000001fee9c40ae0: ; {metadata({method} {0x000001fe867033e0} 'limit' '(I)Ljava/nio/FloatBuffer;' in 'java/nio/FloatBuffer')} + 0x000001fee9c40ae0: 49ba d833 | 7086 fe01 | 0000 4c89 | 5424 0848 | c704 24ff + + 0x000001fee9c40af4: ; {runtime_call counter_overflow Runtime1 stub} + 0x000001fee9c40af4: ffff ffe8 + + 0x000001fee9c40af8: ; ImmutableOopMap {rdx=Oop [88]=Oop rsi=Oop } + ;*synchronization entry + ; - java.nio.FloatBuffer::limit@-1 (line 1529) + ; - java.nio.FloatBuffer::limit@2 (line 267) + ; - com.badlogic.gdx.graphics.glutils.VertexBufferObject::setVertices@29 (line 144) + 0x000001fee9c40af8: 049d 4007 | e9e5 feff + + 0x000001fee9c40b00: ; {internal_word} + 0x000001fee9c40b00: ff49 ba44 | 0ac4 e9fe | 0100 004d | 8997 6803 + + 0x000001fee9c40b10: ; {runtime_call SafepointBlob} + 0x000001fee9c40b10: 0000 e969 | 6a36 0790 | 9049 8b87 | e003 0000 | 49c7 87e0 | 0300 0000 | 0000 0049 | c787 e803 + 0x000001fee9c40b30: 0000 0000 | 0000 4881 | c480 0000 + + 0x000001fee9c40b3c: ; {runtime_call unwind_exception Runtime1 stub} + 0x000001fee9c40b3c: 005d e9bd | 3040 07f4 | f4f4 f4f4 | f4f4 f4f4 | f4f4 f4f4 | f4f4 f4f4 | f4f4 f4f4 | f4f4 f4f4 + 0x000001fee9c40b5c: f4f4 f4f4 +[Stub Code] + 0x000001fee9c40b60: ; {no_reloc} + 0x000001fee9c40b60: 0f1f 4400 + + 0x000001fee9c40b64: ; {static_stub} + 0x000001fee9c40b64: 0048 bb00 | 0000 0000 + + 0x000001fee9c40b6c: ; {runtime_call} + 0x000001fee9c40b6c: 0000 00e9 | fbff ffff + + 0x000001fee9c40b74: ; {static_stub} + 0x000001fee9c40b74: 9048 bb00 | 0000 0000 + + 0x000001fee9c40b7c: ; {runtime_call} + 0x000001fee9c40b7c: 0000 00e9 | fbff ffff + + 0x000001fee9c40b84: ; {static_stub} + 0x000001fee9c40b84: 9048 bb00 | 0000 0000 + + 0x000001fee9c40b8c: ; {runtime_call} + 0x000001fee9c40b8c: 0000 00e9 | fbff ffff + + 0x000001fee9c40b94: ; {static_stub} + 0x000001fee9c40b94: 9048 bb00 | 0000 0000 + + 0x000001fee9c40b9c: ; {runtime_call} + 0x000001fee9c40b9c: 0000 00e9 | fbff ffff +[Exception Handler] + 0x000001fee9c40ba4: ; {runtime_call handle_exception_from_callee Runtime1 stub} + 0x000001fee9c40ba4: e857 6940 + + 0x000001fee9c40ba8: ; {external_word} + 0x000001fee9c40ba8: 0748 b9e0 | d899 78f8 | 7f00 0048 + + 0x000001fee9c40bb4: ; {runtime_call} + 0x000001fee9c40bb4: 83e4 f049 | ba90 5c62 | 78f8 7f00 | 0041 ffd2 + + 0x000001fee9c40bc4: ; {section_word} + 0x000001fee9c40bc4: f449 bac5 | 0bc4 e9fe | 0100 0041 + + 0x000001fee9c40bd0: ; {runtime_call DeoptimizationBlob} + 0x000001fee9c40bd0: 52e9 ca60 | 3607 f4f4 +[/MachCode] + + +--------------- P R O C E S S --------------- + +Threads class SMR info: +_java_thread_list=0x000001fe8b4299e0, length=16, elements={ +0x000001fee418e9e0, 0x000001feff05e900, 0x000001feff05f780, 0x000001feff0806f0, +0x000001feff0814c0, 0x000001feff081e80, 0x000001feff0a2f30, 0x000001feff0a4230, +0x000001feff0a85f0, 0x000001feff0ab000, 0x000001feff225560, 0x000001feff22cf40, +0x000001fe8aba1080, 0x000001fe96662110, 0x000001fe96a6ee30, 0x000001fe96a6f350 +} + +Java Threads: ( => current thread ) +=>0x000001fee418e9e0 JavaThread "main" [_thread_in_native, id=7916, stack(0x0000003ffa700000,0x0000003ffa800000)] + 0x000001feff05e900 JavaThread "Reference Handler" daemon [_thread_blocked, id=17168, stack(0x0000003ffae00000,0x0000003ffaf00000)] + 0x000001feff05f780 JavaThread "Finalizer" daemon [_thread_blocked, id=12976, stack(0x0000003ffaf00000,0x0000003ffb000000)] + 0x000001feff0806f0 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=13020, stack(0x0000003ffb000000,0x0000003ffb100000)] + 0x000001feff0814c0 JavaThread "Attach Listener" daemon [_thread_blocked, id=16888, stack(0x0000003ffb100000,0x0000003ffb200000)] + 0x000001feff081e80 JavaThread "Service Thread" daemon [_thread_blocked, id=8796, stack(0x0000003ffb200000,0x0000003ffb300000)] + 0x000001feff0a2f30 JavaThread "Monitor Deflation Thread" daemon [_thread_blocked, id=11896, stack(0x0000003ffb300000,0x0000003ffb400000)] + 0x000001feff0a4230 JavaThread "C2 CompilerThread0" daemon [_thread_blocked, id=4992, stack(0x0000003ffb400000,0x0000003ffb500000)] + 0x000001feff0a85f0 JavaThread "C1 CompilerThread0" daemon [_thread_blocked, id=8800, stack(0x0000003ffb500000,0x0000003ffb600000)] + 0x000001feff0ab000 JavaThread "Sweeper thread" daemon [_thread_blocked, id=14176, stack(0x0000003ffb600000,0x0000003ffb700000)] + 0x000001feff225560 JavaThread "Notification Thread" daemon [_thread_blocked, id=12472, stack(0x0000003ffb700000,0x0000003ffb800000)] + 0x000001feff22cf40 JavaThread "Common-Cleaner" daemon [_thread_blocked, id=9388, stack(0x0000003ffb900000,0x0000003ffba00000)] + 0x000001fe8aba1080 JavaThread "Thread-0" daemon [_thread_blocked, id=17156, stack(0x0000003ffc100000,0x0000003ffc200000)] + 0x000001fe96662110 JavaThread "LWJGL3 Timer" daemon [_thread_blocked, id=6676, stack(0x0000003ffca00000,0x0000003ffcb00000)] + 0x000001fe96a6ee30 JavaThread "C2 CompilerThread1" daemon [_thread_blocked, id=5212, stack(0x0000003ffd200000,0x0000003ffd300000)] + 0x000001fe96a6f350 JavaThread "C2 CompilerThread2" daemon [_thread_blocked, id=12788, stack(0x0000003ffd300000,0x0000003ffd400000)] + +Other Threads: + 0x000001feff03b050 VMThread "VM Thread" [stack: 0x0000003ffad00000,0x0000003ffae00000] [id=16528] + 0x000001feff227a50 WatcherThread [stack: 0x0000003ffb800000,0x0000003ffb900000] [id=3276] + 0x000001fee62d48e0 GCTaskThread "GC Thread#0" [stack: 0x0000003ffa800000,0x0000003ffa900000] [id=4328] + 0x000001fe966a90b0 GCTaskThread "GC Thread#1" [stack: 0x0000003ffba00000,0x0000003ffbb00000] [id=7256] + 0x000001fe966a9370 GCTaskThread "GC Thread#2" [stack: 0x0000003ffcb00000,0x0000003ffcc00000] [id=15032] + 0x000001fe966a9630 GCTaskThread "GC Thread#3" [stack: 0x0000003ffcc00000,0x0000003ffcd00000] [id=17112] + 0x000001fe966a98f0 GCTaskThread "GC Thread#4" [stack: 0x0000003ffcd00000,0x0000003ffce00000] [id=16156] + 0x000001fe966a9fc0 GCTaskThread "GC Thread#5" [stack: 0x0000003ffce00000,0x0000003ffcf00000] [id=16948] + 0x000001feff2fcfc0 GCTaskThread "GC Thread#6" [stack: 0x0000003ffcf00000,0x0000003ffd000000] [id=13888] + 0x000001feff2fd280 GCTaskThread "GC Thread#7" [stack: 0x0000003ffd000000,0x0000003ffd100000] [id=9320] + 0x000001fefe5627b0 ConcurrentGCThread "G1 Main Marker" [stack: 0x0000003ffa900000,0x0000003ffaa00000] [id=2384] + 0x000001fefe562fe0 ConcurrentGCThread "G1 Conc#0" [stack: 0x0000003ffaa00000,0x0000003ffab00000] [id=16496] + 0x000001fee630eaf0 ConcurrentGCThread "G1 Refine#0" [stack: 0x0000003ffab00000,0x0000003ffac00000] [id=15516] + 0x000001fefe60e640 ConcurrentGCThread "G1 Service" [stack: 0x0000003ffac00000,0x0000003ffad00000] [id=17160] + +Threads with active compile tasks: + +VM state: not at safepoint (normal execution) + +VM Mutex/Monitor currently owned by a thread: None + +Heap address: 0x0000000700c00000, size: 4084 MB, Compressed Oops mode: Zero based, Oop shift amount: 3 + +CDS archive(s) not mapped +Compressed class space mapped at: 0x0000000800000000-0x0000000840000000, reserved size: 1073741824 +Narrow klass base: 0x0000000800000000, Narrow klass shift: 0, Narrow klass range: 0x40000000 + +GC Precious Log: + CPUs: 8 total, 8 available + Memory: 16331M + Large Page Support: Disabled + NUMA Support: Disabled + Compressed Oops: Enabled (Zero based) + Heap Region Size: 2M + Heap Min Capacity: 8M + Heap Initial Capacity: 256M + Heap Max Capacity: 4084M + Pre-touch: Disabled + Parallel Workers: 8 + Concurrent Workers: 2 + Concurrent Refinement Workers: 8 + Periodic GC: Disabled + +Heap: + garbage-first heap total 262144K, used 6911K [0x0000000700c00000, 0x0000000800000000) + region size 2048K, 5 young (10240K), 2 survivors (4096K) + Metaspace used 14902K, committed 15040K, reserved 1114112K + class space used 1206K, committed 1280K, reserved 1048576K + +Heap Regions: E=young(eden), S=young(survivor), O=old, HS=humongous(starts), HC=humongous(continues), CS=collection set, F=free, OA=open archive, CA=closed archive, TAMS=top-at-mark-start (previous, next) +| 0|0x0000000700c00000, 0x0000000700e00000, 0x0000000700e00000|100%|HS| |TAMS 0x0000000700c00000, 0x0000000700c00000| Complete +| 1|0x0000000700e00000, 0x0000000700e00000, 0x0000000701000000| 0%| F| |TAMS 0x0000000700e00000, 0x0000000700e00000| Untracked +| 2|0x0000000701000000, 0x0000000701000000, 0x0000000701200000| 0%| F| |TAMS 0x0000000701000000, 0x0000000701000000| Untracked +| 3|0x0000000701200000, 0x0000000701200000, 0x0000000701400000| 0%| F| |TAMS 0x0000000701200000, 0x0000000701200000| Untracked +| 4|0x0000000701400000, 0x0000000701400000, 0x0000000701600000| 0%| F| |TAMS 0x0000000701400000, 0x0000000701400000| Untracked +| 5|0x0000000701600000, 0x0000000701600000, 0x0000000701800000| 0%| F| |TAMS 0x0000000701600000, 0x0000000701600000| Untracked +| 6|0x0000000701800000, 0x0000000701800000, 0x0000000701a00000| 0%| F| |TAMS 0x0000000701800000, 0x0000000701800000| Untracked +| 7|0x0000000701a00000, 0x0000000701a00000, 0x0000000701c00000| 0%| F| |TAMS 0x0000000701a00000, 0x0000000701a00000| Untracked +| 8|0x0000000701c00000, 0x0000000701c00000, 0x0000000701e00000| 0%| F| |TAMS 0x0000000701c00000, 0x0000000701c00000| Untracked +| 9|0x0000000701e00000, 0x0000000701e00000, 0x0000000702000000| 0%| F| |TAMS 0x0000000701e00000, 0x0000000701e00000| Untracked +| 10|0x0000000702000000, 0x0000000702000000, 0x0000000702200000| 0%| F| |TAMS 0x0000000702000000, 0x0000000702000000| Untracked +| 11|0x0000000702200000, 0x0000000702200000, 0x0000000702400000| 0%| F| |TAMS 0x0000000702200000, 0x0000000702200000| Untracked +| 12|0x0000000702400000, 0x0000000702400000, 0x0000000702600000| 0%| F| |TAMS 0x0000000702400000, 0x0000000702400000| Untracked +| 13|0x0000000702600000, 0x0000000702600000, 0x0000000702800000| 0%| F| |TAMS 0x0000000702600000, 0x0000000702600000| Untracked +| 14|0x0000000702800000, 0x0000000702800000, 0x0000000702a00000| 0%| F| |TAMS 0x0000000702800000, 0x0000000702800000| Untracked +| 15|0x0000000702a00000, 0x0000000702a00000, 0x0000000702c00000| 0%| F| |TAMS 0x0000000702a00000, 0x0000000702a00000| Untracked +| 16|0x0000000702c00000, 0x0000000702c00000, 0x0000000702e00000| 0%| F| |TAMS 0x0000000702c00000, 0x0000000702c00000| Untracked +| 17|0x0000000702e00000, 0x0000000702e00000, 0x0000000703000000| 0%| F| |TAMS 0x0000000702e00000, 0x0000000702e00000| Untracked +| 18|0x0000000703000000, 0x0000000703000000, 0x0000000703200000| 0%| F| |TAMS 0x0000000703000000, 0x0000000703000000| Untracked +| 19|0x0000000703200000, 0x0000000703200000, 0x0000000703400000| 0%| F| |TAMS 0x0000000703200000, 0x0000000703200000| Untracked +| 20|0x0000000703400000, 0x0000000703400000, 0x0000000703600000| 0%| F| |TAMS 0x0000000703400000, 0x0000000703400000| Untracked +| 21|0x0000000703600000, 0x0000000703600000, 0x0000000703800000| 0%| F| |TAMS 0x0000000703600000, 0x0000000703600000| Untracked +| 22|0x0000000703800000, 0x0000000703800000, 0x0000000703a00000| 0%| F| |TAMS 0x0000000703800000, 0x0000000703800000| Untracked +| 23|0x0000000703a00000, 0x0000000703a00000, 0x0000000703c00000| 0%| F| |TAMS 0x0000000703a00000, 0x0000000703a00000| Untracked +| 24|0x0000000703c00000, 0x0000000703c00000, 0x0000000703e00000| 0%| F| |TAMS 0x0000000703c00000, 0x0000000703c00000| Untracked +| 25|0x0000000703e00000, 0x0000000703e00000, 0x0000000704000000| 0%| F| |TAMS 0x0000000703e00000, 0x0000000703e00000| Untracked +| 26|0x0000000704000000, 0x0000000704000000, 0x0000000704200000| 0%| F| |TAMS 0x0000000704000000, 0x0000000704000000| Untracked +| 27|0x0000000704200000, 0x0000000704200000, 0x0000000704400000| 0%| F| |TAMS 0x0000000704200000, 0x0000000704200000| Untracked +| 28|0x0000000704400000, 0x0000000704400000, 0x0000000704600000| 0%| F| |TAMS 0x0000000704400000, 0x0000000704400000| Untracked +| 29|0x0000000704600000, 0x0000000704600000, 0x0000000704800000| 0%| F| |TAMS 0x0000000704600000, 0x0000000704600000| Untracked +| 30|0x0000000704800000, 0x0000000704800000, 0x0000000704a00000| 0%| F| |TAMS 0x0000000704800000, 0x0000000704800000| Untracked +| 31|0x0000000704a00000, 0x0000000704a00000, 0x0000000704c00000| 0%| F| |TAMS 0x0000000704a00000, 0x0000000704a00000| Untracked +| 32|0x0000000704c00000, 0x0000000704c00000, 0x0000000704e00000| 0%| F| |TAMS 0x0000000704c00000, 0x0000000704c00000| Untracked +| 33|0x0000000704e00000, 0x0000000704e00000, 0x0000000705000000| 0%| F| |TAMS 0x0000000704e00000, 0x0000000704e00000| Untracked +| 34|0x0000000705000000, 0x0000000705000000, 0x0000000705200000| 0%| F| |TAMS 0x0000000705000000, 0x0000000705000000| Untracked +| 35|0x0000000705200000, 0x0000000705200000, 0x0000000705400000| 0%| F| |TAMS 0x0000000705200000, 0x0000000705200000| Untracked +| 36|0x0000000705400000, 0x0000000705400000, 0x0000000705600000| 0%| F| |TAMS 0x0000000705400000, 0x0000000705400000| Untracked +| 37|0x0000000705600000, 0x0000000705600000, 0x0000000705800000| 0%| F| |TAMS 0x0000000705600000, 0x0000000705600000| Untracked +| 38|0x0000000705800000, 0x0000000705800000, 0x0000000705a00000| 0%| F| |TAMS 0x0000000705800000, 0x0000000705800000| Untracked +| 39|0x0000000705a00000, 0x0000000705a00000, 0x0000000705c00000| 0%| F| |TAMS 0x0000000705a00000, 0x0000000705a00000| Untracked +| 40|0x0000000705c00000, 0x0000000705c00000, 0x0000000705e00000| 0%| F| |TAMS 0x0000000705c00000, 0x0000000705c00000| Untracked +| 41|0x0000000705e00000, 0x0000000705e00000, 0x0000000706000000| 0%| F| |TAMS 0x0000000705e00000, 0x0000000705e00000| Untracked +| 42|0x0000000706000000, 0x0000000706000000, 0x0000000706200000| 0%| F| |TAMS 0x0000000706000000, 0x0000000706000000| Untracked +| 43|0x0000000706200000, 0x0000000706200000, 0x0000000706400000| 0%| F| |TAMS 0x0000000706200000, 0x0000000706200000| Untracked +| 44|0x0000000706400000, 0x0000000706400000, 0x0000000706600000| 0%| F| |TAMS 0x0000000706400000, 0x0000000706400000| Untracked +| 45|0x0000000706600000, 0x0000000706600000, 0x0000000706800000| 0%| F| |TAMS 0x0000000706600000, 0x0000000706600000| Untracked +| 46|0x0000000706800000, 0x0000000706800000, 0x0000000706a00000| 0%| F| |TAMS 0x0000000706800000, 0x0000000706800000| Untracked +| 47|0x0000000706a00000, 0x0000000706a00000, 0x0000000706c00000| 0%| F| |TAMS 0x0000000706a00000, 0x0000000706a00000| Untracked +| 48|0x0000000706c00000, 0x0000000706c00000, 0x0000000706e00000| 0%| F| |TAMS 0x0000000706c00000, 0x0000000706c00000| Untracked +| 49|0x0000000706e00000, 0x0000000706e00000, 0x0000000707000000| 0%| F| |TAMS 0x0000000706e00000, 0x0000000706e00000| Untracked +| 50|0x0000000707000000, 0x0000000707000000, 0x0000000707200000| 0%| F| |TAMS 0x0000000707000000, 0x0000000707000000| Untracked +| 51|0x0000000707200000, 0x0000000707200000, 0x0000000707400000| 0%| F| |TAMS 0x0000000707200000, 0x0000000707200000| Untracked +| 52|0x0000000707400000, 0x0000000707400000, 0x0000000707600000| 0%| F| |TAMS 0x0000000707400000, 0x0000000707400000| Untracked +| 53|0x0000000707600000, 0x0000000707600000, 0x0000000707800000| 0%| F| |TAMS 0x0000000707600000, 0x0000000707600000| Untracked +| 54|0x0000000707800000, 0x0000000707800000, 0x0000000707a00000| 0%| F| |TAMS 0x0000000707800000, 0x0000000707800000| Untracked +| 55|0x0000000707a00000, 0x0000000707a00000, 0x0000000707c00000| 0%| F| |TAMS 0x0000000707a00000, 0x0000000707a00000| Untracked +| 56|0x0000000707c00000, 0x0000000707c00000, 0x0000000707e00000| 0%| F| |TAMS 0x0000000707c00000, 0x0000000707c00000| Untracked +| 57|0x0000000707e00000, 0x0000000707e00000, 0x0000000708000000| 0%| F| |TAMS 0x0000000707e00000, 0x0000000707e00000| Untracked +| 58|0x0000000708000000, 0x0000000708000000, 0x0000000708200000| 0%| F| |TAMS 0x0000000708000000, 0x0000000708000000| Untracked +| 59|0x0000000708200000, 0x0000000708200000, 0x0000000708400000| 0%| F| |TAMS 0x0000000708200000, 0x0000000708200000| Untracked +| 60|0x0000000708400000, 0x0000000708400000, 0x0000000708600000| 0%| F| |TAMS 0x0000000708400000, 0x0000000708400000| Untracked +| 61|0x0000000708600000, 0x0000000708600000, 0x0000000708800000| 0%| F| |TAMS 0x0000000708600000, 0x0000000708600000| Untracked +| 62|0x0000000708800000, 0x0000000708800000, 0x0000000708a00000| 0%| F| |TAMS 0x0000000708800000, 0x0000000708800000| Untracked +| 63|0x0000000708a00000, 0x0000000708a00000, 0x0000000708c00000| 0%| F| |TAMS 0x0000000708a00000, 0x0000000708a00000| Untracked +| 64|0x0000000708c00000, 0x0000000708c00000, 0x0000000708e00000| 0%| F| |TAMS 0x0000000708c00000, 0x0000000708c00000| Untracked +| 65|0x0000000708e00000, 0x0000000708e00000, 0x0000000709000000| 0%| F| |TAMS 0x0000000708e00000, 0x0000000708e00000| Untracked +| 66|0x0000000709000000, 0x0000000709000000, 0x0000000709200000| 0%| F| |TAMS 0x0000000709000000, 0x0000000709000000| Untracked +| 67|0x0000000709200000, 0x0000000709200000, 0x0000000709400000| 0%| F| |TAMS 0x0000000709200000, 0x0000000709200000| Untracked +| 68|0x0000000709400000, 0x0000000709400000, 0x0000000709600000| 0%| F| |TAMS 0x0000000709400000, 0x0000000709400000| Untracked +| 69|0x0000000709600000, 0x0000000709600000, 0x0000000709800000| 0%| F| |TAMS 0x0000000709600000, 0x0000000709600000| Untracked +| 70|0x0000000709800000, 0x0000000709800000, 0x0000000709a00000| 0%| F| |TAMS 0x0000000709800000, 0x0000000709800000| Untracked +| 71|0x0000000709a00000, 0x0000000709a00000, 0x0000000709c00000| 0%| F| |TAMS 0x0000000709a00000, 0x0000000709a00000| Untracked +| 72|0x0000000709c00000, 0x0000000709c00000, 0x0000000709e00000| 0%| F| |TAMS 0x0000000709c00000, 0x0000000709c00000| Untracked +| 73|0x0000000709e00000, 0x0000000709e00000, 0x000000070a000000| 0%| F| |TAMS 0x0000000709e00000, 0x0000000709e00000| Untracked +| 74|0x000000070a000000, 0x000000070a000000, 0x000000070a200000| 0%| F| |TAMS 0x000000070a000000, 0x000000070a000000| Untracked +| 75|0x000000070a200000, 0x000000070a200000, 0x000000070a400000| 0%| F| |TAMS 0x000000070a200000, 0x000000070a200000| Untracked +| 76|0x000000070a400000, 0x000000070a400000, 0x000000070a600000| 0%| F| |TAMS 0x000000070a400000, 0x000000070a400000| Untracked +| 77|0x000000070a600000, 0x000000070a600000, 0x000000070a800000| 0%| F| |TAMS 0x000000070a600000, 0x000000070a600000| Untracked +| 78|0x000000070a800000, 0x000000070a800000, 0x000000070aa00000| 0%| F| |TAMS 0x000000070a800000, 0x000000070a800000| Untracked +| 79|0x000000070aa00000, 0x000000070aa00000, 0x000000070ac00000| 0%| F| |TAMS 0x000000070aa00000, 0x000000070aa00000| Untracked +| 80|0x000000070ac00000, 0x000000070ac00000, 0x000000070ae00000| 0%| F| |TAMS 0x000000070ac00000, 0x000000070ac00000| Untracked +| 81|0x000000070ae00000, 0x000000070ae00000, 0x000000070b000000| 0%| F| |TAMS 0x000000070ae00000, 0x000000070ae00000| Untracked +| 82|0x000000070b000000, 0x000000070b000000, 0x000000070b200000| 0%| F| |TAMS 0x000000070b000000, 0x000000070b000000| Untracked +| 83|0x000000070b200000, 0x000000070b200000, 0x000000070b400000| 0%| F| |TAMS 0x000000070b200000, 0x000000070b200000| Untracked +| 84|0x000000070b400000, 0x000000070b400000, 0x000000070b600000| 0%| F| |TAMS 0x000000070b400000, 0x000000070b400000| Untracked +| 85|0x000000070b600000, 0x000000070b600000, 0x000000070b800000| 0%| F| |TAMS 0x000000070b600000, 0x000000070b600000| Untracked +| 86|0x000000070b800000, 0x000000070b800000, 0x000000070ba00000| 0%| F| |TAMS 0x000000070b800000, 0x000000070b800000| Untracked +| 87|0x000000070ba00000, 0x000000070ba00000, 0x000000070bc00000| 0%| F| |TAMS 0x000000070ba00000, 0x000000070ba00000| Untracked +| 88|0x000000070bc00000, 0x000000070bc00000, 0x000000070be00000| 0%| F| |TAMS 0x000000070bc00000, 0x000000070bc00000| Untracked +| 89|0x000000070be00000, 0x000000070be00000, 0x000000070c000000| 0%| F| |TAMS 0x000000070be00000, 0x000000070be00000| Untracked +| 90|0x000000070c000000, 0x000000070c000000, 0x000000070c200000| 0%| F| |TAMS 0x000000070c000000, 0x000000070c000000| Untracked +| 91|0x000000070c200000, 0x000000070c200000, 0x000000070c400000| 0%| F| |TAMS 0x000000070c200000, 0x000000070c200000| Untracked +| 92|0x000000070c400000, 0x000000070c400000, 0x000000070c600000| 0%| F| |TAMS 0x000000070c400000, 0x000000070c400000| Untracked +| 93|0x000000070c600000, 0x000000070c600000, 0x000000070c800000| 0%| F| |TAMS 0x000000070c600000, 0x000000070c600000| Untracked +| 94|0x000000070c800000, 0x000000070c800000, 0x000000070ca00000| 0%| F| |TAMS 0x000000070c800000, 0x000000070c800000| Untracked +| 95|0x000000070ca00000, 0x000000070ca00000, 0x000000070cc00000| 0%| F| |TAMS 0x000000070ca00000, 0x000000070ca00000| Untracked +| 96|0x000000070cc00000, 0x000000070cc00000, 0x000000070ce00000| 0%| F| |TAMS 0x000000070cc00000, 0x000000070cc00000| Untracked +| 97|0x000000070ce00000, 0x000000070ce00000, 0x000000070d000000| 0%| F| |TAMS 0x000000070ce00000, 0x000000070ce00000| Untracked +| 98|0x000000070d000000, 0x000000070d000000, 0x000000070d200000| 0%| F| |TAMS 0x000000070d000000, 0x000000070d000000| Untracked +| 99|0x000000070d200000, 0x000000070d200000, 0x000000070d400000| 0%| F| |TAMS 0x000000070d200000, 0x000000070d200000| Untracked +| 100|0x000000070d400000, 0x000000070d400000, 0x000000070d600000| 0%| F| |TAMS 0x000000070d400000, 0x000000070d400000| Untracked +| 101|0x000000070d600000, 0x000000070d600000, 0x000000070d800000| 0%| F| |TAMS 0x000000070d600000, 0x000000070d600000| Untracked +| 102|0x000000070d800000, 0x000000070d800000, 0x000000070da00000| 0%| F| |TAMS 0x000000070d800000, 0x000000070d800000| Untracked +| 103|0x000000070da00000, 0x000000070da00000, 0x000000070dc00000| 0%| F| |TAMS 0x000000070da00000, 0x000000070da00000| Untracked +| 104|0x000000070dc00000, 0x000000070dc00000, 0x000000070de00000| 0%| F| |TAMS 0x000000070dc00000, 0x000000070dc00000| Untracked +| 105|0x000000070de00000, 0x000000070de00000, 0x000000070e000000| 0%| F| |TAMS 0x000000070de00000, 0x000000070de00000| Untracked +| 106|0x000000070e000000, 0x000000070e000000, 0x000000070e200000| 0%| F| |TAMS 0x000000070e000000, 0x000000070e000000| Untracked +| 107|0x000000070e200000, 0x000000070e200000, 0x000000070e400000| 0%| F| |TAMS 0x000000070e200000, 0x000000070e200000| Untracked +| 108|0x000000070e400000, 0x000000070e400000, 0x000000070e600000| 0%| F| |TAMS 0x000000070e400000, 0x000000070e400000| Untracked +| 109|0x000000070e600000, 0x000000070e600000, 0x000000070e800000| 0%| F| |TAMS 0x000000070e600000, 0x000000070e600000| Untracked +| 110|0x000000070e800000, 0x000000070e800000, 0x000000070ea00000| 0%| F| |TAMS 0x000000070e800000, 0x000000070e800000| Untracked +| 111|0x000000070ea00000, 0x000000070ea00000, 0x000000070ec00000| 0%| F| |TAMS 0x000000070ea00000, 0x000000070ea00000| Untracked +| 112|0x000000070ec00000, 0x000000070ec00000, 0x000000070ee00000| 0%| F| |TAMS 0x000000070ec00000, 0x000000070ec00000| Untracked +| 113|0x000000070ee00000, 0x000000070ee00000, 0x000000070f000000| 0%| F| |TAMS 0x000000070ee00000, 0x000000070ee00000| Untracked +| 114|0x000000070f000000, 0x000000070f000000, 0x000000070f200000| 0%| F| |TAMS 0x000000070f000000, 0x000000070f000000| Untracked +| 115|0x000000070f200000, 0x000000070f2bffd0, 0x000000070f400000| 37%| S|CS|TAMS 0x000000070f200000, 0x000000070f200000| Complete +| 116|0x000000070f400000, 0x000000070f600000, 0x000000070f600000|100%| S|CS|TAMS 0x000000070f400000, 0x000000070f400000| Complete +| 117|0x000000070f600000, 0x000000070f600000, 0x000000070f800000| 0%| F| |TAMS 0x000000070f600000, 0x000000070f600000| Untracked +| 118|0x000000070f800000, 0x000000070f800000, 0x000000070fa00000| 0%| F| |TAMS 0x000000070f800000, 0x000000070f800000| Untracked +| 119|0x000000070fa00000, 0x000000070fa00000, 0x000000070fc00000| 0%| F| |TAMS 0x000000070fa00000, 0x000000070fa00000| Untracked +| 120|0x000000070fc00000, 0x000000070fc00000, 0x000000070fe00000| 0%| F| |TAMS 0x000000070fc00000, 0x000000070fc00000| Untracked +| 121|0x000000070fe00000, 0x000000070fe00000, 0x0000000710000000| 0%| F| |TAMS 0x000000070fe00000, 0x000000070fe00000| Untracked +| 122|0x0000000710000000, 0x0000000710000000, 0x0000000710200000| 0%| F| |TAMS 0x0000000710000000, 0x0000000710000000| Untracked +| 123|0x0000000710200000, 0x0000000710200000, 0x0000000710400000| 0%| F| |TAMS 0x0000000710200000, 0x0000000710200000| Untracked +| 124|0x0000000710400000, 0x0000000710400000, 0x0000000710600000| 0%| F| |TAMS 0x0000000710400000, 0x0000000710400000| Untracked +| 125|0x0000000710600000, 0x0000000710800000, 0x0000000710800000|100%| E| |TAMS 0x0000000710600000, 0x0000000710600000| Complete +| 126|0x0000000710800000, 0x0000000710a00000, 0x0000000710a00000|100%| E| |TAMS 0x0000000710800000, 0x0000000710800000| Complete +| 127|0x0000000710a00000, 0x0000000710c00000, 0x0000000710c00000|100%| E|CS|TAMS 0x0000000710a00000, 0x0000000710a00000| Complete + +Card table byte_map: [0x000001fef9550000,0x000001fef9d50000] _byte_map_base: 0x000001fef5d4a000 + +Marking Bits (Prev, Next): (CMBitMap*) 0x000001fee62d5f10, (CMBitMap*) 0x000001fee62d5f50 + Prev Bits: [0x000001fefa550000, 0x000001fefe520000) + Next Bits: [0x000001fe80000000, 0x000001fe83fd0000) + +Polling page: 0x000001fee41f0000 + +Metaspace: + +Usage: + Non-class: 13.37 MB used. + Class: 1.18 MB used. + Both: 14.55 MB used. + +Virtual space: + Non-class space: 64.00 MB reserved, 13.44 MB ( 21%) committed, 1 nodes. + Class space: 1.00 GB reserved, 1.25 MB ( <1%) committed, 1 nodes. + Both: 1.06 GB reserved, 14.69 MB ( 1%) committed. + +Chunk freelists: + Non-Class: 2.16 MB + Class: 14.63 MB + Both: 16.79 MB + +MaxMetaspaceSize: unlimited +CompressedClassSpaceSize: 1.00 GB +Initial GC threshold: 21.00 MB +Current GC threshold: 21.00 MB +CDS: off +MetaspaceReclaimPolicy: balanced + - commit_granule_bytes: 65536. + - commit_granule_words: 8192. + - virtual_space_node_default_size: 8388608. + - enlarge_chunks_in_place: 1. + - new_chunks_are_fully_committed: 0. + - uncommit_free_chunks: 1. + - use_allocation_guard: 0. + - handle_deallocations: 1. + + +Internal statistics: + +num_allocs_failed_limit: 0. +num_arena_births: 72. +num_arena_deaths: 0. +num_vsnodes_births: 2. +num_vsnodes_deaths: 0. +num_space_committed: 233. +num_space_uncommitted: 0. +num_chunks_returned_to_freelist: 0. +num_chunks_taken_from_freelist: 310. +num_chunk_merges: 0. +num_chunk_splits: 212. +num_chunks_enlarged: 173. +num_inconsistent_stats: 0. + +CodeHeap 'non-profiled nmethods': size=120000Kb used=711Kb max_used=711Kb free=119288Kb + bounds [0x000001fef14f0000, 0x000001fef1760000, 0x000001fef8a20000] +CodeHeap 'profiled nmethods': size=120000Kb used=3100Kb max_used=3100Kb free=116899Kb + bounds [0x000001fee9a20000, 0x000001fee9d30000, 0x000001fef0f50000] +CodeHeap 'non-nmethods': size=5760Kb used=1660Kb max_used=1689Kb free=4099Kb + bounds [0x000001fef0f50000, 0x000001fef11c0000, 0x000001fef14f0000] + total_blobs=2724 nmethods=1615 adapters=1023 + compilation: enabled + stopped_count=0, restarted_count=0 + full_count=0 + +Compilation events (20 events): +Event: 6.953 Thread 0x000001feff0a85f0 1609 3 com.badlogic.gdx.math.Vector2:: (15 bytes) +Event: 6.953 Thread 0x000001feff0a85f0 nmethod 1609 0x000001fee9d19590 code [0x000001fee9d19720, 0x000001fee9d19898] +Event: 6.953 Thread 0x000001feff0a85f0 1610 3 com.badlogic.gdx.math.RandomXS128::nextInt (8 bytes) +Event: 6.953 Thread 0x000001feff0a85f0 nmethod 1610 0x000001fee9d19990 code [0x000001fee9d19b40, 0x000001fee9d19c88] +Event: 6.953 Thread 0x000001feff0a85f0 1611 3 com.badlogic.gdx.math.RandomXS128::nextLong (47 bytes) +Event: 6.953 Thread 0x000001feff0a85f0 nmethod 1611 0x000001fee9d19d10 code [0x000001fee9d19ee0, 0x000001fee9d1a238] +Event: 6.955 Thread 0x000001feff0a85f0 1612 3 java.io.WinNTFileSystem::normalize (143 bytes) +Event: 6.956 Thread 0x000001feff0a85f0 nmethod 1612 0x000001fee9d1a390 code [0x000001fee9d1a620, 0x000001fee9d1b218] +Event: 6.970 Thread 0x000001fe96a6ee30 nmethod 1590% 0x000001fef1594310 code [0x000001fef1594520, 0x000001fef1594fd8] +Event: 6.970 Thread 0x000001fe96a6ee30 1587 4 javazoom.jl.decoder.BitReserve::hgetbits (105 bytes) +Event: 6.973 Thread 0x000001fe96a6ee30 nmethod 1587 0x000001fef1595a10 code [0x000001fef1595ba0, 0x000001fef1595d78] +Event: 6.973 Thread 0x000001fe96a6ee30 1595 % 4 javazoom.jl.decoder.LayerIIIDecoder::antialias @ 90 (198 bytes) +Event: 6.989 Thread 0x000001feff0a85f0 1613 s 3 java.io.BufferedInputStream::read (49 bytes) +Event: 6.989 Thread 0x000001feff0a85f0 nmethod 1613 0x000001fee9d1b690 code [0x000001fee9d1b860, 0x000001fee9d1bcd8] +Event: 6.990 Thread 0x000001feff0a85f0 1614 3 java.nio.charset.CoderResult::isOverflow (14 bytes) +Event: 6.990 Thread 0x000001feff0a85f0 nmethod 1614 0x000001fee9d1be90 code [0x000001fee9d1c020, 0x000001fee9d1c178] +Event: 6.992 Thread 0x000001fe96a6ee30 nmethod 1595% 0x000001fef1595f10 code [0x000001fef15960a0, 0x000001fef1596658] +Event: 6.992 Thread 0x000001fe96a6ee30 1588 4 javazoom.jl.decoder.LayerIIIDecoder::inv_mdct (2339 bytes) +Event: 6.999 Thread 0x000001feff0a85f0 1615 % 3 com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator::generateData @ 951 (1422 bytes) +Event: 7.012 Thread 0x000001feff0a85f0 nmethod 1615% 0x000001fee9d1c210 code [0x000001fee9d1cd80, 0x000001fee9d23cf8] + +GC Heap History (2 events): +Event: 5.511 GC heap before +{Heap before GC invocations=0 (full 0): + garbage-first heap total 262144K, used 22528K [0x0000000700c00000, 0x0000000800000000) + region size 2048K, 11 young (22528K), 0 survivors (0K) + Metaspace used 13638K, committed 13760K, reserved 1114112K + class space used 1090K, committed 1152K, reserved 1048576K +} +Event: 5.517 GC heap after +{Heap after GC invocations=1 (full 0): + garbage-first heap total 262144K, used 2815K [0x0000000700c00000, 0x0000000800000000) + region size 2048K, 2 young (4096K), 2 survivors (4096K) + Metaspace used 13638K, committed 13760K, reserved 1114112K + class space used 1090K, committed 1152K, reserved 1048576K +} + +Dll operation events (10 events): +Event: 0.012 Loaded shared library C:\Users\kekke\.gradle\jdks\bellsoft-17-amd64-windows.2\bin\java.dll +Event: 0.052 Loaded shared library C:\Users\kekke\.gradle\jdks\bellsoft-17-amd64-windows.2\bin\jsvml.dll +Event: 0.220 Loaded shared library C:\Users\kekke\.gradle\jdks\bellsoft-17-amd64-windows.2\bin\net.dll +Event: 0.222 Loaded shared library C:\Users\kekke\.gradle\jdks\bellsoft-17-amd64-windows.2\bin\nio.dll +Event: 0.230 Loaded shared library C:\Users\kekke\.gradle\jdks\bellsoft-17-amd64-windows.2\bin\zip.dll +Event: 0.323 Loaded shared library C:\Users\kekke\.gradle\jdks\bellsoft-17-amd64-windows.2\bin\jimage.dll +Event: 0.334 Loaded shared library C:\ProgramData\libGDX-temp\libgdxUser_101931883_GDX1_13_1\c39de338\gdx64.dll +Event: 0.471 Loaded shared library C:\Users\kekke\AppData\Local\Temp\lwjgl_kekke\3.3.3+5\x64\lwjgl.dll +Event: 0.989 Loaded shared library C:\Users\kekke\AppData\Local\Temp\lwjgl_kekke\3.3.3+5\x64\lwjgl_opengl.dll +Event: 1.344 Loaded shared library C:\Users\kekke\AppData\Local\Temp\libgdxkekke\e35c7bf4\gdx-freetype64.dll + +Deoptimization events (20 events): +Event: 6.988 Thread 0x000001fee418e9e0 Uncommon trap: trap_request=0xffffffc6 fr.pc=0x000001fef15843c0 relative=0x0000000000000200 +Event: 6.988 Thread 0x000001fee418e9e0 Uncommon trap: reason=bimorphic_or_optimized_type_check action=maybe_recompile pc=0x000001fef15843c0 method=com.badlogic.gdx.utils.ObjectMap.place(Ljava/lang/Object;)I @ 1 c2 +Event: 6.988 Thread 0x000001fee418e9e0 DEOPT PACKING pc=0x000001fef15843c0 sp=0x0000003ffa7feaa0 +Event: 6.988 Thread 0x000001fee418e9e0 DEOPT UNPACKING pc=0x000001fef0fa69a3 sp=0x0000003ffa7fe9e0 mode 2 +Event: 6.989 Thread 0x000001fee418e9e0 Uncommon trap: trap_request=0xffffff45 fr.pc=0x000001fef156b31c relative=0x00000000000004dc +Event: 6.989 Thread 0x000001fee418e9e0 Uncommon trap: reason=unstable_if action=reinterpret pc=0x000001fef156b31c method=java.lang.String.getBytes([BIIBI)V @ 6 c2 +Event: 6.989 Thread 0x000001fee418e9e0 DEOPT PACKING pc=0x000001fef156b31c sp=0x0000003ffa7feb70 +Event: 6.989 Thread 0x000001fee418e9e0 DEOPT UNPACKING pc=0x000001fef0fa69a3 sp=0x0000003ffa7fe9b8 mode 2 +Event: 6.990 Thread 0x000001fee418e9e0 Uncommon trap: trap_request=0xffffff45 fr.pc=0x000001fef156bbdc relative=0x000000000000013c +Event: 6.990 Thread 0x000001fee418e9e0 Uncommon trap: reason=unstable_if action=reinterpret pc=0x000001fef156bbdc method=java.lang.String.getBytes([BIIBI)V @ 6 c2 +Event: 6.990 Thread 0x000001fee418e9e0 DEOPT PACKING pc=0x000001fef156bbdc sp=0x0000003ffa7feae0 +Event: 6.990 Thread 0x000001fee418e9e0 DEOPT UNPACKING pc=0x000001fef0fa69a3 sp=0x0000003ffa7fe9a0 mode 2 +Event: 6.996 Thread 0x000001fee418e9e0 DEOPT PACKING pc=0x000001fee9bc95a1 sp=0x0000003ffa7fe660 +Event: 6.996 Thread 0x000001fee418e9e0 DEOPT UNPACKING pc=0x000001fef0fa7143 sp=0x0000003ffa7fdb88 mode 0 +Event: 6.999 Thread 0x000001fee418e9e0 DEOPT PACKING pc=0x000001fee9bc95a1 sp=0x0000003ffa7fe660 +Event: 6.999 Thread 0x000001fee418e9e0 DEOPT UNPACKING pc=0x000001fef0fa7143 sp=0x0000003ffa7fdb88 mode 0 +Event: 7.001 Thread 0x000001fee418e9e0 DEOPT PACKING pc=0x000001fee9bc95a1 sp=0x0000003ffa7fe660 +Event: 7.001 Thread 0x000001fee418e9e0 DEOPT UNPACKING pc=0x000001fef0fa7143 sp=0x0000003ffa7fdb88 mode 0 +Event: 7.003 Thread 0x000001fee418e9e0 DEOPT PACKING pc=0x000001fee9bc95a1 sp=0x0000003ffa7fe660 +Event: 7.003 Thread 0x000001fee418e9e0 DEOPT UNPACKING pc=0x000001fef0fa7143 sp=0x0000003ffa7fdb88 mode 0 + +Classes loaded (20 events): +Event: 6.982 Loading class jdk/internal/util/xml/impl/ParserSAX +Event: 6.983 Loading class jdk/internal/org/xml/sax/XMLReader +Event: 6.983 Loading class jdk/internal/org/xml/sax/XMLReader done +Event: 6.983 Loading class jdk/internal/org/xml/sax/Locator +Event: 6.983 Loading class jdk/internal/org/xml/sax/Locator done +Event: 6.983 Loading class jdk/internal/util/xml/impl/Parser +Event: 6.984 Loading class jdk/internal/util/xml/impl/Parser done +Event: 6.984 Loading class jdk/internal/util/xml/impl/ParserSAX done +Event: 6.984 Loading class jdk/internal/util/xml/impl/Attrs +Event: 6.985 Loading class jdk/internal/org/xml/sax/Attributes +Event: 6.985 Loading class jdk/internal/org/xml/sax/Attributes done +Event: 6.985 Loading class jdk/internal/util/xml/impl/Attrs done +Event: 6.985 Loading class jdk/internal/util/xml/impl/Pair +Event: 6.985 Loading class jdk/internal/util/xml/impl/Pair done +Event: 6.985 Loading class jdk/internal/org/xml/sax/InputSource +Event: 6.985 Loading class jdk/internal/org/xml/sax/InputSource done +Event: 6.986 Loading class jdk/internal/util/xml/impl/Input +Event: 6.986 Loading class jdk/internal/util/xml/impl/Input done +Event: 6.987 Loading class jdk/internal/util/xml/impl/ReaderUTF8 +Event: 6.987 Loading class jdk/internal/util/xml/impl/ReaderUTF8 done + +Classes unloaded (0 events): +No events + +Classes redefined (0 events): +No events + +Internal exceptions (20 events): +Event: 0.547 Thread 0x000001fee418e9e0 Exception (0x00000007105f0810) +thrown [s\src\hotspot\share\interpreter\linkResolver.cpp, line 759] +Event: 0.549 Thread 0x000001fee418e9e0 Exception (0x0000000710205780) +thrown [s\src\hotspot\share\interpreter\linkResolver.cpp, line 759] +Event: 0.550 Thread 0x000001fee418e9e0 Exception (0x000000071020b890) +thrown [s\src\hotspot\share\interpreter\linkResolver.cpp, line 759] +Event: 0.551 Thread 0x000001fee418e9e0 Exception (0x000000071020f8d8) +thrown [s\src\hotspot\share\interpreter\linkResolver.cpp, line 759] +Event: 0.552 Thread 0x000001fee418e9e0 Exception (0x0000000710216ff0) +thrown [s\src\hotspot\share\interpreter\linkResolver.cpp, line 759] +Event: 0.576 Thread 0x000001fee418e9e0 Exception (0x00000007102c8708) +thrown [s\src\hotspot\share\prims\jni.cpp, line 516] +Event: 0.576 Thread 0x000001fee418e9e0 Exception (0x00000007102c8a98) +thrown [s\src\hotspot\share\prims\jni.cpp, line 516] +Event: 0.623 Thread 0x000001fee418e9e0 Exception (0x000000071038dd30) +thrown [s\src\hotspot\share\prims\jni.cpp, line 516] +Event: 0.623 Thread 0x000001fee418e9e0 Exception (0x000000071038e090) +thrown [s\src\hotspot\share\prims\jni.cpp, line 516] +Event: 0.692 Thread 0x000001fee418e9e0 Exception (0x000000071005a610) +thrown [s\src\hotspot\share\prims\jni.cpp, line 516] +Event: 0.692 Thread 0x000001fee418e9e0 Exception (0x000000071005a990) +thrown [s\src\hotspot\share\prims\jni.cpp, line 516] +Event: 0.758 Thread 0x000001fee418e9e0 Exception (0x00000007100a8a88) +thrown [s\src\hotspot\share\interpreter\linkResolver.cpp, line 759] +Event: 0.972 Thread 0x000001fee418e9e0 Exception (0x000000070fe84128) +thrown [s\src\hotspot\share\interpreter\linkResolver.cpp, line 759] +Event: 0.987 Thread 0x000001fee418e9e0 Exception (0x000000070febf008) +thrown [s\src\hotspot\share\prims\jni.cpp, line 516] +Event: 0.987 Thread 0x000001fee418e9e0 Exception (0x000000070febf3a8) +thrown [s\src\hotspot\share\prims\jni.cpp, line 516] +Event: 1.001 Thread 0x000001fee418e9e0 Exception (0x000000070fecfc20) +thrown [s\src\hotspot\share\prims\jni.cpp, line 516] +Event: 1.001 Thread 0x000001fee418e9e0 Exception (0x000000070fecfef0) +thrown [s\src\hotspot\share\prims\jni.cpp, line 516] +Event: 1.347 Thread 0x000001fee418e9e0 Exception (0x000000070fbdb978) +thrown [s\src\hotspot\share\interpreter\linkResolver.cpp, line 759] +Event: 5.518 Thread 0x000001fee418e9e0 Implicit null exception at 0x000001fef156a215 to 0x000001fef156a47c +Event: 5.533 Thread 0x000001fee418e9e0 Implicit null exception at 0x000001fef157587d to 0x000001fef15762d0 + +VM Operations (20 events): +Event: 1.113 Executing VM operation: HandshakeAllThreads +Event: 1.114 Executing VM operation: HandshakeAllThreads done +Event: 1.114 Executing VM operation: Cleanup +Event: 1.114 Executing VM operation: Cleanup done +Event: 1.365 Executing VM operation: HandshakeAllThreads +Event: 1.365 Executing VM operation: HandshakeAllThreads done +Event: 2.374 Executing VM operation: Cleanup +Event: 2.374 Executing VM operation: Cleanup done +Event: 3.374 Executing VM operation: Cleanup +Event: 3.374 Executing VM operation: Cleanup done +Event: 4.374 Executing VM operation: Cleanup +Event: 4.374 Executing VM operation: Cleanup done +Event: 5.375 Executing VM operation: Cleanup +Event: 5.375 Executing VM operation: Cleanup done +Event: 5.511 Executing VM operation: G1CollectForAllocation +Event: 5.517 Executing VM operation: G1CollectForAllocation done +Event: 5.529 Executing VM operation: HandshakeAllThreads +Event: 5.529 Executing VM operation: HandshakeAllThreads done +Event: 6.529 Executing VM operation: Cleanup +Event: 6.529 Executing VM operation: Cleanup done + +Memory protections (0 events): +No events + +Nmethod flushes (0 events): +No events + +Events (18 events): +Event: 0.052 Thread 0x000001fee418e9e0 Thread added: 0x000001fee418e9e0 +Event: 0.064 Thread 0x000001fee418e9e0 Thread added: 0x000001feff05e900 +Event: 0.065 Thread 0x000001fee418e9e0 Thread added: 0x000001feff05f780 +Event: 0.091 Thread 0x000001fee418e9e0 Thread added: 0x000001feff0806f0 +Event: 0.091 Thread 0x000001fee418e9e0 Thread added: 0x000001feff0814c0 +Event: 0.091 Thread 0x000001fee418e9e0 Thread added: 0x000001feff081e80 +Event: 0.091 Thread 0x000001fee418e9e0 Thread added: 0x000001feff0a2f30 +Event: 0.091 Thread 0x000001fee418e9e0 Thread added: 0x000001feff0a4230 +Event: 0.091 Thread 0x000001fee418e9e0 Thread added: 0x000001feff0a85f0 +Event: 0.091 Thread 0x000001fee418e9e0 Thread added: 0x000001feff0ab000 +Event: 0.199 Thread 0x000001fee418e9e0 Thread added: 0x000001feff225560 +Event: 0.205 Thread 0x000001fee418e9e0 Thread added: 0x000001feff22cf40 +Event: 0.278 Thread 0x000001feff0a85f0 Thread added: 0x000001fe8a128590 +Event: 0.769 Thread 0x000001fee418e9e0 Thread added: 0x000001fe8aba1080 +Event: 1.533 Thread 0x000001fee418e9e0 Thread added: 0x000001fe96662110 +Event: 1.635 Thread 0x000001fe8a128590 Thread exited: 0x000001fe8a128590 +Event: 6.854 Thread 0x000001feff0a85f0 Thread added: 0x000001fe96a6ee30 +Event: 6.870 Thread 0x000001feff0a85f0 Thread added: 0x000001fe96a6f350 + + +Dynamic libraries: +0x00007ff68d960000 - 0x00007ff68d96e000 C:\Users\kekke\.gradle\jdks\bellsoft-17-amd64-windows.2\bin\java.exe +0x00007ff946430000 - 0x00007ff946647000 C:\WINDOWS\SYSTEM32\ntdll.dll +0x00007ff944f90000 - 0x00007ff945054000 C:\WINDOWS\System32\KERNEL32.DLL +0x00007ff943740000 - 0x00007ff943af7000 C:\WINDOWS\System32\KERNELBASE.dll +0x00007ff943e60000 - 0x00007ff943f71000 C:\WINDOWS\System32\ucrtbase.dll +0x00007ff8e44b0000 - 0x00007ff8e44c7000 C:\Users\kekke\.gradle\jdks\bellsoft-17-amd64-windows.2\bin\jli.dll +0x00007ff8e44d0000 - 0x00007ff8e44eb000 C:\Users\kekke\.gradle\jdks\bellsoft-17-amd64-windows.2\bin\VCRUNTIME140.dll +0x00007ff9451f0000 - 0x00007ff94539f000 C:\WINDOWS\System32\USER32.dll +0x00007ff943b00000 - 0x00007ff943b26000 C:\WINDOWS\System32\win32u.dll +0x00007ff92f280000 - 0x00007ff92f513000 C:\WINDOWS\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.22621.3672_none_2713b9d173822955\COMCTL32.dll +0x00007ff9450c0000 - 0x00007ff9450e9000 C:\WINDOWS\System32\GDI32.dll +0x00007ff944040000 - 0x00007ff944158000 C:\WINDOWS\System32\gdi32full.dll +0x00007ff9443a0000 - 0x00007ff944447000 C:\WINDOWS\System32\msvcrt.dll +0x00007ff943d40000 - 0x00007ff943dda000 C:\WINDOWS\System32\msvcp_win.dll +0x00007ff9453a0000 - 0x00007ff9453d1000 C:\WINDOWS\System32\IMM32.DLL +0x00007ff9036c0000 - 0x00007ff9036cc000 C:\Users\kekke\.gradle\jdks\bellsoft-17-amd64-windows.2\bin\vcruntime140_1.dll +0x00007ff89c2e0000 - 0x00007ff89c36e000 C:\Users\kekke\.gradle\jdks\bellsoft-17-amd64-windows.2\bin\msvcp140.dll +0x00007ff878070000 - 0x00007ff878ce0000 C:\Users\kekke\.gradle\jdks\bellsoft-17-amd64-windows.2\bin\server\jvm.dll +0x00007ff944ed0000 - 0x00007ff944f82000 C:\WINDOWS\System32\ADVAPI32.dll +0x00007ff9453f0000 - 0x00007ff945498000 C:\WINDOWS\System32\sechost.dll +0x00007ff943b30000 - 0x00007ff943b58000 C:\WINDOWS\System32\bcrypt.dll +0x00007ff9447e0000 - 0x00007ff9448f4000 C:\WINDOWS\System32\RPCRT4.dll +0x00007ff946370000 - 0x00007ff9463e1000 C:\WINDOWS\System32\WS2_32.dll +0x00007ff943610000 - 0x00007ff94365d000 C:\WINDOWS\SYSTEM32\POWRPROF.dll +0x00007ff93ce60000 - 0x00007ff93ce6a000 C:\WINDOWS\SYSTEM32\VERSION.dll +0x00007ff936610000 - 0x00007ff936644000 C:\WINDOWS\SYSTEM32\WINMM.dll +0x00007ff9435f0000 - 0x00007ff943603000 C:\WINDOWS\SYSTEM32\UMPDC.dll +0x00007ff942730000 - 0x00007ff942748000 C:\WINDOWS\SYSTEM32\kernel.appcore.dll +0x00007ff903630000 - 0x00007ff90363a000 C:\Users\kekke\.gradle\jdks\bellsoft-17-amd64-windows.2\bin\jimage.dll +0x00007ff93d780000 - 0x00007ff93d9b2000 C:\WINDOWS\SYSTEM32\DBGHELP.DLL +0x00007ff944450000 - 0x00007ff9447de000 C:\WINDOWS\System32\combase.dll +0x00007ff944cd0000 - 0x00007ff944da7000 C:\WINDOWS\System32\OLEAUT32.dll +0x00007ff9294f0000 - 0x00007ff929522000 C:\WINDOWS\SYSTEM32\dbgcore.DLL +0x00007ff943de0000 - 0x00007ff943e5b000 C:\WINDOWS\System32\bcryptPrimitives.dll +0x00007ff8bfbc0000 - 0x00007ff8bfbe5000 C:\Users\kekke\.gradle\jdks\bellsoft-17-amd64-windows.2\bin\java.dll +0x00007ff8c19d0000 - 0x00007ff8c19e8000 C:\Users\kekke\.gradle\jdks\bellsoft-17-amd64-windows.2\bin\zip.dll +0x00007ff89c200000 - 0x00007ff89c2d7000 C:\Users\kekke\.gradle\jdks\bellsoft-17-amd64-windows.2\bin\jsvml.dll +0x00007ff9454a0000 - 0x00007ff945d09000 C:\WINDOWS\System32\SHELL32.dll +0x00007ff9416b0000 - 0x00007ff941faf000 C:\WINDOWS\SYSTEM32\windows.storage.dll +0x00007ff941570000 - 0x00007ff9416af000 C:\WINDOWS\SYSTEM32\wintypes.dll +0x00007ff944a60000 - 0x00007ff944b59000 C:\WINDOWS\System32\SHCORE.dll +0x00007ff945060000 - 0x00007ff9450be000 C:\WINDOWS\System32\shlwapi.dll +0x00007ff943670000 - 0x00007ff943697000 C:\WINDOWS\SYSTEM32\profapi.dll +0x00007ff8c1370000 - 0x00007ff8c1389000 C:\Users\kekke\.gradle\jdks\bellsoft-17-amd64-windows.2\bin\net.dll +0x00007ff940320000 - 0x00007ff940456000 C:\WINDOWS\SYSTEM32\WINHTTP.dll +0x00007ff942c00000 - 0x00007ff942c69000 C:\WINDOWS\system32\mswsock.dll +0x00007ff8bfba0000 - 0x00007ff8bfbb6000 C:\Users\kekke\.gradle\jdks\bellsoft-17-amd64-windows.2\bin\nio.dll +0x000000006e700000 - 0x000000006e72d000 C:\ProgramData\libGDX-temp\libgdxUser_101931883_GDX1_13_1\c39de338\gdx64.dll +0x00007ff89d560000 - 0x00007ff89d5db000 C:\Users\kekke\AppData\Local\Temp\lwjgl_kekke\3.3.3+5\x64\lwjgl.dll +0x00007ff89aaf0000 - 0x00007ff89ad60000 C:\Users\kekke\AppData\Local\Temp\lwjgl_kekke\3.3.3+5\x64\jemalloc.dll +0x00007ff89aa60000 - 0x00007ff89aae2000 C:\Users\kekke\AppData\Local\Temp\lwjgl_kekke\3.3.3+5\x64\glfw.dll +0x00007ff8be380000 - 0x00007ff8be3c6000 C:\WINDOWS\SYSTEM32\dinput8.dll +0x00007ff93c990000 - 0x00007ff93c9a1000 C:\WINDOWS\SYSTEM32\xinput1_4.dll +0x00007ff943340000 - 0x00007ff94338e000 C:\WINDOWS\SYSTEM32\cfgmgr32.dll +0x00007ff943310000 - 0x00007ff94333c000 C:\WINDOWS\SYSTEM32\DEVOBJ.dll +0x00007ff940ff0000 - 0x00007ff94101b000 C:\WINDOWS\SYSTEM32\dwmapi.dll +0x00007ff92fe10000 - 0x00007ff930023000 C:\WINDOWS\SYSTEM32\inputhost.dll +0x00007ff93fc90000 - 0x00007ff93fdc3000 C:\WINDOWS\SYSTEM32\CoreMessaging.dll +0x00007ff940c90000 - 0x00007ff940d41000 C:\WINDOWS\system32\uxtheme.dll +0x00007ff942e70000 - 0x00007ff942e7c000 C:\WINDOWS\SYSTEM32\CRYPTBASE.DLL +0x00007ff944900000 - 0x00007ff944a60000 C:\WINDOWS\System32\MSCTF.dll +0x00007ff899350000 - 0x00007ff899517000 C:\Users\kekke\AppData\Local\Temp\lwjgl_kekke\3.3.3+5\x64\OpenAL.dll +0x00007ff9441f0000 - 0x00007ff944395000 C:\WINDOWS\System32\ole32.dll +0x00007ff944bc0000 - 0x00007ff944c70000 C:\WINDOWS\System32\clbcatq.dll +0x00007ff93c5d0000 - 0x00007ff93c66e000 C:\WINDOWS\System32\MMDevApi.dll +0x00007ff933be0000 - 0x00007ff933dcd000 C:\WINDOWS\SYSTEM32\AUDIOSES.DLL +0x00007ff941160000 - 0x00007ff941175000 C:\WINDOWS\SYSTEM32\resourcepolicyclient.dll +0x00007ff8f9010000 - 0x00007ff8f9110000 C:\WINDOWS\SYSTEM32\opengl32.dll +0x00007ff8efee0000 - 0x00007ff8eff0d000 C:\WINDOWS\SYSTEM32\GLU32.dll +0x00007ff940da0000 - 0x00007ff940dd7000 C:\WINDOWS\SYSTEM32\dxcore.dll +0x00007ff93c7c0000 - 0x00007ff93c904000 C:\Windows\System32\AppXDeploymentClient.dll +0x00007ff8e9530000 - 0x00007ff8e9560000 C:\WINDOWS\System32\DriverStore\FileRepository\u0415182.inf_amd64_bacb8c8cee2fc393\B415056\atig6pxx.dll +0x00007ff8d6960000 - 0x00007ff8da77f000 C:\WINDOWS\System32\DriverStore\FileRepository\u0415182.inf_amd64_bacb8c8cee2fc393\B415056\atio6axx.dll +0x00007ff945d20000 - 0x00007ff946194000 C:\WINDOWS\System32\SETUPAPI.dll +0x00007ff943cd0000 - 0x00007ff943d3c000 C:\WINDOWS\System32\WINTRUST.dll +0x00007ff943b60000 - 0x00007ff943cc6000 C:\WINDOWS\System32\CRYPT32.dll +0x00007ff942eb0000 - 0x00007ff942ec2000 C:\WINDOWS\SYSTEM32\MSASN1.dll +0x00007ff936130000 - 0x00007ff93616c000 C:\WINDOWS\System32\DriverStore\FileRepository\u0415182.inf_amd64_bacb8c8cee2fc393\B415056\amdihk64.dll +0x00007ff93a430000 - 0x00007ff93a4ed000 C:\WINDOWS\SYSTEM32\mscms.dll +0x00007ff8a33f0000 - 0x00007ff8a343a000 C:\WINDOWS\SYSTEM32\icm32.dll +0x00007ff89e9a0000 - 0x00007ff89e9fe000 C:\Users\kekke\AppData\Local\Temp\lwjgl_kekke\3.3.3+5\x64\lwjgl_opengl.dll +0x00007ff932820000 - 0x00007ff932963000 C:\WINDOWS\SYSTEM32\textinputframework.dll +0x00007ff93bb00000 - 0x00007ff93be6d000 C:\WINDOWS\SYSTEM32\CoreUIComponents.dll +0x000000006a340000 - 0x000000006a3f4000 C:\Users\kekke\AppData\Local\Temp\libgdxkekke\e35c7bf4\gdx-freetype64.dll + +dbghelp: loaded successfully - version: 4.0.5 - missing functions: none +symbol engine: initialized successfully - sym options: 0x614 - pdb path: .;C:\Users\kekke\.gradle\jdks\bellsoft-17-amd64-windows.2\bin;C:\WINDOWS\SYSTEM32;C:\WINDOWS\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.22621.3672_none_2713b9d173822955;C:\Users\kekke\.gradle\jdks\bellsoft-17-amd64-windows.2\bin\server;C:\ProgramData\libGDX-temp\libgdxUser_101931883_GDX1_13_1\c39de338;C:\Users\kekke\AppData\Local\Temp\lwjgl_kekke\3.3.3+5\x64;C:\WINDOWS\System32\DriverStore\FileRepository\u0415182.inf_amd64_bacb8c8cee2fc393\B415056;C:\Users\kekke\AppData\Local\Temp\libgdxkekke\e35c7bf4 + +VM Arguments: +jvm_args: -Dfile.encoding=UTF-8 -Duser.country=RU -Duser.language=ru -Duser.variant +java_command: ru.project.tower.lwjgl3.Lwjgl3Launcher +java_class_path (initial): G:\TowerAn\lwjgl3\build\classes\java\main;G:\TowerAn\lwjgl3\build\resources\main;C:\Users\kekke\.gradle\caches\modules-2\files-2.1\com.badlogicgames.gdx\gdx-backend-lwjgl3\1.13.1\c8d8f1c3ccd17fe2202a1d581e179c4ba0ccc45d\gdx-backend-lwjgl3-1.13.1.jar;C:\Users\kekke\.gradle\caches\modules-2\files-2.1\com.badlogicgames.gdx\gdx-freetype-platform\1.13.1\7e81d0eb330b7bbbb307cd1a0dc2648648b42b94\gdx-freetype-platform-1.13.1-natives-desktop.jar;C:\Users\kekke\.gradle\caches\modules-2\files-2.1\com.badlogicgames.gdx\gdx-platform\1.13.1\8493b7d917097a6d091db2554bf0056881f96738\gdx-platform-1.13.1-natives-desktop.jar;G:\TowerAn\core\build\libs\core-1.0.0.jar;C:\Users\kekke\.gradle\caches\modules-2\files-2.1\com.badlogicgames.gdx\gdx-freetype\1.13.1\a386c9b7a10b28f91b2de47f66b12c23a2c3abc2\gdx-freetype-1.13.1.jar;C:\Users\kekke\.gradle\caches\modules-2\files-2.1\com.badlogicgames.gdx\gdx\1.13.1\734d9a5ca877bbce0c595dbdc3165fe6a22b7a30\gdx-1.13.1.jar;C:\Users\kekke\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-glfw\3.3.3\efa1eb78c5ccd840e9f329717109b5e892d72f8e\lwjgl-glfw-3.3.3.jar;C:\Users\kekke\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-glfw\3.3.3\a03684c5e4b1b1dbbe0d29dbbdc27b985b6840f2\lwjgl-glfw-3.3.3-natives-linux.jar;C:\Users\kekke\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-glfw\3.3.3\d9af485c32545b37dd5359b163161d42d7534dcf\lwjgl-glfw-3.3.3-natives-linux-arm32.jar;C:\Users\kekke\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-glfw\3.3.3\492a0f11f85b85899a6568f07511160c1b87cd38\lwjgl-glfw-3.3.3-natives-linux-arm64.jar;C:\Users\kekke\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-glfw\3.3.3\a1bf400f6bc64e6195596cb1430dafda46090751\lwjgl-glfw-3.3.3-natives-macos.jar;C:\Users\kekke\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-glfw\3.3.3\ee8cc78d0a4a5b3b4600fade6d927c9fc320c858\lwjgl-glfw-3.3.3-natives-macos-arm64.jar;C:\Users\kekke\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-glfw\3.3.3\e449e28b4891fc423c54 +Launcher Type: SUN_STANDARD + +[Global flags] + intx CICompilerCount = 4 {product} {ergonomic} + uint ConcGCThreads = 2 {product} {ergonomic} + uint G1ConcRefinementThreads = 8 {product} {ergonomic} + size_t G1HeapRegionSize = 2097152 {product} {ergonomic} + uintx GCDrainStackTargetSize = 64 {product} {ergonomic} + size_t InitialHeapSize = 268435456 {product} {ergonomic} + size_t MarkStackSize = 4194304 {product} {ergonomic} + size_t MaxHeapSize = 4282384384 {product} {ergonomic} + size_t MaxNewSize = 2569011200 {product} {ergonomic} + size_t MinHeapDeltaBytes = 2097152 {product} {ergonomic} + size_t MinHeapSize = 8388608 {product} {ergonomic} + uintx NonNMethodCodeHeapSize = 5839372 {pd product} {ergonomic} + uintx NonProfiledCodeHeapSize = 122909434 {pd product} {ergonomic} + uintx ProfiledCodeHeapSize = 122909434 {pd product} {ergonomic} + uintx ReservedCodeCacheSize = 251658240 {pd product} {ergonomic} + bool SegmentedCodeCache = true {product} {ergonomic} + size_t SoftMaxHeapSize = 4282384384 {manageable} {ergonomic} + bool UseCompressedClassPointers = true {product lp64_product} {ergonomic} + bool UseCompressedOops = true {product lp64_product} {ergonomic} + bool UseG1GC = true {product} {ergonomic} + bool UseLargePagesIndividualAllocation = false {pd product} {ergonomic} + +Logging: +Log output configuration: + #0: stdout all=warning uptime,level,tags + #1: stderr all=off uptime,level,tags + +Environment Variables: +CLASSPATH=G:\TowerAn\\gradle\wrapper\gradle-wrapper.jar +PATH=C:\Program Files (x86)\Common Files\Oracle\Java\java8path;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files (x86)\Common Files\Oracle\Java\java8path;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Users\kekke\AppData\Local\Microsoft\WindowsApps;C:\Users\kekke\AppData\Local\Programs\cursor\resources\app\bin;c:\program files (x86)\steam\ext\bin +USERNAME=kekke +LANG=en_US.UTF-8 +OS=Windows_NT +PROCESSOR_IDENTIFIER=AMD64 Family 21 Model 2 Stepping 0, AuthenticAMD +TMP=C:\Users\kekke\AppData\Local\Temp +TEMP=C:\Users\kekke\AppData\Local\Temp + + + +Periodic native trim disabled + + +--------------- S Y S T E M --------------- + +OS: + Windows 11 , 64 bit Build 22621 (10.0.22621.3958) +OS uptime: 0 days 10:36 hours + +CPU: total 8 (initial active 8) (8 cores per cpu, 1 threads per core) family 21 model 2 stepping 0 microcode 0x0, cx8, cmov, fxsr, mmx, 3dnowpref, sse, sse2, sse3, ssse3, sse4a, sse4.1, sse4.2, popcnt, lzcnt, tsc, tscinvbit, avx, aes, clmul, bmi1, fma, vzeroupper, clflush +Processor Information for all 8 processors : + Max Mhz: 4000, Current Mhz: 4000, Mhz Limit: 4000 + +Memory: 4k page, system-wide physical 16331M (3585M free) +TotalPageFile size 23598M (AvailPageFile size 2492M) +current process WorkingSet (physical memory assigned to process): 172M, peak: 176M +current process commit charge ("private bytes"): 464M, peak: 468M + +vm_info: OpenJDK 64-Bit Server VM (17.0.14+10-LTS) for windows-amd64 JRE (17.0.14+10-LTS), built on Jan 14 2025 23:58:31 by "" with MS VC++ 17.1 (VS2022) + +END. diff --git a/assets/libgdx.png b/assets/libgdx.png new file mode 100644 index 0000000000000000000000000000000000000000..6c7bfca2af8281213496bb32eb5352293bacacd6 GIT binary patch literal 2458 zcmYjS4LH+l8($M49d(j)5{l})gi7T^81_BeQoNiF7WMk5qj^gl-x5kGgo9!TQ%PP? zaxnE)B5Bh~Nh4wVFRdLmQ)70X{il!XdamcXpZod!e)sRbpZ~RG?55zB=>DXOKp>V7 z@aR1V#DZ85yJ%~Gy}ww}g+L(XyFI)x;3y=a`6Mi#OjatDAW+)bfnbytEg-3qV27|+0Uj?Ps*qzK z23K%iKtihp-xE=QIG-e{#MNA7axz4~4iE^cE1--(r~>sOsJIXbJL0`_3~)(sU81@= zX2e6~1i0c8-Bd7`qB2QPc>qgQLS6C870B>mhidQ_3|0iHldu8;n(qO(37W#;U}cpE zU)3WT*nsKt$|`ZVgwO*g1YA(U0|&u<4WZypL21=e%>jVbczDRFxs7_dkHe#W;q47x z2UJ%B<}InGs-6;f8u%7W36_DSNGf|@k8nHitiHqW@n|(h2=X)Q+;{hEIK?@(z>hIyZ9e(<+`YNQy zx1qrk`#L}{y7?G5{MG{eL8=u%QoX>j`E%eb`1)rf_fYmC*4gP+25XisGcNo5wlL>M z(R&s>h?(N9?~UuCX^rs>EZzwqvCN`C44!EIo=-8D2sviIP>iKz!= zQM*Erm{{MpcMMx)g2yG?2b;UJZ~wLC&*sEyN$G`GommZH|L%zG5x?{VVk>8MY}Dch z>G$NjzA|1hIE(q^2#O&O`t=fo>K&~zNH6_lTlSG1__Q%?`)%;^pt+ZTcJ=xrK=dXg z(!kr`?!;dnylH=^Km_w@uG)&2i^V z-{kf-Hw-4w`E8eq?<>c7`VH-NG=A~4jRo&`nk;I={i)*Nh^>C6UNr;9Ad~#uiYq)O zC%|61_wvwx&6$Fe%Ts$>_C9v4;_E=XwHKu2sHJVBRd~B)BFSS61Ad`@|?0G>~8wvo6@-BTJlfB zKgn8KH!03|mYgt|PE$U&IySS^md$miMoVV7E~grG1dZu8Bliuz_2_`i?#z&p_Q6wo=ta;%wI&56}Q?b9AXCVdq{3MDM4D%X_wvComh= z_~}~I)%E*nNFOlJW7Zt*hNsSVU7TwFbG*&iNzW^<2~BMoXCR=kno~NQ!>`2JN2OgC zC1lQl`)No(DJZC68Baud;`zvg_fcS~e$((QFccSvbS)2Kg81DUf(g`u^m!+BasK+{E&wF&zP^tXdw_qosFaeLD0qv`ZpGO6e!K14h19 zWS$|rFIONEaoaU0ibsJcOu_2QrR7%afdOV|c(7fkuLII2KWIhvNIb`o{ zO1ox56`frbXC*aF91ZB+ld&MrM?V+}3G3t%x&7jxEY`&Gh-u*;QvZ0H!gA%4e#e(9 z+pGddSH=A%Elpa`D6fYaJZUMbdh~AB-6$W*U{hO|ytHKwDePWC#n!HC??e8ptfZqgKF|h*kZB2% zW)hy5O1Aco@=`3fD|R+GEHaCbr~kiQ*R9N^j;^%Nh+%SCKdlvmzZnDpLqXqg+n@3e DtE*cX literal 0 HcmV?d00001 diff --git a/assets/pop.mp3 b/assets/pop.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..4903e9cfeff8fdc40a5055205daac3b986b06611 GIT binary patch literal 5477 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 literal 0 HcmV?d00001 diff --git a/assets/pop.wav b/assets/pop.wav new file mode 100644 index 0000000000000000000000000000000000000000..1c0788c71c7d940bd0f8ad9ce844a3909b4e654c GIT binary patch literal 12392 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

93WO@_}V%be_7HQlTWK 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 Bx?TVP literal 0 HcmV?d00001 diff --git a/assets/roboto.ttf b/assets/roboto.ttf new file mode 100644 index 0000000000000000000000000000000000000000..5af42d473356441cc19d900ed5f8bc35d065edcb GIT binary patch literal 145908 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 z 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 CI!@34 literal 0 HcmV?d00001 diff --git a/assets/shot.mp3 b/assets/shot.mp3 new file mode 100644 index 0000000..0519ecb --- /dev/null +++ b/assets/shot.mp3 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/shot.wav b/assets/shot.wav new file mode 100644 index 0000000000000000000000000000000000000000..95e480cc294325da29d2dc39ef1acbdb9f912a6e GIT binary patch literal 7982 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 G^nUtI#@ literal 0 HcmV?d00001 diff --git a/assets/ui.ttf b/assets/ui.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6fcafd9b0bc750952b619bf27fbddc769867bb72 GIT binary patch literal 879796 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

Zy`mbFJ{KvfKq(4~l783cB1LV@W}nW-Bdr!B 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 selectedAbilities = new Array<>(); + + private RunSnapshot savedRunSnapshot; + private Array spawnedBosses = new Array<>(); + + public GameState() {} + + + + + public void saveGameState(Snapshot snapshot) { + Snapshot nextSnapshot = Objects.requireNonNull(snapshot, "snapshot"); + returnedFromShop = true; + savedRunSnapshot = new RunSnapshot(nextSnapshot, selectedAbilities, spawnedBosses); + } + + + + + public Snapshot restoreGameState() { + if (!returnedFromShop) { + return null; + } + if (savedRunSnapshot == null) { + return null; + } + selectedAbilities.clear(); + selectedAbilities.addAll(savedRunSnapshot.selectedAbilities); + spawnedBosses.clear(); + spawnedBosses.addAll(savedRunSnapshot.spawnedBosses); + return savedRunSnapshot.snapshot; + } + + + + + public void resetGameState() { + DebugLog.log("GameState", "Resetting game state"); + returnedFromShop = false; + + selectedAbilities.clear(); + spawnedBosses.clear(); + savedRunSnapshot = null; + + DebugLog.log("GameState", "Cleared selected abilities"); + } + + + + + public boolean isReturnedFromShop() { + return returnedFromShop; + } + + + + + public void setSelectedAbilities(Array abilities) { + DebugLog.log("GameState", "Setting selected abilities, count: " + abilities.size); + selectedAbilities.clear(); + selectedAbilities.addAll(abilities); + for (AbilityKind ability : selectedAbilities) { + DebugLog.log("GameState", "Added ability: " + ability.persistedId()); + } + } + + public void setSelectedAbilityIds(Array abilityIds) { + DebugLog.log("GameState", "Setting selected ability ids, count: " + abilityIds.size); + selectedAbilities.clear(); + for (String abilityId : abilityIds) { + Optional kind = AbilityKind.fromPersistedId(abilityId); + if (kind.isPresent()) { + selectedAbilities.add(kind.get()); + DebugLog.log("GameState", "Added ability: " + abilityId); + } else { + DebugLog.log("GameState", "Ignoring unknown ability id: " + abilityId); + } + } + } + + + + + public Array getSelectedAbilities() { + DebugLog.log("GameState", "Getting selected abilities, count: " + selectedAbilities.size); + return copyOf(selectedAbilities); + } + + public Array getSelectedAbilityIds() { + Array abilityIds = new Array<>(); + for (AbilityKind kind : selectedAbilities) { + abilityIds.add(kind.persistedId()); + } + return abilityIds; + } + + public Array getSpawnedBosses() { + return copyOf(spawnedBosses); + } + + public void setSpawnedBosses(Array spawnedBosses) { + this.spawnedBosses.clear(); + this.spawnedBosses.addAll(spawnedBosses); + } + + private static Array copyOf(Array source) { + Array copy = new Array<>(); + copy.addAll(source); + return copy; + } + + private static final class RunSnapshot { + private final Snapshot snapshot; + private final Array selectedAbilities; + private final Array spawnedBosses; + + private RunSnapshot( + Snapshot snapshot, + Array selectedAbilities, + Array spawnedBosses) { + this.snapshot = Objects.requireNonNull(snapshot, "snapshot"); + this.selectedAbilities = copyOf(selectedAbilities); + this.spawnedBosses = copyOf(spawnedBosses); + } + } + + public static final class Snapshot { + private final int money; + private final int runCurrencyEarned; + private final HealthSnapshot health; + private final BulletSnapshot bulletStats; + private final UpgradeSnapshot upgrades; + private final WaveSnapshot wave; + private final ru.project.tower.run.RunRngStreams.Snapshot rng; + + public Snapshot( + int money, + HealthSnapshot health, + BulletSnapshot bulletStats, + UpgradeSnapshot upgrades, + WaveSnapshot wave) { + this(money, health, bulletStats, upgrades, wave, null); + } + + public Snapshot( + int money, + int runCurrencyEarned, + HealthSnapshot health, + BulletSnapshot bulletStats, + UpgradeSnapshot upgrades, + WaveSnapshot wave) { + this(money, runCurrencyEarned, health, bulletStats, upgrades, wave, null); + } + + public Snapshot( + int money, + HealthSnapshot health, + BulletSnapshot bulletStats, + UpgradeSnapshot upgrades, + WaveSnapshot wave, + ru.project.tower.run.RunRngStreams.Snapshot rng) { + this(money, 0, health, bulletStats, upgrades, wave, rng); + } + + public Snapshot( + int money, + int runCurrencyEarned, + HealthSnapshot health, + BulletSnapshot bulletStats, + UpgradeSnapshot upgrades, + WaveSnapshot wave, + ru.project.tower.run.RunRngStreams.Snapshot rng) { + this.money = money; + this.runCurrencyEarned = Math.max(0, runCurrencyEarned); + this.health = Objects.requireNonNull(health, "health"); + this.bulletStats = Objects.requireNonNull(bulletStats, "bulletStats"); + this.upgrades = Objects.requireNonNull(upgrades, "upgrades"); + this.wave = Objects.requireNonNull(wave, "wave"); + this.rng = rng; + } + + public int getMoney() { + return money; + } + + public int getRunCurrencyEarned() { + return runCurrencyEarned; + } + + public HealthSnapshot getHealth() { + return health; + } + + public BulletSnapshot getBulletStats() { + return bulletStats; + } + + public UpgradeSnapshot getUpgrades() { + return upgrades; + } + + public WaveSnapshot getWave() { + return wave; + } + + public ru.project.tower.run.RunRngStreams.Snapshot getRng() { + return rng; + } + } + + public static final class HealthSnapshot { + private final int squareHealth; + private final int maxSquareHealth; + private final int healthRegenRate; + + public HealthSnapshot(int squareHealth, int maxSquareHealth, int healthRegenRate) { + this.squareHealth = squareHealth; + this.maxSquareHealth = maxSquareHealth; + this.healthRegenRate = healthRegenRate; + } + + public int getSquareHealth() { + return squareHealth; + } + + public int getMaxSquareHealth() { + return maxSquareHealth; + } + + public int getHealthRegenRate() { + return healthRegenRate; + } + } + + public static final class BulletSnapshot { + private final float bulletSpeed; + private final int bulletDamage; + private final float shotCooldown; + + public BulletSnapshot(float bulletSpeed, int bulletDamage, float shotCooldown) { + this.bulletSpeed = bulletSpeed; + this.bulletDamage = bulletDamage; + this.shotCooldown = shotCooldown; + } + + public float getBulletSpeed() { + return bulletSpeed; + } + + public int getBulletDamage() { + return bulletDamage; + } + + public float getShotCooldown() { + return shotCooldown; + } + } + + public static final class UpgradeSnapshot { + private final int healthUpgradeLevel; + private final int damageUpgradeLevel; + private final int speedUpgradeLevel; + private final int cooldownUpgradeLevel; + private final int regenUpgradeLevel; + private final int critChanceUpgradeLevel; + private final int critMultiplierUpgradeLevel; + + public UpgradeSnapshot( + int healthUpgradeLevel, + int damageUpgradeLevel, + int speedUpgradeLevel, + int cooldownUpgradeLevel, + int regenUpgradeLevel, + int critChanceUpgradeLevel, + int critMultiplierUpgradeLevel) { + this.healthUpgradeLevel = healthUpgradeLevel; + this.damageUpgradeLevel = damageUpgradeLevel; + this.speedUpgradeLevel = speedUpgradeLevel; + this.cooldownUpgradeLevel = cooldownUpgradeLevel; + this.regenUpgradeLevel = regenUpgradeLevel; + this.critChanceUpgradeLevel = critChanceUpgradeLevel; + this.critMultiplierUpgradeLevel = critMultiplierUpgradeLevel; + } + + public int getHealthUpgradeLevel() { + return healthUpgradeLevel; + } + + public int getDamageUpgradeLevel() { + return damageUpgradeLevel; + } + + public int getSpeedUpgradeLevel() { + return speedUpgradeLevel; + } + + public int getCooldownUpgradeLevel() { + return cooldownUpgradeLevel; + } + + public int getRegenUpgradeLevel() { + return regenUpgradeLevel; + } + + public int getCritChanceUpgradeLevel() { + return critChanceUpgradeLevel; + } + + public int getCritMultiplierUpgradeLevel() { + return critMultiplierUpgradeLevel; + } + } + + public static final class WaveSnapshot { + private final int currentWave; + private final boolean waveActive; + private final long waveStartTime; + private final long enemiesSpawnedThisWave; + private final long enemiesPerWave; + + public WaveSnapshot( + int currentWave, + boolean waveActive, + long waveStartTime, + long enemiesSpawnedThisWave, + long enemiesPerWave) { + this.currentWave = currentWave; + this.waveActive = waveActive; + this.waveStartTime = waveStartTime; + this.enemiesSpawnedThisWave = enemiesSpawnedThisWave; + this.enemiesPerWave = enemiesPerWave; + } + + public int getCurrentWave() { + return currentWave; + } + + public boolean isWaveActive() { + return waveActive; + } + + public long getWaveStartTime() { + return waveStartTime; + } + + public long getEnemiesSpawnedThisWave() { + return enemiesSpawnedThisWave; + } + + public long getEnemiesPerWave() { + return enemiesPerWave; + } + } +} diff --git a/core/src/main/java/ru/project/tower/Main.java b/core/src/main/java/ru/project/tower/Main.java new file mode 100644 index 0000000..c894c4a --- /dev/null +++ b/core/src/main/java/ru/project/tower/Main.java @@ -0,0 +1,65 @@ +package ru.project.tower; + +import com.badlogic.gdx.Game; +import com.badlogic.gdx.Gdx; +import java.util.Objects; +import ru.project.tower.navigation.ScreenNavigation; +import ru.project.tower.navigation.ScreenNavigator; +import ru.project.tower.screens.gamescreen.layout.SafeAreaInsetsProvider; + +public class Main extends Game { + + private static final String PLAYER_DATA_PREFS_NAME = "tower_attack_player_data"; + private static final String ABILITIES_PREFS_NAME = "tower_attack_player_abilities"; + + + + + + + + private GameContext ctx; + + private ScreenNavigator screenNavigator; + private final SafeAreaInsetsProvider safeAreaInsetsProvider; + + public Main() { + this(SafeAreaInsetsProvider.none()); + } + + public Main(SafeAreaInsetsProvider safeAreaInsetsProvider) { + this.safeAreaInsetsProvider = + Objects.requireNonNull(safeAreaInsetsProvider, "safeAreaInsetsProvider"); + } + + protected final ScreenNavigator screenNavigator() { + return screenNavigator; + } + + protected final GameContext gameContext() { + return ctx; + } + + @Override + public void create() { + ctx = + new GameContext( + Gdx.app.getPreferences(PLAYER_DATA_PREFS_NAME), + Gdx.app.getPreferences(ABILITIES_PREFS_NAME), + new ru.project.tower.support.LibGdxAssetService(), + safeAreaInsetsProvider); + screenNavigator = ScreenNavigation.forGame(this, ctx); + screenNavigator.showMainMenu(); + } + + @Override + public void dispose() { + if (getScreen() != null) { + getScreen().dispose(); + } + if (ctx != null) { + ctx.dispose(); + } + super.dispose(); + } +} diff --git a/core/src/main/java/ru/project/tower/abilities/AbilityEffect.java b/core/src/main/java/ru/project/tower/abilities/AbilityEffect.java new file mode 100644 index 0000000..f89478d --- /dev/null +++ b/core/src/main/java/ru/project/tower/abilities/AbilityEffect.java @@ -0,0 +1,75 @@ +package ru.project.tower.abilities; + +import ru.project.tower.support.GameClock; + +public class AbilityEffect { + public float x, y; + public float radius; + public float duration; + public long startTime; + public String type; + private final GameClock clock; + + public AbilityEffect(float x, float y, float radius, float duration, int typeId) { + this(x, y, radius, duration, typeId, GameClock.SYSTEM.nowMs(), GameClock.SYSTEM); + } + + public AbilityEffect( + float x, + float y, + float radius, + float duration, + int typeId, + long startTime, + GameClock clock) { + this.x = x; + this.y = y; + this.radius = radius; + this.duration = duration; + this.startTime = startTime; + this.clock = clock; + + switch (typeId) { + case 0: + this.type = "freeze"; + break; + case 1: + this.type = "explosion"; + break; + case 2: + this.type = "shield"; + break; + case 3: + this.type = "impulse"; + break; + default: + this.type = "unknown"; + } + } + + public boolean isExpired() { + return isExpired(clock.nowMs()); + } + + public boolean isExpired(long now) { + return now - startTime > duration; + } + + public float getAlpha() { + return getAlpha(clock.nowMs()); + } + + public float getAlpha(long now) { + float progress = (now - startTime) / duration; + return 1f - progress; + } + + public float getRemainingPercentage() { + return getRemainingPercentage(clock.nowMs()); + } + + public float getRemainingPercentage(long now) { + float elapsed = now - startTime; + return Math.max(0f, 1f - (elapsed / duration)); + } +} diff --git a/core/src/main/java/ru/project/tower/abilities/AbilityHost.java b/core/src/main/java/ru/project/tower/abilities/AbilityHost.java new file mode 100644 index 0000000..cad6a1e --- /dev/null +++ b/core/src/main/java/ru/project/tower/abilities/AbilityHost.java @@ -0,0 +1,41 @@ +package ru.project.tower.abilities; + +import com.badlogic.gdx.graphics.Color; +import ru.project.tower.entities.circles.BaseCircleData; + + + + + + + +public interface AbilityHost { + void addFloatingText(float x, float y, String text, Color color); + + void createExplosion(float x, float y, Color color); + + void triggerKillShake(); + + void triggerCritHitstop(); + + int effectiveBulletDamage(); + + float abilityScalingFactor(); + + float gameScale(); + + + + + + long abilityCooldownReductionMs(); + + boolean isBoss(BaseCircleData circle); + + void addMoney(int amount); + + void killEnemy(BaseCircleData enemy); + + + void onTurretShot(Turret turret, BaseCircleData target, long now); +} diff --git a/core/src/main/java/ru/project/tower/abilities/AbilityKind.java b/core/src/main/java/ru/project/tower/abilities/AbilityKind.java new file mode 100644 index 0000000..a6b3b23 --- /dev/null +++ b/core/src/main/java/ru/project/tower/abilities/AbilityKind.java @@ -0,0 +1,83 @@ +package ru.project.tower.abilities; + +import java.util.Optional; + +public enum AbilityKind { + FREEZE("freeze", "has_freeze_ability", true, 8_000L, "Заморозка", "ЗАМОРОЗКА", 50, 0), + EXPLOSION("explosion", "has_explosion_ability", true, 12_000L, "Взрыв", "ВЗРЫВ", 75, 0), + SHIELD("shield", "has_shield_ability", false, 20_000L, "Щит", "ЩИТ", 60, 12), + IMPULSE("impulse", "has_impulse_ability", false, 15_000L, "Импульс", "ИМПУЛЬС", 65, 16), + DASH("dash", "has_dash_ability", false, 5_000L, "Рывок", "РЫВОК", 80, 20), + PULL("pull", "has_pull_ability", false, 10_000L, "Притяжение", "ТЯГА", 90, 24), + TURRET("turret", "has_turret_ability", false, 25_000L, "Турель", "ТУРЕЛЬ", 120, 28); + + private static final AbilityKind[] ABILITY_KINDS = values(); + + private final String persistedId; + private final String preferenceKey; + private final boolean defaultUnlocked; + private final long baseCooldownMs; + private final String selectionName; + private final String hudLabel; + private final int shopPrice; + private final int unlockWaveRequirement; + + AbilityKind( + String persistedId, + String preferenceKey, + boolean defaultUnlocked, + long baseCooldownMs, + String selectionName, + String hudLabel, + int shopPrice, + int unlockWaveRequirement) { + this.persistedId = persistedId; + this.preferenceKey = preferenceKey; + this.defaultUnlocked = defaultUnlocked; + this.baseCooldownMs = baseCooldownMs; + this.selectionName = selectionName; + this.hudLabel = hudLabel; + this.shopPrice = shopPrice; + this.unlockWaveRequirement = unlockWaveRequirement; + } + + public String persistedId() { + return persistedId; + } + + public String preferenceKey() { + return preferenceKey; + } + + public boolean defaultUnlocked() { + return defaultUnlocked; + } + + public long baseCooldownMs() { + return baseCooldownMs; + } + + public String selectionName() { + return selectionName; + } + + public String hudLabel() { + return hudLabel; + } + + public int shopPrice() { + return shopPrice; + } + + public int unlockWaveRequirement() { + return unlockWaveRequirement; + } + + public static Optional fromPersistedId(String persistedId) { + if (persistedId == null) return Optional.empty(); + for (AbilityKind kind : ABILITY_KINDS) { + if (kind.persistedId.equals(persistedId)) return Optional.of(kind); + } + return Optional.empty(); + } +} diff --git a/core/src/main/java/ru/project/tower/abilities/AbilitySystem.java b/core/src/main/java/ru/project/tower/abilities/AbilitySystem.java new file mode 100644 index 0000000..d12ab53 --- /dev/null +++ b/core/src/main/java/ru/project/tower/abilities/AbilitySystem.java @@ -0,0 +1,460 @@ +package ru.project.tower.abilities; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.math.MathUtils; +import com.badlogic.gdx.math.Rectangle; +import com.badlogic.gdx.utils.Array; +import java.util.EnumMap; +import java.util.Optional; +import ru.project.tower.entities.circles.BaseCircleData; +import ru.project.tower.support.GameClock; +import ru.project.tower.support.RandomSource; +import ru.project.tower.support.RangeChecks; +import ru.project.tower.systems.CircleSpatialIndex; + + + + + + + + +public final class AbilitySystem { + + + public static final long FREEZE_COOLDOWN = AbilityKind.FREEZE.baseCooldownMs(); + public static final long EXPLOSION_COOLDOWN = AbilityKind.EXPLOSION.baseCooldownMs(); + public static final long SHIELD_COOLDOWN = AbilityKind.SHIELD.baseCooldownMs(); + public static final long IMPULSE_COOLDOWN = AbilityKind.IMPULSE.baseCooldownMs(); + public static final long DASH_COOLDOWN = AbilityKind.DASH.baseCooldownMs(); + public static final long PULL_COOLDOWN = AbilityKind.PULL.baseCooldownMs(); + public static final long TURRET_COOLDOWN = AbilityKind.TURRET.baseCooldownMs(); + public static final long ABILITY_COOLDOWN_MIN = 1_500L; + + + public static final float FREEZE_RADIUS = 150f; + public static final int FREEZE_DURATION = 3_000; + public static final int EXPLOSION_DAMAGE = 15; + public static final float EXPLOSION_RADIUS = 150f; + public static final int SHIELD_DURATION = 5_000; + public static final float IMPULSE_RADIUS = 200f; + public static final float IMPULSE_FORCE = 10_000f; + public static final int IMPULSE_DURATION = 500; + public static final int DASH_IFRAME_DURATION = 600; + public static final float DASH_REPULSE_RADIUS = 180f; + public static final float DASH_REPULSE_FORCE = 3_000f; + public static final float PULL_RADIUS = 260f; + public static final float PULL_FORCE = 6_000f; + public static final int PULL_DURATION = 700; + public static final int TURRET_LIFETIME = 12_000; + public static final long TURRET_SHOT_INTERVAL = 450L; + public static final float TURRET_RANGE = 450f; + private static final float FORCE_FALLOFF_MIN = 0.15f; + + + public static final float TURRET_DEPLOY_DISTANCE = 100f; + + + private static final Color NEON_CYAN = new Color(0.2f, 1f, 1f, 1f); + private static final Color NEON_GREEN = new Color(0.2f, 1f, 0.2f, 1f); + private static final AbilityKind[] ABILITY_KINDS = AbilityKind.values(); + + + private final Rectangle playerSquare; + private final Array circles; + private final PlayerAbilities playerAbilities; + private final Array selectedAbilities; + private final RandomSource random; + private final AbilityHost host; + private final GameClock clock; + private final CircleSpatialIndex turretTargetIndex = new CircleSpatialIndex(); + private int lastTurretTargetCandidateChecks; + + + private final EnumMap lastActivationTimes = new EnumMap<>(AbilityKind.class); + + + private boolean shieldActive = false; + private float activeShieldDuration = 0f; + private long dashIFramesUntil = 0L; + private long lastFreezeCastTime = 0L; + private float activeFreezeDuration = 0f; + + private final Array activeEffects = new Array<>(); + private final Array activeTurrets = new Array<>(); + + public AbilitySystem( + Rectangle playerSquare, + Array circles, + PlayerAbilities playerAbilities, + Array selectedAbilities, + RandomSource random, + AbilityHost host) { + this( + playerSquare, + circles, + playerAbilities, + selectedAbilities, + random, + host, + GameClock.SYSTEM); + } + + public AbilitySystem( + Rectangle playerSquare, + Array circles, + PlayerAbilities playerAbilities, + Array selectedAbilities, + RandomSource random, + AbilityHost host, + GameClock clock) { + this.playerSquare = playerSquare; + this.circles = circles; + this.playerAbilities = playerAbilities; + this.selectedAbilities = selectedAbilities; + this.random = random; + this.host = host; + this.clock = clock; + for (AbilityKind kind : ABILITY_KINDS) { + lastActivationTimes.put(kind, 0L); + } + } + + + public void activateFreeze(float x, float y, long now) { + if (!canActivate(AbilityKind.FREEZE, now)) return; + + float centerX = playerSquare.x + playerSquare.width / 2f; + float centerY = playerSquare.y + playerSquare.height / 2f; + float scaling = host.abilityScalingFactor(); + float radius = FREEZE_RADIUS * (1 + (scaling - 1) * 0.3f); + float duration = FREEZE_DURATION * scaling; + + activeEffects.add(new AbilityEffect(centerX, centerY, radius, duration, 0, now, clock)); + setLastActivationTime(AbilityKind.FREEZE, now); + + float radius2 = RangeChecks.radiusSquared(radius); + for (BaseCircleData c : circles) { + if (RangeChecks.distanceSquared(centerX, centerY, c.circle.x, c.circle.y) <= radius2) { + c.velocity.set(0f, 0f); + c.setFrozen(true); + } + } + lastFreezeCastTime = now; + activeFreezeDuration = duration; + } + + + + + + private long getCooldown(AbilityKind ability) { + if (ability == null) return 0L; + return Math.max( + ABILITY_COOLDOWN_MIN, ability.baseCooldownMs() - host.abilityCooldownReductionMs()); + } + + private boolean canActivate(AbilityKind ability, long now) { + return playerAbilities.hasAbility(ability) + && selectedAbilities.contains(ability, true) + && now - lastActivationTime(ability) >= getCooldown(ability); + } + + private long lastActivationTime(AbilityKind ability) { + Long last = lastActivationTimes.get(ability); + return last == null ? 0L : last; + } + + private void setLastActivationTime(AbilityKind ability, long now) { + lastActivationTimes.put(ability, now); + } + + public void activateExplosion(float x, float y, long now) { + if (!canActivate(AbilityKind.EXPLOSION, now)) return; + + float centerX = playerSquare.x + playerSquare.width / 2f; + float centerY = playerSquare.y + playerSquare.height / 2f; + float scaling = host.abilityScalingFactor(); + float radius = EXPLOSION_RADIUS * (1 + (scaling - 1) * 0.5f); + int damage = Math.round(EXPLOSION_DAMAGE * scaling); + + activeEffects.add(new AbilityEffect(centerX, centerY, radius, 500, 1, now, clock)); + setLastActivationTime(AbilityKind.EXPLOSION, now); + + float radius2 = RangeChecks.radiusSquared(radius); + for (int i = circles.size - 1; i >= 0; i--) { + BaseCircleData c = circles.get(i); + if (RangeChecks.distanceSquared(centerX, centerY, c.circle.x, c.circle.y) <= radius2) { + int actual = c.isFrozen() ? damage * 2 : damage; + c.health -= actual; + if (c.isFrozen()) { + host.addFloatingText(c.getX(), c.getY(), "SHATTER!", NEON_CYAN); + } + if (c.health <= 0) { + host.killEnemy(c); + } + } + } + host.triggerKillShake(); + } + + public void activateShield(long now) { + if (!canActivate(AbilityKind.SHIELD, now)) return; + + shieldActive = true; + float scaling = host.abilityScalingFactor(); + float duration = SHIELD_DURATION * scaling; + activeShieldDuration = duration; + activeEffects.add( + new AbilityEffect( + playerSquare.x + playerSquare.width / 2f, + playerSquare.y + playerSquare.height / 2f, + playerSquare.width * 1.5f, + duration, + 2, + now, + clock)); + setLastActivationTime(AbilityKind.SHIELD, now); + } + + public void grantShieldPulse(long now, int durationMs) { + if (durationMs <= 0) return; + shieldActive = true; + activeShieldDuration = Math.max(activeShieldDuration, durationMs); + setLastActivationTime(AbilityKind.SHIELD, now); + activeEffects.add( + new AbilityEffect( + playerSquare.x + playerSquare.width / 2f, + playerSquare.y + playerSquare.height / 2f, + playerSquare.width, + durationMs, + 2, + now, + clock)); + } + + public void reduceAllCooldowns(long amountMs) { + if (amountMs <= 0) return; + for (AbilityKind kind : ABILITY_KINDS) { + lastActivationTimes.put(kind, lastActivationTime(kind) - amountMs); + } + } + + public void activateImpulse(long now) { + if (!canActivate(AbilityKind.IMPULSE, now)) return; + + float scaling = host.abilityScalingFactor(); + float radius = IMPULSE_RADIUS * (1 + (scaling - 1) * 0.4f); + float force = IMPULSE_FORCE * scaling; + float centerX = playerSquare.x + playerSquare.width / 2f; + float centerY = playerSquare.y + playerSquare.height / 2f; + + activeEffects.add( + new AbilityEffect(centerX, centerY, radius, IMPULSE_DURATION, 3, now, clock)); + setLastActivationTime(AbilityKind.IMPULSE, now); + + boolean shatteredAny = false; + float radius2 = RangeChecks.radiusSquared(radius); + for (int i = circles.size - 1; i >= 0; i--) { + BaseCircleData c = circles.get(i); + float dx = c.circle.x - centerX; + float dy = c.circle.y - centerY; + float d2 = RangeChecks.distanceSquared(centerX, centerY, c.circle.x, c.circle.y); + if (d2 <= radius2) { + if (c.isFrozen() && c.health <= 50 && !host.isBoss(c)) { + host.addFloatingText(c.getX(), c.getY(), "SHATTER!", NEON_CYAN); + host.killEnemy(c); + shatteredAny = true; + continue; + } + float d = (float) Math.sqrt(d2); + float dirX = dx / Math.max(0.1f, d); + float dirY = dy / Math.max(0.1f, d); + float forceFactor = radialForceFactor(d, radius); + float actualForce = force * forceFactor; + c.velocity.set(dirX * actualForce, dirY * actualForce); + } + } + if (shatteredAny) host.triggerCritHitstop(); + } + + public void activateDash(long now) { + if (!canActivate(AbilityKind.DASH, now)) return; + + setLastActivationTime(AbilityKind.DASH, now); + dashIFramesUntil = now + DASH_IFRAME_DURATION; + float centerX = playerSquare.x + playerSquare.width / 2f; + float centerY = playerSquare.y + playerSquare.height / 2f; + activeEffects.add( + new AbilityEffect( + centerX, + centerY, + DASH_REPULSE_RADIUS, + DASH_IFRAME_DURATION, + 2, + now, + clock)); + + float radius2 = RangeChecks.radiusSquared(DASH_REPULSE_RADIUS); + for (BaseCircleData c : circles) { + float dx = c.circle.x - centerX; + float dy = c.circle.y - centerY; + float d2 = RangeChecks.distanceSquared(centerX, centerY, c.circle.x, c.circle.y); + if (d2 <= radius2) { + float d = (float) Math.sqrt(d2); + float dirX = dx / Math.max(0.1f, d); + float dirY = dy / Math.max(0.1f, d); + float f = DASH_REPULSE_FORCE * radialForceFactor(d, DASH_REPULSE_RADIUS); + c.velocity.set(dirX * f, dirY * f); + } + } + host.addFloatingText(centerX, centerY + 30, "DASH!", NEON_CYAN); + host.triggerKillShake(); + } + + public void activatePull(long now) { + if (!canActivate(AbilityKind.PULL, now)) return; + + setLastActivationTime(AbilityKind.PULL, now); + float scaling = host.abilityScalingFactor(); + float radius = PULL_RADIUS * (1f + (scaling - 1f) * 0.3f); + float force = PULL_FORCE * scaling; + float centerX = playerSquare.x + playerSquare.width / 2f; + float centerY = playerSquare.y + playerSquare.height / 2f; + activeEffects.add( + new AbilityEffect(centerX, centerY, radius, PULL_DURATION, 3, now, clock)); + + float radius2 = RangeChecks.radiusSquared(radius); + for (BaseCircleData c : circles) { + if (host.isBoss(c)) continue; + float d2 = RangeChecks.distanceSquared(centerX, centerY, c.circle.x, c.circle.y); + if (d2 <= radius2 && d2 > 1f) { + float d = (float) Math.sqrt(d2); + float dirX = (centerX - c.circle.x) / d; + float dirY = (centerY - c.circle.y) / d; + float forceFactor = radialForceFactor(d, radius); + c.velocity.set(dirX * force * forceFactor, dirY * force * forceFactor); + } + } + } + + private static float radialForceFactor(float distance, float radius) { + return Math.max(FORCE_FALLOFF_MIN, 1f - distance / radius); + } + + public void activateTurret(long now) { + if (!canActivate(AbilityKind.TURRET, now)) return; + + setLastActivationTime(AbilityKind.TURRET, now); + float centerX = playerSquare.x + playerSquare.width / 2f; + float centerY = playerSquare.y + playerSquare.height / 2f; + + + + float angle = random.angle(); + float dist = TURRET_DEPLOY_DISTANCE * host.gameScale(); + float tx = centerX + MathUtils.cos(angle) * dist; + float ty = centerY + MathUtils.sin(angle) * dist; + + int dmg = Math.max(1, host.effectiveBulletDamage()); + activeTurrets.add(new Turret(tx, ty, now, dmg)); + host.addFloatingText(tx, ty + 20, "TURRET!", NEON_GREEN); + host.triggerKillShake(); + } + + public void tick(long now) { + lastTurretTargetCandidateChecks = 0; + if (shieldActive && now - lastActivationTime(AbilityKind.SHIELD) > activeShieldDuration) + shieldActive = false; + + + + if (activeFreezeDuration > 0f && now - lastFreezeCastTime > activeFreezeDuration) { + for (BaseCircleData c : circles) c.setFrozen(false); + activeFreezeDuration = 0f; + } + + for (int i = activeEffects.size - 1; i >= 0; i--) { + if (activeEffects.get(i).isExpired(now)) activeEffects.removeIndex(i); + } + + if (activeTurrets.size > 0) { + turretTargetIndex.build(circles); + } + + + for (int i = activeTurrets.size - 1; i >= 0; i--) { + Turret t = activeTurrets.get(i); + if (now - t.spawnedAt > TURRET_LIFETIME) { + activeTurrets.removeIndex(i); + continue; + } + if (now - t.lastShot < TURRET_SHOT_INTERVAL) continue; + + BaseCircleData target = null; + float best = Float.POSITIVE_INFINITY; + float range2 = RangeChecks.radiusSquared(TURRET_RANGE); + int candidateCount = turretTargetIndex.queryRadius(t.x, t.y, TURRET_RANGE); + for (int candidate = 0; candidate < candidateCount; candidate++) { + BaseCircleData c = circles.get(turretTargetIndex.candidateAt(candidate)); + lastTurretTargetCandidateChecks++; + float d2 = RangeChecks.distanceSquared(t.x, t.y, c.circle.x, c.circle.y); + if (d2 < range2 && d2 < best) { + target = c; + best = d2; + } + } + if (target == null) continue; + t.lastShot = now; + host.onTurretShot(t, target, now); + } + } + + int lastTurretTargetCandidateChecksForTests() { + return lastTurretTargetCandidateChecks; + } + + public void resetForNewRun() { + shieldActive = false; + activeShieldDuration = 0f; + dashIFramesUntil = 0L; + lastFreezeCastTime = 0L; + activeFreezeDuration = 0f; + activeEffects.clear(); + activeTurrets.clear(); + for (AbilityKind kind : ABILITY_KINDS) { + lastActivationTimes.put(kind, 0L); + } + } + + + public long remainingCooldownMs(String ability, long now) { + Optional kind = AbilityKind.fromPersistedId(ability); + return kind.isPresent() ? remainingCooldownMs(kind.get(), now) : 0L; + } + + public long remainingCooldownMs(AbilityKind ability, long now) { + if (ability == null) return 0L; + return Math.max(0L, getCooldown(ability) - (now - lastActivationTime(ability))); + } + + public boolean isShieldActive(long now) { + return shieldActive; + } + + public boolean isDashInvulnerable(long now) { + return now < dashIFramesUntil; + } + + public boolean isFreezeZoneActive(long now) { + return activeFreezeDuration > 0f; + } + + public Array getActiveEffects() { + return activeEffects; + } + + public Array getActiveTurrets() { + return activeTurrets; + } +} diff --git a/core/src/main/java/ru/project/tower/abilities/PlayerAbilities.java b/core/src/main/java/ru/project/tower/abilities/PlayerAbilities.java new file mode 100644 index 0000000..4e8a4f2 --- /dev/null +++ b/core/src/main/java/ru/project/tower/abilities/PlayerAbilities.java @@ -0,0 +1,170 @@ +package ru.project.tower.abilities; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Preferences; +import com.badlogic.gdx.utils.Array; +import java.util.EnumMap; +import java.util.Optional; +import ru.project.tower.DebugLog; + + + + +public class PlayerAbilities { + private static final AbilityKind[] ABILITY_KINDS = AbilityKind.values(); + + private final EnumMap ownedAbilities = new EnumMap<>(AbilityKind.class); + + private final Preferences preferences; + + + + + public PlayerAbilities(Preferences preferences) { + try { + DebugLog.log("PlayerAbilities", "Initializing PlayerAbilities"); + this.preferences = preferences; + DebugLog.log("PlayerAbilities", "Got preferences"); + + for (AbilityKind kind : ABILITY_KINDS) { + ownedAbilities.put( + kind, preferences.getBoolean(kind.preferenceKey(), kind.defaultUnlocked())); + } + + logLoadedAbilities(); + } catch (Exception e) { + Gdx.app.error("PlayerAbilities", "Error in constructor: ", e); + throw e; + } + } + + private void logLoadedAbilities() { + if (DebugLog.DEBUG) { + DebugLog.log( + "PlayerAbilities", + "Loaded abilities - Freeze: " + + hasAbility(AbilityKind.FREEZE) + + ", Explosion: " + + hasAbility(AbilityKind.EXPLOSION) + + ", Shield: " + + hasAbility(AbilityKind.SHIELD) + + ", Impulse: " + + hasAbility(AbilityKind.IMPULSE) + + ", Dash: " + + hasAbility(AbilityKind.DASH) + + ", Pull: " + + hasAbility(AbilityKind.PULL) + + ", Turret: " + + hasAbility(AbilityKind.TURRET)); + } + } + + + + + + public Array getPurchasedAbilities() { + try { + Array abilities = new Array<>(); + + for (AbilityKind kind : ABILITY_KINDS) { + if (hasAbility(kind)) abilities.add(kind); + } + + if (DebugLog.DEBUG) { + DebugLog.log( + "PlayerAbilities", "Getting purchased abilities, count: " + abilities.size); + for (AbilityKind ability : abilities) { + DebugLog.log("PlayerAbilities", "Available ability: " + ability.persistedId()); + } + } + + return abilities; + } catch (Exception e) { + Gdx.app.error("PlayerAbilities", "Error in getPurchasedAbilities: ", e); + throw e; + } + } + + public int purchasedAbilityCount() { + int count = 0; + for (AbilityKind kind : ABILITY_KINDS) { + if (hasAbility(kind)) count++; + } + return count; + } + + public Array getPurchasedAbilityIds() { + Array abilityIds = new Array<>(); + for (AbilityKind kind : ABILITY_KINDS) { + if (hasAbility(kind)) abilityIds.add(kind.persistedId()); + } + return abilityIds; + } + + + + + public boolean hasAbility(AbilityKind abilityType) { + return abilityType != null && Boolean.TRUE.equals(ownedAbilities.get(abilityType)); + } + + public boolean hasAbility(String abilityType) { + Optional kind = AbilityKind.fromPersistedId(abilityType); + return kind.isPresent() && hasAbility(kind.get()); + } + + + + + public void purchaseAbility(AbilityKind abilityType) { + if (abilityType == null) return; + ownedAbilities.put(abilityType, true); + saveData(); + } + + public boolean canUnlock(AbilityKind abilityType, int maxWaveReached) { + if (abilityType == null) return false; + return maxWaveReached >= abilityType.unlockWaveRequirement(); + } + + public boolean purchaseAbilityIfUnlocked(AbilityKind abilityType, int maxWaveReached) { + if (!canUnlock(abilityType, maxWaveReached)) { + return false; + } + purchaseAbility(abilityType); + return true; + } + + public void purchaseAbility(String abilityType) { + Optional kind = AbilityKind.fromPersistedId(abilityType); + if (kind.isPresent()) { + purchaseAbility(kind.get()); + } + } + + + + + private void saveData() { + for (AbilityKind kind : ABILITY_KINDS) { + preferences.putBoolean(kind.preferenceKey(), hasAbility(kind)); + } + preferences.flush(); + } + + + + + + + + + + public void clearAll() { + for (AbilityKind kind : ABILITY_KINDS) { + ownedAbilities.put(kind, false); + } + saveData(); + } +} diff --git a/core/src/main/java/ru/project/tower/abilities/Turret.java b/core/src/main/java/ru/project/tower/abilities/Turret.java new file mode 100644 index 0000000..39215e2 --- /dev/null +++ b/core/src/main/java/ru/project/tower/abilities/Turret.java @@ -0,0 +1,23 @@ +package ru.project.tower.abilities; + + + + + + + + +public final class Turret { + public float x, y; + public long spawnedAt; + public long lastShot; + public int damage; + + public Turret(float x, float y, long now, int damage) { + this.x = x; + this.y = y; + this.spawnedAt = now; + this.lastShot = now; + this.damage = damage; + } +} diff --git a/core/src/main/java/ru/project/tower/balance/BalanceEffectRegistry.java b/core/src/main/java/ru/project/tower/balance/BalanceEffectRegistry.java new file mode 100644 index 0000000..07e1e96 --- /dev/null +++ b/core/src/main/java/ru/project/tower/balance/BalanceEffectRegistry.java @@ -0,0 +1,147 @@ +package ru.project.tower.balance; + +import java.util.EnumMap; +import java.util.Map; + +public final class BalanceEffectRegistry { + private static final float DEFAULT_RATING_FLOOR = 0f; + private static final BalanceEffectSpec[] EFFECTS = { + effect( + "attack.core_damage", + PowerAxis.DAMAGE, + BalanceEffectSpec.Owner.SHOP, + "Урон ядра", + "Базовая сила попадания.", + 95f), + effect( + "attack.cadence", + PowerAxis.CADENCE, + BalanceEffectSpec.Owner.SHOP, + "Скорострельность", + "Темп стрельбы с общим floor по cooldown.", + 90f), + effect( + "attack.crit", + PowerAxis.CRIT, + BalanceEffectSpec.Owner.SHOP, + "Критический контур", + "Шанс и сила критических попаданий.", + 75f), + effect( + "attack.pierce", + PowerAxis.PIERCE, + BalanceEffectSpec.Owner.CARD, + "Пробитие", + "Зачистка плотных волн без прямого boss-DPS.", + 70f), + effect( + "attack.aoe", + PowerAxis.AOE, + BalanceEffectSpec.Owner.CARD, + "Осколочный урон", + "Площадной урон по скоплениям.", + 70f), + effect( + "attack.controlled", + PowerAxis.CONTROL, + BalanceEffectSpec.Owner.ABILITY, + "Эксплуатация контроля", + "Сила по замедленным, стянутым и замороженным целям.", + 70f), + effect( + "attack.bossing", + PowerAxis.BOSSING, + BalanceEffectSpec.Owner.SHOP, + "Анти-босс модуль", + "Отдельная ось урона по элитам и боссам.", + 65f), + effect( + "defense.health", + PowerAxis.HEALTH, + BalanceEffectSpec.Owner.SHOP, + "Запас корпуса", + "Максимальное здоровье и effective HP.", + 95f), + effect( + "defense.regen", + PowerAxis.REGEN, + BalanceEffectSpec.Owner.SHOP, + "Ремонтный цикл", + "Восстановление в длинном забеге.", + 80f), + effect( + "defense.shield", + PowerAxis.SHIELD, + BalanceEffectSpec.Owner.ABILITY, + "Щитовой контур", + "Временное здоровье и щитовые окна.", + 80f), + effect( + "defense.armor", + PowerAxis.ARMOR, + BalanceEffectSpec.Owner.SHOP, + "Броня", + "Снижение контактного и снарядного урона.", + 75f), + effect( + "bonus.economy", + PowerAxis.ECONOMY, + BalanceEffectSpec.Owner.SHOP, + "Экономика", + "Доход, скидки и окупаемость покупок.", + 70f), + effect( + "bonus.utility", + PowerAxis.UTILITY, + BalanceEffectSpec.Owner.BONUS, + "Утилити", + "Радиус подбора, длительность и качество бонусов.", + 70f), + effect( + "ability.scaling", + PowerAxis.ABILITY, + BalanceEffectSpec.Owner.TALENT, + "Мастерство способностей", + "Cooldown и сила активных способностей.", + 70f) + }; + private static final EnumMap BY_AXIS = + new EnumMap<>(PowerAxis.class); + + static { + for (BalanceEffectSpec effect : EFFECTS) { + BY_AXIS.put(effect.axis(), effect); + } + } + + private BalanceEffectRegistry() {} + + public static BalanceEffectSpec[] all() { + BalanceEffectSpec[] copy = new BalanceEffectSpec[EFFECTS.length]; + System.arraycopy(EFFECTS, 0, copy, 0, EFFECTS.length); + return copy; + } + + public static BalanceEffectSpec forAxis(PowerAxis axis) { + BalanceEffectSpec effect = BY_AXIS.get(axis); + if (effect == null) { + throw new IllegalArgumentException("No balance effect registered for axis: " + axis); + } + return effect; + } + + public static Map byAxis() { + return new EnumMap<>(BY_AXIS); + } + + private static BalanceEffectSpec effect( + String id, + PowerAxis axis, + BalanceEffectSpec.Owner owner, + String gameName, + String description, + float ratingCap) { + return new BalanceEffectSpec( + id, axis, owner, gameName, description, DEFAULT_RATING_FLOOR, ratingCap); + } +} diff --git a/core/src/main/java/ru/project/tower/balance/BalanceEffectSpec.java b/core/src/main/java/ru/project/tower/balance/BalanceEffectSpec.java new file mode 100644 index 0000000..b58a0b6 --- /dev/null +++ b/core/src/main/java/ru/project/tower/balance/BalanceEffectSpec.java @@ -0,0 +1,71 @@ +package ru.project.tower.balance; + +import java.util.Objects; + +public final class BalanceEffectSpec { + public enum Owner { + SHOP, + CARD, + TALENT, + BONUS, + ABILITY, + SIMULATION + } + + private final String id; + private final PowerAxis axis; + private final Owner owner; + private final String gameName; + private final String description; + private final Float ratingFloor; + private final Float ratingCap; + + BalanceEffectSpec( + String id, + PowerAxis axis, + Owner owner, + String gameName, + String description, + Float ratingFloor, + Float ratingCap) { + this.id = Objects.requireNonNull(id, "id"); + this.axis = Objects.requireNonNull(axis, "axis"); + this.owner = Objects.requireNonNull(owner, "owner"); + this.gameName = Objects.requireNonNull(gameName, "gameName"); + this.description = Objects.requireNonNull(description, "description"); + this.ratingFloor = ratingFloor; + this.ratingCap = ratingCap; + } + + public String id() { + return id; + } + + public PowerAxis axis() { + return axis; + } + + public Owner owner() { + return owner; + } + + public String gameName() { + return gameName; + } + + public String description() { + return description; + } + + public Float ratingFloor() { + return ratingFloor; + } + + public Float ratingCap() { + return ratingCap; + } + + public boolean hasLimit() { + return ratingFloor != null || ratingCap != null; + } +} diff --git a/core/src/main/java/ru/project/tower/balance/BalanceReportExporter.java b/core/src/main/java/ru/project/tower/balance/BalanceReportExporter.java new file mode 100644 index 0000000..62c1559 --- /dev/null +++ b/core/src/main/java/ru/project/tower/balance/BalanceReportExporter.java @@ -0,0 +1,49 @@ +package ru.project.tower.balance; + +import java.util.List; +import java.util.Locale; + +public final class BalanceReportExporter { + private BalanceReportExporter() {} + + public static String export(String reportId, List reports) { + StringBuilder out = new StringBuilder(); + out.append("balance-report ").append(reportId == null ? "unnamed" : reportId).append('\n'); + out.append( + "strategy,wave,firstBoss,shop,moneyEarned,moneySpent,abilities,synergies,bonusSpawned,bonusCollected,damage,cooldownMs\n"); + if (reports == null) { + return out.toString(); + } + for (SimulationReport report : reports) { + out.append(report.strategyId()) + .append(',') + .append(report.waveReached()) + .append(',') + .append(format(report.firstBossKillSeconds())) + .append(',') + .append(report.shopPurchases()) + .append(',') + .append(report.moneyEarned()) + .append(',') + .append(report.moneySpent()) + .append(',') + .append(report.abilityUses()) + .append(',') + .append(report.triggeredSynergies()) + .append(',') + .append(report.bonusSpawned()) + .append(',') + .append(report.bonusCollected()) + .append(',') + .append(format(report.effectiveDamage())) + .append(',') + .append(format(report.effectiveShotCooldownMs())) + .append('\n'); + } + return out.toString(); + } + + private static String format(float value) { + return String.format(Locale.ROOT, "%.2f", value); + } +} diff --git a/core/src/main/java/ru/project/tower/balance/BalanceRouteReport.java b/core/src/main/java/ru/project/tower/balance/BalanceRouteReport.java new file mode 100644 index 0000000..745e459 --- /dev/null +++ b/core/src/main/java/ru/project/tower/balance/BalanceRouteReport.java @@ -0,0 +1,197 @@ +package ru.project.tower.balance; + +import java.util.EnumMap; +import java.util.Map; + +public final class BalanceRouteReport { + private final String strategyId; + private final int waveReached; + private final float firstBossKillSeconds; + private final int shopPurchases; + private final int abilityUses; + private final int selectedDamageCards; + private final int selectedFireRateCards; + private final int peakVisibleBonusBalls; + private final float effectiveDamage; + private final float effectiveShotCooldownMs; + private final EnumMap effectivePowerByAxis; + private final int moneyEarned; + private final int moneySpent; + private final int economyPaybackWave; + + BalanceRouteReport( + String strategyId, + int waveReached, + float firstBossKillSeconds, + int shopPurchases, + int abilityUses, + int selectedDamageCards, + int selectedFireRateCards, + int peakVisibleBonusBalls, + float effectiveDamage, + float effectiveShotCooldownMs) { + this( + strategyId, + waveReached, + firstBossKillSeconds, + shopPurchases, + abilityUses, + selectedDamageCards, + selectedFireRateCards, + peakVisibleBonusBalls, + effectiveDamage, + effectiveShotCooldownMs, + emptyAxes(), + 0, + 0, + 0); + } + + BalanceRouteReport( + String strategyId, + int waveReached, + float firstBossKillSeconds, + int shopPurchases, + int abilityUses, + int selectedDamageCards, + int selectedFireRateCards, + int peakVisibleBonusBalls, + float effectiveDamage, + float effectiveShotCooldownMs, + Map effectivePowerByAxis) { + this( + strategyId, + waveReached, + firstBossKillSeconds, + shopPurchases, + abilityUses, + selectedDamageCards, + selectedFireRateCards, + peakVisibleBonusBalls, + effectiveDamage, + effectiveShotCooldownMs, + effectivePowerByAxis, + 0, + 0, + 0); + } + + BalanceRouteReport( + String strategyId, + int waveReached, + float firstBossKillSeconds, + int shopPurchases, + int abilityUses, + int selectedDamageCards, + int selectedFireRateCards, + int peakVisibleBonusBalls, + float effectiveDamage, + float effectiveShotCooldownMs, + Map effectivePowerByAxis, + int moneyEarned, + int moneySpent, + int economyPaybackWave) { + this.strategyId = strategyId; + this.waveReached = waveReached; + this.firstBossKillSeconds = firstBossKillSeconds; + this.shopPurchases = shopPurchases; + this.abilityUses = abilityUses; + this.selectedDamageCards = selectedDamageCards; + this.selectedFireRateCards = selectedFireRateCards; + this.peakVisibleBonusBalls = peakVisibleBonusBalls; + this.effectiveDamage = effectiveDamage; + this.effectiveShotCooldownMs = effectiveShotCooldownMs; + this.effectivePowerByAxis = completeAxes(effectivePowerByAxis); + this.moneyEarned = moneyEarned; + this.moneySpent = moneySpent; + this.economyPaybackWave = economyPaybackWave; + } + + public String strategyId() { + return strategyId; + } + + public int waveReached() { + return waveReached; + } + + public float firstBossKillSeconds() { + return firstBossKillSeconds; + } + + public int shopPurchases() { + return shopPurchases; + } + + public int abilityUses() { + return abilityUses; + } + + public int selectedDamageCards() { + return selectedDamageCards; + } + + public int selectedFireRateCards() { + return selectedFireRateCards; + } + + public int peakVisibleBonusBalls() { + return peakVisibleBonusBalls; + } + + public float effectiveDamage() { + return effectiveDamage; + } + + public float effectiveShotCooldownMs() { + return effectiveShotCooldownMs; + } + + public Map effectivePowerByAxis() { + return new EnumMap<>(effectivePowerByAxis); + } + + public int moneyEarned() { + return moneyEarned; + } + + public int moneySpent() { + return moneySpent; + } + + public int economyPaybackWave() { + return economyPaybackWave; + } + + public float defensePower() { + return value(PowerAxis.HEALTH) + + value(PowerAxis.REGEN) + + value(PowerAxis.SHIELD) + + value(PowerAxis.ARMOR); + } + + public float utilityPower() { + return value(PowerAxis.ECONOMY) + value(PowerAxis.UTILITY) + value(PowerAxis.ABILITY); + } + + private float value(PowerAxis axis) { + Float value = effectivePowerByAxis.get(axis); + return value == null ? 0f : value; + } + + private static EnumMap emptyAxes() { + EnumMap axes = new EnumMap<>(PowerAxis.class); + for (PowerAxis axis : PowerAxis.values()) { + axes.put(axis, 0f); + } + return axes; + } + + private static EnumMap completeAxes(Map source) { + EnumMap axes = emptyAxes(); + if (source != null) { + axes.putAll(source); + } + return axes; + } +} diff --git a/core/src/main/java/ru/project/tower/balance/BalanceRouteSimulator.java b/core/src/main/java/ru/project/tower/balance/BalanceRouteSimulator.java new file mode 100644 index 0000000..c532697 --- /dev/null +++ b/core/src/main/java/ru/project/tower/balance/BalanceRouteSimulator.java @@ -0,0 +1,581 @@ +package ru.project.tower.balance; + +import java.util.EnumMap; +import ru.project.tower.entities.circles.BonusBallData; +import ru.project.tower.player.PlayerCombatState; +import ru.project.tower.upgrades.UpgradeKind; + +public final class BalanceRouteSimulator { + private static final int MAX_AUDIT_WAVE = 120; + private static final int FIRST_BOSS_WAVE = 20; + + public BalanceRouteReport runDamageFireRateNoShopNoAbility(long seed) { + RouteState state = new RouteState("damage-fire-rate:no-shop:no-ability", 0, 0); + for (int wave = 1; wave <= MAX_AUDIT_WAVE; wave++) { + state.waveReached = wave; + state.applyExploitCardIfDue(wave); + state.observeBonusDensity(wave); + + if (wave == FIRST_BOSS_WAVE) { + state.firstBossKillSeconds = + bossKillSeconds(EndlessBalanceSpec.bossHealthForWave(wave), state, wave); + } + + if (isOverwhelmed(state, wave, false)) { + break; + } + } + return state.report(); + } + + public BalanceRouteReport runFreshNoMenuTalentShopCardAbilityRoute(long seed) { + RouteState state = new RouteState("fresh:no-menu-talent:shop-card-ability", 0, 0); + for (int wave = 1; wave <= MAX_AUDIT_WAVE; wave++) { + state.waveReached = wave; + state.applyFreshNoMenuTalentCardIfDue(wave); + state.applyFreshNoMenuTalentShopIfDue(wave); + state.applyFreshNoMenuTalentAbilityIfDue(wave); + state.observeBonusDensity(wave); + + if (isFreshNoMenuTalentOverwhelmed(state, wave)) { + break; + } + } + return state.report(); + } + + public BalanceRouteReport runBalancedShopAndAbilityRoute(long seed) { + RouteState state = new RouteState("balanced:shop:ability", 0, 0); + for (int wave = 1; wave <= MAX_AUDIT_WAVE; wave++) { + state.waveReached = wave; + state.applyBalancedCardIfDue(wave); + state.applyBalancedShopIfDue(wave); + state.applyAbilityIfDue(wave); + state.observeBonusDensity(wave); + + if (wave == FIRST_BOSS_WAVE) { + state.firstBossKillSeconds = + bossKillSeconds(EndlessBalanceSpec.bossHealthForWave(wave), state, wave); + } + + if (isOverwhelmed(state, wave, true)) { + break; + } + } + return state.report(); + } + + public BalanceRouteReport runSustainControlShopAndAbilityRoute(long seed) { + RouteState state = new RouteState("sustain-control:shop:ability", 0, 0); + for (int wave = 1; wave <= MAX_AUDIT_WAVE; wave++) { + state.waveReached = wave; + state.applySustainControlCardIfDue(wave); + state.applySustainControlShopIfDue(wave); + state.applyAbilityIfDue(wave); + state.observeBonusDensity(wave); + + if (wave == FIRST_BOSS_WAVE) { + state.firstBossKillSeconds = + bossKillSeconds(EndlessBalanceSpec.bossHealthForWave(wave), state, wave); + } + + if (isOverwhelmed(state, wave, true)) { + break; + } + } + return state.report(); + } + + public BalanceRouteReport runMixedNoShopNoAbilityRoute(long seed) { + RouteState state = new RouteState("mixed:no-shop:no-ability", 0, 0); + for (int wave = 1; wave <= MAX_AUDIT_WAVE; wave++) { + state.waveReached = wave; + state.applyBalancedCardIfDue(wave); + state.observeBonusDensity(wave); + + if (wave == FIRST_BOSS_WAVE) { + state.firstBossKillSeconds = + bossKillSeconds(EndlessBalanceSpec.bossHealthForWave(wave), state, wave); + } + + if (isOverwhelmed(state, wave, false)) { + break; + } + } + return state.report(); + } + + public BalanceRouteReport runAttackSingleTargetShopRoute(long seed) { + RouteState state = new RouteState("attack:single-target-shop", 0, 0); + for (int wave = 1; wave <= MAX_AUDIT_WAVE; wave++) { + state.waveReached = wave; + state.applySingleTargetShopIfDue(wave); + state.applyBalancedCardIfDue(wave); + state.observeBonusDensity(wave); + if (wave == FIRST_BOSS_WAVE) { + state.firstBossKillSeconds = + bossKillSeconds(EndlessBalanceSpec.bossHealthForWave(wave), state, wave); + } + if (isOverwhelmed(state, wave, true)) break; + } + return state.report(); + } + + public BalanceRouteReport runAttackSwarmShopRoute(long seed) { + RouteState state = new RouteState("attack:swarm-shop", 0, 0); + for (int wave = 1; wave <= MAX_AUDIT_WAVE; wave++) { + state.waveReached = wave; + state.applySwarmShopIfDue(wave); + state.applyBalancedCardIfDue(wave); + state.observeBonusDensity(wave); + if (wave == FIRST_BOSS_WAVE) { + state.firstBossKillSeconds = + bossKillSeconds(EndlessBalanceSpec.bossHealthForWave(wave), state, wave); + } + if (isOverwhelmed(state, wave, true)) break; + } + return state.report(); + } + + public BalanceRouteReport runAttackBossShopRoute(long seed) { + RouteState state = new RouteState("attack:boss-shop", 0, 0); + for (int wave = 1; wave <= MAX_AUDIT_WAVE; wave++) { + state.waveReached = wave; + state.applyBossShopIfDue(wave); + state.applyBalancedCardIfDue(wave); + state.observeBonusDensity(wave); + if (wave == FIRST_BOSS_WAVE) { + state.firstBossKillSeconds = + bossKillSeconds(EndlessBalanceSpec.bossHealthForWave(wave), state, wave); + } + if (isOverwhelmed(state, wave, true)) break; + } + return state.report(); + } + + public BalanceRouteReport runDefenseShopRoute(long seed) { + RouteState state = new RouteState("defense:shop", 0, 0); + for (int wave = 1; wave <= MAX_AUDIT_WAVE; wave++) { + state.waveReached = wave; + state.applyDefenseShopIfDue(wave); + state.applySustainControlCardIfDue(wave); + state.applyAbilityIfDue(wave); + state.observeBonusDensity(wave); + if (wave == FIRST_BOSS_WAVE) { + state.firstBossKillSeconds = + bossKillSeconds(EndlessBalanceSpec.bossHealthForWave(wave), state, wave); + } + if (isOverwhelmed(state, wave, true)) break; + } + return state.report(); + } + + public BalanceRouteReport runUtilityEconomyShopRoute(long seed) { + RouteState state = new RouteState("utility:economy-shop", 0, 0); + for (int wave = 1; wave <= MAX_AUDIT_WAVE; wave++) { + state.waveReached = wave; + state.applyUtilityShopIfDue(wave); + state.applyBalancedCardIfDue(wave); + state.observeBonusDensity(wave); + if (wave == FIRST_BOSS_WAVE) { + state.firstBossKillSeconds = + bossKillSeconds(EndlessBalanceSpec.bossHealthForWave(wave), state, wave); + } + if (isOverwhelmed(state, wave, true)) break; + } + return state.report(); + } + + private static boolean isOverwhelmed(RouteState state, int wave, boolean balancedRoute) { + float routeSupport = + balancedRoute ? state.shopPurchases * 2.15f + state.abilityUses * 0.35f : 0f; + float requiredDps = + 4.5f + wave * 0.85f + (float) Math.pow(wave, 1.22f) * 0.08f - routeSupport; + return wave > FIRST_BOSS_WAVE && state.effectiveDps(wave) < requiredDps; + } + + private static boolean isFreshNoMenuTalentOverwhelmed(RouteState state, int wave) { + float routeSupport = + Math.min(state.shopPurchases, 5) * 0.75f + Math.min(state.abilityUses, 2) * 0.35f; + float requiredDps = + 1.75f + + wave * 0.42f + + (float) Math.pow(wave, 1.18f) * 0.10f + + Math.max(0, wave - 11) * 2.00f + - routeSupport; + return wave >= 3 && state.effectiveDps(wave) < requiredDps; + } + + private static float bossKillSeconds(float bossHealth, RouteState state, int wave) { + return bossHealth / Math.max(0.01f, state.effectiveDps(wave)); + } + + private static final class RouteState { + private final String strategyId; + private int waveReached; + private float firstBossKillSeconds; + private int shopPurchases; + private int abilityUses; + private int selectedDamageCards; + private int selectedFireRateCards; + private int selectedMixedCards; + private int peakVisibleBonusBalls; + private float baseDamage = 1f; + private float runDamageBonus; + private float shotCooldownMs = PlayerCombatState.DEFAULT_SHOT_COOLDOWN_MS; + private float runCooldownMultiplier = 1f; + private float critChance = PlayerCombatState.DEFAULT_BASE_CRIT_CHANCE; + private float critMultiplier = PlayerCombatState.DEFAULT_BASE_CRIT_MULTIPLIER; + private float sustainRating; + private float pierceRating; + private float aoeRating; + private float bossingRating; + private float armorRating; + private float shieldRating; + private float economyRating; + private float utilityRating; + private int moneyEarned; + private int moneySpent; + private int economyPaybackWave; + + private RouteState(String strategyId, int shopPurchases, int abilityUses) { + this.strategyId = strategyId; + this.shopPurchases = shopPurchases; + this.abilityUses = abilityUses; + } + + private void applyExploitCardIfDue(int wave) { + if (wave % 3 != 0) { + return; + } + if (selectedDamageCards <= selectedFireRateCards) { + applyDamageCard(); + } else { + applyFireRateCard(0.9f); + } + } + + private void applyBalancedCardIfDue(int wave) { + if (wave % 3 != 0) { + return; + } + int lane = selectedMixedCards % 4; + if (lane == 0) { + applyDamageCard(); + } else if (lane == 1) { + applyFireRateCard(0.92f); + } else if (lane == 2) { + critChance += 0.035f; + } else { + sustainRating += 1.6f; + } + selectedMixedCards++; + } + + private void applySustainControlCardIfDue(int wave) { + if (wave % 3 != 0) { + return; + } + int lane = selectedMixedCards % 4; + if (lane == 0) { + sustainRating += 2.8f; + } else if (lane == 1) { + critChance += 0.04f; + } else if (lane == 2) { + applyFireRateCard(0.94f); + } else { + applyDamageCard(); + } + selectedMixedCards++; + } + + private void applyFreshNoMenuTalentCardIfDue(int wave) { + if (wave < 2 || wave % 3 != 2) { + return; + } + int lane = selectedMixedCards % 3; + if (lane == 0) { + applyDamageCard(); + } else if (lane == 1) { + applyFireRateCard(0.94f); + } else { + sustainRating += 0.9f; + } + selectedMixedCards++; + } + + private void applyDamageCard() { + if (selectedDamageCards >= UpgradeKind.DAMAGE.maxStacks()) { + applyFireRateCard(0.9f); + return; + } + selectedDamageCards++; + runDamageBonus += + Math.max( + 1f, + baseDamage + * EndlessBalanceSpec.upgradeCardDamagePercent( + selectedDamageCards - 1) + / 100f); + } + + private void applyFireRateCard(float ignoredMultiplier) { + if (selectedFireRateCards >= UpgradeKind.FIRE_RATE.maxStacks()) { + return; + } + float multiplier = + EndlessBalanceSpec.upgradeCardFireRateMultiplier(selectedFireRateCards); + selectedFireRateCards++; + runCooldownMultiplier *= multiplier; + } + + private void applyBalancedShopIfDue(int wave) { + if (wave < 4 || wave % 2 != 0) { + return; + } + int lane = shopPurchases % 5; + if (lane == 0) { + baseDamage += 1.4f; + } else if (lane == 1) { + shotCooldownMs = Math.max(260f, shotCooldownMs - 38f); + } else if (lane == 2) { + critChance += 0.04f; + } else if (lane == 3) { + critMultiplier += 0.09f; + } else { + sustainRating += 3.2f; + } + shopPurchases++; + } + + private void applySustainControlShopIfDue(int wave) { + if (wave < 4 || wave % 2 != 0) { + return; + } + int lane = shopPurchases % 5; + if (lane == 0) { + sustainRating += 4.2f; + } else if (lane == 1) { + shotCooldownMs = Math.max(300f, shotCooldownMs - 30f); + } else if (lane == 2) { + critChance += 0.035f; + } else if (lane == 3) { + baseDamage += 1.0f; + } else { + critMultiplier += 0.07f; + } + shopPurchases++; + } + + private void applyFreshNoMenuTalentShopIfDue(int wave) { + if (wave < 2 || wave % 2 != 0) { + return; + } + int lane = shopPurchases % 4; + if (lane == 0) { + baseDamage += 0.35f; + } else if (lane == 1) { + shotCooldownMs = Math.max(420f, shotCooldownMs - 18f); + } else if (lane == 2) { + sustainRating += 0.8f; + } else { + critChance += 0.012f; + } + shopPurchases++; + } + + private void applySingleTargetShopIfDue(int wave) { + if (wave < 4 || wave % 2 != 0) return; + int lane = shopPurchases % 5; + if (lane == 0) { + baseDamage += 1.8f; + } else if (lane == 1) { + critChance += 0.055f; + } else if (lane == 2) { + critMultiplier += 0.12f; + } else if (lane == 3) { + bossingRating += 1.0f; + } else { + shotCooldownMs = Math.max(280f, shotCooldownMs - 24f); + } + shopPurchases++; + } + + private void applySwarmShopIfDue(int wave) { + if (wave < 4 || wave % 2 != 0) return; + int lane = shopPurchases % 5; + if (lane == 0) { + pierceRating += 3.4f; + } else if (lane == 1) { + aoeRating += 4.2f; + } else if (lane == 2) { + baseDamage += 0.8f; + } else if (lane == 3) { + shotCooldownMs = Math.max(310f, shotCooldownMs - 28f); + } else { + utilityRating += 0.8f; + } + shopPurchases++; + } + + private void applyBossShopIfDue(int wave) { + if (wave < 4 || wave % 2 != 0) return; + int lane = shopPurchases % 5; + if (lane == 0) { + bossingRating += 4.5f; + } else if (lane == 1) { + critChance += 0.045f; + } else if (lane == 2) { + critMultiplier += 0.10f; + } else if (lane == 3) { + baseDamage += 1.1f; + } else { + shotCooldownMs = Math.max(300f, shotCooldownMs - 18f); + } + shopPurchases++; + } + + private void applyDefenseShopIfDue(int wave) { + if (wave < 4 || wave % 2 != 0) return; + int lane = shopPurchases % 5; + if (lane == 0) { + sustainRating += 5.0f; + } else if (lane == 1) { + armorRating += 4.0f; + } else if (lane == 2) { + shieldRating += 3.5f; + } else if (lane == 3) { + aoeRating += 0.8f; + } else { + baseDamage += 0.7f; + } + shopPurchases++; + } + + private void applyUtilityShopIfDue(int wave) { + moneyEarned += 8 + wave / 2; + if (wave < 4 || wave % 2 != 0) return; + int cost = Math.max(3, 7 - Math.min(3, shopPurchases / 2)); + moneySpent += cost; + if (economyPaybackWave == 0 && moneyEarned > moneySpent) { + economyPaybackWave = wave; + } + int lane = shopPurchases % 5; + if (lane == 0) { + economyRating += 3.8f; + } else if (lane == 1) { + utilityRating += 4.0f; + } else if (lane == 2) { + peakVisibleBonusBalls = Math.max(peakVisibleBonusBalls, 2); + } else if (lane == 3) { + shotCooldownMs = Math.max(330f, shotCooldownMs - 18f); + } else { + baseDamage += 0.6f; + } + shopPurchases++; + } + + private void applyAbilityIfDue(int wave) { + if (wave >= 12 && wave % 5 == 0) { + abilityUses++; + sustainRating += 0.55f; + } + } + + private void applyFreshNoMenuTalentAbilityIfDue(int wave) { + if (wave >= 6 && wave % 4 == 2) { + abilityUses++; + sustainRating += 0.45f; + } + } + + private void observeBonusDensity(int wave) { + int visibleBonusBalls = expectedVisibleBonusBalls(wave); + peakVisibleBonusBalls = Math.max(peakVisibleBonusBalls, visibleBonusBalls); + } + + private float effectiveDps(int wave) { + int bonusStacks = expectedVisibleBonusBalls(wave); + float damageMultiplier = + EndlessBalanceSpec.activeBonusMultiplier( + BonusBallData.BonusType.DAMAGE, bonusStacks / 3); + float cooldownMultiplier = + EndlessBalanceSpec.activeBonusMultiplier( + BonusBallData.BonusType.FIRE_RATE, bonusStacks / 3); + float averageCritMultiplier = + 1f + + Math.min(EndlessBalanceSpec.CRIT_CHANCE_CAP, critChance) + * (critMultiplier - 1f); + float sustainMultiplier = 1f + Math.min(0.45f, sustainRating * 0.018f); + float shapeMultiplier = + 1f + + Math.min(0.25f, pierceRating * 0.010f + aoeRating * 0.008f) + + Math.min(0.18f, bossingRating * 0.010f); + float damage = (baseDamage + runDamageBonus) * damageMultiplier; + float cooldown = + Math.max(90f, shotCooldownMs * runCooldownMultiplier * cooldownMultiplier); + return damage + * averageCritMultiplier + * sustainMultiplier + * shapeMultiplier + * 1000f + / cooldown; + } + + private int expectedVisibleBonusBalls(int wave) { + float chance = + Math.min( + 0.2f, + EndlessBalanceSpec.bonusDropBudgetThroughWave(wave) + / (float) Math.max(8, wave + 20)); + int expectedRolls = + Math.round(EndlessBalanceSpec.waveTuning(wave).enemiesPerWave() * chance); + int budgeted = Math.min(EndlessBalanceSpec.bonusDropBudgetForWave(wave), expectedRolls); + return Math.min(EndlessBalanceSpec.maxVisibleBonusBalls(), budgeted); + } + + private BalanceRouteReport report() { + float finalDamage = baseDamage + runDamageBonus; + float finalCooldown = Math.max(90f, shotCooldownMs * runCooldownMultiplier); + EnumMap axes = new EnumMap<>(PowerAxis.class); + for (PowerAxis axis : PowerAxis.values()) { + axes.put(axis, 0f); + } + axes.put(PowerAxis.DAMAGE, finalDamage); + axes.put(PowerAxis.CADENCE, 1000f / Math.max(1f, finalCooldown)); + axes.put(PowerAxis.CRIT, Math.max(0f, critChance * 100f + (critMultiplier - 1f) * 25f)); + axes.put(PowerAxis.PIERCE, selectedMixedCards * 0.75f + pierceRating); + axes.put( + PowerAxis.AOE, + selectedMixedCards * 0.60f + peakVisibleBonusBalls * 0.35f + aoeRating); + axes.put(PowerAxis.CONTROL, abilityUses * 1.4f + sustainRating * 0.25f); + axes.put( + PowerAxis.BOSSING, + finalDamage * 0.70f + axes.get(PowerAxis.CRIT) * 0.20f + bossingRating); + axes.put(PowerAxis.HEALTH, sustainRating); + axes.put(PowerAxis.REGEN, sustainRating * 0.70f); + axes.put(PowerAxis.SHIELD, abilityUses * 1.8f + shopPurchases * 0.15f + shieldRating); + axes.put(PowerAxis.ARMOR, sustainRating * 0.45f + armorRating); + axes.put(PowerAxis.ECONOMY, shopPurchases * 0.70f + economyRating); + axes.put( + PowerAxis.UTILITY, + peakVisibleBonusBalls * 1.2f + selectedMixedCards * 0.20f + utilityRating); + axes.put(PowerAxis.ABILITY, abilityUses * 2.1f); + return new BalanceRouteReport( + strategyId, + waveReached, + firstBossKillSeconds, + shopPurchases, + abilityUses, + selectedDamageCards, + selectedFireRateCards, + peakVisibleBonusBalls, + finalDamage, + finalCooldown, + axes, + moneyEarned, + moneySpent, + economyPaybackWave); + } + } +} diff --git a/core/src/main/java/ru/project/tower/balance/BalanceRouteTarget.java b/core/src/main/java/ru/project/tower/balance/BalanceRouteTarget.java new file mode 100644 index 0000000..6004a15 --- /dev/null +++ b/core/src/main/java/ru/project/tower/balance/BalanceRouteTarget.java @@ -0,0 +1,81 @@ +package ru.project.tower.balance; + +public final class BalanceRouteTarget { + private final String strategyId; + private final int minWaveReached; + private final int maxWaveReached; + private final float minFirstBossKillSeconds; + private final float maxFirstBossKillSeconds; + private final boolean usesPermanentMenuTalents; + private final boolean usesInRunShop; + private final boolean usesRunCards; + private final boolean usesAbilities; + private final String designGoal; + + public BalanceRouteTarget( + String strategyId, + int minWaveReached, + int maxWaveReached, + float minFirstBossKillSeconds, + float maxFirstBossKillSeconds, + boolean usesPermanentMenuTalents, + boolean usesInRunShop, + boolean usesRunCards, + boolean usesAbilities, + String designGoal) { + this.strategyId = strategyId; + this.minWaveReached = minWaveReached; + this.maxWaveReached = maxWaveReached; + this.minFirstBossKillSeconds = minFirstBossKillSeconds; + this.maxFirstBossKillSeconds = maxFirstBossKillSeconds; + this.usesPermanentMenuTalents = usesPermanentMenuTalents; + this.usesInRunShop = usesInRunShop; + this.usesRunCards = usesRunCards; + this.usesAbilities = usesAbilities; + this.designGoal = designGoal; + } + + public String strategyId() { + return strategyId; + } + + public int minWaveReached() { + return minWaveReached; + } + + public int maxWaveReached() { + return maxWaveReached; + } + + public float minFirstBossKillSeconds() { + return minFirstBossKillSeconds; + } + + public float maxFirstBossKillSeconds() { + return maxFirstBossKillSeconds; + } + + public boolean usesPermanentMenuTalents() { + return usesPermanentMenuTalents; + } + + public boolean usesInRunShop() { + return usesInRunShop; + } + + public boolean usesRunCards() { + return usesRunCards; + } + + public boolean usesAbilities() { + return usesAbilities; + } + + public String designGoal() { + return designGoal; + } + + public boolean containsWaveReached(int waveReached) { + return waveReached >= minWaveReached && waveReached <= maxWaveReached; + } +} diff --git a/core/src/main/java/ru/project/tower/balance/BalanceRuntimeHarness.java b/core/src/main/java/ru/project/tower/balance/BalanceRuntimeHarness.java new file mode 100644 index 0000000..c52c408 --- /dev/null +++ b/core/src/main/java/ru/project/tower/balance/BalanceRuntimeHarness.java @@ -0,0 +1,909 @@ +package ru.project.tower.balance; + +import com.badlogic.gdx.Preferences; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.math.Circle; +import com.badlogic.gdx.math.Rectangle; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.utils.Array; +import com.badlogic.gdx.utils.Pools; +import java.util.EnumMap; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import ru.project.tower.abilities.AbilityHost; +import ru.project.tower.abilities.AbilityKind; +import ru.project.tower.abilities.AbilitySystem; +import ru.project.tower.abilities.PlayerAbilities; +import ru.project.tower.abilities.Turret; +import ru.project.tower.entities.circles.BaseCircleData; +import ru.project.tower.entities.circles.BasicCircleData; +import ru.project.tower.entities.circles.BonusBallData; +import ru.project.tower.player.EffectiveCombatStats; +import ru.project.tower.player.PlayerCombatState; +import ru.project.tower.player.PlayerRunCombatCalculator; +import ru.project.tower.player.PlayerStats; +import ru.project.tower.support.SeededRandomSource; +import ru.project.tower.systems.BonusBallSystem; +import ru.project.tower.talents.TalentData; +import ru.project.tower.talents.TalentTree; +import ru.project.tower.upgrades.UpgradeHost; +import ru.project.tower.upgrades.UpgradeKind; +import ru.project.tower.upgrades.UpgradeSystem; +import ru.project.tower.upgrades.shop.ShopUpgradeHost; +import ru.project.tower.upgrades.shop.ShopUpgradeKind; +import ru.project.tower.upgrades.shop.ShopUpgradeSystem; +import ru.project.tower.waves.WaveTuning; + +public final class BalanceRuntimeHarness { + private static final int MAX_RUNTIME_WAVE = 140; + private static final int FIRST_BOSS_WAVE = EndlessBalanceSpec.BOSS_WAVE_INTERVAL; + private static final Rectangle PLAYER_SQUARE = new Rectangle(100f, 100f, 50f, 50f); + private static final BonusBallData.BonusType[] RUNTIME_BONUS_SEQUENCE = { + BonusBallData.BonusType.DAMAGE, + BonusBallData.BonusType.FIRE_RATE, + BonusBallData.BonusType.BULLET_SPEED, + BonusBallData.BonusType.CRIT_WINDOW, + BonusBallData.BonusType.PICKUP_MAGNET, + BonusBallData.BonusType.HEAL, + BonusBallData.BonusType.SHIELD_PULSE, + BonusBallData.BonusType.ABILITY_CHARGE, + BonusBallData.BonusType.COIN_BURST + }; + + public List run(long seed) { + return List.of( + simulate(seed, RuntimeRoute.fresh()), + simulate(seed, RuntimeRoute.exploit()), + simulate(seed, RuntimeRoute.balanced()), + simulate(seed, RuntimeRoute.moderateMeta()), + simulate(seed, RuntimeRoute.highMeta())); + } + + private SimulationReport simulate(long seed, RuntimeRoute route) { + RuntimeState state = new RuntimeState(seed, route); + float firstBossKillSeconds = 0f; + int waveReached = 0; + + for (int wave = 1; wave <= MAX_RUNTIME_WAVE; wave++) { + waveReached = wave; + state.prepareWave(wave); + state.applyRouteChoices(wave); + state.spawnBonusIfBudgetAllows(wave); + state.castAbilityIfDue(wave); + + if (wave == FIRST_BOSS_WAVE) { + firstBossKillSeconds = state.bossKillSeconds(wave); + } + + boolean overwhelmed = state.isOverwhelmed(wave); + state.finishWave(); + if (overwhelmed) { + break; + } + } + + return state.report(waveReached, firstBossKillSeconds); + } + + private static final class RuntimeState implements UpgradeHost, ShopUpgradeHost, AbilityHost { + private final RuntimeRoute route; + private final long seed; + private final SeededRandomSource random; + private final PlayerCombatState combatState = new PlayerCombatState(); + private final Array circles = new Array<>(); + private final Array runtimeBonusBalls = new Array<>(); + private final PlayerAbilities playerAbilities; + private final Array selectedAbilities = new Array<>(); + private final UpgradeSystem upgradeSystem; + private final ShopUpgradeSystem shopUpgradeSystem; + private final BonusBallSystem bonusBallSystem = new BonusBallSystem(runtimeBonusBalls); + private final AbilitySystem abilitySystem; + private final TalentTree talentTree; + private final PlayerStats playerStats; + private final EnumMap axes = new EnumMap<>(PowerAxis.class); + + private float baseDamage = 1f; + private float runDamageBonus; + private int runPierceBonus; + private float runAoeBonus; + private int currentWave = 1; + private int selectedDamageCards; + private int selectedFireRateCards; + private int abilityUses; + private int bonusDrops; + private int bonusSpawned; + private int bonusCollected; + private int peakVisibleBonusBalls; + private int activeBonusUptimeWaves; + private int moneyEarned; + private int moneySpent; + private float damageTaken; + + private RuntimeState(long seed, RuntimeRoute route) { + this.route = route; + this.seed = seed; + this.random = + new SeededRandomSource(SeededRandomSource.forkSeed(seed, route.strategyId)); + this.playerAbilities = new PlayerAbilities(new RuntimeAbilityPreferences()); + for (AbilityKind ability : AbilityKind.values()) { + selectedAbilities.add(ability); + } + this.upgradeSystem = new UpgradeSystem(random, this); + this.shopUpgradeSystem = new ShopUpgradeSystem(this); + this.playerStats = new PlayerStats(new RuntimeAbilityPreferences()); + route.applyMeta(playerStats); + this.talentTree = new TalentTree(playerStats); + this.abilitySystem = + new AbilitySystem( + PLAYER_SQUARE, + circles, + playerAbilities, + selectedAbilities, + random, + this); + applyPermanentTalentStats(); + for (PowerAxis axis : PowerAxis.values()) { + axes.put(axis, 0f); + } + } + + private void applyPermanentTalentStats() { + baseDamage += talentTree.getStatBonus(TalentData.TalentType.DAMAGE); + int maxHealth = + PlayerCombatState.DEFAULT_MAX_HEALTH + + (int) talentTree.getStatBonus(TalentData.TalentType.HEALTH); + float shotCooldown = + Math.max( + PlayerCombatState.MIN_SHOT_COOLDOWN_MS, + PlayerCombatState.DEFAULT_SHOT_COOLDOWN_MS + - talentTree.getStatBonus(TalentData.TalentType.COOLDOWN)); + int regen = (int) talentTree.getStatBonus(TalentData.TalentType.REGEN); + combatState.resetForNewRun(maxHealth, shotCooldown, regen); + combatState.setMoney(20); + } + + private void prepareWave(int wave) { + currentWave = wave; + int income = Math.max(1, 3 + wave / 2); + combatState.addMoney(income); + moneyEarned += income; + circles.clear(); + WaveTuning tuning = EndlessBalanceSpec.waveTuning(wave); + int health = tuning.basicCircleHealth(); + circles.add( + new BasicCircleData( + new Circle(125f, 125f, 10f), + new Vector2(), + health, + tuning.circleDamage())); + } + + private void applyRouteChoices(int wave) { + if (route.cardsEnabled && wave % 3 == 0) { + applyCard(); + } + if (route.shopEnabled && wave >= route.firstShopWave && wave % 2 == 0) { + buyShopUpgrade(); + } + } + + private void applyCard() { + upgradeSystem.triggerPick(); + UpgradeKind[] options = upgradeSystem.getPickOptions(); + if (options == null) return; + + int choice; + if (route.rawDamageFireRateOnly) { + UpgradeKind kind = + selectedDamageCards <= selectedFireRateCards + ? UpgradeKind.DAMAGE + : UpgradeKind.FIRE_RATE; + choice = indexOf(options, kind); + } else { + choice = chooseFreshStarterCardIfNeeded(); + if (choice < 0) { + improveMixedOfferWithRerolls(); + choice = chooseMixedCardOption(); + } + } + if (choice < 0) choice = 0; + + UpgradeKind selected = options[choice]; + upgradeSystem.applyPick(choice); + if (isDamageLike(selected)) selectedDamageCards++; + if (isCadenceLike(selected)) selectedFireRateCards++; + } + + private boolean isDamageLike(UpgradeKind kind) { + switch (kind) { + case DAMAGE: + case BOSS_BREAKER: + case EXECUTION_LINE: + case BLAST_PROTOCOL: + case VOLATILE_BARGAIN: + return true; + default: + return false; + } + } + + private boolean isCadenceLike(UpgradeKind kind) { + switch (kind) { + case FIRE_RATE: + case BONUS_MAGNET: + return true; + default: + return false; + } + } + + private int indexOf(UpgradeKind[] options, UpgradeKind kind) { + for (int i = 0; i < options.length; i++) { + if (options[i] == kind) return i; + } + return -1; + } + + private int chooseFreshStarterCardIfNeeded() { + if (!route.strategyId.contains("fresh") + || selectedDamageCards + selectedFireRateCards > 0) { + return -1; + } + int index = indexOfDamageOrCadenceLike(upgradeSystem.getPickOptions()); + while (index < 0 && upgradeSystem.rerollsRemaining() > 0) { + if (!upgradeSystem.rerollPick(shopUpgradeSystem.cardRerollDiscount())) { + return -1; + } + index = indexOfDamageOrCadenceLike(upgradeSystem.getPickOptions()); + } + return index; + } + + private int indexOfDamageOrCadenceLike(UpgradeKind[] options) { + if (options == null) return -1; + for (int i = 0; i < options.length; i++) { + if (isDamageLike(options[i]) || isCadenceLike(options[i])) return i; + } + return -1; + } + + private int chooseMixedCardOption() { + UpgradeSystem.OfferCardView[] views = upgradeSystem.activeOfferViews(); + int bestIndex = 0; + int bestScore = Integer.MIN_VALUE; + for (int i = 0; i < views.length; i++) { + int score = mixedCardScore(views[i]); + if (score > bestScore) { + bestScore = score; + bestIndex = i; + } + } + return bestIndex; + } + + private void improveMixedOfferWithRerolls() { + while (bestMixedCardScore() < 50 && upgradeSystem.rerollsRemaining() > 0) { + if (!upgradeSystem.rerollPick(shopUpgradeSystem.cardRerollDiscount())) { + return; + } + } + } + + private int bestMixedCardScore() { + UpgradeSystem.OfferCardView[] views = upgradeSystem.activeOfferViews(); + int bestScore = Integer.MIN_VALUE; + for (UpgradeSystem.OfferCardView view : views) { + bestScore = Math.max(bestScore, mixedCardScore(view)); + } + return bestScore; + } + + private int mixedCardScore(UpgradeSystem.OfferCardView view) { + if (view.synergyReady()) return 100; + switch (view.kind()) { + case DAMAGE: + case CRIT: + return view.stacks() < 2 ? 90 - view.stacks() : 40; + case FIRE_RATE: + return view.stacks() < 2 ? 80 - view.stacks() : 35; + case PIERCE: + return view.stacks() < 2 ? 75 - view.stacks() : 50; + case AOE: + return view.stacks() < 2 ? 70 - view.stacks() : 45; + case HEAL: + case REGEN: + return view.stacks() < 2 ? 60 - view.stacks() : 30; + default: + return 0; + } + } + + private void buyShopUpgrade() { + ShopUpgradeKind kind; + int lane = + shopUpgradeSystem.level(ShopUpgradeKind.DAMAGE) + + shopUpgradeSystem.level(ShopUpgradeKind.COOLDOWN) + + shopUpgradeSystem.level(ShopUpgradeKind.REGEN) + + shopUpgradeSystem.level(ShopUpgradeKind.CRIT_CHANCE); + if (route.rawDamageFireRateOnly) { + kind = lane % 2 == 0 ? ShopUpgradeKind.DAMAGE : ShopUpgradeKind.COOLDOWN; + } else { + int family = lane % 4; + if (family == 0) { + kind = ShopUpgradeKind.DAMAGE; + } else if (family == 1) { + kind = ShopUpgradeKind.COOLDOWN; + } else if (family == 2) { + kind = ShopUpgradeKind.REGEN; + } else { + kind = ShopUpgradeKind.CRIT_CHANCE; + } + } + shopUpgradeSystem.tryBuy(kind); + } + + private void spawnBonusIfBudgetAllows(int wave) { + int budget = EndlessBalanceSpec.bonusDropBudgetForWave(wave); + if (budget <= 0) return; + + for (int i = 0; + i < budget + && runtimeBonusBalls.size < EndlessBalanceSpec.maxVisibleBonusBalls(); + i++) { + BonusBallData ball = Pools.obtain(BonusBallData.class); + BonusBallData.BonusType type = + RUNTIME_BONUS_SEQUENCE[bonusSpawned % RUNTIME_BONUS_SEQUENCE.length]; + ball.configure(125f, 125f, 10f, 0f, 0f, type); + runtimeBonusBalls.add(ball); + bonusSpawned++; + bonusDrops = bonusSpawned; + peakVisibleBonusBalls = Math.max(peakVisibleBonusBalls, runtimeBonusBalls.size); + + if (shouldCollectSpawnedBonus()) { + bonusBallSystem.collect(runtimeBonusBalls.size - 1); + bonusCollected++; + } + } + } + + private boolean shouldCollectSpawnedBonus() { + boolean pickupPity = + route.bonusPickupSkill >= 0.15f + && runtimeBonusBalls.size >= EndlessBalanceSpec.maxVisibleBonusBalls(); + return random.nextFloat() < route.bonusPickupSkill || pickupPity; + } + + private void finishWave() { + if (bonusBallSystem.getActiveBonusCount() > 0) { + activeBonusUptimeWaves++; + } + bonusBallSystem.endWave(); + } + + private void castAbilityIfDue(int wave) { + if (!route.abilitiesEnabled + || wave < route.firstAbilityWave + || wave % route.abilityEveryWaves != 0) { + return; + } + long now = 200_000L + wave * 30_000L; + abilitySystem.activateExplosion(0f, 0f, now); + abilityUses++; + abilitySystem.tick(now + 1L); + } + + private boolean isOverwhelmed(int wave) { + WaveTuning tuning = EndlessBalanceSpec.waveTuning(wave); + float pressure = + tuning.enemiesPerWave() * tuning.basicCircleHealth() * 0.034f + + tuning.circleDamage() * 1.65f + + Math.max(0, wave - 11) * route.postEarlyPressure; + float dps = effectiveDps(); + float sustain = + combatState.getMaxHealth() * 0.020f + + combatState.getHealthRegenRate() * 0.75f + + runAoeBonus * 0.025f + + runPierceBonus * 0.30f + + abilityUses * route.abilityValue; + damageTaken += Math.max(0f, pressure - dps - sustain) * 0.18f; + return wave >= route.minimumFailCheckWave && dps + sustain < pressure; + } + + private float effectiveDps() { + EffectiveCombatStats stats = currentStats(); + float crit = 1f + stats.critChance() * (stats.critMultiplier() - 1f); + return stats.damage() * crit * 1000f / Math.max(90f, stats.shotCooldownMs()); + } + + private float bossKillSeconds(int wave) { + return EndlessBalanceSpec.bossHealthForWave(wave) / Math.max(0.01f, effectiveDps()); + } + + private SimulationReport report(int waveReached, float firstBossKillSeconds) { + EffectiveCombatStats stats = currentStats(); + axes.put(PowerAxis.DAMAGE, stats.damage()); + axes.put(PowerAxis.CADENCE, 1000f / Math.max(1f, stats.shotCooldownMs())); + axes.put(PowerAxis.HEALTH, (float) stats.healthRegenRate() * 2f); + axes.put(PowerAxis.AOE, stats.aoeRadiusBonus()); + axes.put(PowerAxis.CONTROL, stats.controlRating()); + axes.put(PowerAxis.REGEN, (float) stats.healthRegenRate()); + axes.put(PowerAxis.CRIT, bonusBallSystem.getCritChanceBonus()); + axes.put(PowerAxis.UTILITY, bonusBallSystem.getPickupRadiusMultiplier() - 1f); + axes.put(PowerAxis.ECONOMY, (float) moneyEarned / Math.max(1f, waveReached)); + axes.put(PowerAxis.ABILITY, Math.max(0f, abilityUses * 1.5f)); + for (Map.Entry rating : + talentTree.getPermanentAxisRatings().entrySet()) { + axes.put(rating.getKey(), axes.get(rating.getKey()) + rating.getValue()); + } + return new SimulationReport( + seed, + route.strategyId, + waveReached, + firstBossKillSeconds, + shopUpgradeSystem.level(ShopUpgradeKind.DAMAGE) + + shopUpgradeSystem.level(ShopUpgradeKind.COOLDOWN) + + shopUpgradeSystem.level(ShopUpgradeKind.REGEN) + + shopUpgradeSystem.level(ShopUpgradeKind.CRIT_CHANCE), + 0f, + waveReached >= 100 ? 0 : 1, + damageTaken, + bonusDrops, + activeBonusPower(), + Math.max(0.01f, waveReached / 100f), + axes, + "runtime-harness", + firstBossKillSeconds, + shopUpgradeSystem.level(ShopUpgradeKind.DAMAGE) + + shopUpgradeSystem.level(ShopUpgradeKind.COOLDOWN) + + shopUpgradeSystem.level(ShopUpgradeKind.REGEN) + + shopUpgradeSystem.level(ShopUpgradeKind.CRIT_CHANCE), + abilityUses, + selectedDamageCards, + selectedFireRateCards, + peakVisibleBonusBalls, + stats.damage(), + stats.shotCooldownMs(), + bonusSpawned, + bonusCollected, + activeBonusUptimeWaves, + upgradeSystem.triggeredSynergyCount(), + moneyEarned, + moneySpent); + } + + private float activeBonusPower() { + return Math.max( + Math.max( + bonusBallSystem.getDamageMultiplier(), + 1f / Math.max(0.01f, bonusBallSystem.getCooldownMultiplier())), + 1f + + bonusBallSystem.getCritChanceBonus() + + bonusBallSystem.getPickupRadiusMultiplier() + - 1f); + } + + private EffectiveCombatStats currentStats() { + return EffectiveCombatStats.fromSources( + combatState, + shopUpgradeSystem, + upgradeSystem, + bonusBallSystem, + talentTree, + currentWave, + baseDamage, + runDamageBonus, + runPierceBonus, + runAoeBonus, + runPierceBonus); + } + + @Override + public void addRunDamagePercentBonus(int percent) { + runDamageBonus += Math.max(1f, baseDamage * percent / 100f); + } + + @Override + public void addRunPierceBonus(int bonus) { + runPierceBonus += bonus; + } + + @Override + public void addRunAoeBonus(float radiusBonus) { + runAoeBonus += radiusBonus; + } + + @Override + public void addMaxHealth(int amount) { + combatState.setMaxHealth(combatState.getMaxHealth() + amount); + } + + @Override + public void healToFull() { + combatState.setHealth(combatState.getMaxHealth()); + } + + @Override + public void addHealthRegen(int perSecond) { + combatState.setHealthRegenRate(combatState.getHealthRegenRate() + perSecond); + } + + @Override + public void addFloatingText(float x, float y, String text, Color color) {} + + @Override + public float getPlayerCenterX() { + return PLAYER_SQUARE.x + PLAYER_SQUARE.width / 2f; + } + + @Override + public float getPlayerCenterY() { + return PLAYER_SQUARE.y + PLAYER_SQUARE.height / 2f; + } + + @Override + public boolean spendMoney(int amount) { + boolean spent = combatState.spendMoney(amount); + if (spent) { + moneySpent += amount; + } + return spent; + } + + @Override + public void addBaseDamage(int amount) { + + } + + @Override + public void addBaseSpeed(float amount) {} + + @Override + public void reduceShotCooldown(float amount, float minimum) { + + } + + @Override + public void createExplosion(float x, float y, Color color) {} + + @Override + public void triggerKillShake() {} + + @Override + public void triggerCritHitstop() {} + + @Override + public int effectiveBulletDamage() { + return Math.round(currentStats().damage()); + } + + @Override + public float abilityScalingFactor() { + return PlayerRunCombatCalculator.abilityScalingFactor(currentWave); + } + + @Override + public float gameScale() { + return 1f; + } + + @Override + public long abilityCooldownReductionMs() { + return 0L; + } + + @Override + public boolean isBoss(BaseCircleData circle) { + return false; + } + + @Override + public void addMoney(int amount) { + combatState.addMoney(amount); + moneyEarned += Math.max(0, amount); + } + + @Override + public void killEnemy(BaseCircleData enemy) { + addMoney(enemy.getReward()); + circles.removeValue(enemy, true); + } + + @Override + public void onTurretShot(Turret turret, BaseCircleData target, long now) {} + } + + private static final class RuntimeRoute { + private final String strategyId; + private final boolean shopEnabled; + private final boolean cardsEnabled; + private final boolean abilitiesEnabled; + private final boolean rawDamageFireRateOnly; + private final int firstShopWave; + private final int firstAbilityWave; + private final int abilityEveryWaves; + private final int minimumFailCheckWave; + private final float bonusPickupSkill; + private final float abilityValue; + private final float postEarlyPressure; + private final int metaProfile; + + private RuntimeRoute( + String strategyId, + boolean shopEnabled, + boolean cardsEnabled, + boolean abilitiesEnabled, + boolean rawDamageFireRateOnly, + int firstShopWave, + int firstAbilityWave, + int abilityEveryWaves, + int minimumFailCheckWave, + float bonusPickupSkill, + float abilityValue, + float postEarlyPressure) { + this( + strategyId, + shopEnabled, + cardsEnabled, + abilitiesEnabled, + rawDamageFireRateOnly, + firstShopWave, + firstAbilityWave, + abilityEveryWaves, + minimumFailCheckWave, + bonusPickupSkill, + abilityValue, + postEarlyPressure, + 0); + } + + private RuntimeRoute( + String strategyId, + boolean shopEnabled, + boolean cardsEnabled, + boolean abilitiesEnabled, + boolean rawDamageFireRateOnly, + int firstShopWave, + int firstAbilityWave, + int abilityEveryWaves, + int minimumFailCheckWave, + float bonusPickupSkill, + float abilityValue, + float postEarlyPressure, + int metaProfile) { + this.strategyId = strategyId; + this.shopEnabled = shopEnabled; + this.cardsEnabled = cardsEnabled; + this.abilitiesEnabled = abilitiesEnabled; + this.rawDamageFireRateOnly = rawDamageFireRateOnly; + this.firstShopWave = firstShopWave; + this.firstAbilityWave = firstAbilityWave; + this.abilityEveryWaves = abilityEveryWaves; + this.minimumFailCheckWave = minimumFailCheckWave; + this.bonusPickupSkill = bonusPickupSkill; + this.abilityValue = abilityValue; + this.postEarlyPressure = postEarlyPressure; + this.metaProfile = metaProfile; + } + + private static RuntimeRoute fresh() { + return new RuntimeRoute( + "runtime:fresh:no-menu-talent:shop-card-ability", + true, + true, + true, + false, + 2, + 6, + 4, + 10, + 0.20f, + 0.65f, + 2.6f); + } + + private static RuntimeRoute exploit() { + return new RuntimeRoute( + "runtime:damage-fire-rate:no-shop:no-ability", + false, + true, + false, + true, + 999, + 999, + 999, + 3, + 0.05f, + 0f, + 3.4f); + } + + private static RuntimeRoute balanced() { + return new RuntimeRoute( + "runtime:balanced:shop:ability", + true, + true, + true, + false, + 2, + 6, + 3, + 24, + 0.30f, + 1.40f, + 1.6f); + } + + private static RuntimeRoute moderateMeta() { + return new RuntimeRoute( + "runtime:moderate-meta:shop-card-ability", + true, + true, + true, + false, + 2, + 6, + 3, + 28, + 0.35f, + 1.55f, + 1.45f, + 1); + } + + private static RuntimeRoute highMeta() { + return new RuntimeRoute( + "runtime:high-meta:shop-card-ability", + true, + true, + true, + false, + 2, + 6, + 3, + 34, + 0.40f, + 1.70f, + 1.35f, + 2); + } + + private void applyMeta(PlayerStats stats) { + if (metaProfile <= 0) return; + invest(stats, "health_1", metaProfile == 1 ? 3 : 5); + invest(stats, "damage_1", metaProfile == 1 ? 2 : 3); + invest(stats, "cooldown_1", metaProfile == 1 ? 2 : 4); + invest(stats, "speed_1", metaProfile == 1 ? 1 : 3); + invest(stats, "regen_1", metaProfile == 1 ? 2 : 4); + invest(stats, "control_1", metaProfile == 1 ? 1 : 3); + invest(stats, "economy_1", metaProfile == 1 ? 1 : 3); + invest(stats, "ability_1", metaProfile == 1 ? 1 : 3); + invest(stats, "utility_1", metaProfile == 1 ? 1 : 3); + invest(stats, "economy_reroll", metaProfile == 1 ? 1 : 2); + invest(stats, "utility_bonus", metaProfile == 1 ? 1 : 2); + if (metaProfile >= 2) { + invest(stats, "health_2", 2); + invest(stats, "cooldown_2", 2); + invest(stats, "regen_2", 2); + invest(stats, "keystone_pierce", 1); + invest(stats, "keystone_aoe", 1); + invest(stats, "attack_precision", 2); + invest(stats, "control_execute", 2); + invest(stats, "engineering_turret", 2); + invest(stats, "survival_barrier", 2); + invest(stats, "ability_blast", 2); + invest(stats, "keystone_turret", 1); + invest(stats, "keystone_control_execute", 1); + invest(stats, "keystone_shield_regen", 1); + invest(stats, "keystone_economy_reroll", 1); + } + } + + private void invest(PlayerStats stats, String talentId, int levels) { + for (int i = 0; i < levels; i++) { + stats.incrementTalentNode(talentId); + } + } + } + + private static final class RuntimeAbilityPreferences implements Preferences { + @Override + public boolean getBoolean(String key, boolean defValue) { + return true; + } + + @Override + public Preferences putBoolean(String key, boolean val) { + return this; + } + + @Override + public Preferences putInteger(String key, int val) { + return this; + } + + @Override + public Preferences putLong(String key, long val) { + return this; + } + + @Override + public Preferences putFloat(String key, float val) { + return this; + } + + @Override + public Preferences putString(String key, String val) { + return this; + } + + @Override + public Preferences put(Map vals) { + return this; + } + + @Override + public boolean getBoolean(String key) { + return true; + } + + @Override + public int getInteger(String key) { + return 0; + } + + @Override + public long getLong(String key) { + return 0L; + } + + @Override + public float getFloat(String key) { + return 0f; + } + + @Override + public String getString(String key) { + return ""; + } + + @Override + public int getInteger(String key, int defValue) { + return defValue; + } + + @Override + public long getLong(String key, long defValue) { + return defValue; + } + + @Override + public float getFloat(String key, float defValue) { + return defValue; + } + + @Override + public String getString(String key, String defValue) { + return defValue; + } + + @Override + public Map get() { + return new HashMap<>(); + } + + @Override + public boolean contains(String key) { + return true; + } + + @Override + public void clear() {} + + @Override + public void remove(String key) {} + + @Override + public void flush() {} + } +} diff --git a/core/src/main/java/ru/project/tower/balance/BalanceSimulationHarness.java b/core/src/main/java/ru/project/tower/balance/BalanceSimulationHarness.java new file mode 100644 index 0000000..421a678 --- /dev/null +++ b/core/src/main/java/ru/project/tower/balance/BalanceSimulationHarness.java @@ -0,0 +1,137 @@ +package ru.project.tower.balance; + +import java.util.ArrayList; +import java.util.EnumMap; +import java.util.List; +import ru.project.tower.entities.circles.BonusBallData; +import ru.project.tower.run.RunRngStreams; + +public final class BalanceSimulationHarness { + private static final int TARGET_WAVES = 120; + + public List runRepresentativeSuite(long[] seeds) { + BalanceRouteSimulator routeSimulator = new BalanceRouteSimulator(); + List reports = new ArrayList<>(); + for (long seed : seeds) { + reports.add( + SimulationReport.fromRoute( + seed, routeSimulator.runFreshNoMenuTalentShopCardAbilityRoute(seed))); + reports.add( + SimulationReport.fromRoute( + seed, routeSimulator.runDamageFireRateNoShopNoAbility(seed))); + reports.add( + SimulationReport.fromRoute( + seed, routeSimulator.runBalancedShopAndAbilityRoute(seed))); + reports.add( + SimulationReport.fromRoute( + seed, routeSimulator.runSustainControlShopAndAbilityRoute(seed))); + reports.add( + SimulationReport.fromRoute( + seed, routeSimulator.runMixedNoShopNoAbilityRoute(seed))); + } + return reports; + } + + public List runRuntimeBackedSuite(long[] seeds) { + BalanceRuntimeHarness runtimeHarness = new BalanceRuntimeHarness(); + List reports = new ArrayList<>(); + for (long seed : seeds) { + reports.addAll(runtimeHarness.run(seed)); + } + return reports; + } + + public SimulationReport run(long seed, StrategyProfile profile) { + RunRngStreams streams = RunRngStreams.fromSeed(seed); + EnumMap ratings = new EnumMap<>(PowerAxis.class); + for (PowerAxis axis : PowerAxis.values()) { + ratings.put(axis, profile.metaRating() * profile.weight(axis) * 0.35f); + } + + int purchases = 0; + int activeDamageStacks = 0; + int activeSpeedStacks = 0; + int activeFireRateStacks = 0; + float survivability = 1f; + float bossKillSeconds = 0f; + float clearSecondsTotal = 0f; + float damageTaken = 0f; + int bonusDrops = 0; + int waveReached = 0; + + for (int wave = 1; wave <= TARGET_WAVES; wave++) { + waveReached = wave; + PowerAxis chosenAxis = chooseAxis(streams.upgradeDrafts().nextFloat(), profile); + ratings.put(chosenAxis, ratings.get(chosenAxis) + 2.2f * profile.weight(chosenAxis)); + purchases++; + + if (streams.bonusDrops().nextFloat() < budgetedDropChance(wave)) { + bonusDrops++; + int type = streams.bonusDrops().nextIntInclusive(2); + if (type == 0) activeDamageStacks++; + if (type == 1) activeSpeedStacks++; + if (type == 2) activeFireRateStacks++; + } + + bossKillSeconds = EndlessBalanceSpec.expectedBossKillSeconds(wave, ratings); + float incoming = + EndlessBalanceSpec.waveTuning(wave).circleDamage() + * (1.1f - Math.min(0.55f, ratings.get(PowerAxis.CONTROL) * 0.006f)); + float mitigation = + EndlessBalanceSpec.axisMultiplier(ratings.get(PowerAxis.SHIELD)) + + EndlessBalanceSpec.axisMultiplier(ratings.get(PowerAxis.REGEN)) * 0.7f + + EndlessBalanceSpec.axisMultiplier(ratings.get(PowerAxis.HEALTH)) + * 0.5f; + survivability += mitigation * 0.015f - incoming * 0.010f; + damageTaken += Math.max(0f, incoming - mitigation * 0.35f); + clearSecondsTotal += + Math.max(3f, EndlessBalanceSpec.waveTuning(wave).enemiesPerWave() / 8f); + if (survivability <= 0.15f) { + break; + } + } + + float activeBonusPower = + EndlessBalanceSpec.activeBonusMultiplier( + BonusBallData.BonusType.DAMAGE, activeDamageStacks) + + EndlessBalanceSpec.activeBonusMultiplier( + BonusBallData.BonusType.BULLET_SPEED, activeSpeedStacks) + + (1f + / EndlessBalanceSpec.activeBonusMultiplier( + BonusBallData.BonusType.FIRE_RATE, activeFireRateStacks)); + return new SimulationReport( + seed, + profile.id(), + waveReached, + bossKillSeconds, + purchases, + clearSecondsTotal / Math.max(1, waveReached), + survivability <= 0.15f ? 1 : 0, + damageTaken, + bonusDrops, + activeBonusPower, + Math.max(0.01f, survivability), + ratings); + } + + private static PowerAxis chooseAxis(float roll, StrategyProfile profile) { + float total = 0f; + for (PowerAxis axis : PowerAxis.values()) { + total += profile.weight(axis); + } + float target = roll * total; + float cumulative = 0f; + for (PowerAxis axis : PowerAxis.values()) { + cumulative += profile.weight(axis); + if (target <= cumulative) { + return axis; + } + } + return PowerAxis.DAMAGE; + } + + private static float budgetedDropChance(int wave) { + return Math.min( + 0.32f, EndlessBalanceSpec.bonusDropBudgetThroughWave(wave) / (float) (wave + 12)); + } +} diff --git a/core/src/main/java/ru/project/tower/balance/BossBalanceSpec.java b/core/src/main/java/ru/project/tower/balance/BossBalanceSpec.java new file mode 100644 index 0000000..a1e65b0 --- /dev/null +++ b/core/src/main/java/ru/project/tower/balance/BossBalanceSpec.java @@ -0,0 +1,78 @@ +package ru.project.tower.balance; + +public final class BossBalanceSpec { + private static final BossBalanceSpec GENERIC = + new BossBalanceSpec("generic", 1.0f, 8f, 32f, 7f, 42f, 5f); + private static final BossBalanceSpec[] SPECS = { + new BossBalanceSpec("SwarmQueen", 1.05f, 9f, 34f, 8f, 44f, 6f), + new BossBalanceSpec("Juggernaut", 1.22f, 11f, 40f, 9f, 48f, 7f), + new BossBalanceSpec("ShadowWeaver", 0.96f, 8f, 32f, 7f, 42f, 5f), + new BossBalanceSpec("VolatileReactor", 1.08f, 9f, 35f, 8f, 45f, 5f), + new BossBalanceSpec("GlacialWarden", 1.14f, 10f, 38f, 8f, 46f, 7f), + new BossBalanceSpec("IllusionMaster", 1.00f, 8f, 33f, 7f, 43f, 6f) + }; + + private final String id; + private final float healthMultiplier; + private final float firstBossMinTtkSeconds; + private final float firstBossMaxTtkSeconds; + private final float lateBossMinTtkSeconds; + private final float lateBossMaxTtkSeconds; + private final float minimumMechanicExposureSeconds; + + private BossBalanceSpec( + String id, + float healthMultiplier, + float firstBossMinTtkSeconds, + float firstBossMaxTtkSeconds, + float lateBossMinTtkSeconds, + float lateBossMaxTtkSeconds, + float minimumMechanicExposureSeconds) { + this.id = id; + this.healthMultiplier = healthMultiplier; + this.firstBossMinTtkSeconds = firstBossMinTtkSeconds; + this.firstBossMaxTtkSeconds = firstBossMaxTtkSeconds; + this.lateBossMinTtkSeconds = lateBossMinTtkSeconds; + this.lateBossMaxTtkSeconds = lateBossMaxTtkSeconds; + this.minimumMechanicExposureSeconds = minimumMechanicExposureSeconds; + } + + public static BossBalanceSpec forBoss(String id) { + for (BossBalanceSpec spec : SPECS) { + if (spec.id.equals(id)) return spec; + } + return GENERIC; + } + + public String id() { + return id; + } + + public int healthFloorForWave(int wave) { + return Math.round(EndlessBalanceSpec.bossHealthForWave(wave) * healthMultiplier); + } + + public float expectedKillSecondsAtWave(int wave, float effectiveDps) { + return healthFloorForWave(wave) / Math.max(0.01f, effectiveDps); + } + + public float firstBossMinTtkSeconds() { + return firstBossMinTtkSeconds; + } + + public float firstBossMaxTtkSeconds() { + return firstBossMaxTtkSeconds; + } + + public float lateBossMinTtkSeconds() { + return lateBossMinTtkSeconds; + } + + public float lateBossMaxTtkSeconds() { + return lateBossMaxTtkSeconds; + } + + public float minimumMechanicExposureSeconds() { + return minimumMechanicExposureSeconds; + } +} diff --git a/core/src/main/java/ru/project/tower/balance/EndlessBalanceSpec.java b/core/src/main/java/ru/project/tower/balance/EndlessBalanceSpec.java new file mode 100644 index 0000000..8bfcc37 --- /dev/null +++ b/core/src/main/java/ru/project/tower/balance/EndlessBalanceSpec.java @@ -0,0 +1,501 @@ +package ru.project.tower.balance; + +import java.util.Map; +import ru.project.tower.entities.circles.BonusBallData; +import ru.project.tower.upgrades.shop.ShopUpgradeKind; +import ru.project.tower.upgrades.shop.ShopUpgradeRegistry; +import ru.project.tower.waves.WaveTuning; + + +public final class EndlessBalanceSpec { + public static final int SHOP_MAX_LEVEL = 30; + public static final int TALENT_AXIS_MAX_RATING = 55; + public static final float CRIT_CHANCE_CAP = 0.65f; + public static final float ACTIVE_DAMAGE_BONUS_CAP = 2.35f; + public static final float ACTIVE_FIRE_RATE_COOLDOWN_FLOOR = 0.42f; + public static final float ACTIVE_BULLET_SPEED_CAP = 2.25f; + public static final int BONUS_DROP_BUDGET_PER_TEN_WAVES = 7; + public static final int MAX_VISIBLE_BONUS_BALLS = 3; + public static final int BOSS_WAVE_INTERVAL = 20; + public static final float MIN_EXPECTED_LATE_BOSS_KILL_SECONDS = 6.0f; + + private static final String[] ARCHETYPES = { + "BASIC", "STRONG", "FAST", "SPLITTER", "HEALER", "DASHER", "SNIPER", "SPAWNER" + }; + private static final WaveBandTarget[] WAVE_BAND_TARGETS = { + new WaveBandTarget("teach", 1, 20, 1.0f, "teach movement, pickups, first boss prep"), + new WaveBandTarget("build-check", 21, 60, 1.65f, "require mixed cards and early shop"), + new WaveBandTarget( + "synergy-check", 61, 100, 2.35f, "require shop, abilities, and synergies"), + new WaveBandTarget( + "endless-pressure", 101, Integer.MAX_VALUE, 3.10f, "stress capped builds") + }; + private static final BalanceRouteTarget[] ROUTE_TARGETS = { + new BalanceRouteTarget( + "fresh:no-menu-talent:shop-card-ability", + 10, + 12, + 0f, + 0f, + false, + true, + true, + true, + "fresh profile learns in-run shop, cards, and abilities before meta carries" + + " farther"), + new BalanceRouteTarget( + "challenge:no-menu-talent:no-shop:no-ability", + 3, + 7, + 0f, + 0f, + false, + false, + false, + false, + "challenge profile intentionally ignores core in-run tools"), + new BalanceRouteTarget( + "damage-fire-rate:no-shop:no-ability", + 20, + 99, + 8f, + 60f, + false, + false, + true, + false, + "regression profile must not revive the old wave-100 exploit"), + new BalanceRouteTarget( + "mixed:no-shop:no-ability", + 20, + 99, + 7f, + 60f, + false, + false, + true, + false, + "mixed cards beat raw exploit but still need shop and abilities"), + new BalanceRouteTarget( + "balanced:shop:ability", + 25, + 120, + MIN_EXPECTED_LATE_BOSS_KILL_SECONDS, + 45f, + false, + true, + true, + true, + "balanced route demonstrates normal in-run progression"), + new BalanceRouteTarget( + "sustain-control:shop:ability", + 25, + 120, + MIN_EXPECTED_LATE_BOSS_KILL_SECONDS, + 45f, + false, + true, + true, + true, + "defensive route remains viable without raw damage dominance"), + new BalanceRouteTarget( + "moderate-meta:shop-card-ability", + 45, + 90, + MIN_EXPECTED_LATE_BOSS_KILL_SECONDS, + 40f, + true, + true, + true, + true, + "moderate meta progression pushes past early walls without endless dominance"), + new BalanceRouteTarget( + "high-meta:capped-shop-card-ability", + 100, + 140, + MIN_EXPECTED_LATE_BOSS_KILL_SECONDS, + 35f, + true, + true, + true, + true, + "capped meta handles endless pressure but must still respect boss TTK") + }; + + private EndlessBalanceSpec() {} + + public static WaveTuning waveTuning(int wave) { + int safeWave = Math.max(1, wave); + float band = band(safeWave); + int enemies = Math.min(240, Math.round(5f + (safeWave - 1) * 1.6f + band * 8f)); + float strong = Math.min(0.75f, 0.10f * (1 + (safeWave - 1) * 0.1f)); + float fast = safeWave >= 3 ? 0.15f * (1 + (safeWave - 3) * 0.05f) : 0f; + float splitter = 0f; + if (safeWave >= 7) { + float progressToMax = Math.min(1f, (safeWave - 7) / 10f); + splitter = 0.05f + (0.15f - 0.05f) * progressToMax; + } + int basicHealth = + Math.min(20_000, 1 + Math.round((float) Math.pow(safeWave - 1, 1.45f) * 2.2f)); + int strongHealth = Math.max(3, basicHealth * 3); + int damage = Math.min(180, 1 + Math.round((float) Math.pow(safeWave - 1, 1.05f) * 0.45f)); + float speed = Math.min(2.6f, 1f + (safeWave - 1) * 0.012f); + return new WaveTuning( + safeWave, + enemies, + strong, + fast, + splitter, + basicHealth, + strongHealth, + damage, + speed); + } + + public static WaveBandTarget waveBandTarget(int wave) { + int safeWave = Math.max(1, wave); + for (WaveBandTarget target : WAVE_BAND_TARGETS) { + if (safeWave >= target.firstWave() && safeWave <= target.lastWave()) { + return target; + } + } + return WAVE_BAND_TARGETS[WAVE_BAND_TARGETS.length - 1]; + } + + public static BalanceRouteTarget routeTarget(String strategyId) { + for (BalanceRouteTarget target : ROUTE_TARGETS) { + if (target.strategyId().equals(strategyId)) { + return target; + } + } + throw new IllegalArgumentException("Unknown balance route target: " + strategyId); + } + + public static EnemyComposition compositionForWave(int wave) { + int safeWave = Math.max(1, wave); + float strong = safeWave >= 2 ? Math.min(0.22f, 0.08f + safeWave * 0.0015f) : 0f; + float fast = safeWave >= 3 ? Math.min(0.16f, 0.06f + safeWave * 0.001f) : 0f; + float splitter = safeWave >= 7 ? Math.min(0.12f, 0.04f + safeWave * 0.001f) : 0f; + float healer = safeWave >= 8 ? Math.min(0.08f, 0.025f + safeWave * 0.0007f) : 0f; + float dasher = safeWave >= 6 ? Math.min(0.11f, 0.04f + safeWave * 0.0008f) : 0f; + float sniper = safeWave >= 7 ? Math.min(0.09f, 0.03f + safeWave * 0.0007f) : 0f; + float spawner = + safeWave >= 15 && (safeWave - 15) % 11 == 0 + ? Math.min(0.10f, 0.05f + safeWave * 0.0005f) + : 0f; + float basic = + Math.max(0.20f, 1f - strong - fast - splitter - healer - dasher - sniper - spawner); + return new EnemyComposition( + ARCHETYPES, + new float[] {basic, strong, fast, splitter, healer, dasher, sniper, spawner}); + } + + public static int bonusDropBudgetThroughWave(int wave) { + return Math.max(1, ((Math.max(1, wave) + 9) / 10) * BONUS_DROP_BUDGET_PER_TEN_WAVES); + } + + public static int bonusDropBudgetForWave(int wave) { + int bandWave = (Math.max(1, wave) - 1) % 10; + return bandWave < BONUS_DROP_BUDGET_PER_TEN_WAVES ? 1 : 0; + } + + public static int maxVisibleBonusBalls() { + return MAX_VISIBLE_BONUS_BALLS; + } + + public static float activeBonusMultiplier(BonusBallData.BonusType type, int stacks) { + int safeStacks = Math.max(0, stacks); + switch (type) { + case DAMAGE: + if (safeStacks == 0) return 1f; + return Math.min( + ACTIVE_DAMAGE_BONUS_CAP, + 2f + diminishing(0f, 0.18f, safeStacks - 1, 0.55f)); + case BULLET_SPEED: + if (safeStacks == 0) return 1f; + if (safeStacks == 1) return 1.5f; + return Math.min( + ACTIVE_BULLET_SPEED_CAP, + 2.25f + diminishing(0f, 0.08f, safeStacks - 2, 0.50f)); + case FIRE_RATE: + if (safeStacks == 0) return 1f; + return Math.max( + ACTIVE_FIRE_RATE_COOLDOWN_FLOOR, + (float) (0.6f * Math.pow(0.75f, safeStacks - 1))); + default: + throw new IllegalArgumentException("Unknown bonus type: " + type); + } + } + + public static int upgradeCardDamagePercent(int existingStacks) { + int safeStacks = Math.max(0, existingStacks); + return Math.max(6, Math.round(15f * (float) Math.pow(0.86f, safeStacks))); + } + + public static float upgradeCardFireRateMultiplier(int existingStacks) { + int safeStacks = Math.max(0, existingStacks); + return Math.min(0.96f, 1f - 0.10f * (float) Math.pow(0.72f, safeStacks)); + } + + public static int shopCost(ShopUpgradeKind kind, int level) { + int safeLevel = Math.max(0, level); + double scale = ShopUpgradeRegistry.definition(kind).costScale(); + return Math.max(5, (int) (5.0 * Math.pow(scale, Math.min(safeLevel, SHOP_MAX_LEVEL)))); + } + + public static float shopRating(ShopUpgradeKind kind, int level) { + float familyScale = + kind == ShopUpgradeKind.CRIT_CHANCE || kind == ShopUpgradeKind.CRIT_MULTIPLIER + ? 0.82f + : 1f; + return familyScale * diminishing(0f, 4f, Math.min(level, SHOP_MAX_LEVEL), 0.89f); + } + + public static int shopDamageBonusAtLevel(int level) { + return Math.round(shopRating(ShopUpgradeKind.DAMAGE, level) * 0.25f); + } + + public static float shopSpeedBonusAtLevel(int level) { + return shopRating(ShopUpgradeKind.SPEED, level) * 12.5f; + } + + public static float shopCooldownReductionAtLevel(int level) { + return shopRating(ShopUpgradeKind.COOLDOWN, level) * 12.5f; + } + + public static int shopRegenBonusAtLevel(int level) { + return Math.round(shopRating(ShopUpgradeKind.REGEN, level) * 0.25f); + } + + public static float shopCritChanceBonusAtLevel(int level) { + return Math.min(CRIT_CHANCE_CAP, shopRating(ShopUpgradeKind.CRIT_CHANCE, level) * 0.0065f); + } + + public static float shopCritMultiplierBonusAtLevel(int level) { + return shopRating(ShopUpgradeKind.CRIT_MULTIPLIER, level) * 0.0305f; + } + + public static int shopPierceBonusAtLevel(int level) { + return Math.min(6, Math.round(shopRating(ShopUpgradeKind.PIERCE, level) * 0.18f)); + } + + public static float shopAoeRadiusBonusAtLevel(int level) { + return Math.min(180f, shopRating(ShopUpgradeKind.SPLASH_DAMAGE, level) * 3.2f); + } + + public static float shopExecuteDamageBonusAtLevel(int level) { + return Math.min(0.35f, shopRating(ShopUpgradeKind.EXECUTE_DAMAGE, level) * 0.006f); + } + + public static float shopBossDamageBonusAtLevel(int level) { + return Math.min(0.40f, shopRating(ShopUpgradeKind.BOSS_DAMAGE, level) * 0.0065f); + } + + public static float shopControlledDamageBonusAtLevel(int level) { + return Math.min(0.35f, shopRating(ShopUpgradeKind.CONTROL_DAMAGE, level) * 0.006f); + } + + public static float shopContactArmorReductionAtLevel(int level) { + return Math.min(0.35f, shopRating(ShopUpgradeKind.CONTACT_ARMOR, level) * 0.006f); + } + + public static float shopProjectileArmorReductionAtLevel(int level) { + return Math.min(0.30f, shopRating(ShopUpgradeKind.PROJECTILE_ARMOR, level) * 0.005f); + } + + public static int shopShieldCapacityBonusAtLevel(int level) { + return Math.round(shopRating(ShopUpgradeKind.SHIELD_CAPACITY, level) * 1.8f); + } + + public static float shopShieldRechargeReductionAtLevel(int level) { + return Math.min(0.35f, shopRating(ShopUpgradeKind.SHIELD_RECHARGE, level) * 0.006f); + } + + public static float shopEmergencyBarrierThresholdAtLevel(int level) { + return Math.min(0.30f, shopRating(ShopUpgradeKind.EMERGENCY_BARRIER, level) * 0.004f); + } + + public static int shopWaveRecoveryHealAtLevel(int level) { + return Math.round(shopRating(ShopUpgradeKind.WAVE_RECOVERY, level) * 0.65f); + } + + public static float shopSafeMobilityReductionAtLevel(int level) { + return Math.min(0.30f, shopRating(ShopUpgradeKind.SAFE_MOBILITY, level) * 0.005f); + } + + public static float shopSlowAuraStrengthAtLevel(int level) { + return Math.min(0.24f, shopRating(ShopUpgradeKind.SLOW_AURA, level) * 0.004f); + } + + public static float shopPickupRadiusBonusAtLevel(int level) { + return Math.min(180f, shopRating(ShopUpgradeKind.PICKUP_RADIUS, level) * 2.5f); + } + + public static int shopBonusDurationBonusAtLevel(int level) { + return Math.min(3, Math.round(shopRating(ShopUpgradeKind.BONUS_DURATION, level) * 0.08f)); + } + + public static float shopBonusPowerBonusAtLevel(int level) { + return Math.min(0.30f, shopRating(ShopUpgradeKind.BONUS_POWER, level) * 0.005f); + } + + public static float shopBonusStabilityBonusAtLevel(int level) { + return Math.min(0.35f, shopRating(ShopUpgradeKind.BONUS_STABILITY, level) * 0.006f); + } + + public static int shopBonusPityBonusAtLevel(int level) { + return Math.min(3, Math.round(shopRating(ShopUpgradeKind.BONUS_PITY, level) * 0.08f)); + } + + public static float shopBonusFilterChanceAtLevel(int level) { + return Math.min(0.35f, shopRating(ShopUpgradeKind.BONUS_FILTER, level) * 0.006f); + } + + public static float shopCoinIncomeBonusAtLevel(int level) { + return Math.min(0.45f, shopRating(ShopUpgradeKind.COIN_INCOME, level) * 0.007f); + } + + public static float shopDiscountAtLevel(int level) { + return Math.min(0.25f, shopRating(ShopUpgradeKind.SHOP_DISCOUNT, level) * 0.004f); + } + + public static float shopCardRerollDiscountAtLevel(int level) { + return Math.min(0.35f, shopRating(ShopUpgradeKind.CARD_REROLL, level) * 0.006f); + } + + public static float shopSynergyCatalystBonusAtLevel(int level) { + return Math.min(0.30f, shopRating(ShopUpgradeKind.SYNERGY_CATALYST, level) * 0.005f); + } + + public static int permanentTalentRating(int investedLevels) { + int safeLevels = Math.max(0, investedLevels); + if (safeLevels >= 30) { + return TALENT_AXIS_MAX_RATING; + } + return Math.min(TALENT_AXIS_MAX_RATING, Math.round(diminishing(0f, 5f, safeLevels, 0.88f))); + } + + public static float axisMultiplier(float rating) { + return 1f + (float) (Math.log1p(Math.max(0f, rating)) / Math.log(10.0)); + } + + public static float critChanceFromRating(float baseCritChance, float rating) { + return Math.min(CRIT_CHANCE_CAP, baseCritChance + rating * 0.0065f); + } + + public static int bossHealthForWave(int wave) { + int safeWave = Math.max(BOSS_WAVE_INTERVAL, wave); + return Math.round(180f + safeWave * 34f + band(safeWave) * 420f); + } + + public static int bossHealthForWave(String bossId, int wave) { + return BossBalanceSpec.forBoss(bossId).healthFloorForWave(wave); + } + + public static float expectedBossKillSeconds(int wave, Map ratings) { + float effectiveDps = 10f * offenseMultiplier(ratings); + return bossHealthForWave(wave) / effectiveDps; + } + + public static float offenseMultiplier(Map ratings) { + return cappedAxisMultiplier(ratings, PowerAxis.DAMAGE, 1f) + * cappedAxisMultiplier(ratings, PowerAxis.CADENCE, 1f) + * cappedAxisMultiplier(ratings, PowerAxis.CRIT, 0.6f) + * cappedAxisMultiplier(ratings, PowerAxis.PIERCE, 0.18f) + * cappedAxisMultiplier(ratings, PowerAxis.AOE, 0.24f) + * cappedAxisMultiplier(ratings, PowerAxis.CONTROL, 0.16f) + * cappedAxisMultiplier(ratings, PowerAxis.BOSSING, 0.30f); + } + + public static float effectivePower(Map ratings) { + float total = 0f; + for (PowerAxis axis : PowerAxis.values()) { + total += cappedAxisMultiplier(ratings, axis, 1f); + } + float synergy = + Math.min( + cappedValue(ratings, PowerAxis.DAMAGE), + cappedValue(ratings, PowerAxis.CRIT)) + * 0.025f + + Math.min( + value(ratings, PowerAxis.SHIELD), + value(ratings, PowerAxis.REGEN)) + * 0.020f + + Math.min(value(ratings, PowerAxis.AOE), value(ratings, PowerAxis.CONTROL)) + * 0.018f; + return total + synergy; + } + + private static float cappedAxisMultiplier( + Map ratings, PowerAxis axis, float scale) { + return axisMultiplier(cappedValue(ratings, axis) * scale); + } + + private static float cappedValue(Map ratings, PowerAxis axis) { + float raw = value(ratings, axis); + BalanceEffectSpec spec = BalanceEffectRegistry.forAxis(axis); + float floored = spec.ratingFloor() == null ? raw : Math.max(spec.ratingFloor(), raw); + return spec.ratingCap() == null ? floored : Math.min(spec.ratingCap(), floored); + } + + private static float value(Map ratings, PowerAxis axis) { + if (ratings == null) return 0f; + Float value = ratings.get(axis); + return value == null ? 0f : value; + } + + private static float diminishing(float base, float perStack, int stacks, float retention) { + float value = base; + float next = perStack; + for (int i = 0; i < stacks; i++) { + value += next; + next *= retention; + } + return value; + } + + private static float band(int wave) { + return Math.max(0, (wave - 1) / 10); + } + + public static final class WaveBandTarget { + private final String id; + private final int firstWave; + private final int lastWave; + private final float pressureMultiplier; + private final String designGoal; + + private WaveBandTarget( + String id, + int firstWave, + int lastWave, + float pressureMultiplier, + String designGoal) { + this.id = id; + this.firstWave = firstWave; + this.lastWave = lastWave; + this.pressureMultiplier = pressureMultiplier; + this.designGoal = designGoal; + } + + public String id() { + return id; + } + + public int firstWave() { + return firstWave; + } + + public int lastWave() { + return lastWave; + } + + public float pressureMultiplier() { + return pressureMultiplier; + } + + public String designGoal() { + return designGoal; + } + } +} diff --git a/core/src/main/java/ru/project/tower/balance/EnemyComposition.java b/core/src/main/java/ru/project/tower/balance/EnemyComposition.java new file mode 100644 index 0000000..e6303f0 --- /dev/null +++ b/core/src/main/java/ru/project/tower/balance/EnemyComposition.java @@ -0,0 +1,76 @@ +package ru.project.tower.balance; + +import java.util.Arrays; +import java.util.Objects; + +public final class EnemyComposition { + private final String[] archetypes; + private final float[] weights; + + public EnemyComposition(String[] archetypes, float[] weights) { + if (archetypes.length != weights.length || archetypes.length == 0) { + throw new IllegalArgumentException("composition requires matching non-empty arrays"); + } + this.archetypes = Arrays.copyOf(archetypes, archetypes.length); + this.weights = Arrays.copyOf(weights, weights.length); + normalize(this.weights); + } + + public int size() { + return archetypes.length; + } + + public String archetypeAt(int index) { + return archetypes[index]; + } + + public float weightAt(int index) { + return weights[index]; + } + + public float weightOf(String archetype) { + Objects.requireNonNull(archetype, "archetype"); + for (int i = 0; i < archetypes.length; i++) { + if (archetypes[i].equals(archetype)) { + return weights[i]; + } + } + return 0f; + } + + public float totalWeight() { + float total = 0f; + for (float weight : weights) { + total += weight; + } + return total; + } + + public String select(float roll) { + float clampedRoll = Math.max(0f, Math.min(0.999999f, roll)); + float cumulative = 0f; + for (int i = 0; i < archetypes.length; i++) { + cumulative += weights[i]; + if (clampedRoll < cumulative) { + return archetypes[i]; + } + } + return archetypes[archetypes.length - 1]; + } + + private static void normalize(float[] weights) { + float total = 0f; + for (float weight : weights) { + if (weight < 0f) { + throw new IllegalArgumentException("composition weights cannot be negative"); + } + total += weight; + } + if (total <= 0f) { + throw new IllegalArgumentException("composition weight total must be > 0"); + } + for (int i = 0; i < weights.length; i++) { + weights[i] /= total; + } + } +} diff --git a/core/src/main/java/ru/project/tower/balance/MetaProgressionPacing.java b/core/src/main/java/ru/project/tower/balance/MetaProgressionPacing.java new file mode 100644 index 0000000..2b6073d --- /dev/null +++ b/core/src/main/java/ru/project/tower/balance/MetaProgressionPacing.java @@ -0,0 +1,33 @@ +package ru.project.tower.balance; + +public final class MetaProgressionPacing { + public static final int FIRST_ABILITY_TARGET_WAVE = 12; + public static final int FIRST_BOSS_TARGET_WAVE = 20; + public static final int FIRST_KEYSTONE_TARGET_WAVE = 25; + public static final int FIRST_MAXED_AXIS_TARGET_RUNS = 8; + + private MetaProgressionPacing() {} + + public static int currencyEarnedForRun(int reachedWave) { + int safeWave = Math.max(0, reachedWave); + int waveClearCurrency = safeWave * 5 + (safeWave / 5) * 10; + int gameOverAward = safeWave; + return waveClearCurrency + gameOverAward; + } + + public static int projectedCurrencyAfterRuns(int... reachedWaves) { + int total = 0; + for (int wave : reachedWaves) { + total += currencyEarnedForRun(wave); + } + return total; + } + + public static int firstKeystoneCostTarget() { + return 700; + } + + public static int firstMaxedAxisCostTarget() { + return 100 + 150 + 225 + 337 + 506; + } +} diff --git a/core/src/main/java/ru/project/tower/balance/PowerAxis.java b/core/src/main/java/ru/project/tower/balance/PowerAxis.java new file mode 100644 index 0000000..cd9cc6f --- /dev/null +++ b/core/src/main/java/ru/project/tower/balance/PowerAxis.java @@ -0,0 +1,18 @@ +package ru.project.tower.balance; + +public enum PowerAxis { + DAMAGE, + CADENCE, + CRIT, + PIERCE, + AOE, + CONTROL, + BOSSING, + HEALTH, + REGEN, + SHIELD, + ARMOR, + ECONOMY, + UTILITY, + ABILITY +} diff --git a/core/src/main/java/ru/project/tower/balance/SeededUpgradeDraftDeck.java b/core/src/main/java/ru/project/tower/balance/SeededUpgradeDraftDeck.java new file mode 100644 index 0000000..a1193ea --- /dev/null +++ b/core/src/main/java/ru/project/tower/balance/SeededUpgradeDraftDeck.java @@ -0,0 +1,156 @@ +package ru.project.tower.balance; + +import java.util.HashMap; +import java.util.Map; +import ru.project.tower.support.RandomSource; + +public final class SeededUpgradeDraftDeck { + private static final int OFFER_COUNT = 3; + private static final int MAX_REROLLS = 2; + private static final int BASE_REROLL_COST = 15; + private final UpgradeCard[] registry; + private final Map pickedCopies = new HashMap<>(); + private UpgradeCard[] activeOffer; + private int rerollsUsed; + + public SeededUpgradeDraftDeck() { + this(UpgradeCardRegistry.all()); + } + + public SeededUpgradeDraftDeck(UpgradeCard[] registry) { + this.registry = registry; + } + + public UpgradeCard[] draft(RandomSource random) { + UpgradeCard[] pool = eligiblePool(); + UpgradeCard[] offer = new UpgradeCard[Math.min(OFFER_COUNT, pool.length)]; + int poolSize = pool.length; + for (int i = 0; i < offer.length; i++) { + int index = random.nextIntInclusive(poolSize - 1); + offer[i] = pool[index]; + int after = poolSize - index - 1; + if (after > 0) { + System.arraycopy(pool, index + 1, pool, index, after); + } + poolSize--; + } + activeOffer = offer; + return copyOffer(); + } + + public void pick(int index) { + if (activeOffer == null || index < 0 || index >= activeOffer.length) { + throw new IllegalArgumentException("No active card offer at index " + index); + } + UpgradeCard card = activeOffer[index]; + pickedCopies.put(card.id(), pickedCopies.getOrDefault(card.id(), 0) + 1); + activeOffer = null; + rerollsUsed = 0; + } + + public UpgradeCard[] reroll(RandomSource random) { + if (activeOffer == null) { + throw new IllegalStateException("Cannot reroll before drafting an offer"); + } + if (!canReroll()) { + throw new IllegalStateException("No card rerolls remaining"); + } + rerollsUsed++; + return draft(random); + } + + public boolean canReroll() { + return rerollsRemaining() > 0; + } + + public int rerollsRemaining() { + return Math.max(0, MAX_REROLLS - rerollsUsed); + } + + public int rerollCost(float discountFraction) { + float discount = Math.max(0f, Math.min(0.80f, discountFraction)); + return Math.max(1, (int) Math.ceil(BASE_REROLL_COST * (1f - discount))); + } + + public Snapshot snapshot() { + String[] ids = activeOffer == null ? new String[0] : new String[activeOffer.length]; + for (int i = 0; i < ids.length; i++) { + ids[i] = activeOffer[i].id(); + } + return new Snapshot(new HashMap<>(pickedCopies), ids, rerollsUsed); + } + + public void apply(Snapshot snapshot) { + pickedCopies.clear(); + pickedCopies.putAll(snapshot.pickedCopies()); + rerollsUsed = snapshot.rerollsUsed(); + activeOffer = new UpgradeCard[snapshot.activeOfferIds().length]; + for (int i = 0; i < activeOffer.length; i++) { + activeOffer[i] = find(snapshot.activeOfferIds()[i]); + } + } + + private UpgradeCard[] copyOffer() { + UpgradeCard[] copy = new UpgradeCard[activeOffer.length]; + System.arraycopy(activeOffer, 0, copy, 0, activeOffer.length); + return copy; + } + + private UpgradeCard[] eligiblePool() { + int count = 0; + for (UpgradeCard card : registry) { + if (pickedCopies.getOrDefault(card.id(), 0) < card.maxCopies()) { + count++; + } + } + UpgradeCard[] pool = new UpgradeCard[count]; + int index = 0; + for (UpgradeCard card : registry) { + if (pickedCopies.getOrDefault(card.id(), 0) < card.maxCopies()) { + pool[index++] = card; + } + } + return pool; + } + + private UpgradeCard find(String id) { + for (UpgradeCard card : registry) { + if (card.id().equals(id)) { + return card; + } + } + throw new IllegalArgumentException("Unknown upgrade card id: " + id); + } + + public static final class Snapshot { + private final Map pickedCopies; + private final String[] activeOfferIds; + private final int rerollsUsed; + + public Snapshot(Map pickedCopies, String[] activeOfferIds) { + this(pickedCopies, activeOfferIds, 0); + } + + public Snapshot( + Map pickedCopies, String[] activeOfferIds, int rerollsUsed) { + this.pickedCopies = new HashMap<>(pickedCopies); + this.activeOfferIds = new String[activeOfferIds.length]; + System.arraycopy(activeOfferIds, 0, this.activeOfferIds, 0, activeOfferIds.length); + this.rerollsUsed = Math.max(0, rerollsUsed); + } + + public Map pickedCopies() { + return new HashMap<>(pickedCopies); + } + + public String[] activeOfferIds() { + String[] copy = new String[activeOfferIds.length]; + System.arraycopy(activeOfferIds, 0, copy, 0, activeOfferIds.length); + return copy; + } + + public int rerollsUsed() { + return rerollsUsed; + } + } +} diff --git a/core/src/main/java/ru/project/tower/balance/SimulationReport.java b/core/src/main/java/ru/project/tower/balance/SimulationReport.java new file mode 100644 index 0000000..303c321 --- /dev/null +++ b/core/src/main/java/ru/project/tower/balance/SimulationReport.java @@ -0,0 +1,515 @@ +package ru.project.tower.balance; + +import java.util.EnumMap; +import java.util.Map; + +public final class SimulationReport { + private final long seed; + private final String sourceKind; + private final String strategyId; + private final int waveReached; + private final float latestBossKillSeconds; + private final int purchases; + private final int moneyEarned; + private final int moneySpent; + private final float averageClearSeconds; + private final int deaths; + private final float damageTaken; + private final int bonusDrops; + private final int bonusSpawned; + private final int bonusCollected; + private final float activeBonusPower; + private final int activeBonusUptimeWaves; + private final int triggeredSynergies; + private final float survivability; + private final EnumMap effectivePowerByAxis; + private final float firstBossKillSeconds; + private final int shopPurchases; + private final int abilityUses; + private final int selectedDamageCards; + private final int selectedFireRateCards; + private final int peakVisibleBonusBalls; + private final float effectiveDamage; + private final float effectiveShotCooldownMs; + + public SimulationReport( + long seed, + String strategyId, + int waveReached, + float latestBossKillSeconds, + int purchases, + float averageClearSeconds, + int deaths, + float damageTaken, + int bonusDrops, + float activeBonusPower, + float survivability, + Map effectivePowerByAxis) { + this( + seed, + strategyId, + waveReached, + latestBossKillSeconds, + purchases, + averageClearSeconds, + deaths, + damageTaken, + bonusDrops, + activeBonusPower, + survivability, + effectivePowerByAxis, + "axis-simulation", + latestBossKillSeconds, + purchases, + 0, + 0, + 0, + 0, + 0f, + 0f); + } + + public SimulationReport( + long seed, + String strategyId, + int waveReached, + float latestBossKillSeconds, + int purchases, + float averageClearSeconds, + int deaths, + float damageTaken, + int bonusDrops, + float activeBonusPower, + float survivability, + Map effectivePowerByAxis, + float firstBossKillSeconds, + int shopPurchases, + int abilityUses, + int selectedDamageCards, + int selectedFireRateCards, + int peakVisibleBonusBalls, + float effectiveDamage, + float effectiveShotCooldownMs) { + this( + seed, + strategyId, + waveReached, + latestBossKillSeconds, + purchases, + averageClearSeconds, + deaths, + damageTaken, + bonusDrops, + activeBonusPower, + survivability, + effectivePowerByAxis, + "axis-simulation", + firstBossKillSeconds, + shopPurchases, + abilityUses, + selectedDamageCards, + selectedFireRateCards, + peakVisibleBonusBalls, + effectiveDamage, + effectiveShotCooldownMs); + } + + public SimulationReport( + long seed, + String strategyId, + int waveReached, + float latestBossKillSeconds, + int purchases, + float averageClearSeconds, + int deaths, + float damageTaken, + int bonusDrops, + float activeBonusPower, + float survivability, + Map effectivePowerByAxis, + String sourceKind, + float firstBossKillSeconds, + int shopPurchases, + int abilityUses, + int selectedDamageCards, + int selectedFireRateCards, + int peakVisibleBonusBalls, + float effectiveDamage, + float effectiveShotCooldownMs) { + this( + seed, + strategyId, + waveReached, + latestBossKillSeconds, + purchases, + averageClearSeconds, + deaths, + damageTaken, + bonusDrops, + activeBonusPower, + survivability, + effectivePowerByAxis, + sourceKind, + firstBossKillSeconds, + shopPurchases, + abilityUses, + selectedDamageCards, + selectedFireRateCards, + peakVisibleBonusBalls, + effectiveDamage, + effectiveShotCooldownMs, + bonusDrops, + bonusDrops, + 0, + 0); + } + + public SimulationReport( + long seed, + String strategyId, + int waveReached, + float latestBossKillSeconds, + int purchases, + float averageClearSeconds, + int deaths, + float damageTaken, + int bonusDrops, + float activeBonusPower, + float survivability, + Map effectivePowerByAxis, + String sourceKind, + float firstBossKillSeconds, + int shopPurchases, + int abilityUses, + int selectedDamageCards, + int selectedFireRateCards, + int peakVisibleBonusBalls, + float effectiveDamage, + float effectiveShotCooldownMs, + int bonusSpawned, + int bonusCollected, + int activeBonusUptimeWaves) { + this( + seed, + strategyId, + waveReached, + latestBossKillSeconds, + purchases, + averageClearSeconds, + deaths, + damageTaken, + bonusDrops, + activeBonusPower, + survivability, + effectivePowerByAxis, + sourceKind, + firstBossKillSeconds, + shopPurchases, + abilityUses, + selectedDamageCards, + selectedFireRateCards, + peakVisibleBonusBalls, + effectiveDamage, + effectiveShotCooldownMs, + bonusSpawned, + bonusCollected, + activeBonusUptimeWaves, + 0, + 0, + 0); + } + + public SimulationReport( + long seed, + String strategyId, + int waveReached, + float latestBossKillSeconds, + int purchases, + float averageClearSeconds, + int deaths, + float damageTaken, + int bonusDrops, + float activeBonusPower, + float survivability, + Map effectivePowerByAxis, + String sourceKind, + float firstBossKillSeconds, + int shopPurchases, + int abilityUses, + int selectedDamageCards, + int selectedFireRateCards, + int peakVisibleBonusBalls, + float effectiveDamage, + float effectiveShotCooldownMs, + int bonusSpawned, + int bonusCollected, + int activeBonusUptimeWaves, + int triggeredSynergies) { + this( + seed, + strategyId, + waveReached, + latestBossKillSeconds, + purchases, + averageClearSeconds, + deaths, + damageTaken, + bonusDrops, + activeBonusPower, + survivability, + effectivePowerByAxis, + sourceKind, + firstBossKillSeconds, + shopPurchases, + abilityUses, + selectedDamageCards, + selectedFireRateCards, + peakVisibleBonusBalls, + effectiveDamage, + effectiveShotCooldownMs, + bonusSpawned, + bonusCollected, + activeBonusUptimeWaves, + triggeredSynergies, + 0, + 0); + } + + public SimulationReport( + long seed, + String strategyId, + int waveReached, + float latestBossKillSeconds, + int purchases, + float averageClearSeconds, + int deaths, + float damageTaken, + int bonusDrops, + float activeBonusPower, + float survivability, + Map effectivePowerByAxis, + String sourceKind, + float firstBossKillSeconds, + int shopPurchases, + int abilityUses, + int selectedDamageCards, + int selectedFireRateCards, + int peakVisibleBonusBalls, + float effectiveDamage, + float effectiveShotCooldownMs, + int bonusSpawned, + int bonusCollected, + int activeBonusUptimeWaves, + int triggeredSynergies, + int moneyEarned, + int moneySpent) { + this.seed = seed; + this.sourceKind = sourceKind; + this.strategyId = strategyId; + this.waveReached = waveReached; + this.latestBossKillSeconds = latestBossKillSeconds; + this.purchases = purchases; + this.moneyEarned = moneyEarned; + this.moneySpent = moneySpent; + this.averageClearSeconds = averageClearSeconds; + this.deaths = deaths; + this.damageTaken = damageTaken; + this.bonusDrops = bonusDrops; + this.bonusSpawned = bonusSpawned; + this.bonusCollected = bonusCollected; + this.activeBonusPower = activeBonusPower; + this.activeBonusUptimeWaves = activeBonusUptimeWaves; + this.triggeredSynergies = triggeredSynergies; + this.survivability = survivability; + this.effectivePowerByAxis = new EnumMap<>(effectivePowerByAxis); + this.firstBossKillSeconds = firstBossKillSeconds; + this.shopPurchases = shopPurchases; + this.abilityUses = abilityUses; + this.selectedDamageCards = selectedDamageCards; + this.selectedFireRateCards = selectedFireRateCards; + this.peakVisibleBonusBalls = peakVisibleBonusBalls; + this.effectiveDamage = effectiveDamage; + this.effectiveShotCooldownMs = effectiveShotCooldownMs; + } + + public static SimulationReport fromRoute(long seed, BalanceRouteReport route) { + EnumMap axes = new EnumMap<>(route.effectivePowerByAxis()); + axes.put(PowerAxis.DAMAGE, route.effectiveDamage()); + axes.put(PowerAxis.CADENCE, 1000f / Math.max(1f, route.effectiveShotCooldownMs())); + return new SimulationReport( + seed, + route.strategyId(), + route.waveReached(), + route.firstBossKillSeconds(), + route.shopPurchases(), + 0f, + route.waveReached() >= 100 ? 0 : 1, + 0f, + route.peakVisibleBonusBalls(), + route.peakVisibleBonusBalls(), + Math.max(0.01f, route.waveReached() / 100f), + axes, + "route-simulation", + route.firstBossKillSeconds(), + route.shopPurchases(), + route.abilityUses(), + route.selectedDamageCards(), + route.selectedFireRateCards(), + route.peakVisibleBonusBalls(), + route.effectiveDamage(), + route.effectiveShotCooldownMs()); + } + + public long seed() { + return seed; + } + + public String sourceKind() { + return sourceKind; + } + + public String strategyId() { + return strategyId; + } + + public int waveReached() { + return waveReached; + } + + public float latestBossKillSeconds() { + return latestBossKillSeconds; + } + + public int purchases() { + return purchases; + } + + public int moneyEarned() { + return moneyEarned; + } + + public int moneySpent() { + return moneySpent; + } + + public float averageClearSeconds() { + return averageClearSeconds; + } + + public int deaths() { + return deaths; + } + + public float damageTaken() { + return damageTaken; + } + + public int bonusDrops() { + return bonusDrops; + } + + public int bonusSpawned() { + return bonusSpawned; + } + + public int bonusCollected() { + return bonusCollected; + } + + public float activeBonusPower() { + return activeBonusPower; + } + + public int activeBonusUptimeWaves() { + return activeBonusUptimeWaves; + } + + public int triggeredSynergies() { + return triggeredSynergies; + } + + public float survivability() { + return survivability; + } + + public Map effectivePowerByAxis() { + return new EnumMap<>(effectivePowerByAxis); + } + + public float firstBossKillSeconds() { + return firstBossKillSeconds; + } + + public int shopPurchases() { + return shopPurchases; + } + + public int abilityUses() { + return abilityUses; + } + + public int selectedDamageCards() { + return selectedDamageCards; + } + + public int selectedFireRateCards() { + return selectedFireRateCards; + } + + public int peakVisibleBonusBalls() { + return peakVisibleBonusBalls; + } + + public float effectiveDamage() { + return effectiveDamage; + } + + public float effectiveShotCooldownMs() { + return effectiveShotCooldownMs; + } + + public String summaryLine() { + return "seed=" + + seed + + " source=" + + sourceKind + + " strategy=" + + strategyId + + " wave=" + + waveReached + + " firstBoss=" + + firstBossKillSeconds + + "s shop=" + + shopPurchases + + " moneyEarned=" + + moneyEarned + + " moneySpent=" + + moneySpent + + " abilities=" + + abilityUses + + " cards=" + + selectedDamageCards + + "/" + + selectedFireRateCards + + " visibleBonus=" + + peakVisibleBonusBalls + + " bonusDrops=" + + bonusDrops + + " bonusSpawned=" + + bonusSpawned + + " bonusCollected=" + + bonusCollected + + " activeBonus=" + + activeBonusPower + + " activeBonusUptime=" + + activeBonusUptimeWaves + + " synergies=" + + triggeredSynergies + + " damageTaken=" + + damageTaken + + " damage=" + + effectiveDamage + + " cooldownMs=" + + effectiveShotCooldownMs; + } +} diff --git a/core/src/main/java/ru/project/tower/balance/StrategyProfile.java b/core/src/main/java/ru/project/tower/balance/StrategyProfile.java new file mode 100644 index 0000000..55645fe --- /dev/null +++ b/core/src/main/java/ru/project/tower/balance/StrategyProfile.java @@ -0,0 +1,50 @@ +package ru.project.tower.balance; + +import java.util.EnumMap; +import java.util.Map; + +public final class StrategyProfile { + private final String id; + private final Map axisWeights; + private final float metaRating; + + private StrategyProfile(String id, Map axisWeights, float metaRating) { + this.id = id; + this.axisWeights = new EnumMap<>(axisWeights); + this.metaRating = metaRating; + } + + public static StrategyProfile of(String id, PowerAxis primary, PowerAxis secondary) { + EnumMap weights = new EnumMap<>(PowerAxis.class); + for (PowerAxis axis : PowerAxis.values()) { + weights.put(axis, 0.35f); + } + weights.put(primary, 1f); + weights.put(secondary, 0.75f); + return new StrategyProfile(id, weights, 8f); + } + + public static StrategyProfile mixed() { + EnumMap weights = new EnumMap<>(PowerAxis.class); + for (PowerAxis axis : PowerAxis.values()) { + weights.put(axis, 0.70f); + } + return new StrategyProfile("mixed", weights, 8f); + } + + public StrategyProfile withMetaTier(String tierId, float metaRating) { + return new StrategyProfile(id + ":" + tierId, axisWeights, metaRating); + } + + public String id() { + return id; + } + + public float weight(PowerAxis axis) { + return axisWeights.get(axis); + } + + public float metaRating() { + return metaRating; + } +} diff --git a/core/src/main/java/ru/project/tower/balance/UpgradeCard.java b/core/src/main/java/ru/project/tower/balance/UpgradeCard.java new file mode 100644 index 0000000..b8f46fa --- /dev/null +++ b/core/src/main/java/ru/project/tower/balance/UpgradeCard.java @@ -0,0 +1,91 @@ +package ru.project.tower.balance; + +import java.util.Objects; + +public final class UpgradeCard { + private final String id; + private final String family; + private final PowerAxis primaryAxis; + private final PowerAxis synergyAxis; + private final float rating; + private final int maxCopies; + private final UpgradeCardRarity rarity; + private final float offerWeight; + private final String[] tags; + + public UpgradeCard( + String id, + String family, + PowerAxis primaryAxis, + PowerAxis synergyAxis, + float rating, + int maxCopies) { + this( + id, + family, + primaryAxis, + synergyAxis, + rating, + maxCopies, + UpgradeCardRarity.COMMON, + 1f, + family); + } + + public UpgradeCard( + String id, + String family, + PowerAxis primaryAxis, + PowerAxis synergyAxis, + float rating, + int maxCopies, + UpgradeCardRarity rarity, + float offerWeight, + String... tags) { + this.id = Objects.requireNonNull(id, "id"); + this.family = Objects.requireNonNull(family, "family"); + this.primaryAxis = Objects.requireNonNull(primaryAxis, "primaryAxis"); + this.synergyAxis = synergyAxis; + this.rating = rating; + this.maxCopies = maxCopies; + this.rarity = Objects.requireNonNull(rarity, "rarity"); + this.offerWeight = offerWeight; + this.tags = tags == null ? new String[0] : tags.clone(); + } + + public String id() { + return id; + } + + public String family() { + return family; + } + + public PowerAxis primaryAxis() { + return primaryAxis; + } + + public PowerAxis synergyAxis() { + return synergyAxis; + } + + public float rating() { + return rating; + } + + public int maxCopies() { + return maxCopies; + } + + public UpgradeCardRarity rarity() { + return rarity; + } + + public float offerWeight() { + return offerWeight; + } + + public String[] tags() { + return tags.clone(); + } +} diff --git a/core/src/main/java/ru/project/tower/balance/UpgradeCardRarity.java b/core/src/main/java/ru/project/tower/balance/UpgradeCardRarity.java new file mode 100644 index 0000000..f483853 --- /dev/null +++ b/core/src/main/java/ru/project/tower/balance/UpgradeCardRarity.java @@ -0,0 +1,7 @@ +package ru.project.tower.balance; + +public enum UpgradeCardRarity { + COMMON, + UNCOMMON, + RARE +} diff --git a/core/src/main/java/ru/project/tower/balance/UpgradeCardRegistry.java b/core/src/main/java/ru/project/tower/balance/UpgradeCardRegistry.java new file mode 100644 index 0000000..8276fd1 --- /dev/null +++ b/core/src/main/java/ru/project/tower/balance/UpgradeCardRegistry.java @@ -0,0 +1,248 @@ +package ru.project.tower.balance; + +public final class UpgradeCardRegistry { + private static final UpgradeCard[] CARDS = { + card( + "focused_damage", + "attack", + PowerAxis.DAMAGE, + PowerAxis.CRIT, + 5f, + 8, + UpgradeCardRarity.COMMON, + 1.2f, + "pure", + "damage"), + card( + "rupture_crit", + "attack", + PowerAxis.CRIT, + PowerAxis.DAMAGE, + 4f, + 7, + UpgradeCardRarity.COMMON, + 1.1f, + "crit", + "burst"), + card( + "boss_breaker", + "attack", + PowerAxis.BOSSING, + PowerAxis.CRIT, + 3.8f, + 6, + UpgradeCardRarity.UNCOMMON, + 0.85f, + "boss", + "single-target"), + card( + "execution_line", + "attack", + PowerAxis.DAMAGE, + PowerAxis.BOSSING, + 3.6f, + 6, + UpgradeCardRarity.UNCOMMON, + 0.85f, + "execute", + "single-target"), + card( + "arc_burst", + "control", + PowerAxis.AOE, + PowerAxis.CONTROL, + 4.5f, + 7, + UpgradeCardRarity.COMMON, + 1.0f, + "aoe", + "control"), + card( + "static_field", + "control", + PowerAxis.CONTROL, + PowerAxis.AOE, + 4.5f, + 7, + UpgradeCardRarity.COMMON, + 1.0f, + "slow", + "aoe"), + card( + "gravity_lens", + "control", + PowerAxis.CONTROL, + PowerAxis.BOSSING, + 3.5f, + 5, + UpgradeCardRarity.RARE, + 0.55f, + "pull", + "boss"), + card( + "barrier_cycle", + "defense", + PowerAxis.SHIELD, + PowerAxis.REGEN, + 4f, + 6, + UpgradeCardRarity.COMMON, + 1.0f, + "shield", + "regen"), + card( + "repair_loop", + "defense", + PowerAxis.REGEN, + PowerAxis.SHIELD, + 4f, + 6, + UpgradeCardRarity.COMMON, + 1.0f, + "regen", + "shield"), + card( + "plated_core", + "defense", + PowerAxis.ARMOR, + PowerAxis.HEALTH, + 3.6f, + 6, + UpgradeCardRarity.UNCOMMON, + 0.85f, + "armor", + "health"), + card( + "overdrive_sustain", + "defense", + PowerAxis.HEALTH, + PowerAxis.CADENCE, + 3.5f, + 6, + UpgradeCardRarity.UNCOMMON, + 0.75f, + "health", + "tempo"), + card( + "coin_compounder", + "utility", + PowerAxis.ECONOMY, + PowerAxis.UTILITY, + 3.2f, + 5, + UpgradeCardRarity.COMMON, + 0.9f, + "money", + "shop"), + card( + "reroll_signal", + "utility", + PowerAxis.UTILITY, + PowerAxis.ECONOMY, + 3.2f, + 5, + UpgradeCardRarity.UNCOMMON, + 0.75f, + "reroll", + "choice"), + card( + "bonus_magnet", + "utility", + PowerAxis.UTILITY, + PowerAxis.CADENCE, + 3.0f, + 5, + UpgradeCardRarity.COMMON, + 0.9f, + "bonus", + "pickup"), + card( + "coil_accelerator", + "attack", + PowerAxis.CADENCE, + PowerAxis.DAMAGE, + 3.5f, + 7, + UpgradeCardRarity.COMMON, + 1.05f, + "cadence", + "tempo"), + card( + "turret_directive", + "ability", + PowerAxis.ABILITY, + PowerAxis.AOE, + 4f, + 6, + UpgradeCardRarity.UNCOMMON, + 0.8f, + "turret", + "aoe"), + card( + "blast_protocol", + "ability", + PowerAxis.ABILITY, + PowerAxis.DAMAGE, + 3.6f, + 6, + UpgradeCardRarity.UNCOMMON, + 0.8f, + "explosion", + "damage"), + card( + "shield_script", + "ability", + PowerAxis.ABILITY, + PowerAxis.SHIELD, + 3.4f, + 6, + UpgradeCardRarity.UNCOMMON, + 0.8f, + "shield", + "cooldown"), + card( + "volatile_bargain", + "risk", + PowerAxis.DAMAGE, + PowerAxis.HEALTH, + 5.5f, + 4, + UpgradeCardRarity.RARE, + 0.45f, + "risk", + "damage"), + card( + "glass_cannon", + "risk", + PowerAxis.CRIT, + PowerAxis.ARMOR, + 5.0f, + 4, + UpgradeCardRarity.RARE, + 0.45f, + "risk", + "crit") + }; + + private UpgradeCardRegistry() {} + + public static UpgradeCard[] all() { + UpgradeCard[] copy = new UpgradeCard[CARDS.length]; + System.arraycopy(CARDS, 0, copy, 0, CARDS.length); + return copy; + } + + private static UpgradeCard card( + String id, + String family, + PowerAxis primaryAxis, + PowerAxis synergyAxis, + float rating, + int maxCopies, + UpgradeCardRarity rarity, + float offerWeight, + String... tags) { + return new UpgradeCard( + id, family, primaryAxis, synergyAxis, rating, maxCopies, rarity, offerWeight, tags); + } +} diff --git a/core/src/main/java/ru/project/tower/content/BossContentRegistry.java b/core/src/main/java/ru/project/tower/content/BossContentRegistry.java new file mode 100644 index 0000000..0a38c87 --- /dev/null +++ b/core/src/main/java/ru/project/tower/content/BossContentRegistry.java @@ -0,0 +1,145 @@ +package ru.project.tower.content; + +import com.badlogic.gdx.math.Circle; +import com.badlogic.gdx.math.Vector2; +import java.util.Objects; +import ru.project.tower.entities.circles.BaseCircleData; +import ru.project.tower.entities.circles.bosses.GlacialWardenData; +import ru.project.tower.entities.circles.bosses.IllusionMasterData; +import ru.project.tower.entities.circles.bosses.JuggernautData; +import ru.project.tower.entities.circles.bosses.ShadowWeaverData; +import ru.project.tower.entities.circles.bosses.SwarmQueenData; +import ru.project.tower.entities.circles.bosses.VolatileReactorData; +import ru.project.tower.support.BossEffectsHost; + + +public final class BossContentRegistry { + private static final BossSpec[] BOSSES = { + boss( + "SwarmQueen", + SwarmQueenData.class, + SwarmQueenData.getStaticRadius(), + SwarmQueenData.getStaticSpeed(), + (circle, velocity, host) -> new SwarmQueenData(circle, velocity, host)), + boss( + "Juggernaut", + JuggernautData.class, + JuggernautData.getStaticRadius(), + JuggernautData.getStaticSpeed(), + (circle, velocity, host) -> new JuggernautData(circle, velocity)), + boss( + "ShadowWeaver", + ShadowWeaverData.class, + ShadowWeaverData.getStaticRadius(), + ShadowWeaverData.getStaticSpeed(), + (circle, velocity, host) -> new ShadowWeaverData(circle, velocity)), + boss( + "VolatileReactor", + VolatileReactorData.class, + VolatileReactorData.getStaticRadius(), + VolatileReactorData.getStaticSpeed(), + (circle, velocity, host) -> new VolatileReactorData(circle, velocity)), + boss( + "GlacialWarden", + GlacialWardenData.class, + GlacialWardenData.getStaticRadius(), + GlacialWardenData.getStaticSpeed(), + (circle, velocity, host) -> new GlacialWardenData(circle, velocity)), + boss( + "IllusionMaster", + IllusionMasterData.class, + IllusionMasterData.getStaticRadius(), + IllusionMasterData.getStaticSpeed(), + (circle, velocity, host) -> new IllusionMasterData(circle, velocity)) + }; + + private BossContentRegistry() {} + + public static BossSpec[] all() { + return BOSSES.clone(); + } + + public static String[] ids() { + String[] ids = new String[BOSSES.length]; + for (int i = 0; i < BOSSES.length; i++) { + ids[i] = BOSSES[i].id(); + } + return ids; + } + + public static BossSpec findById(String id) { + for (BossSpec boss : BOSSES) { + if (boss.id().equals(id)) { + return boss; + } + } + return null; + } + + public static boolean isBoss(BaseCircleData enemy) { + if (enemy == null) { + return false; + } + Class enemyClass = enemy.getClass(); + for (BossSpec boss : BOSSES) { + if (boss.type().isAssignableFrom(enemyClass)) { + return true; + } + } + return false; + } + + private static BossSpec boss( + String id, + Class type, + float radius, + float speed, + BossFactory factory) { + return new BossSpec(id, type, radius, speed, factory); + } + + public interface BossFactory { + BaseCircleData create(Circle circle, Vector2 velocity, BossEffectsHost host); + } + + public static final class BossSpec { + private final String id; + private final Class type; + private final float radius; + private final float speed; + private final BossFactory factory; + + private BossSpec( + String id, + Class type, + float radius, + float speed, + BossFactory factory) { + this.id = Objects.requireNonNull(id, "id"); + this.type = Objects.requireNonNull(type, "type"); + this.radius = radius; + this.speed = speed; + this.factory = Objects.requireNonNull(factory, "factory"); + } + + public String id() { + return id; + } + + public Class type() { + return type; + } + + public float radius() { + return radius; + } + + public float speed() { + return speed; + } + + public BaseCircleData create(Circle circle, Vector2 velocity, BossEffectsHost host) { + return factory.create(circle, velocity, host); + } + } +} diff --git a/core/src/main/java/ru/project/tower/entities/bullets/BulletData.java b/core/src/main/java/ru/project/tower/entities/bullets/BulletData.java new file mode 100644 index 0000000..f0ea73f --- /dev/null +++ b/core/src/main/java/ru/project/tower/entities/bullets/BulletData.java @@ -0,0 +1,142 @@ +package ru.project.tower.entities.bullets; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.math.Circle; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.utils.Pool; + +public class BulletData implements Pool.Poolable { + public Circle bullet; + public Vector2 velocity; + public int damage; + private boolean isEnemyBullet; + private boolean isCrit = false; + private Color color; + + + public int piercesLeft = 0; + public boolean homing = false; + public float aoeRadius = 0f; + public float trailParticleSpawnBudget = 0f; + + + + public BulletData() { + this.bullet = new Circle(0f, 0f, 1f); + this.velocity = new Vector2(0f, 0f); + this.damage = 1; + this.isEnemyBullet = false; + this.color = null; + } + + public BulletData(Circle bullet, Vector2 velocity, int damage) { + this.bullet = bullet; + this.velocity = velocity; + this.damage = damage; + this.isEnemyBullet = false; + this.color = null; + } + + public BulletData(Circle bullet, Vector2 velocity, boolean isEnemyBullet) { + this.bullet = bullet; + this.velocity = velocity; + this.damage = isEnemyBullet ? 10 : 1; + this.isEnemyBullet = isEnemyBullet; + this.color = null; + } + + + public void configureAsPlayerBullet( + float x, float y, float radius, float vx, float vy, int damage) { + bullet.x = x; + bullet.y = y; + bullet.radius = radius; + velocity.x = vx; + velocity.y = vy; + this.damage = damage; + this.isEnemyBullet = false; + this.isCrit = false; + this.color = null; + this.piercesLeft = 0; + this.homing = false; + this.aoeRadius = 0f; + this.trailParticleSpawnBudget = 0f; + } + + + public void configureAsEnemyBullet( + float x, float y, float radius, float vx, float vy, int damage) { + bullet.x = x; + bullet.y = y; + bullet.radius = radius; + velocity.x = vx; + velocity.y = vy; + this.damage = damage; + this.isEnemyBullet = true; + this.isCrit = false; + this.color = null; + this.piercesLeft = 0; + this.homing = false; + this.aoeRadius = 0f; + this.trailParticleSpawnBudget = 0f; + } + + @Override + public void reset() { + + bullet.x = 0f; + bullet.y = 0f; + bullet.radius = 1f; + velocity.x = 0f; + velocity.y = 0f; + damage = 1; + isEnemyBullet = false; + isCrit = false; + color = null; + piercesLeft = 0; + homing = false; + aoeRadius = 0f; + trailParticleSpawnBudget = 0f; + } + + public float getX() { + return bullet.x; + } + + public float getY() { + return bullet.y; + } + + public float getRadius() { + return bullet.radius; + } + + public void move(float delta) { + bullet.x += velocity.x * delta; + bullet.y += velocity.y * delta; + } + + public Circle getCircle() { + return bullet; + } + + public boolean isEnemyBullet() { + return isEnemyBullet; + } + + public void setColor(Color color) { + this.color = color; + } + + public Color getColor() { + return color; + } + + public void setCrit(boolean isCrit) { + this.isCrit = isCrit; + } + + public boolean isCrit() { + return isCrit; + } +} diff --git a/core/src/main/java/ru/project/tower/entities/bullets/BulletEffectsSink.java b/core/src/main/java/ru/project/tower/entities/bullets/BulletEffectsSink.java new file mode 100644 index 0000000..2b0339b --- /dev/null +++ b/core/src/main/java/ru/project/tower/entities/bullets/BulletEffectsSink.java @@ -0,0 +1,37 @@ +package ru.project.tower.entities.bullets; + +import ru.project.tower.entities.circles.BaseCircleData; + + + + + + + + + + + + + + + +public interface BulletEffectsSink { + + + void onEnemyHit(BaseCircleData enemy, int damage, boolean isCrit); + + + + + + void onEnemyKilled(BaseCircleData enemy); + + + + + void onEnemyBulletHitPlayer(BulletData bullet); + + + void onCrit(BaseCircleData enemy, int damage); +} diff --git a/core/src/main/java/ru/project/tower/entities/bullets/BulletMultipliers.java b/core/src/main/java/ru/project/tower/entities/bullets/BulletMultipliers.java new file mode 100644 index 0000000..a416af6 --- /dev/null +++ b/core/src/main/java/ru/project/tower/entities/bullets/BulletMultipliers.java @@ -0,0 +1,30 @@ +package ru.project.tower.entities.bullets; + + + + + + + +public final class BulletMultipliers { + + public final float speedMultiplier; + public final float damageMultiplier; + public final boolean isCrit; + public final float critDamageMultiplier; + + public BulletMultipliers( + float speedMultiplier, + float damageMultiplier, + boolean isCrit, + float critDamageMultiplier) { + this.speedMultiplier = speedMultiplier; + this.damageMultiplier = damageMultiplier; + this.isCrit = isCrit; + this.critDamageMultiplier = critDamageMultiplier; + } + + public static BulletMultipliers defaults() { + return new BulletMultipliers(1f, 1f, false, 1f); + } +} diff --git a/core/src/main/java/ru/project/tower/entities/bullets/BulletSystem.java b/core/src/main/java/ru/project/tower/entities/bullets/BulletSystem.java new file mode 100644 index 0000000..be1d95e --- /dev/null +++ b/core/src/main/java/ru/project/tower/entities/bullets/BulletSystem.java @@ -0,0 +1,447 @@ +package ru.project.tower.entities.bullets; + +import com.badlogic.gdx.math.Rectangle; +import com.badlogic.gdx.utils.Array; +import com.badlogic.gdx.utils.Pools; +import java.util.Objects; +import ru.project.tower.entities.circles.BaseCircleData; +import ru.project.tower.support.RangeChecks; + + + + + + + +public class BulletSystem { + + private static final int DEFAULT_BASE_DAMAGE = 1; + private static final float DEFAULT_BASE_SPEED = 300f; + private static final int TICK_MISS = 0; + private static final int TICK_HIT = 1; + private static final int TICK_ENEMY_INDEX_DIRTY = 2; + + private int bulletDamage = DEFAULT_BASE_DAMAGE; + private float bulletSpeed = DEFAULT_BASE_SPEED; + + private int runDamageBonus = 0; + private int runPierceBonus = 0; + private float runAoeBonus = 0f; + + private final Array bullets = new Array<>(); + private final BulletTalentProvider talentProvider; + private final EnemySpatialIndex enemySpatialIndex = new EnemySpatialIndex(); + private int lastPrimaryCandidateChecksForTests; + private float primaryHitTime; + + public BulletSystem(BulletTalentProvider talentProvider) { + this.talentProvider = Objects.requireNonNull(talentProvider, "talentProvider"); + } + + public Array getBullets() { + return bullets; + } + + int getLastPrimaryCandidateChecksForTests() { + return lastPrimaryCandidateChecksForTests; + } + + public int getBaseDamage() { + return bulletDamage; + } + + public float getBaseSpeed() { + return bulletSpeed; + } + + public int getRunDamageBonus() { + return runDamageBonus; + } + + public int getRunPierceBonus() { + return runPierceBonus; + } + + public float getRunAoeBonus() { + return runAoeBonus; + } + + + + public void fireBullet( + float fromX, + float fromY, + float angleRad, + float bulletRadius, + float gameScale, + BulletMultipliers mult) { + fireBullet( + fromX, + fromY, + angleRad, + bulletRadius, + gameScale, + mult.speedMultiplier, + mult.damageMultiplier, + mult.isCrit, + mult.critDamageMultiplier); + } + + public void fireBullet( + float fromX, + float fromY, + float angleRad, + float bulletRadius, + float gameScale, + float speedMultiplier, + float damageMultiplier, + boolean isCrit, + float critDamageMultiplier) { + float effectiveSpeed = bulletSpeed * speedMultiplier * gameScale; + int baseDmg = bulletDamage + runDamageBonus; + int damage = (int) (baseDmg * damageMultiplier); + if (isCrit) { + damage = (int) (damage * critDamageMultiplier); + } + + float vx = (float) Math.cos(angleRad) * effectiveSpeed; + float vy = (float) Math.sin(angleRad) * effectiveSpeed; + + BulletData bullet = Pools.obtain(BulletData.class); + bullet.configureAsPlayerBullet(fromX, fromY, bulletRadius, vx, vy, damage); + bullet.setCrit(isCrit); + bullet.piercesLeft = talentProvider.pierceLevel() + runPierceBonus; + bullet.aoeRadius = talentProvider.aoeLevel() * 30f + runAoeBonus; + + bullets.add(bullet); + } + + public void fireTurretShot( + float fromX, + float fromY, + float angleRad, + float bulletRadius, + float gameScale, + int damage) { + float speed = bulletSpeed * gameScale; + float vx = (float) Math.cos(angleRad) * speed; + float vy = (float) Math.sin(angleRad) * speed; + BulletData bullet = Pools.obtain(BulletData.class); + bullet.configureAsPlayerBullet(fromX, fromY, bulletRadius, vx, vy, damage); + bullets.add(bullet); + } + + public void addEnemyBullet(BulletData bullet) { + bullets.add(bullet); + } + + public void fireEnemyBullet( + float fromX, float fromY, float bulletRadius, float vx, float vy, int damage) { + BulletData bullet = Pools.obtain(BulletData.class); + bullet.configureAsEnemyBullet(fromX, fromY, bulletRadius, vx, vy, damage); + bullets.add(bullet); + } + + + + public void tick( + float delta, + Array enemies, + Rectangle playerSquare, + BulletEffectsSink sink) { + lastPrimaryCandidateChecksForTests = 0; + boolean enemyIndexDirty = true; + + for (int i = 0; i < bullets.size; i++) { + BulletData bulletData = bullets.get(i); + float px = bulletData.bullet.x; + float py = bulletData.bullet.y; + float mx = bulletData.velocity.x * delta; + float my = bulletData.velocity.y * delta; + int tickResult; + + if (bulletData.isEnemyBullet()) { + tickResult = + tickEnemyBullet(bulletData, mx, my, playerSquare, sink) + ? TICK_HIT + : TICK_MISS; + } else { + if (enemyIndexDirty || enemySpatialIndex.enemyCount() != enemies.size) { + enemySpatialIndex.build(enemies); + enemyIndexDirty = false; + } + + tickResult = tickPlayerBullet(bulletData, px, py, mx, my, enemies, sink); + if ((tickResult & TICK_ENEMY_INDEX_DIRTY) != 0) { + enemyIndexDirty = true; + } + } + + if ((tickResult & TICK_HIT) != 0 && finishBulletHit(bulletData, i)) { + i--; + } + } + } + + private boolean tickEnemyBullet( + BulletData bulletData, + float moveX, + float moveY, + Rectangle playerSquare, + BulletEffectsSink sink) { + bulletData.bullet.x += moveX; + bulletData.bullet.y += moveY; + + float squareCenterX = playerSquare.x + playerSquare.width / 2f; + float squareCenterY = playerSquare.y + playerSquare.height / 2f; + float collideAt = + bulletData.bullet.radius + Math.min(playerSquare.width, playerSquare.height) / 2f; + + if (RangeChecks.withinRadiusExclusive( + bulletData.bullet.x, + bulletData.bullet.y, + squareCenterX, + squareCenterY, + collideAt)) { + sink.onEnemyBulletHitPlayer(bulletData); + return true; + } + return false; + } + + private int tickPlayerBullet( + BulletData bulletData, + float previousX, + float previousY, + float moveX, + float moveY, + Array enemies, + BulletEffectsSink sink) { + int primaryIndex = + findPrimaryHitIndex(bulletData, previousX, previousY, moveX, moveY, enemies); + if (primaryIndex < 0) { + return finishPlayerBulletMiss(bulletData, previousX, previousY, moveX, moveY); + } + + BaseCircleData primary = enemies.get(primaryIndex); + movePlayerBulletToPrimaryHit(bulletData, previousX, previousY, moveX, moveY); + return applyPrimaryHit(bulletData, primary, enemies, sink); + } + + private int findPrimaryHitIndex( + BulletData bulletData, + float previousX, + float previousY, + float moveX, + float moveY, + Array enemies) { + int earliestIndex = -1; + float earliestTime = Float.POSITIVE_INFINITY; + float a = moveX * moveX + moveY * moveY; + int candidateCount = + queryPrimaryHitCandidates(bulletData, previousX, previousY, moveX, moveY); + + for (int candidate = 0; candidate < candidateCount; candidate++) { + int j = enemySpatialIndex.candidateAt(candidate); + BaseCircleData enemy = enemies.get(j); + lastPrimaryCandidateChecksForTests++; + float t = + primaryCollisionTime(bulletData, enemy, previousX, previousY, moveX, moveY, a); + if (t == Float.POSITIVE_INFINITY) continue; + + if (isEarlierPrimaryHit(t, earliestTime, j, earliestIndex)) { + earliestTime = t; + earliestIndex = j; + } + } + + primaryHitTime = earliestTime; + return earliestIndex; + } + + private int queryPrimaryHitCandidates( + BulletData bulletData, float previousX, float previousY, float moveX, float moveY) { + float sweepPadding = bulletData.bullet.radius + enemySpatialIndex.maxEnemyRadius(); + return enemySpatialIndex.queryRect( + Math.min(previousX, previousX + moveX) - sweepPadding, + Math.min(previousY, previousY + moveY) - sweepPadding, + Math.max(previousX, previousX + moveX) + sweepPadding, + Math.max(previousY, previousY + moveY) + sweepPadding); + } + + private float primaryCollisionTime( + BulletData bulletData, + BaseCircleData enemy, + float previousX, + float previousY, + float moveX, + float moveY, + float a) { + float radiusSum = bulletData.bullet.radius + enemy.circle.radius; + float dx = previousX - enemy.circle.x; + float dy = previousY - enemy.circle.y; + float c = dx * dx + dy * dy - radiusSum * radiusSum; + + if (c <= 0f) return 0f; + if (a < 1e-6f) return Float.POSITIVE_INFINITY; + + float b = 2f * (dx * moveX + dy * moveY); + float disc = b * b - 4f * a * c; + if (disc < 0f) return Float.POSITIVE_INFINITY; + + float t = (-b - (float) Math.sqrt(disc)) / (2f * a); + if (t < 0f || t > 1f) return Float.POSITIVE_INFINITY; + return t; + } + + private boolean isEarlierPrimaryHit(float t, float earliestTime, int j, int earliestIndex) { + return t < earliestTime + || (Float.compare(t, earliestTime) == 0 + && (earliestIndex < 0 || j < earliestIndex)); + } + + private int finishPlayerBulletMiss( + BulletData bulletData, float previousX, float previousY, float moveX, float moveY) { + bulletData.bullet.x = previousX + moveX; + bulletData.bullet.y = previousY + moveY; + return TICK_MISS; + } + + private void movePlayerBulletToPrimaryHit( + BulletData bulletData, float previousX, float previousY, float moveX, float moveY) { + bulletData.bullet.x = previousX + primaryHitTime * moveX; + bulletData.bullet.y = previousY + primaryHitTime * moveY; + } + + private int applyPrimaryHit( + BulletData bulletData, + BaseCircleData primary, + Array enemies, + BulletEffectsSink sink) { + + applyPlayerDamage(primary, bulletData.damage, bulletData.isCrit(), sink); + + if (bulletData.isCrit()) { + sink.onCrit(primary, bulletData.damage); + } + + int result = TICK_HIT; + if (bulletData.aoeRadius > 0f) { + result |= applyAoeDamage(bulletData, primary, enemies, sink); + } + if (primary.health <= 0) { + sink.onEnemyKilled(primary); + result |= TICK_ENEMY_INDEX_DIRTY; + } + return result; + } + + private int applyAoeDamage( + BulletData bulletData, + BaseCircleData primary, + Array enemies, + BulletEffectsSink sink) { + float bx = bulletData.bullet.x; + float by = bulletData.bullet.y; + float aoeRadius2 = RangeChecks.radiusSquared(bulletData.aoeRadius); + int aoeCandidateCount = enemySpatialIndex.queryRadius(bx, by, bulletData.aoeRadius); + enemySpatialIndex.sortCandidatesDescending(aoeCandidateCount); + int result = 0; + for (int candidate = 0; candidate < aoeCandidateCount; candidate++) { + int k = enemySpatialIndex.candidateAt(candidate); + BaseCircleData other = enemies.get(k); + if (other == primary) continue; + if (RangeChecks.distanceSquared(bx, by, other.circle.x, other.circle.y) <= aoeRadius2) { + applyPlayerDamage(other, bulletData.damage, false, sink); + if (other.health <= 0) { + sink.onEnemyKilled(other); + result |= TICK_ENEMY_INDEX_DIRTY; + } + } + } + return result; + } + + private void applyPlayerDamage( + BaseCircleData enemy, int damage, boolean crit, BulletEffectsSink sink) { + enemy.health -= damage; + sink.onEnemyHit(enemy, damage, crit); + } + + private boolean finishBulletHit(BulletData bulletData, int bulletIndex) { + if (bulletData.piercesLeft > 0 && !bulletData.isEnemyBullet()) { + bulletData.piercesLeft--; + return false; + } + + Pools.free(bullets.removeIndex(bulletIndex)); + return true; + } + + + + public int getEffectiveDamage(float externalDamageMultiplier) { + int base = bulletDamage + runDamageBonus; + return (int) (base * externalDamageMultiplier); + } + + public float getEffectiveSpeed(float externalSpeedMultiplier) { + return bulletSpeed * externalSpeedMultiplier; + } + + + + public void increaseBaseDamage(int delta) { + bulletDamage += delta; + } + + public void increaseBaseSpeed(float delta) { + bulletSpeed += delta; + } + + public void addRunDamageBonus(int delta) { + runDamageBonus += delta; + } + + public void addRunPierceBonus(int delta) { + runPierceBonus += delta; + } + + public void addRunAoeBonus(float delta) { + runAoeBonus += delta; + } + + + + public void updateRadius(float newRadius) { + for (int i = 0; i < bullets.size; i++) { + bullets.get(i).bullet.radius = newRadius; + } + } + + public void clear() { + for (int i = 0; i < bullets.size; i++) { + Pools.free(bullets.get(i)); + } + bullets.clear(); + } + + public void resetToBaseline() { + bulletDamage = DEFAULT_BASE_DAMAGE; + bulletSpeed = DEFAULT_BASE_SPEED; + runDamageBonus = 0; + runPierceBonus = 0; + runAoeBonus = 0f; + } + + public void applyTalentBaseStats() { + bulletDamage += (int) talentProvider.damageBonus(); + bulletSpeed += talentProvider.speedBonus(); + } + + public void startNewRun() { + clear(); + resetToBaseline(); + applyTalentBaseStats(); + } +} diff --git a/core/src/main/java/ru/project/tower/entities/bullets/BulletTalentProvider.java b/core/src/main/java/ru/project/tower/entities/bullets/BulletTalentProvider.java new file mode 100644 index 0000000..321c253 --- /dev/null +++ b/core/src/main/java/ru/project/tower/entities/bullets/BulletTalentProvider.java @@ -0,0 +1,67 @@ +package ru.project.tower.entities.bullets; + +import java.util.Objects; +import ru.project.tower.talents.TalentData; +import ru.project.tower.talents.TalentTree; + + + + +public interface BulletTalentProvider { + int pierceLevel(); + + int aoeLevel(); + + float damageBonus(); + + float speedBonus(); + + static BulletTalentProvider none() { + return new BulletTalentProvider() { + @Override + public int pierceLevel() { + return 0; + } + + @Override + public int aoeLevel() { + return 0; + } + + @Override + public float damageBonus() { + return 0f; + } + + @Override + public float speedBonus() { + return 0f; + } + }; + } + + static BulletTalentProvider fromTalentTree(TalentTree talentTree) { + Objects.requireNonNull(talentTree, "talentTree"); + return new BulletTalentProvider() { + @Override + public int pierceLevel() { + return talentTree.getCurrentLevel("keystone_pierce"); + } + + @Override + public int aoeLevel() { + return talentTree.getCurrentLevel("keystone_aoe"); + } + + @Override + public float damageBonus() { + return talentTree.getStatBonus(TalentData.TalentType.DAMAGE); + } + + @Override + public float speedBonus() { + return talentTree.getStatBonus(TalentData.TalentType.SPEED); + } + }; + } +} diff --git a/core/src/main/java/ru/project/tower/entities/bullets/EnemySpatialIndex.java b/core/src/main/java/ru/project/tower/entities/bullets/EnemySpatialIndex.java new file mode 100644 index 0000000..fc05719 --- /dev/null +++ b/core/src/main/java/ru/project/tower/entities/bullets/EnemySpatialIndex.java @@ -0,0 +1,40 @@ +package ru.project.tower.entities.bullets; + +import com.badlogic.gdx.utils.Array; +import ru.project.tower.entities.circles.BaseCircleData; +import ru.project.tower.systems.CircleSpatialGrid; + + + + +final class EnemySpatialIndex { + private final CircleSpatialGrid grid = new CircleSpatialGrid(); + + void build(Array enemies) { + grid.build(enemies); + } + + int enemyCount() { + return grid.itemCount(); + } + + float maxEnemyRadius() { + return grid.maxRadius(); + } + + int queryRect(float minX, float minY, float maxX, float maxY) { + return grid.queryRect(minX, minY, maxX, maxY); + } + + int queryRadius(float x, float y, float radius) { + return grid.queryRadius(x, y, radius); + } + + void sortCandidatesDescending(int count) { + grid.sortCandidatesDescending(count); + } + + int candidateAt(int index) { + return grid.candidateAt(index); + } +} diff --git a/core/src/main/java/ru/project/tower/entities/circles/BaseCircleData.java b/core/src/main/java/ru/project/tower/entities/circles/BaseCircleData.java new file mode 100644 index 0000000..51d3e21 --- /dev/null +++ b/core/src/main/java/ru/project/tower/entities/circles/BaseCircleData.java @@ -0,0 +1,174 @@ +package ru.project.tower.entities.circles; + +import com.badlogic.gdx.math.Circle; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.utils.Pool; +import com.badlogic.gdx.utils.Pools; +import com.badlogic.gdx.utils.ReflectionPool; + +public abstract class BaseCircleData implements Pool.Poolable { + private static final int SPAWN_POOL_INITIAL_CAPACITY = 16; + private static final int SPAWN_POOL_MAX_CAPACITY = 4096; + + static { + Pools.set( + BasicCircleData.class, + new ReflectionPool<>( + BasicCircleData.class, + SPAWN_POOL_INITIAL_CAPACITY, + SPAWN_POOL_MAX_CAPACITY)); + Pools.set( + FastCircleData.class, + new ReflectionPool<>( + FastCircleData.class, + SPAWN_POOL_INITIAL_CAPACITY, + SPAWN_POOL_MAX_CAPACITY)); + Pools.set( + StrongCircleData.class, + new ReflectionPool<>( + StrongCircleData.class, + SPAWN_POOL_INITIAL_CAPACITY, + SPAWN_POOL_MAX_CAPACITY)); + Pools.set( + SplitterCircleData.class, + new ReflectionPool<>( + SplitterCircleData.class, + SPAWN_POOL_INITIAL_CAPACITY, + SPAWN_POOL_MAX_CAPACITY)); + Pools.set( + SpawnerCircleData.class, + new ReflectionPool<>( + SpawnerCircleData.class, + SPAWN_POOL_INITIAL_CAPACITY, + SPAWN_POOL_MAX_CAPACITY)); + Pools.set( + HealerCircleData.class, + new ReflectionPool<>( + HealerCircleData.class, + SPAWN_POOL_INITIAL_CAPACITY, + SPAWN_POOL_MAX_CAPACITY)); + Pools.set( + DasherCircleData.class, + new ReflectionPool<>( + DasherCircleData.class, + SPAWN_POOL_INITIAL_CAPACITY, + SPAWN_POOL_MAX_CAPACITY)); + Pools.set( + SniperCircleData.class, + new ReflectionPool<>( + SniperCircleData.class, + SPAWN_POOL_INITIAL_CAPACITY, + SPAWN_POOL_MAX_CAPACITY)); + } + + public Circle circle; + public Vector2 velocity; + public int health; + public int damage; + private boolean frozen = false; + private boolean elite = false; + + protected BaseCircleData() { + this(new Circle(0f, 0f, 0f), new Vector2(0f, 0f), 0, 0); + } + + public BaseCircleData(Circle circle, Vector2 velocity, int health, int damage) { + this.circle = circle; + this.velocity = velocity; + this.health = health; + this.damage = damage; + } + + public void configure( + float x, float y, float radius, float vx, float vy, int health, int damage) { + circle.x = x; + circle.y = y; + circle.radius = radius; + velocity.x = vx; + velocity.y = vy; + this.health = health; + this.damage = damage; + frozen = false; + elite = false; + } + + @Override + public void reset() { + configure(0f, 0f, 0f, 0f, 0f, 0, 0); + } + + public static void freeIfSpawnPooled(BaseCircleData circleData) { + Class type = circleData.getClass(); + if (type == BasicCircleData.class + || type == FastCircleData.class + || type == StrongCircleData.class + || type == SplitterCircleData.class + || type == SpawnerCircleData.class + || type == HealerCircleData.class + || type == DasherCircleData.class + || type == SniperCircleData.class) { + Pools.free(circleData); + } + } + + public boolean isElite() { + return elite; + } + + + + + + public void makeElite() { + if (elite) return; + elite = true; + this.health *= 2; + this.damage = Math.max(1, (int) (this.damage * 1.5f)); + this.circle.radius *= 1.15f; + } + + protected int getBaseReward() { + return 1; + } + + public abstract float[] getColor(); + + public float getX() { + return circle.x; + } + + public float getY() { + return circle.y; + } + + public float getRadius() { + return circle.radius; + } + + public void move(float delta) { + if (!frozen) { + circle.x += velocity.x * delta; + circle.y += velocity.y * delta; + } + } + + public boolean isFrozen() { + return frozen; + } + + public void setFrozen(boolean frozen) { + this.frozen = frozen; + } + + public void takeDamage(int damage) { + health -= damage; + } + + public boolean isDead() { + return health <= 0; + } + + public final int getReward() { + return getBaseReward() * (elite ? 3 : 1); + } +} diff --git a/core/src/main/java/ru/project/tower/entities/circles/BasicCircleData.java b/core/src/main/java/ru/project/tower/entities/circles/BasicCircleData.java new file mode 100644 index 0000000..948c00d --- /dev/null +++ b/core/src/main/java/ru/project/tower/entities/circles/BasicCircleData.java @@ -0,0 +1,42 @@ +package ru.project.tower.entities.circles; + +import com.badlogic.gdx.math.Circle; +import com.badlogic.gdx.math.Vector2; + +public class BasicCircleData extends BaseCircleData { + private static final float[] COLOR = {1f, 0.5f, 0.5f, 1f}; + private int baseReward = 1; + + public BasicCircleData() { + super(); + } + + public BasicCircleData(Circle circle, Vector2 velocity, int health, int damage) { + super(circle, velocity, health, damage); + } + + @Override + public void configure( + float x, float y, float radius, float vx, float vy, int health, int damage) { + super.configure(x, y, radius, vx, vy, health, damage); + baseReward = 1; + } + + public void markSpawnerChild() { + markNoRewardSpawn(); + } + + public void markNoRewardSpawn() { + baseReward = 0; + } + + @Override + public float[] getColor() { + return COLOR; + } + + @Override + protected int getBaseReward() { + return baseReward; + } +} diff --git a/core/src/main/java/ru/project/tower/entities/circles/BonusBallData.java b/core/src/main/java/ru/project/tower/entities/circles/BonusBallData.java new file mode 100644 index 0000000..75fbd0f --- /dev/null +++ b/core/src/main/java/ru/project/tower/entities/circles/BonusBallData.java @@ -0,0 +1,110 @@ +package ru.project.tower.entities.circles; + +import com.badlogic.gdx.math.Circle; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.utils.Pool; + +public class BonusBallData extends BaseCircleData implements Pool.Poolable { + public enum BonusType { + BULLET_SPEED, + DAMAGE, + FIRE_RATE, + SHIELD_PULSE, + HEAL, + CRIT_WINDOW, + PICKUP_MAGNET, + ABILITY_CHARGE, + COIN_BURST + } + + private BonusType bonusType; + private float pulseTime = 0; + + + public BonusBallData() { + super(new Circle(0f, 0f, 1f), new Vector2(0f, 0f), 1, 0); + this.bonusType = null; + } + + public BonusBallData(Circle circle, Vector2 velocity, BonusType bonusType) { + super(circle, velocity, 1, 0); + this.bonusType = bonusType; + } + + + public void configure(float x, float y, float radius, float vx, float vy, BonusType type) { + circle.x = x; + circle.y = y; + circle.radius = radius; + velocity.x = vx; + velocity.y = vy; + health = 1; + damage = 0; + setFrozen(false); + this.bonusType = type; + this.pulseTime = 0f; + } + + public BonusType getBonusType() { + return bonusType; + } + + public void update(float delta) { + pulseTime += delta; + move(delta); + } + + private static final float[] BULLET_SPEED_COLOR = {0.30f, 0.85f, 1.00f, 1.0f}; + private static final float[] DAMAGE_COLOR = {1.00f, 0.36f, 0.32f, 1.0f}; + private static final float[] FIRE_RATE_COLOR = {1.00f, 0.86f, 0.25f, 1.0f}; + private static final float[] SHIELD_COLOR = {0.28f, 0.55f, 1.00f, 1.0f}; + private static final float[] HEAL_COLOR = {0.25f, 1.00f, 0.55f, 1.0f}; + private static final float[] CRIT_COLOR = {1.00f, 0.35f, 0.95f, 1.0f}; + private static final float[] MAGNET_COLOR = {0.55f, 1.00f, 0.95f, 1.0f}; + private static final float[] ABILITY_COLOR = {0.72f, 0.50f, 1.00f, 1.0f}; + private static final float[] COIN_COLOR = {1.00f, 0.72f, 0.18f, 1.0f}; + + @Override + public float[] getColor() { + if (bonusType == null) return COIN_COLOR; + switch (bonusType) { + case BULLET_SPEED: + return BULLET_SPEED_COLOR; + case DAMAGE: + return DAMAGE_COLOR; + case FIRE_RATE: + return FIRE_RATE_COLOR; + case SHIELD_PULSE: + return SHIELD_COLOR; + case HEAL: + return HEAL_COLOR; + case CRIT_WINDOW: + return CRIT_COLOR; + case PICKUP_MAGNET: + return MAGNET_COLOR; + case ABILITY_CHARGE: + return ABILITY_COLOR; + case COIN_BURST: + default: + return COIN_COLOR; + } + } + + public float getGlowAmount() { + return 0.6f + 0.4f * (float) Math.sin(pulseTime * 4f); + } + + @Override + public void reset() { + circle.x = 0f; + circle.y = 0f; + circle.radius = 1f; + velocity.x = 0f; + velocity.y = 0f; + health = 1; + damage = 0; + setFrozen(false); + bonusType = null; + pulseTime = 0f; + } +} diff --git a/core/src/main/java/ru/project/tower/entities/circles/DasherCircleData.java b/core/src/main/java/ru/project/tower/entities/circles/DasherCircleData.java new file mode 100644 index 0000000..e9d1049 --- /dev/null +++ b/core/src/main/java/ru/project/tower/entities/circles/DasherCircleData.java @@ -0,0 +1,122 @@ +package ru.project.tower.entities.circles; + +import com.badlogic.gdx.math.Circle; +import com.badlogic.gdx.math.Vector2; +import ru.project.tower.support.GameClock; +import ru.project.tower.support.RangeChecks; + +public class DasherCircleData extends BaseCircleData { + private static final long WINDUP_MS = 800L; + private static final long DASH_MS = 400L; + private static final float DASH_SPEED_MULT = 3f; + private static final float CHARGE_RANGE = 280f; + + private enum State { + IDLE, + WINDUP, + DASHING + } + + private State state = State.IDLE; + private long stateEnter = 0L; + private final Vector2 baseVelocity; + private final GameClock clock; + + public DasherCircleData() { + super(); + this.baseVelocity = new Vector2(); + this.clock = GameClock.SYSTEM; + } + + public DasherCircleData(Circle circle, Vector2 velocity, int health, int damage) { + this(circle, velocity, health, damage, GameClock.SYSTEM); + } + + public DasherCircleData( + Circle circle, Vector2 velocity, int health, int damage, GameClock clock) { + super(circle, velocity, health, damage); + this.baseVelocity = new Vector2(velocity); + this.clock = clock; + } + + protected long now() { + return clock.nowMs(); + } + + @Override + public void configure( + float x, float y, float radius, float vx, float vy, int health, int damage) { + super.configure(x, y, radius, vx, vy, health, damage); + baseVelocity.set(vx, vy); + state = State.IDLE; + stateEnter = 0L; + } + + @Override + public void reset() { + super.reset(); + baseVelocity.setZero(); + state = State.IDLE; + stateEnter = 0L; + } + + public boolean isWindup() { + return state == State.WINDUP; + } + + public boolean isDashing() { + return state == State.DASHING; + } + + public void tick(float squareX, float squareY) { + long t = now(); + switch (state) { + case IDLE: + if (RangeChecks.withinRadiusExclusive( + getX(), getY(), squareX, squareY, CHARGE_RANGE)) { + state = State.WINDUP; + stateEnter = t; + velocity.scl(0.3f); + } + break; + case WINDUP: + if (t - stateEnter > WINDUP_MS) { + state = State.DASHING; + stateEnter = t; + float dx = squareX - getX(), dy = squareY - getY(); + float len = (float) Math.sqrt(dx * dx + dy * dy); + if (len > 0f) { + velocity.set(dx / len, dy / len).scl(baseVelocity.len() * DASH_SPEED_MULT); + } + } + break; + case DASHING: + if (t - stateEnter > DASH_MS) { + state = State.IDLE; + velocity.set(baseVelocity); + } + break; + } + } + + private static final float[] COLOR_WINDUP = {1f, 0.9f, 0.3f, 1f}; + private static final float[] COLOR_DASHING = {1f, 0.4f, 0.1f, 1f}; + private static final float[] COLOR_IDLE = {0.9f, 0.6f, 0.2f, 1f}; + + @Override + public float[] getColor() { + switch (state) { + case WINDUP: + return COLOR_WINDUP; + case DASHING: + return COLOR_DASHING; + default: + return COLOR_IDLE; + } + } + + @Override + protected int getBaseReward() { + return 3; + } +} diff --git a/core/src/main/java/ru/project/tower/entities/circles/FastCircleData.java b/core/src/main/java/ru/project/tower/entities/circles/FastCircleData.java new file mode 100644 index 0000000..83a56c6 --- /dev/null +++ b/core/src/main/java/ru/project/tower/entities/circles/FastCircleData.java @@ -0,0 +1,21 @@ +package ru.project.tower.entities.circles; + +import com.badlogic.gdx.math.Circle; +import com.badlogic.gdx.math.Vector2; + +public class FastCircleData extends BaseCircleData { + private static final float[] COLOR = {1f, 1f, 0f, 1f}; + + public FastCircleData() { + super(); + } + + public FastCircleData(Circle circle, Vector2 velocity, int health, int damage) { + super(circle, velocity, health, damage); + } + + @Override + public float[] getColor() { + return COLOR; + } +} diff --git a/core/src/main/java/ru/project/tower/entities/circles/HealerCircleData.java b/core/src/main/java/ru/project/tower/entities/circles/HealerCircleData.java new file mode 100644 index 0000000..33bc5cf --- /dev/null +++ b/core/src/main/java/ru/project/tower/entities/circles/HealerCircleData.java @@ -0,0 +1,81 @@ +package ru.project.tower.entities.circles; + +import com.badlogic.gdx.math.Circle; +import com.badlogic.gdx.math.Vector2; +import ru.project.tower.support.GameClock; + +public class HealerCircleData extends BaseCircleData { + private static final long HEAL_INTERVAL_MS = 1500L; + private static final float HEAL_RADIUS = 120f; + private static final int HEAL_AMOUNT = 3; + + private long lastHealTime; + private final GameClock clock; + + public HealerCircleData() { + super(); + this.clock = GameClock.SYSTEM; + this.lastHealTime = 0L; + } + + public HealerCircleData(Circle circle, Vector2 velocity, int health, int damage) { + this(circle, velocity, health, damage, GameClock.SYSTEM); + } + + public HealerCircleData( + Circle circle, Vector2 velocity, int health, int damage, GameClock clock) { + super(circle, velocity, health, damage); + this.clock = clock; + this.lastHealTime = now(); + } + + protected long now() { + return clock.nowMs(); + } + + + public void resetHealTimer() { + this.lastHealTime = now(); + } + + public boolean shouldPulse() { + if (now() - lastHealTime > HEAL_INTERVAL_MS) { + lastHealTime = now(); + return true; + } + return false; + } + + @Override + public void configure( + float x, float y, float radius, float vx, float vy, int health, int damage) { + super.configure(x, y, radius, vx, vy, health, damage); + this.lastHealTime = now(); + } + + @Override + public void reset() { + super.reset(); + this.lastHealTime = 0L; + } + + public static float getHealRadius() { + return HEAL_RADIUS; + } + + public static int getHealAmount() { + return HEAL_AMOUNT; + } + + private static final float[] COLOR = {0.2f, 1.0f, 0.5f, 1f}; + + @Override + public float[] getColor() { + return COLOR; + } + + @Override + protected int getBaseReward() { + return 4; + } +} diff --git a/core/src/main/java/ru/project/tower/entities/circles/SniperCircleData.java b/core/src/main/java/ru/project/tower/entities/circles/SniperCircleData.java new file mode 100644 index 0000000..1aff7a0 --- /dev/null +++ b/core/src/main/java/ru/project/tower/entities/circles/SniperCircleData.java @@ -0,0 +1,115 @@ +package ru.project.tower.entities.circles; + +import com.badlogic.gdx.math.Circle; +import com.badlogic.gdx.math.Vector2; +import ru.project.tower.support.GameClock; +import ru.project.tower.support.RangeChecks; + +public class SniperCircleData extends BaseCircleData { + private static final float TARGET_RANGE = 100f; + private static final long FIRE_INTERVAL_MS = 2000L; + private static final float PROJECTILE_SPEED = 200f; + private static final float PROJECTILE_RADIUS = 4f; + + private long lastShotAt = 0L; + private float playerX = 0f; + private float playerY = 0f; + private final GameClock clock; + + public SniperCircleData() { + super(); + this.clock = GameClock.SYSTEM; + this.lastShotAt = 0L; + } + + public SniperCircleData(Circle circle, Vector2 velocity, int health, int damage) { + this(circle, velocity, health, damage, GameClock.SYSTEM); + } + + public SniperCircleData( + Circle circle, Vector2 velocity, int health, int damage, GameClock clock) { + super(circle, velocity, health, damage); + this.clock = clock; + this.lastShotAt = now(); + } + + protected long now() { + return clock.nowMs(); + } + + public void setPlayerPosition(float x, float y) { + this.playerX = x; + this.playerY = y; + } + + + public void resetFireTimer() { + this.lastShotAt = now(); + } + + @Override + public void move(float delta) { + if (!RangeChecks.withinRadiusInclusive(getX(), getY(), playerX, playerY, TARGET_RANGE)) { + super.move(delta); + } else { + velocity.set(0f, 0f); + } + } + + public boolean shouldShoot() { + if (now() - lastShotAt > FIRE_INTERVAL_MS) { + lastShotAt = now(); + return true; + } + return false; + } + + @Override + public void configure( + float x, float y, float radius, float vx, float vy, int health, int damage) { + super.configure(x, y, radius, vx, vy, health, damage); + lastShotAt = now(); + playerX = 0f; + playerY = 0f; + } + + @Override + public void reset() { + super.reset(); + lastShotAt = 0L; + playerX = 0f; + playerY = 0f; + } + + public boolean isHoldingPosition() { + return RangeChecks.withinRadiusInclusive(getX(), getY(), playerX, playerY, TARGET_RANGE); + } + + public static float getTargetRange() { + return TARGET_RANGE; + } + + public static long getFireIntervalMs() { + return FIRE_INTERVAL_MS; + } + + public static float getProjectileSpeed() { + return PROJECTILE_SPEED; + } + + public static float getProjectileRadius() { + return PROJECTILE_RADIUS; + } + + private static final float[] COLOR = {1f, 0.2f, 0.2f, 1f}; + + @Override + public float[] getColor() { + return COLOR; + } + + @Override + protected int getBaseReward() { + return 3; + } +} diff --git a/core/src/main/java/ru/project/tower/entities/circles/SpawnerCircleData.java b/core/src/main/java/ru/project/tower/entities/circles/SpawnerCircleData.java new file mode 100644 index 0000000..b800907 --- /dev/null +++ b/core/src/main/java/ru/project/tower/entities/circles/SpawnerCircleData.java @@ -0,0 +1,67 @@ +package ru.project.tower.entities.circles; + +import com.badlogic.gdx.math.Circle; +import com.badlogic.gdx.math.Vector2; +import ru.project.tower.support.GameClock; + +public class SpawnerCircleData extends BaseCircleData { + private long lastSpawnTime = 0; + private static final long SPAWN_INTERVAL = 2000; + private final GameClock clock; + + public SpawnerCircleData() { + this(GameClock.SYSTEM); + } + + private SpawnerCircleData(GameClock clock) { + super(); + this.clock = clock; + } + + public SpawnerCircleData(Circle circle, Vector2 velocity, int health) { + this(circle, velocity, health, GameClock.SYSTEM); + } + + public SpawnerCircleData(Circle circle, Vector2 velocity, int health, GameClock clock) { + super(circle, velocity, health, 0); + this.clock = clock; + } + + public void configure(float x, float y, float radius, float vx, float vy, int health) { + super.configure(x, y, radius, vx, vy, health, 0); + lastSpawnTime = 0L; + } + + @Override + public void configure( + float x, float y, float radius, float vx, float vy, int health, int damage) { + configure(x, y, radius, vx, vy, health); + } + + @Override + public void reset() { + super.reset(); + lastSpawnTime = 0L; + } + + private static final float[] COLOR = {0.5f, 0f, 0.2f, 1f}; + + @Override + public float[] getColor() { + return COLOR; + } + + public boolean shouldSpawnCircle() { + long currentTime = clock.nowMs(); + if (currentTime - lastSpawnTime > SPAWN_INTERVAL) { + lastSpawnTime = currentTime; + return true; + } + return false; + } + + @Override + protected int getBaseReward() { + return 5; + } +} diff --git a/core/src/main/java/ru/project/tower/entities/circles/SplitterCircleData.java b/core/src/main/java/ru/project/tower/entities/circles/SplitterCircleData.java new file mode 100644 index 0000000..f55a962 --- /dev/null +++ b/core/src/main/java/ru/project/tower/entities/circles/SplitterCircleData.java @@ -0,0 +1,51 @@ +package ru.project.tower.entities.circles; + +import com.badlogic.gdx.math.Circle; +import com.badlogic.gdx.math.Vector2; + +public class SplitterCircleData extends BaseCircleData { + private static final float[] COLOR_SHARD = {0.8f, 0.6f, 1f, 1f}; + private static final float[] COLOR_FULL = {0.6f, 0f, 0.8f, 1f}; + + public boolean isShard = false; + + public SplitterCircleData() { + super(); + } + + public SplitterCircleData( + Circle circle, Vector2 velocity, int health, int damage, boolean isShard) { + super(circle, velocity, health, damage); + this.isShard = isShard; + } + + @Override + public void configure( + float x, float y, float radius, float vx, float vy, int health, int damage) { + configure(x, y, radius, vx, vy, health, damage, false); + } + + public void configure( + float x, + float y, + float radius, + float vx, + float vy, + int health, + int damage, + boolean isShard) { + super.configure(x, y, radius, vx, vy, health, damage); + this.isShard = isShard; + } + + @Override + public void reset() { + super.reset(); + isShard = false; + } + + @Override + public float[] getColor() { + return isShard ? COLOR_SHARD : COLOR_FULL; + } +} diff --git a/core/src/main/java/ru/project/tower/entities/circles/StrongCircleData.java b/core/src/main/java/ru/project/tower/entities/circles/StrongCircleData.java new file mode 100644 index 0000000..32d87b9 --- /dev/null +++ b/core/src/main/java/ru/project/tower/entities/circles/StrongCircleData.java @@ -0,0 +1,51 @@ +package ru.project.tower.entities.circles; + +import com.badlogic.gdx.math.Circle; +import com.badlogic.gdx.math.Vector2; + +public class StrongCircleData extends BaseCircleData { + private int maxHealth; + private final float[] colorScratch = {0.3f, 0.3f, 0f, 1f}; + + public StrongCircleData() { + super(); + this.maxHealth = 0; + } + + public StrongCircleData(Circle circle, Vector2 velocity, int health, int damage) { + super(circle, velocity, health, damage); + this.maxHealth = health; + } + + @Override + public void configure( + float x, float y, float radius, float vx, float vy, int health, int damage) { + super.configure(x, y, radius, vx, vy, health, damage); + this.maxHealth = health; + colorScratch[0] = 0.3f; + colorScratch[1] = 0.3f; + colorScratch[2] = health == 0 ? 0f : 1f; + colorScratch[3] = 1f; + } + + @Override + public void reset() { + super.reset(); + this.maxHealth = 0; + colorScratch[0] = 0.3f; + colorScratch[1] = 0.3f; + colorScratch[2] = 0f; + colorScratch[3] = 1f; + } + + @Override + public float[] getColor() { + colorScratch[2] = (float) health / maxHealth; + return colorScratch; + } + + @Override + protected int getBaseReward() { + return 3; + } +} diff --git a/core/src/main/java/ru/project/tower/entities/circles/bosses/GlacialWardenData.java b/core/src/main/java/ru/project/tower/entities/circles/bosses/GlacialWardenData.java new file mode 100644 index 0000000..c57c7f2 --- /dev/null +++ b/core/src/main/java/ru/project/tower/entities/circles/bosses/GlacialWardenData.java @@ -0,0 +1,371 @@ +package ru.project.tower.entities.circles.bosses; + +import com.badlogic.gdx.math.Circle; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.utils.Array; +import ru.project.tower.entities.circles.BaseCircleData; +import ru.project.tower.support.GameClock; +import ru.project.tower.support.MathUtilsRandomSource; +import ru.project.tower.support.RandomSource; + +public class GlacialWardenData extends BaseCircleData { + + private static final float WARDEN_SPEED = 60f; + private static final int WARDEN_HEALTH = 200; + private static final int WARDEN_DAMAGE = 15; + private static final float WARDEN_RADIUS = 45f; + + private static final float AURA_RADIUS = 250f; + private static final float ATTACK_SPEED_SLOW = 0.5f; + private static final float PROJECTILE_SPEED_SLOW = 0.6f; + private static final float FREEZE_ATTACK_SPEED_MULTIPLIER = 0.25f; + private static final float FREEZE_PROJECTILE_SPEED_MULTIPLIER = 0.25f; + + private static final long SHARD_COOLDOWN = 3000; + private static final int SHARDS_PER_VOLLEY = 7; + private static final float SHARD_SPEED = 220f; + private static final float SHARD_RADIUS = 7f; + private static final int SHARD_DAMAGE = 8; + private static final long SHARD_DAMAGE_COOLDOWN_MS = 1000L; + private static final float FREEZE_CHANCE = 0.15f; + private static final long FREEZE_DURATION = 500; + + private static final long PRISON_COOLDOWN = 10000; + private static final long PRISON_CAST_TIME = 2000; + private static final long PRISON_DURATION = 4000; + private static final int PRISON_DAMAGE = 5; + private static final float PRISON_RADIUS = 80f; + + private long lastShardTime; + private long lastPrisonTime; + private boolean isCastingPrison; + private long prisonCastStartTime; + private boolean isPrisonActive; + private long prisonStartTime; + private Vector2 prisonChargePosition; + private Array activeShards; + + private boolean isShielded = true; + private long lastShieldBreakTime = 0; + private long shieldStartTime = 0; + private static final long SHIELD_DURATION = 10000; + private static final long SHIELD_COOLDOWN = 5000; + private static final float FREEZE_RADIUS = 100f; + private long lastFreezeTime = 0; + private static final long FREEZE_COOLDOWN = 8000; + private final GameClock clock; + private final RandomSource random; + private boolean freezeFieldActive; + private long freezeFieldEndTime; + private boolean playerInsideAura; + private float activeAttackSpeedMultiplier = 1f; + private float activeProjectileSpeedMultiplier = 1f; + + public GlacialWardenData(Circle circle, Vector2 velocity) { + this(circle, velocity, GameClock.SYSTEM); + } + + public GlacialWardenData(Circle circle, Vector2 velocity, GameClock clock) { + this(circle, velocity, clock, new MathUtilsRandomSource()); + } + + public GlacialWardenData( + Circle circle, Vector2 velocity, GameClock clock, RandomSource random) { + super(circle, velocity, WARDEN_HEALTH, WARDEN_DAMAGE); + this.clock = clock; + this.random = random; + this.isCastingPrison = false; + this.isPrisonActive = false; + this.prisonChargePosition = new Vector2(); + this.activeShards = new Array<>(); + shieldStartTime = now(); + } + + private long now() { + return clock.nowMs(); + } + + private long timeSince(long pastMs) { + return now() - pastMs; + } + + @Override + public void move(float delta) { + if (!isCastingPrison) { + super.move(delta); + } + + if (isPrisonActive && timeSince(prisonStartTime) > PRISON_DURATION) { + isPrisonActive = false; + } + + if (isCastingPrison && timeSince(prisonCastStartTime) > PRISON_CAST_TIME) { + isCastingPrison = false; + isPrisonActive = true; + prisonStartTime = now(); + } + + for (int i = activeShards.size - 1; i >= 0; i--) { + IceShard shard = activeShards.get(i); + shard.update(delta); + if (!shard.isActive()) { + activeShards.removeIndex(i); + } + } + } + + private static final float[] COLOR_SHIELDED = {0.7f, 0.9f, 1.0f, 1.0f}; + private static final float[] COLOR_DEFAULT = {0.4f, 0.6f, 0.8f, 1.0f}; + + @Override + public float[] getColor() { + return isShielded ? COLOR_SHIELDED : COLOR_DEFAULT; + } + + public boolean shouldShootShards() { + return timeSince(lastShardTime) > SHARD_COOLDOWN; + } + + public void markShardsShot() { + lastShardTime = now(); + } + + public boolean shouldStartPrison() { + return !isCastingPrison && !isPrisonActive && timeSince(lastPrisonTime) > PRISON_COOLDOWN; + } + + public void startPrisonCast(float targetX, float targetY) { + isCastingPrison = true; + prisonCastStartTime = now(); + lastPrisonTime = now(); + prisonChargePosition.set(targetX, targetY); + } + + public void addIceShard(float x, float y, Vector2 velocity) { + IceShard shard = new IceShard(x, y, velocity, clock, random); + activeShards.add(shard); + } + + public float getAuraRadius() { + return AURA_RADIUS; + } + + public static float getStaticAuraRadius() { + return AURA_RADIUS; + } + + public float getAttackSpeedSlow() { + return ATTACK_SPEED_SLOW; + } + + public float getProjectileSpeedSlow() { + return PROJECTILE_SPEED_SLOW; + } + + public static float getFreezeAttackSpeedMultiplier() { + return FREEZE_ATTACK_SPEED_MULTIPLIER; + } + + public static float getFreezeProjectileSpeedMultiplier() { + return FREEZE_PROJECTILE_SPEED_MULTIPLIER; + } + + public static float getShardRadius() { + return SHARD_RADIUS; + } + + public static float getShardSpeed() { + return SHARD_SPEED; + } + + public static int getShardDamage() { + return SHARD_DAMAGE; + } + + public static long getShardDamageCooldownMs() { + return SHARD_DAMAGE_COOLDOWN_MS; + } + + public static int getShardsPerVolley() { + return SHARDS_PER_VOLLEY; + } + + public static float getFreezeChance() { + return FREEZE_CHANCE; + } + + public static long getFreezeDuration() { + return FREEZE_DURATION; + } + + public static float getPrisonRadius() { + return PRISON_RADIUS; + } + + public static int getPrisonDamage() { + return PRISON_DAMAGE; + } + + public boolean isCastingPrison() { + return isCastingPrison; + } + + public boolean isPrisonActive() { + return isPrisonActive; + } + + public float getPrisonCastProgress() { + if (!isCastingPrison) return 0f; + return Math.min(timeSince(prisonCastStartTime) / (float) PRISON_CAST_TIME, 1f); + } + + public Vector2 getPrisonChargePosition() { + return prisonChargePosition; + } + + public Array getActiveShards() { + return activeShards; + } + + @Override + protected int getBaseReward() { + return 200; + } + + public static class IceShard { + private static final float LIFETIME = 2000f; + + public float x, y; + public Vector2 velocity; + public long creationTime; + public float rotation; + public float rotationSpeed; + private final GameClock clock; + + public IceShard(float x, float y, Vector2 velocity) { + this(x, y, velocity, GameClock.SYSTEM); + } + + public IceShard(float x, float y, Vector2 velocity, GameClock clock) { + this(x, y, velocity, clock, new MathUtilsRandomSource()); + } + + public IceShard(float x, float y, Vector2 velocity, GameClock clock, RandomSource random) { + this.x = x; + this.y = y; + this.velocity = velocity; + this.clock = clock; + this.creationTime = clock.nowMs(); + this.rotation = random.angle(); + this.rotationSpeed = random.range(-5f, 5f); + } + + public void update(float delta) { + x += velocity.x * delta; + y += velocity.y * delta; + rotation += rotationSpeed * delta; + } + + public boolean isActive() { + return clock.nowMs() - creationTime < LIFETIME; + } + + public float getAlpha() { + float age = (clock.nowMs() - creationTime) / LIFETIME; + return 1f - age * age; + } + } + + public static float getStaticRadius() { + return 35f; + } + + public static float getStaticSpeed() { + return 45f; + } + + public void update() { + long currentTime = now(); + + if (isShielded && currentTime - shieldStartTime > SHIELD_DURATION) { + isShielded = false; + lastShieldBreakTime = currentTime; + } else if (!isShielded && currentTime - lastShieldBreakTime > SHIELD_COOLDOWN) { + isShielded = true; + shieldStartTime = currentTime; + } + } + + public boolean shouldFreeze() { + long currentTime = now(); + if (currentTime - lastFreezeTime > FREEZE_COOLDOWN) { + lastFreezeTime = currentTime; + return true; + } + return false; + } + + public float getFreezeRadius() { + return FREEZE_RADIUS; + } + + public void activateFreezeField() { + freezeFieldActive = true; + freezeFieldEndTime = now() + FREEZE_DURATION; + updateActiveCombatMultipliers(); + } + + public boolean isFreezeFieldActive() { + boolean active = updateFreezeFieldState(); + updateActiveCombatMultipliers(); + return active; + } + + private boolean updateFreezeFieldState() { + if (freezeFieldActive && now() >= freezeFieldEndTime) { + freezeFieldActive = false; + } + return freezeFieldActive; + } + + public void updatePlayerAuraState(boolean insideAura) { + playerInsideAura = insideAura; + updateActiveCombatMultipliers(); + } + + private void updateActiveCombatMultipliers() { + boolean frozen = updateFreezeFieldState(); + if (frozen) { + activeAttackSpeedMultiplier = FREEZE_ATTACK_SPEED_MULTIPLIER; + activeProjectileSpeedMultiplier = FREEZE_PROJECTILE_SPEED_MULTIPLIER; + return; + } + activeAttackSpeedMultiplier = playerInsideAura ? ATTACK_SPEED_SLOW : 1f; + activeProjectileSpeedMultiplier = playerInsideAura ? PROJECTILE_SPEED_SLOW : 1f; + } + + public boolean isPlayerInsideAura() { + return playerInsideAura; + } + + public float getActiveAttackSpeedMultiplier() { + updateActiveCombatMultipliers(); + return activeAttackSpeedMultiplier; + } + + public float getActiveProjectileSpeedMultiplier() { + updateActiveCombatMultipliers(); + return activeProjectileSpeedMultiplier; + } + + public boolean isShielded() { + return isShielded; + } + + @Override + public void takeDamage(int damage) { + if (!isShielded) { + super.takeDamage(damage); + } + } +} diff --git a/core/src/main/java/ru/project/tower/entities/circles/bosses/IllusionMasterData.java b/core/src/main/java/ru/project/tower/entities/circles/bosses/IllusionMasterData.java new file mode 100644 index 0000000..ceed189 --- /dev/null +++ b/core/src/main/java/ru/project/tower/entities/circles/bosses/IllusionMasterData.java @@ -0,0 +1,284 @@ +package ru.project.tower.entities.circles.bosses; + +import com.badlogic.gdx.math.Circle; +import com.badlogic.gdx.math.MathUtils; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.utils.Array; +import ru.project.tower.entities.circles.BaseCircleData; +import ru.project.tower.support.GameClock; + +public class IllusionMasterData extends BaseCircleData { + + private static final float ILLUSION_MASTER_RADIUS = 38f; + private static final float ILLUSION_MASTER_SPEED = 90f; + private static final int ILLUSION_MASTER_HEALTH = 180; + private static final int ILLUSION_MASTER_DAMAGE = 25; + + private static final long FORM_CHANGE_INTERVAL = 8000; + private static final float FAST_FORM_SPEED = 150f; + private static final float ARMORED_FORM_SPEED = 30f; + private static final float DAMAGE_MULTIPLIER_FAST = 2.0f; + private static final float DAMAGE_MULTIPLIER_ARMORED = 0.5f; + + private static final long ILLUSION_ATTACK_COOLDOWN = 5000; + private static final int FAKE_PROJECTILES_COUNT = 8; + private static final int REAL_PROJECTILES_COUNT = 3; + private static final float PROJECTILE_SPEED = 180f; + private static final float PROJECTILE_RADIUS = 8f; + private static final int PROJECTILE_DAMAGE = 12; + + private static final float COLOR_CHANGE_SPEED = 2f; + private static final float DISTORTION_INTENSITY = 0.3f; + private static final long DISTORTION_DURATION = 3000; + + private BossForm currentForm; + private long lastFormChangeTime; + private long lastIllusionAttackTime; + private float colorPhase; + private boolean isDistortionActive; + private long distortionStartTime; + private float baseSpeed; + + private Array illusions; + private long lastIllusionTime = 0; + private long lastProjectileTime = 0; + private static final long ILLUSION_COOLDOWN = 10000; + private static final long ILLUSION_DURATION_MS = 8000L; + private static final int ILLUSION_CONTACT_DAMAGE = 5; + private static final long ILLUSION_DAMAGE_COOLDOWN_MS = 1000L; + private static final long PROJECTILE_COOLDOWN = 3000; + private static final int MAX_ILLUSIONS = 3; + private static final int PROJECTILES_PER_VOLLEY = 5; + private static final float ILLUSION_HEALTH_PERCENT = 0.3f; + private final GameClock clock; + + public enum BossForm { + FAST, + ARMORED + } + + public IllusionMasterData(Circle circle, Vector2 velocity) { + this(circle, velocity, GameClock.SYSTEM); + } + + public IllusionMasterData(Circle circle, Vector2 velocity, GameClock clock) { + super(circle, velocity, ILLUSION_MASTER_HEALTH, ILLUSION_MASTER_DAMAGE); + this.clock = clock; + this.currentForm = BossForm.FAST; + this.lastFormChangeTime = now(); + this.lastIllusionAttackTime = now(); + this.colorPhase = 0f; + this.isDistortionActive = false; + this.baseSpeed = FAST_FORM_SPEED; + this.illusions = new Array<>(); + } + + private long now() { + return clock.nowMs(); + } + + private long timeSince(long pastMs) { + return now() - pastMs; + } + + @Override + public void move(float delta) { + + colorPhase += delta * COLOR_CHANGE_SPEED; + if (colorPhase > MathUtils.PI2) { + colorPhase -= MathUtils.PI2; + } + + if (timeSince(lastFormChangeTime) > FORM_CHANGE_INTERVAL) { + switchForm(); + } + + super.move(delta); + + for (int i = illusions.size - 1; i >= 0; i--) { + IllusionData illusion = illusions.get(i); + if (illusion.isDead() || illusion.isExpired(now())) { + illusions.removeIndex(i); + } else { + illusion.move(delta); + } + } + } + + private void switchForm() { + currentForm = (currentForm == BossForm.FAST) ? BossForm.ARMORED : BossForm.FAST; + lastFormChangeTime = now(); + + baseSpeed = (currentForm == BossForm.FAST) ? FAST_FORM_SPEED : ARMORED_FORM_SPEED; + velocity.nor().scl(baseSpeed); + + activateDistortion(); + } + + public void activateDistortion() { + isDistortionActive = true; + distortionStartTime = now(); + } + + private final float[] colorScratch = {0f, 0f, 0f, 1f}; + + @Override + public float[] getColor() { + colorScratch[0] = 0.5f + 0.5f * MathUtils.sin(colorPhase); + colorScratch[1] = 0.5f + 0.5f * MathUtils.sin(colorPhase + MathUtils.PI2 / 3); + colorScratch[2] = 0.5f + 0.5f * MathUtils.sin(colorPhase + 2 * MathUtils.PI2 / 3); + return colorScratch; + } + + public boolean shouldAttack() { + return timeSince(lastIllusionAttackTime) > ILLUSION_ATTACK_COOLDOWN; + } + + public void markAttackUsed() { + lastIllusionAttackTime = now(); + } + + @Override + public void takeDamage(int damage) { + float multiplier = + (currentForm == BossForm.FAST) ? DAMAGE_MULTIPLIER_FAST : DAMAGE_MULTIPLIER_ARMORED; + super.takeDamage((int) (damage * multiplier)); + } + + public boolean isDistortionActive() { + if (isDistortionActive && timeSince(distortionStartTime) > DISTORTION_DURATION) { + isDistortionActive = false; + } + return isDistortionActive; + } + + public float getDistortionIntensity() { + if (!isDistortionActive) return 0f; + float progress = timeSince(distortionStartTime) / (float) DISTORTION_DURATION; + return DISTORTION_INTENSITY * (1f - progress * progress); + } + + public BossForm getCurrentForm() { + return currentForm; + } + + public static float getProjectileRadius() { + return PROJECTILE_RADIUS; + } + + public static float getProjectileSpeed() { + return PROJECTILE_SPEED; + } + + public static int getProjectileDamage() { + return PROJECTILE_DAMAGE; + } + + public static int getFakeProjectilesCount() { + return FAKE_PROJECTILES_COUNT; + } + + public static int getRealProjectilesCount() { + return REAL_PROJECTILES_COUNT; + } + + @Override + protected int getBaseReward() { + return 225; + } + + public static float getStaticRadius() { + return 25f; + } + + public static float getStaticSpeed() { + return 65f; + } + + public boolean shouldCreateIllusions() { + long currentTime = now(); + if (currentTime - lastIllusionTime > ILLUSION_COOLDOWN && illusions.size < MAX_ILLUSIONS) { + lastIllusionTime = currentTime; + return true; + } + return false; + } + + public boolean shouldShootProjectiles() { + long currentTime = now(); + if (currentTime - lastProjectileTime > PROJECTILE_COOLDOWN) { + lastProjectileTime = currentTime; + return true; + } + return false; + } + + public int getProjectilesPerVolley() { + return PROJECTILES_PER_VOLLEY; + } + + public static long getIllusionDurationMs() { + return ILLUSION_DURATION_MS; + } + + public static int getIllusionContactDamage() { + return ILLUSION_CONTACT_DAMAGE; + } + + public static long getIllusionDamageCooldownMs() { + return ILLUSION_DAMAGE_COOLDOWN_MS; + } + + public IllusionData createIllusion(float x, float y) { + Circle illusionCircle = new Circle(x, y, circle.radius); + Vector2 illusionVelocity = velocity.cpy(); + int illusionHealth = (int) (health * ILLUSION_HEALTH_PERCENT); + IllusionData illusion = + new IllusionData( + illusionCircle, + illusionVelocity, + illusionHealth, + ILLUSION_CONTACT_DAMAGE, + now()); + illusions.add(illusion); + return illusion; + } + + public void removeIllusion(IllusionData illusion) { + illusions.removeValue(illusion, true); + } + + public Array getIllusions() { + return illusions; + } + + public static class IllusionData extends BaseCircleData { + private final long creationTime; + + public IllusionData( + Circle circle, Vector2 velocity, int health, int damage, long creationTime) { + super(circle, velocity, health, damage); + this.creationTime = creationTime; + } + + public long getCreationTime() { + return creationTime; + } + + boolean isExpired(long nowMs) { + return nowMs - creationTime > ILLUSION_DURATION_MS; + } + + private final float[] illusionColor = {0.8f, 0.3f, 0.8f, 0.7f}; + + @Override + public float[] getColor() { + return illusionColor; + } + + @Override + protected int getBaseReward() { + return 0; + } + } +} diff --git a/core/src/main/java/ru/project/tower/entities/circles/bosses/JuggernautData.java b/core/src/main/java/ru/project/tower/entities/circles/bosses/JuggernautData.java new file mode 100644 index 0000000..f84403a --- /dev/null +++ b/core/src/main/java/ru/project/tower/entities/circles/bosses/JuggernautData.java @@ -0,0 +1,185 @@ +package ru.project.tower.entities.circles.bosses; + +import com.badlogic.gdx.math.Circle; +import com.badlogic.gdx.math.Vector2; +import ru.project.tower.entities.circles.BaseCircleData; +import ru.project.tower.support.GameClock; + +public class JuggernautData extends BaseCircleData { + + private static final float JUGGERNAUT_CHARGE_SPEED = 300f; + private static final int JUGGERNAUT_BASE_HEALTH = 300; + private static final int JUGGERNAUT_DAMAGE = 25; + private static final float JUGGERNAUT_RADIUS = 45f; + + private static final int ARMOR_LAYERS = 3; + private static final long INVULNERABILITY_DURATION = 2000; + + private static final long CHARGE_PREPARATION_TIME = 2000; + private static final long CHARGE_COOLDOWN = 5000; + private static final long CHARGE_DURATION = 2000; + private static final float CHARGE_SPEED_MULTIPLIER = 3.0f; + private static final long SHOCKWAVE_COOLDOWN = 10000; + private static final float SHOCKWAVE_RADIUS = 200f; + private static final float SHOCKWAVE_FORCE = 500f; + + private int currentLayer; + private long lastLayerBreakTime; + private boolean isCharging; + private boolean isPreparingCharge; + private long chargeStartTime; + private long lastChargeTime; + private long lastShockwaveTime; + private Vector2 chargeDirection; + private Vector2 normalVelocity; + private Vector2 chargeVelocity; + private final GameClock clock; + + public JuggernautData(Circle circle, Vector2 velocity) { + this(circle, velocity, GameClock.SYSTEM); + } + + public JuggernautData(Circle circle, Vector2 velocity, GameClock clock) { + super(circle, velocity, JUGGERNAUT_BASE_HEALTH, JUGGERNAUT_DAMAGE); + this.clock = clock; + this.currentLayer = ARMOR_LAYERS; + this.isCharging = false; + this.isPreparingCharge = false; + this.chargeDirection = new Vector2(); + this.normalVelocity = velocity.cpy(); + this.chargeVelocity = velocity.cpy().scl(CHARGE_SPEED_MULTIPLIER); + } + + private long now() { + return clock.nowMs(); + } + + private long timeSince(long pastMs) { + return now() - pastMs; + } + + @Override + public void move(float delta) { + if (isCharging) { + + circle.x += chargeDirection.x * JUGGERNAUT_CHARGE_SPEED * delta; + circle.y += chargeDirection.y * JUGGERNAUT_CHARGE_SPEED * delta; + } else { + super.move(delta); + } + } + + private static final float[] COLOR = {0.8f, 0.4f, 0.0f, 1.0f}; + + @Override + public float[] getColor() { + return COLOR; + } + + public boolean isInvulnerable() { + return timeSince(lastLayerBreakTime) < INVULNERABILITY_DURATION; + } + + @Override + public void takeDamage(int damage) { + if (isInvulnerable()) return; + + super.takeDamage(damage); + + if (health <= 0 && currentLayer > 1) { + currentLayer--; + health = JUGGERNAUT_BASE_HEALTH / ARMOR_LAYERS; + lastLayerBreakTime = now(); + + lastShockwaveTime = 0; + } + } + + public boolean shouldStartCharge() { + long currentTime = now(); + if (!isCharging && !isPreparingCharge && currentTime - lastChargeTime > CHARGE_COOLDOWN) { + isPreparingCharge = true; + chargeStartTime = currentTime; + return true; + } + return false; + } + + public boolean shouldExecuteCharge() { + if (isPreparingCharge && timeSince(chargeStartTime) > CHARGE_PREPARATION_TIME) { + isPreparingCharge = false; + isCharging = true; + lastChargeTime = now(); + velocity.set(chargeVelocity); + return true; + } + return false; + } + + public void setChargeDirection(float x, float y) { + float length = (float) Math.sqrt(x * x + y * y); + if (length > 0) { + chargeDirection.set(x / length, y / length); + } + } + + public boolean shouldShockwave() { + return timeSince(lastShockwaveTime) > SHOCKWAVE_COOLDOWN; + } + + public void performShockwave() { + lastShockwaveTime = now(); + } + + public void endCharge() { + isCharging = false; + isPreparingCharge = false; + velocity.set(normalVelocity); + } + + public boolean isCharging() { + return isCharging; + } + + public boolean isPreparingCharge() { + return isPreparingCharge; + } + + public float getChargeProgress() { + if (!isPreparingCharge) return 0f; + return Math.min(timeSince(chargeStartTime) / (float) CHARGE_PREPARATION_TIME, 1f); + } + + public int getCurrentLayer() { + return currentLayer; + } + + public static float getShockwaveRadius() { + return SHOCKWAVE_RADIUS; + } + + public static float getShockwaveForce() { + return SHOCKWAVE_FORCE; + } + + public static float getStaticRadius() { + return 40f; + } + + public static float getStaticSpeed() { + return 40f; + } + + @Override + protected int getBaseReward() { + return 200; + } + + public void update() { + long currentTime = now(); + if (isCharging && currentTime - lastChargeTime > CHARGE_DURATION) { + isCharging = false; + velocity.set(normalVelocity); + } + } +} diff --git a/core/src/main/java/ru/project/tower/entities/circles/bosses/ShadowWeaverData.java b/core/src/main/java/ru/project/tower/entities/circles/bosses/ShadowWeaverData.java new file mode 100644 index 0000000..ddd1543 --- /dev/null +++ b/core/src/main/java/ru/project/tower/entities/circles/bosses/ShadowWeaverData.java @@ -0,0 +1,240 @@ +package ru.project.tower.entities.circles.bosses; + +import com.badlogic.gdx.math.Circle; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.utils.Array; +import ru.project.tower.entities.circles.BaseCircleData; +import ru.project.tower.support.GameClock; + +public class ShadowWeaverData extends BaseCircleData { + + private static final float SHADOW_WEAVER_SPEED = 100f; + private static final int SHADOW_WEAVER_BASE_HEALTH = 200; + private static final int SHADOW_WEAVER_DAMAGE = 15; + private static final float SHADOW_WEAVER_RADIUS = 40f; + + private static final long TELEPORT_COOLDOWN = 5000; + private static final long TELEPORT_DURATION = 1000; + private static final float TELEPORT_MAX_DISTANCE = 300f; + + private static final int MAX_CLONES = 3; + private static final long CLONE_DURATION = 8000; + private static final int CLONE_HEALTH = 30; + private static final int CLONE_DAMAGE = 5; + private static final long CLONE_DAMAGE_COOLDOWN_MS = 1000L; + + private static final long PROJECTILE_COOLDOWN = 2000; + private static final float PROJECTILE_SPEED = 200f; + private static final float PROJECTILE_RADIUS = 8f; + private static final int PROJECTILE_DAMAGE = 10; + + private boolean isTeleporting; + private long lastTeleportTime; + private long teleportStartTime; + private Vector2 teleportTarget; + private Vector2 originalPosition; + private long lastProjectileTime; + private float teleportProgress; + private Array clones; + + private boolean isInvisible = false; + private long lastInvisibilityTime = 0; + private long invisibilityStartTime = 0; + private static final long INVISIBILITY_COOLDOWN = 7000; + private static final long INVISIBILITY_DURATION = 3000; + private static final float INVISIBLE_SPEED_MULTIPLIER = 1.5f; + private Vector2 normalVelocity; + private Vector2 invisibleVelocity; + private final GameClock clock; + + public ShadowWeaverData(Circle circle, Vector2 velocity) { + this(circle, velocity, GameClock.SYSTEM); + } + + public ShadowWeaverData(Circle circle, Vector2 velocity, GameClock clock) { + super(circle, velocity, SHADOW_WEAVER_BASE_HEALTH, SHADOW_WEAVER_DAMAGE); + this.clock = clock; + this.isTeleporting = false; + this.teleportTarget = new Vector2(); + this.originalPosition = new Vector2(); + this.clones = new Array<>(); + this.normalVelocity = velocity.cpy(); + this.invisibleVelocity = velocity.cpy().scl(INVISIBLE_SPEED_MULTIPLIER); + } + + private long now() { + return clock.nowMs(); + } + + private long timeSince(long pastMs) { + return now() - pastMs; + } + + @Override + public void move(float delta) { + if (isTeleporting) { + + teleportProgress = + Math.min(1f, timeSince(teleportStartTime) / (float) TELEPORT_DURATION); + + circle.x = + originalPosition.x + (teleportTarget.x - originalPosition.x) * teleportProgress; + circle.y = + originalPosition.y + (teleportTarget.y - originalPosition.y) * teleportProgress; + + if (teleportProgress >= 1f) { + isTeleporting = false; + lastTeleportTime = now(); + } + } else { + super.move(delta); + } + + for (int i = clones.size - 1; i >= 0; i--) { + ShadowCloneData clone = clones.get(i); + if (timeSince(clone.getCreationTime()) > CLONE_DURATION) { + clones.removeIndex(i); + } else { + clone.move(delta); + } + } + } + + private final float[] colorScratch = {0.3f, 0.0f, 0.5f, 1.0f}; + + @Override + public float[] getColor() { + colorScratch[3] = isInvisible ? 0.3f : 1.0f; + return colorScratch; + } + + public boolean shouldTeleport() { + return !isTeleporting && timeSince(lastTeleportTime) > TELEPORT_COOLDOWN; + } + + public void startTeleport(float targetX, float targetY) { + isTeleporting = true; + teleportStartTime = now(); + teleportProgress = 0f; + originalPosition.set(circle.x, circle.y); + teleportTarget.set(targetX, targetY); + } + + public void createClones() { + if (clones.size < MAX_CLONES) { + for (int i = 0; i < MAX_CLONES; i++) { + float angle = (float) (i * Math.PI * 2 / MAX_CLONES); + float distance = 100f; + float cloneX = circle.x + (float) Math.cos(angle) * distance; + float cloneY = circle.y + (float) Math.sin(angle) * distance; + + Circle cloneCircle = new Circle(cloneX, cloneY, SHADOW_WEAVER_RADIUS); + Vector2 cloneVelocity = new Vector2(velocity).scl(0.8f); + + ShadowCloneData clone = new ShadowCloneData(cloneCircle, cloneVelocity); + clones.add(clone); + } + } + } + + public boolean shouldShoot() { + return timeSince(lastProjectileTime) > PROJECTILE_COOLDOWN; + } + + public void markProjectileShot() { + lastProjectileTime = now(); + } + + public boolean isTeleporting() { + return isTeleporting; + } + + public float getTeleportProgress() { + return teleportProgress; + } + + public Array getClones() { + return clones; + } + + public static int getCloneDamage() { + return CLONE_DAMAGE; + } + + public static long getCloneDamageCooldownMs() { + return CLONE_DAMAGE_COOLDOWN_MS; + } + + public static float getProjectileRadius() { + return PROJECTILE_RADIUS; + } + + public static float getProjectileSpeed() { + return PROJECTILE_SPEED; + } + + public static int getProjectileDamage() { + return PROJECTILE_DAMAGE; + } + + @Override + protected int getBaseReward() { + return 200; + } + + public static float getStaticRadius() { + return 25f; + } + + public static float getStaticSpeed() { + return 70f; + } + + public boolean shouldBecomeInvisible() { + long currentTime = now(); + if (!isInvisible && currentTime - lastInvisibilityTime > INVISIBILITY_COOLDOWN) { + isInvisible = true; + invisibilityStartTime = currentTime; + lastInvisibilityTime = currentTime; + velocity.set(invisibleVelocity); + return true; + } + return false; + } + + public void update() { + long currentTime = now(); + if (isInvisible && currentTime - invisibilityStartTime > INVISIBILITY_DURATION) { + isInvisible = false; + velocity.set(normalVelocity); + } + } + + public boolean isInvisible() { + return isInvisible; + } + + public class ShadowCloneData extends BaseCircleData { + private long creationTime; + + public ShadowCloneData(Circle circle, Vector2 velocity) { + super(circle, velocity, CLONE_HEALTH, CLONE_DAMAGE); + this.creationTime = ShadowWeaverData.this.now(); + } + + public long getCreationTime() { + return creationTime; + } + + private final float[] cloneColorScratch = {0f, 0f, 0f, 0.5f}; + + @Override + public float[] getColor() { + float[] bossColor = ShadowWeaverData.this.getColor(); + cloneColorScratch[0] = bossColor[0]; + cloneColorScratch[1] = bossColor[1]; + cloneColorScratch[2] = bossColor[2]; + return cloneColorScratch; + } + } +} diff --git a/core/src/main/java/ru/project/tower/entities/circles/bosses/SwarmQueenData.java b/core/src/main/java/ru/project/tower/entities/circles/bosses/SwarmQueenData.java new file mode 100644 index 0000000..297656e --- /dev/null +++ b/core/src/main/java/ru/project/tower/entities/circles/bosses/SwarmQueenData.java @@ -0,0 +1,344 @@ +package ru.project.tower.entities.circles.bosses; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.math.Circle; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.utils.Array; +import ru.project.tower.entities.circles.BaseCircleData; +import ru.project.tower.support.BossEffectsHost; +import ru.project.tower.support.GameClock; + +public class SwarmQueenData extends BaseCircleData { + + private static final float QUEEN_RADIUS = 40f; + private static final int QUEEN_HEALTH = 200; + private static final float QUEEN_SPEED = 40f; + private static final int QUEEN_DAMAGE = 15; + + private static final int MINIONS_PER_SPAWN = 6; + private static final long MINION_SPAWN_COOLDOWN = 6000; + private static final long VULNERABILITY_DURATION = 2000; + + private static final int BULLETS_PER_VOLLEY = 12; + private static final long BULLET_VOLLEY_COOLDOWN = 8000; + private static final float BULLET_SPEED = 200f; + private static final float BULLET_RADIUS = 5f; + private static final int BULLET_DAMAGE = 10; + + private static final int ORBITAL_EYES_COUNT = 4; + private static final float ORBITAL_RADIUS = 60f; + private static final float ORBITAL_SPEED = 2f; + + private static final int ORBITAL_PARTICLES_COUNT = 12; + private static final float ORBITAL_PARTICLE_RADIUS = 3f; + private static final float ORBITAL_PARTICLE_SPEED = 3f; + + private long lastMinionSpawnTime; + private long lastBulletVolleyTime; + private boolean isVulnerable; + private long vulnerabilityStartTime; + private float orbitalAngle; + private float particleAngle = 0f; + private Array orbitalEyePositions; + private Array orbitalParticles; + private static final long CHARGING_DURATION = 1000; + private long chargingStartTime = 0; + private boolean isChargingComplete = false; + + private static final Color BASE_COLOR = new Color(0.5f, 0.1f, 0.5f, 1f); + private static final Color CHARGING_COLOR = new Color(0.8f, 0.2f, 0.8f, 1f); + private static final Color VULNERABLE_COLOR = new Color(0.3f, 0.3f, 0.8f, 1f); + private static final Color MINION_COLOR = new Color(0.4f, 0.1f, 0.4f, 1f); + private static final Color PROJECTILE_COLOR = new Color(0.8f, 0.2f, 0.8f, 1f); + + + + + private final Color scratchBase = new Color(); + private final Color scratchMinion = new Color(); + private final Color scratchProjectile = new Color(); + private final float[] scratchColorArr = new float[4]; + + private static final float EYE_RADIUS = 8f; + private static final float EYE_GLOW_MULTIPLIER = 1.5f; + private static final float PARTICLE_SPAWN_RATE = 0.1f; + private float particleTimer = 0f; + + private final BossEffectsHost host; + private final GameClock clock; + + public SwarmQueenData(Circle circle, Vector2 velocity, BossEffectsHost host) { + this(circle, velocity, host, GameClock.SYSTEM); + } + + public SwarmQueenData(Circle circle, Vector2 velocity, BossEffectsHost host, GameClock clock) { + super(circle, velocity, QUEEN_HEALTH, QUEEN_DAMAGE); + this.host = host; + this.clock = clock; + this.orbitalEyePositions = new Array<>(ORBITAL_EYES_COUNT); + this.orbitalParticles = new Array<>(ORBITAL_PARTICLES_COUNT); + + for (int i = 0; i < ORBITAL_EYES_COUNT; i++) { + this.orbitalEyePositions.add(new Vector2()); + } + + for (int i = 0; i < ORBITAL_PARTICLES_COUNT; i++) { + this.orbitalParticles.add(new Vector2()); + } + + updateOrbitalEyes(); + updateOrbitalParticles(); + } + + private long now() { + return clock.nowMs(); + } + + private long timeSince(long pastMs) { + return now() - pastMs; + } + + @Override + public void move(float delta) { + super.move(delta); + + orbitalAngle += ORBITAL_SPEED * delta; + updateOrbitalEyes(); + + particleAngle += ORBITAL_PARTICLE_SPEED * delta; + updateOrbitalParticles(); + + if (isVulnerable && timeSince(vulnerabilityStartTime) > VULNERABILITY_DURATION) { + isVulnerable = false; + } + } + + private void updateOrbitalEyes() { + float angleStep = (float) (2 * Math.PI / ORBITAL_EYES_COUNT); + for (int i = 0; i < ORBITAL_EYES_COUNT; i++) { + float angle = orbitalAngle + i * angleStep; + float x = getX() + ORBITAL_RADIUS * (float) Math.cos(angle); + float y = getY() + ORBITAL_RADIUS * (float) Math.sin(angle); + orbitalEyePositions.get(i).set(x, y); + } + } + + private void updateOrbitalParticles() { + float baseRadius = circle.radius * 1.5f; + float angleStep = (float) (2 * Math.PI / ORBITAL_PARTICLES_COUNT); + + for (int i = 0; i < ORBITAL_PARTICLES_COUNT; i++) { + float angle = particleAngle + i * angleStep; + + float radiusOffset = 5f * (float) Math.sin(now() / 200.0 + i * 0.5f); + float radius = baseRadius + radiusOffset; + + float x = getX() + radius * (float) Math.cos(angle); + float y = getY() + radius * (float) Math.sin(angle); + orbitalParticles.get(i).set(x, y); + } + } + + private Color getBaseColor() { + scratchBase.set(BASE_COLOR); + if (isCharging()) { + scratchBase.lerp(CHARGING_COLOR, getChargeProgress()); + } else if (isVulnerable()) { + scratchBase.lerp(VULNERABLE_COLOR, 0.7f); + } + scratchBase.a = 0.8f + 0.2f * (float) Math.sin(now() / 200.0); + return scratchBase; + } + + @Override + public float[] getColor() { + Color color = getBaseColor(); + scratchColorArr[0] = color.r; + scratchColorArr[1] = color.g; + scratchColorArr[2] = color.b; + scratchColorArr[3] = color.a; + return scratchColorArr; + } + + public Color getOrbitalParticleColor() { + return getBaseColor(); + } + + public boolean shouldSpawnMinions() { + return timeSince(lastMinionSpawnTime) > MINION_SPAWN_COOLDOWN; + } + + public void onMinionSpawn() { + long currentTime = now(); + lastMinionSpawnTime = currentTime; + isVulnerable = true; + vulnerabilityStartTime = currentTime; + } + + public boolean isReadyToFireProjectiles() { + return timeSince(lastBulletVolleyTime) > BULLET_VOLLEY_COOLDOWN; + } + + public void onProjectileAttackStart() { + lastBulletVolleyTime = now(); + } + + public static float getStaticRadius() { + return QUEEN_RADIUS; + } + + public static float getStaticSpeed() { + return QUEEN_SPEED; + } + + public static int getMinionsPerWave() { + return MINIONS_PER_SPAWN; + } + + public static int getBulletsPerVolley() { + return BULLETS_PER_VOLLEY; + } + + public static float getBulletSpeed() { + return BULLET_SPEED; + } + + public static float getBulletRadius() { + return BULLET_RADIUS; + } + + public static int getBulletDamage() { + return BULLET_DAMAGE; + } + + public Array getOrbitalEyePositions() { + return orbitalEyePositions; + } + + public Array getOrbitalParticles() { + return orbitalParticles; + } + + public float getOrbitalParticleRadius() { + return ORBITAL_PARTICLE_RADIUS; + } + + public boolean isVulnerable() { + return isVulnerable; + } + + @Override + public void takeDamage(int damage) { + if (isVulnerable) { + super.takeDamage(damage * 2); + } else { + super.takeDamage(damage); + } + } + + @Override + protected int getBaseReward() { + return 200; + } + + public boolean isCharging() { + if (isReadyToFireProjectiles() && !isChargingComplete) { + if (chargingStartTime == 0) { + chargingStartTime = now(); + } + boolean charging = timeSince(chargingStartTime) < CHARGING_DURATION; + if (!charging) { + isChargingComplete = true; + } + return charging; + } + return false; + } + + public void finishCharging() { + chargingStartTime = 0; + isChargingComplete = false; + onProjectileAttackStart(); + } + + public float getChargeProgress() { + if (chargingStartTime == 0) { + return 0f; + } + float progress = (float) timeSince(chargingStartTime) / CHARGING_DURATION; + return Math.min(progress, 1f); + } + + public Color getMinionColor() { + scratchMinion.set(MINION_COLOR); + if (isVulnerable()) { + scratchMinion.lerp(VULNERABLE_COLOR, 0.5f); + } + scratchMinion.a = 0.9f + 0.1f * (float) Math.sin(now() / 300.0); + return scratchMinion; + } + + public Color getProjectileColor() { + scratchProjectile.set(PROJECTILE_COLOR); + if (isVulnerable()) { + scratchProjectile.lerp(VULNERABLE_COLOR, 0.3f); + } + scratchProjectile.a = 0.7f + 0.3f * (float) Math.sin(now() / 150.0); + return scratchProjectile; + } + + public float getEyeRadius() { + float baseRadius = EYE_RADIUS; + if (isCharging()) { + + baseRadius *= (1f + 0.5f * getChargeProgress()); + } + + return baseRadius * (1f + 0.1f * (float) Math.sin(now() / 150.0)); + } + + public float getEyeGlow() { + float baseGlow = 1f; + if (isCharging()) { + + baseGlow = 1f + getChargeProgress() * 2f; + } else if (isVulnerable()) { + + baseGlow = 0.7f; + } + + return baseGlow * (1f + 0.2f * (float) Math.sin(now() / 200.0)); + } + + public void updateParticles(float delta) { + particleTimer += delta; + if (particleTimer >= PARTICLE_SPAWN_RATE) { + particleTimer = 0f; + if (isCharging()) { + + spawnChargeParticles(); + } else if (isVulnerable()) { + + spawnVulnerabilityParticles(); + } + } + } + + private final Color scratchParticleColor = new Color(); + + private void spawnChargeParticles() { + if (host != null) { + scratchParticleColor.set(CHARGING_COLOR); + scratchParticleColor.a = 0.7f + 0.3f * getChargeProgress(); + host.createBossParticles(getX(), getY(), circle.radius, scratchParticleColor, 1.5f, 3); + } + } + + private void spawnVulnerabilityParticles() { + if (host != null) { + scratchParticleColor.set(VULNERABLE_COLOR); + scratchParticleColor.a = 0.6f; + host.createBossParticles(getX(), getY(), circle.radius, scratchParticleColor, 1.2f, 2); + } + } +} diff --git a/core/src/main/java/ru/project/tower/entities/circles/bosses/VolatileReactorData.java b/core/src/main/java/ru/project/tower/entities/circles/bosses/VolatileReactorData.java new file mode 100644 index 0000000..f6cdcf0 --- /dev/null +++ b/core/src/main/java/ru/project/tower/entities/circles/bosses/VolatileReactorData.java @@ -0,0 +1,256 @@ +package ru.project.tower.entities.circles.bosses; + +import com.badlogic.gdx.math.Circle; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.utils.Array; +import ru.project.tower.entities.circles.BaseCircleData; +import ru.project.tower.support.GameClock; + +public class VolatileReactorData extends BaseCircleData { + + private static final float REACTOR_SPEED = 80f; + private static final int REACTOR_BASE_HEALTH = 250; + private static final int REACTOR_DAMAGE = 20; + private static final float REACTOR_RADIUS = 40f; + + private static final long HEAT_CYCLE_DURATION = 15000; + private static final int EXPLOSION_DAMAGE = 50; + private static final float EXPLOSION_RADIUS = 300f; + private static final long COOLDOWN_DURATION = 5000; + + private static final long FIRE_ZONE_INTERVAL = 3000; + private static final long FIRE_ZONE_DURATION = 5000; + private static final float FIRE_ZONE_RADIUS = 60f; + private static final int FIRE_ZONE_DAMAGE = 5; + private static final long FIRE_ZONE_DAMAGE_COOLDOWN_MS = 1000L; + + private static final long MISSILE_COOLDOWN = 7000; + private static final int MISSILES_PER_VOLLEY = 5; + private static final float MISSILE_SPEED = 250f; + private static final float MISSILE_RADIUS = 6f; + private static final int MISSILE_DAMAGE = 8; + + private float heatLevel; + private long cycleStartTime; + private boolean isExploding; + private boolean isCoolingDown; + private long lastFireZoneTime; + private long lastMissileTime; + private Array fireZones; + + private int energyLevel = 0; + private long lastEnergyGainTime = 0; + private static final long ENERGY_GAIN_INTERVAL = 1000; + private static final int MAX_ENERGY = 100; + private static final int ENERGY_GAIN_AMOUNT = 10; + private long explosionStartTime = 0; + private static final long EXPLOSION_DURATION = 500; + private final GameClock clock; + + public VolatileReactorData(Circle circle, Vector2 velocity) { + this(circle, velocity, GameClock.SYSTEM); + } + + public VolatileReactorData(Circle circle, Vector2 velocity, GameClock clock) { + super(circle, velocity, REACTOR_BASE_HEALTH, REACTOR_DAMAGE); + this.clock = clock; + this.heatLevel = 0f; + this.cycleStartTime = now(); + this.isExploding = false; + this.isCoolingDown = false; + this.fireZones = new Array<>(); + } + + private long now() { + return clock.nowMs(); + } + + private long timeSince(long pastMs) { + return now() - pastMs; + } + + @Override + public void move(float delta) { + super.move(delta); + + if (!isCoolingDown) { + heatLevel = Math.min(1f, timeSince(cycleStartTime) / (float) HEAT_CYCLE_DURATION); + + if (heatLevel >= 1f && !isExploding) { + isExploding = true; + } + } else { + + heatLevel = Math.max(0f, 1f - timeSince(cycleStartTime) / (float) COOLDOWN_DURATION); + + if (heatLevel <= 0f) { + isCoolingDown = false; + cycleStartTime = now(); + } + } + + for (int i = fireZones.size - 1; i >= 0; i--) { + FireZone zone = fireZones.get(i); + if (timeSince(zone.creationTime) > FIRE_ZONE_DURATION) { + fireZones.removeIndex(i); + } + } + } + + private final float[] colorScratch = {0f, 0f, 0.1f, 1f}; + + @Override + public float[] getColor() { + float pulseIntensity = 0.5f + 0.5f * (float) Math.sin(now() * 0.01f); + float heat = heatLevel + pulseIntensity * 0.2f; + colorScratch[0] = 0.8f + heat * 0.2f; + colorScratch[1] = 0.4f - heat * 0.3f; + return colorScratch; + } + + public void explode() { + isExploding = false; + isCoolingDown = true; + cycleStartTime = now(); + } + + public boolean shouldCreateFireZone() { + return timeSince(lastFireZoneTime) > FIRE_ZONE_INTERVAL; + } + + public void createFireZone() { + FireZone zone = new FireZone(circle.x, circle.y, FIRE_ZONE_RADIUS, now(), clock); + fireZones.add(zone); + lastFireZoneTime = now(); + } + + public boolean shouldShootMissiles() { + return timeSince(lastMissileTime) > MISSILE_COOLDOWN; + } + + public void markMissileShot() { + lastMissileTime = now(); + } + + public float getHeatLevel() { + return heatLevel; + } + + public boolean isExploding() { + return isExploding; + } + + public Array getFireZones() { + return fireZones; + } + + public static float getFireZoneRadius() { + return FIRE_ZONE_RADIUS; + } + + public static int getFireZoneDamage() { + return FIRE_ZONE_DAMAGE; + } + + public static long getFireZoneDamageCooldownMs() { + return FIRE_ZONE_DAMAGE_COOLDOWN_MS; + } + + public static float getMissileRadius() { + return MISSILE_RADIUS; + } + + public static float getMissileSpeed() { + return MISSILE_SPEED; + } + + public static int getMissileDamage() { + return MISSILE_DAMAGE; + } + + public static int getMissilesPerVolley() { + return MISSILES_PER_VOLLEY; + } + + public static float getExplosionRadius() { + return EXPLOSION_RADIUS; + } + + public static int getExplosionDamage() { + return EXPLOSION_DAMAGE; + } + + @Override + protected int getBaseReward() { + return 225; + } + + public static class FireZone { + public float x, y; + public float radius; + public long creationTime; + private final GameClock clock; + + public FireZone(float x, float y, float radius, long creationTime) { + this(x, y, radius, creationTime, GameClock.SYSTEM); + } + + public FireZone(float x, float y, float radius, long creationTime, GameClock clock) { + this.x = x; + this.y = y; + this.radius = radius; + this.creationTime = creationTime; + this.clock = clock; + } + + public float getAlpha() { + float age = (clock.nowMs() - creationTime) / (float) FIRE_ZONE_DURATION; + return 1f - age; + } + + private final float[] zoneColorScratch = {1f, 0.3f, 0.1f, 0f}; + + public float[] getColor() { + float intensity = 0.5f + 0.5f * (float) Math.sin(clock.nowMs() * 0.005f); + zoneColorScratch[3] = getAlpha() * (0.3f + intensity * 0.2f); + return zoneColorScratch; + } + } + + public static float getStaticRadius() { + return REACTOR_RADIUS; + } + + public static float getStaticSpeed() { + return REACTOR_SPEED; + } + + public void update() { + long currentTime = now(); + + if (!isExploding && currentTime - lastEnergyGainTime > ENERGY_GAIN_INTERVAL) { + energyLevel = Math.min(MAX_ENERGY, energyLevel + ENERGY_GAIN_AMOUNT); + lastEnergyGainTime = currentTime; + } + + if (isExploding && currentTime - explosionStartTime > EXPLOSION_DURATION) { + isExploding = false; + energyLevel = 0; + } + } + + public boolean shouldExplode() { + return energyLevel >= MAX_ENERGY && !isExploding; + } + + public void startExplosion() { + if (!isExploding) { + isExploding = true; + explosionStartTime = now(); + } + } + + public int getEnergyLevel() { + return energyLevel; + } +} diff --git a/core/src/main/java/ru/project/tower/entities/particles/FloatingText.java b/core/src/main/java/ru/project/tower/entities/particles/FloatingText.java new file mode 100644 index 0000000..da74e3d --- /dev/null +++ b/core/src/main/java/ru/project/tower/entities/particles/FloatingText.java @@ -0,0 +1,74 @@ +package ru.project.tower.entities.particles; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.utils.Pool; + + + + + + +public class FloatingText implements Pool.Poolable { + public final Vector2 position = new Vector2(); + public final Vector2 velocity = new Vector2(); + public String text; + public Color color; + public float lifetime; + public float maxLifetime; + public float scale; + public float initialScale; + + + public FloatingText() {} + + public void configure(float x, float y, String text, Color srcColor) { + configure(x, y, text, srcColor, 1.0f, 1.0f, 50f); + } + + public void configure( + float x, + float y, + String text, + Color srcColor, + float maxLifetime, + float initialScale, + float riseSpeed) { + position.set(x, y); + velocity.set(0f, riseSpeed); + this.text = text; + + if (this.color == null) this.color = new Color(); + this.color.set(srcColor); + this.maxLifetime = maxLifetime; + this.lifetime = maxLifetime; + this.initialScale = initialScale; + this.scale = initialScale; + } + + public void update(float delta) { + position.add(velocity.x * delta, velocity.y * delta); + lifetime -= delta; + velocity.y *= 0.95f; + float life = Math.max(0f, lifetime / maxLifetime); + scale = initialScale * (0.85f + 0.15f * life); + color.a = Math.min(1f, life / 0.4f); + } + + public boolean isAlive() { + return lifetime > 0; + } + + @Override + public void reset() { + position.set(0f, 0f); + velocity.set(0f, 0f); + text = null; + + if (color != null) color.set(0f, 0f, 0f, 0f); + lifetime = 0f; + maxLifetime = 0f; + scale = 0f; + initialScale = 0f; + } +} diff --git a/core/src/main/java/ru/project/tower/entities/particles/NeonParticle.java b/core/src/main/java/ru/project/tower/entities/particles/NeonParticle.java new file mode 100644 index 0000000..6b4c78e --- /dev/null +++ b/core/src/main/java/ru/project/tower/entities/particles/NeonParticle.java @@ -0,0 +1,48 @@ +package ru.project.tower.entities.particles; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.math.MathUtils; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.utils.Pool; + + + + + + +public class NeonParticle implements Pool.Poolable { + public final Vector2 position = new Vector2(); + public final Vector2 velocity = new Vector2(); + public final Color color = new Color(); + public float size; + public float lifetime; + public float maxLifetime; + + + public NeonParticle() {} + + public void configure(float x, float y, Color color) { + position.set(x, y); + velocity.set(MathUtils.random(-20f, 20f), MathUtils.random(-20f, 20f)); + size = MathUtils.random(2f, 4f); + maxLifetime = MathUtils.random(0.5f, 2.0f); + lifetime = maxLifetime; + this.color.set(color); + } + + public void update(float delta) { + position.add(velocity.x * delta, velocity.y * delta); + lifetime -= delta; + size = Math.max(0, size - delta); + } + + @Override + public void reset() { + position.set(0f, 0f); + velocity.set(0f, 0f); + size = 0f; + lifetime = 0f; + maxLifetime = 0f; + color.set(0f, 0f, 0f, 0f); + } +} diff --git a/core/src/main/java/ru/project/tower/navigation/DefaultScreenFactory.java b/core/src/main/java/ru/project/tower/navigation/DefaultScreenFactory.java new file mode 100644 index 0000000..81f3ebb --- /dev/null +++ b/core/src/main/java/ru/project/tower/navigation/DefaultScreenFactory.java @@ -0,0 +1,47 @@ +package ru.project.tower.navigation; + +import com.badlogic.gdx.Screen; +import java.util.Objects; +import ru.project.tower.GameContext; +import ru.project.tower.screens.AbilitySelectionScreen; +import ru.project.tower.screens.AbilityShopScreen; +import ru.project.tower.screens.GameScreen; +import ru.project.tower.screens.MainScreen; +import ru.project.tower.screens.TalentTreeScreen; +import ru.project.tower.screens.abilityselection.AbilitySelectionDependencies; +import ru.project.tower.screens.abilityshop.AbilityShopDependencies; +import ru.project.tower.screens.gamescreen.GameScreenDependencies; +import ru.project.tower.screens.talenttree.TalentTreeScreenDependencies; + +public final class DefaultScreenFactory implements ScreenFactory { + private final GameContext ctx; + + public DefaultScreenFactory(GameContext ctx) { + this.ctx = Objects.requireNonNull(ctx, "ctx"); + } + + @Override + public Screen createMainMenu(ScreenNavigator navigator) { + return new MainScreen(navigator); + } + + @Override + public Screen createAbilitySelection(ScreenNavigator navigator) { + return new AbilitySelectionScreen(navigator, AbilitySelectionDependencies.from(ctx)); + } + + @Override + public Screen createAbilityShop(ScreenNavigator navigator) { + return new AbilityShopScreen(navigator, AbilityShopDependencies.from(ctx)); + } + + @Override + public Screen createTalentTree(ScreenNavigator navigator) { + return new TalentTreeScreen(navigator, TalentTreeScreenDependencies.from(ctx)); + } + + @Override + public Screen createGameScreen(ScreenNavigator navigator) { + return new GameScreen(navigator, GameScreenDependencies.from(ctx)); + } +} diff --git a/core/src/main/java/ru/project/tower/navigation/GameScreenNavigator.java b/core/src/main/java/ru/project/tower/navigation/GameScreenNavigator.java new file mode 100644 index 0000000..4969b1c --- /dev/null +++ b/core/src/main/java/ru/project/tower/navigation/GameScreenNavigator.java @@ -0,0 +1,76 @@ +package ru.project.tower.navigation; + +import com.badlogic.gdx.Game; +import com.badlogic.gdx.Screen; +import java.util.Objects; + +public final class GameScreenNavigator implements ScreenNavigator { + private final ScreenHost host; + private final ScreenFactory factory; + + public GameScreenNavigator(ScreenHost host, ScreenFactory factory) { + this.host = Objects.requireNonNull(host, "host"); + this.factory = Objects.requireNonNull(factory, "factory"); + } + + public static GameScreenNavigator forGame(Game game, ScreenFactory factory) { + return new GameScreenNavigator(new GdxGameScreenHost(game), factory); + } + + @Override + public void showMainMenu() { + transitionTo(factory.createMainMenu(this)); + } + + @Override + public void showAbilitySelection() { + transitionTo(factory.createAbilitySelection(this)); + } + + @Override + public void showAbilityShop() { + transitionTo(factory.createAbilityShop(this)); + } + + @Override + public void showTalentTree() { + transitionTo(factory.createTalentTree(this)); + } + + @Override + public void showGameScreen() { + transitionTo(factory.createGameScreen(this)); + } + + private void transitionTo(Screen nextScreen) { + Screen previousScreen = host.currentScreen(); + host.setScreen(Objects.requireNonNull(nextScreen, "nextScreen")); + if (previousScreen != null && previousScreen != nextScreen) { + previousScreen.dispose(); + } + } + + public interface ScreenHost { + Screen currentScreen(); + + void setScreen(Screen screen); + } + + private static final class GdxGameScreenHost implements ScreenHost { + private final Game game; + + private GdxGameScreenHost(Game game) { + this.game = Objects.requireNonNull(game, "game"); + } + + @Override + public Screen currentScreen() { + return game.getScreen(); + } + + @Override + public void setScreen(Screen screen) { + game.setScreen(screen); + } + } +} diff --git a/core/src/main/java/ru/project/tower/navigation/ScreenFactory.java b/core/src/main/java/ru/project/tower/navigation/ScreenFactory.java new file mode 100644 index 0000000..2fa3b47 --- /dev/null +++ b/core/src/main/java/ru/project/tower/navigation/ScreenFactory.java @@ -0,0 +1,15 @@ +package ru.project.tower.navigation; + +import com.badlogic.gdx.Screen; + +public interface ScreenFactory { + Screen createMainMenu(ScreenNavigator navigator); + + Screen createAbilitySelection(ScreenNavigator navigator); + + Screen createAbilityShop(ScreenNavigator navigator); + + Screen createTalentTree(ScreenNavigator navigator); + + Screen createGameScreen(ScreenNavigator navigator); +} diff --git a/core/src/main/java/ru/project/tower/navigation/ScreenNavigation.java b/core/src/main/java/ru/project/tower/navigation/ScreenNavigation.java new file mode 100644 index 0000000..a9b51d4 --- /dev/null +++ b/core/src/main/java/ru/project/tower/navigation/ScreenNavigation.java @@ -0,0 +1,12 @@ +package ru.project.tower.navigation; + +import com.badlogic.gdx.Game; +import ru.project.tower.GameContext; + +public final class ScreenNavigation { + private ScreenNavigation() {} + + public static ScreenNavigator forGame(Game game, GameContext ctx) { + return GameScreenNavigator.forGame(game, new DefaultScreenFactory(ctx)); + } +} diff --git a/core/src/main/java/ru/project/tower/navigation/ScreenNavigator.java b/core/src/main/java/ru/project/tower/navigation/ScreenNavigator.java new file mode 100644 index 0000000..43797ee --- /dev/null +++ b/core/src/main/java/ru/project/tower/navigation/ScreenNavigator.java @@ -0,0 +1,13 @@ +package ru.project.tower.navigation; + +public interface ScreenNavigator { + void showMainMenu(); + + void showAbilitySelection(); + + void showAbilityShop(); + + void showTalentTree(); + + void showGameScreen(); +} diff --git a/core/src/main/java/ru/project/tower/player/EffectiveCombatStats.java b/core/src/main/java/ru/project/tower/player/EffectiveCombatStats.java new file mode 100644 index 0000000..a65ff28 --- /dev/null +++ b/core/src/main/java/ru/project/tower/player/EffectiveCombatStats.java @@ -0,0 +1,189 @@ +package ru.project.tower.player; + +import java.util.Objects; +import ru.project.tower.balance.EndlessBalanceSpec; +import ru.project.tower.systems.BonusBallSystem; +import ru.project.tower.talents.TalentTree; +import ru.project.tower.upgrades.UpgradeSystem; +import ru.project.tower.upgrades.shop.ShopUpgradeSystem; + +public final class EffectiveCombatStats { + private static final float CRIT_KEYSTONE_CHANCE_PER_LEVEL = 0.10f; + private static final String CRIT_KEYSTONE_ID = "keystone_crit"; + + private final float damage; + private final float shotCooldownMs; + private final float bulletSpeedMultiplier; + private final float critChance; + private final float critMultiplier; + private final int healthRegenRate; + private final int pierceBonus; + private final float aoeRadiusBonus; + private final float controlRating; + private final float executeDamageBonus; + private final float bossDamageBonus; + private final float controlledDamageBonus; + private final float abilityScalingFactor; + + private EffectiveCombatStats( + float damage, + float shotCooldownMs, + float bulletSpeedMultiplier, + float critChance, + float critMultiplier, + int healthRegenRate, + int pierceBonus, + float aoeRadiusBonus, + float controlRating, + float executeDamageBonus, + float bossDamageBonus, + float controlledDamageBonus, + float abilityScalingFactor) { + this.damage = damage; + this.shotCooldownMs = shotCooldownMs; + this.bulletSpeedMultiplier = bulletSpeedMultiplier; + this.critChance = critChance; + this.critMultiplier = critMultiplier; + this.healthRegenRate = healthRegenRate; + this.pierceBonus = pierceBonus; + this.aoeRadiusBonus = aoeRadiusBonus; + this.controlRating = controlRating; + this.executeDamageBonus = executeDamageBonus; + this.bossDamageBonus = bossDamageBonus; + this.controlledDamageBonus = controlledDamageBonus; + this.abilityScalingFactor = abilityScalingFactor; + } + + public static EffectiveCombatStats fromSources( + PlayerCombatState combatState, + ShopUpgradeSystem shopUpgradeSystem, + UpgradeSystem upgradeSystem, + BonusBallSystem bonusBallSystem, + TalentTree talentTree, + int currentWave, + float baseDamage, + float runDamageBonus, + int runPierceBonus, + float runAoeRadiusBonus, + float controlRating) { + Objects.requireNonNull(combatState, "combatState"); + Objects.requireNonNull(shopUpgradeSystem, "shopUpgradeSystem"); + Objects.requireNonNull(upgradeSystem, "upgradeSystem"); + Objects.requireNonNull(bonusBallSystem, "bonusBallSystem"); + Objects.requireNonNull(talentTree, "talentTree"); + + float damage = + (baseDamage + shopUpgradeSystem.damageBonus() + runDamageBonus) + * bonusBallSystem.getDamageMultiplier(); + return new EffectiveCombatStats( + damage, + shotCooldownMs( + combatState, + shopUpgradeSystem.cooldownReduction(), + upgradeSystem, + bonusBallSystem), + bonusBallSystem.getSpeedMultiplier(), + critChance(combatState, shopUpgradeSystem, upgradeSystem, talentTree), + critMultiplier(combatState, shopUpgradeSystem), + combatState.getHealthRegenRate() + shopUpgradeSystem.regenBonus(), + runPierceBonus + shopUpgradeSystem.pierceBonus(), + runAoeRadiusBonus + shopUpgradeSystem.aoeRadiusBonus(), + controlRating, + shopUpgradeSystem.executeDamageBonus(), + shopUpgradeSystem.bossDamageBonus(), + shopUpgradeSystem.controlledDamageBonus(), + PlayerRunCombatCalculator.abilityScalingFactor(currentWave)); + } + + public static float shotCooldownMs( + PlayerCombatState combatState, + float shopCooldownReduction, + UpgradeSystem upgradeSystem, + BonusBallSystem bonusBallSystem) { + Objects.requireNonNull(combatState, "combatState"); + Objects.requireNonNull(upgradeSystem, "upgradeSystem"); + Objects.requireNonNull(bonusBallSystem, "bonusBallSystem"); + float cooldown = + (combatState.getShotCooldownMs() - shopCooldownReduction) + * upgradeSystem.getRunCooldownMult() + * bonusBallSystem.getCooldownMultiplier(); + return Math.max(PlayerCombatState.MIN_SHOT_COOLDOWN_MS, cooldown); + } + + public static float critChance( + PlayerCombatState combatState, + ShopUpgradeSystem shopUpgradeSystem, + UpgradeSystem upgradeSystem, + TalentTree talentTree) { + Objects.requireNonNull(combatState, "combatState"); + Objects.requireNonNull(shopUpgradeSystem, "shopUpgradeSystem"); + Objects.requireNonNull(upgradeSystem, "upgradeSystem"); + Objects.requireNonNull(talentTree, "talentTree"); + int critKeystone = talentTree.getCurrentLevel(CRIT_KEYSTONE_ID); + return Math.min( + EndlessBalanceSpec.CRIT_CHANCE_CAP, + combatState.getBaseCritChance() + + shopUpgradeSystem.critChanceBonus() + + critKeystone * CRIT_KEYSTONE_CHANCE_PER_LEVEL + + upgradeSystem.getRunCritBonus()); + } + + public static float critMultiplier( + PlayerCombatState combatState, ShopUpgradeSystem shopUpgradeSystem) { + Objects.requireNonNull(combatState, "combatState"); + Objects.requireNonNull(shopUpgradeSystem, "shopUpgradeSystem"); + return combatState.getBaseCritMultiplier() + shopUpgradeSystem.critMultiplierBonus(); + } + + public float damage() { + return damage; + } + + public float shotCooldownMs() { + return shotCooldownMs; + } + + public float bulletSpeedMultiplier() { + return bulletSpeedMultiplier; + } + + public float critChance() { + return critChance; + } + + public float critMultiplier() { + return critMultiplier; + } + + public int healthRegenRate() { + return healthRegenRate; + } + + public int pierceBonus() { + return pierceBonus; + } + + public float aoeRadiusBonus() { + return aoeRadiusBonus; + } + + public float controlRating() { + return controlRating; + } + + public float executeDamageBonus() { + return executeDamageBonus; + } + + public float bossDamageBonus() { + return bossDamageBonus; + } + + public float controlledDamageBonus() { + return controlledDamageBonus; + } + + public float abilityScalingFactor() { + return abilityScalingFactor; + } +} diff --git a/core/src/main/java/ru/project/tower/player/PlayerCombatState.java b/core/src/main/java/ru/project/tower/player/PlayerCombatState.java new file mode 100644 index 0000000..6cb033a --- /dev/null +++ b/core/src/main/java/ru/project/tower/player/PlayerCombatState.java @@ -0,0 +1,365 @@ +package ru.project.tower.player; + +import java.util.Objects; + +public final class PlayerCombatState { + public static final int DEFAULT_MAX_HEALTH = 100; + public static final float DEFAULT_SHOT_COOLDOWN_MS = 800f; + public static final float MIN_SHOT_COOLDOWN_MS = 100f; + public static final long HEALTH_REGEN_INTERVAL_MS = 1_000L; + public static final float DEFAULT_BASE_CRIT_CHANCE = 0.05f; + public static final float DEFAULT_BASE_CRIT_MULTIPLIER = 1.5f; + + private int health; + private int maxHealth; + private int healthRegenRate; + private int money; + private long lastDamageTimeMs; + private long lastHealthRegenTimeMs; + private float shotCooldownMs; + private float baseCritChance; + private float baseCritMultiplier; + private int gameOverCurrencyAward; + private int maxWaveReached; + private boolean gameOverCurrencyAwarded; + private int runCurrencyEarned; + + public PlayerCombatState() { + resetForNewRun(DEFAULT_MAX_HEALTH, DEFAULT_SHOT_COOLDOWN_MS, 0); + baseCritChance = DEFAULT_BASE_CRIT_CHANCE; + baseCritMultiplier = DEFAULT_BASE_CRIT_MULTIPLIER; + } + + public boolean damageIfVulnerable(int damage, long damageCooldownMs, long nowMs) { + return damageIfVulnerable(damage, damageCooldownMs, nowMs, DamageBlocker.NONE); + } + + public boolean damageIfVulnerable( + int damage, long damageCooldownMs, long nowMs, DamageBlocker blocker) { + if (damageCooldownMs > 0L && nowMs - lastDamageTimeMs <= damageCooldownMs) { + return false; + } + + DamageBlocker activeBlocker = blocker == null ? DamageBlocker.NONE : blocker; + if (!activeBlocker.blocksDamage(nowMs)) { + health -= damage; + } + lastDamageTimeMs = nowMs; + return true; + } + + public boolean regenerateIfReady(long nowMs) { + if (nowMs - lastHealthRegenTimeMs <= HEALTH_REGEN_INTERVAL_MS) { + return false; + } + + health = Math.min(maxHealth, health + healthRegenRate); + lastHealthRegenTimeMs = nowMs; + return true; + } + + public void resetForNewRun(int maxHealth, float shotCooldownMs, int healthRegenRate) { + money = 0; + this.maxHealth = maxHealth; + health = maxHealth; + this.healthRegenRate = healthRegenRate; + this.shotCooldownMs = shotCooldownMs; + lastDamageTimeMs = 0L; + lastHealthRegenTimeMs = 0L; + gameOverCurrencyAward = 0; + gameOverCurrencyAwarded = false; + runCurrencyEarned = 0; + } + + public Snapshot snapshot() { + return new Snapshot( + money, + health, + maxHealth, + healthRegenRate, + lastDamageTimeMs, + lastHealthRegenTimeMs, + shotCooldownMs, + baseCritChance, + baseCritMultiplier, + gameOverCurrencyAward, + maxWaveReached, + gameOverCurrencyAwarded, + runCurrencyEarned); + } + + public void apply(Snapshot snapshot) { + Snapshot source = Objects.requireNonNull(snapshot, "snapshot"); + money = source.money(); + health = source.health(); + maxHealth = source.maxHealth(); + healthRegenRate = source.healthRegenRate(); + lastDamageTimeMs = source.lastDamageTimeMs(); + lastHealthRegenTimeMs = source.lastHealthRegenTimeMs(); + shotCooldownMs = source.shotCooldownMs(); + baseCritChance = source.baseCritChance(); + baseCritMultiplier = source.baseCritMultiplier(); + gameOverCurrencyAward = source.gameOverCurrencyAward(); + maxWaveReached = source.maxWaveReached(); + gameOverCurrencyAwarded = source.gameOverCurrencyAwarded(); + runCurrencyEarned = source.runCurrencyEarned(); + } + + public int awardGameOverCurrencyOnce(int currentWave) { + if (gameOverCurrencyAwarded) { + return 0; + } + + gameOverCurrencyAward = currentWave; + maxWaveReached = Math.max(maxWaveReached, currentWave); + gameOverCurrencyAwarded = true; + return gameOverCurrencyAward; + } + + public int getHealth() { + return health; + } + + public void setHealth(int health) { + this.health = health; + } + + public int getMaxHealth() { + return maxHealth; + } + + public void setMaxHealth(int maxHealth) { + this.maxHealth = maxHealth; + } + + public int getHealthRegenRate() { + return healthRegenRate; + } + + public void setHealthRegenRate(int healthRegenRate) { + this.healthRegenRate = healthRegenRate; + } + + public int getMoney() { + return money; + } + + public void setMoney(int money) { + this.money = money; + } + + public void addMoney(int amount) { + if (amount > 0) { + money += amount; + } + } + + public boolean spendMoney(int amount) { + if (amount <= 0) { + return true; + } + if (money < amount) { + return false; + } + money -= amount; + return true; + } + + public int getRunCurrencyEarned() { + return runCurrencyEarned; + } + + public void addRunCurrencyEarned(int amount) { + if (amount > 0) { + runCurrencyEarned += amount; + } + } + + public long getLastDamageTimeMs() { + return lastDamageTimeMs; + } + + public void setLastDamageTimeMs(long lastDamageTimeMs) { + this.lastDamageTimeMs = lastDamageTimeMs; + } + + public long getLastHealthRegenTimeMs() { + return lastHealthRegenTimeMs; + } + + public void setLastHealthRegenTimeMs(long lastHealthRegenTimeMs) { + this.lastHealthRegenTimeMs = lastHealthRegenTimeMs; + } + + public float getShotCooldownMs() { + return shotCooldownMs; + } + + public void setShotCooldownMs(float shotCooldownMs) { + this.shotCooldownMs = shotCooldownMs; + } + + public void reduceShotCooldown(float amountMs) { + shotCooldownMs = Math.max(MIN_SHOT_COOLDOWN_MS, shotCooldownMs - amountMs); + } + + public float getBaseCritChance() { + return baseCritChance; + } + + public void setBaseCritChance(float baseCritChance) { + this.baseCritChance = baseCritChance; + } + + public float getBaseCritMultiplier() { + return baseCritMultiplier; + } + + public void setBaseCritMultiplier(float baseCritMultiplier) { + this.baseCritMultiplier = baseCritMultiplier; + } + + public int getGameOverCurrencyAward() { + return gameOverCurrencyAward; + } + + public int getMaxWaveReached() { + return maxWaveReached; + } + + public boolean isGameOverCurrencyAwarded() { + return gameOverCurrencyAwarded; + } + + public interface DamageBlocker { + DamageBlocker NONE = nowMs -> false; + + boolean blocksDamage(long nowMs); + } + + public static final class Snapshot { + private final int money; + private final int health; + private final int maxHealth; + private final int healthRegenRate; + private final long lastDamageTimeMs; + private final long lastHealthRegenTimeMs; + private final float shotCooldownMs; + private final float baseCritChance; + private final float baseCritMultiplier; + private final int gameOverCurrencyAward; + private final int maxWaveReached; + private final boolean gameOverCurrencyAwarded; + private final int runCurrencyEarned; + + public Snapshot( + int money, + int health, + int maxHealth, + int healthRegenRate, + long lastDamageTimeMs, + long lastHealthRegenTimeMs, + float shotCooldownMs, + float baseCritChance, + float baseCritMultiplier, + int gameOverCurrencyAward, + int maxWaveReached, + boolean gameOverCurrencyAwarded) { + this( + money, + health, + maxHealth, + healthRegenRate, + lastDamageTimeMs, + lastHealthRegenTimeMs, + shotCooldownMs, + baseCritChance, + baseCritMultiplier, + gameOverCurrencyAward, + maxWaveReached, + gameOverCurrencyAwarded, + 0); + } + + public Snapshot( + int money, + int health, + int maxHealth, + int healthRegenRate, + long lastDamageTimeMs, + long lastHealthRegenTimeMs, + float shotCooldownMs, + float baseCritChance, + float baseCritMultiplier, + int gameOverCurrencyAward, + int maxWaveReached, + boolean gameOverCurrencyAwarded, + int runCurrencyEarned) { + this.money = money; + this.health = health; + this.maxHealth = maxHealth; + this.healthRegenRate = healthRegenRate; + this.lastDamageTimeMs = lastDamageTimeMs; + this.lastHealthRegenTimeMs = lastHealthRegenTimeMs; + this.shotCooldownMs = shotCooldownMs; + this.baseCritChance = baseCritChance; + this.baseCritMultiplier = baseCritMultiplier; + this.gameOverCurrencyAward = gameOverCurrencyAward; + this.maxWaveReached = maxWaveReached; + this.gameOverCurrencyAwarded = gameOverCurrencyAwarded; + this.runCurrencyEarned = runCurrencyEarned; + } + + public int money() { + return money; + } + + public int health() { + return health; + } + + public int maxHealth() { + return maxHealth; + } + + public int healthRegenRate() { + return healthRegenRate; + } + + public long lastDamageTimeMs() { + return lastDamageTimeMs; + } + + public long lastHealthRegenTimeMs() { + return lastHealthRegenTimeMs; + } + + public float shotCooldownMs() { + return shotCooldownMs; + } + + public float baseCritChance() { + return baseCritChance; + } + + public float baseCritMultiplier() { + return baseCritMultiplier; + } + + public int gameOverCurrencyAward() { + return gameOverCurrencyAward; + } + + public int maxWaveReached() { + return maxWaveReached; + } + + public boolean gameOverCurrencyAwarded() { + return gameOverCurrencyAwarded; + } + + public int runCurrencyEarned() { + return runCurrencyEarned; + } + } +} diff --git a/core/src/main/java/ru/project/tower/player/PlayerRunCombatCalculator.java b/core/src/main/java/ru/project/tower/player/PlayerRunCombatCalculator.java new file mode 100644 index 0000000..05ae1c3 --- /dev/null +++ b/core/src/main/java/ru/project/tower/player/PlayerRunCombatCalculator.java @@ -0,0 +1,100 @@ +package ru.project.tower.player; + +import java.util.Objects; +import ru.project.tower.systems.BonusBallSystem; +import ru.project.tower.talents.TalentData; +import ru.project.tower.talents.TalentTree; +import ru.project.tower.upgrades.UpgradeSystem; +import ru.project.tower.upgrades.shop.ShopUpgradeSystem; + +public final class PlayerRunCombatCalculator { + private static final float ABILITY_WAVE_SCALING_BASE = 1.15f; + private static final float MIN_COMBAT_SPEED_MULTIPLIER = 0.1f; + + private PlayerRunCombatCalculator() {} + + public static float abilityScalingFactor(int currentWave) { + return (float) Math.pow(ABILITY_WAVE_SCALING_BASE, currentWave - 1); + } + + public static void resetCombatStateForNewRun( + PlayerCombatState combatState, TalentTree talentTree, long nowMs) { + Objects.requireNonNull(combatState, "combatState"); + Objects.requireNonNull(talentTree, "talentTree"); + + int maxHealth = + PlayerCombatState.DEFAULT_MAX_HEALTH + + (int) talentTree.getStatBonus(TalentData.TalentType.HEALTH); + float shotCooldown = + PlayerCombatState.DEFAULT_SHOT_COOLDOWN_MS + - talentTree.getStatBonus(TalentData.TalentType.COOLDOWN); + if (shotCooldown < PlayerCombatState.MIN_SHOT_COOLDOWN_MS) { + shotCooldown = PlayerCombatState.MIN_SHOT_COOLDOWN_MS; + } + int healthRegenRate = (int) talentTree.getStatBonus(TalentData.TalentType.REGEN); + + combatState.resetForNewRun(maxHealth, shotCooldown, healthRegenRate); + combatState.setLastDamageTimeMs(nowMs); + combatState.setLastHealthRegenTimeMs(nowMs); + } + + public static float effectiveShotCooldown( + PlayerCombatState combatState, + UpgradeSystem upgradeSystem, + BonusBallSystem bonusBallSystem) { + Objects.requireNonNull(combatState, "combatState"); + Objects.requireNonNull(upgradeSystem, "upgradeSystem"); + Objects.requireNonNull(bonusBallSystem, "bonusBallSystem"); + + return EffectiveCombatStats.shotCooldownMs(combatState, 0f, upgradeSystem, bonusBallSystem); + } + + public static float effectiveShotCooldown( + PlayerCombatState combatState, + UpgradeSystem upgradeSystem, + BonusBallSystem bonusBallSystem, + float attackSpeedMultiplier) { + float baseCooldown = effectiveShotCooldown(combatState, upgradeSystem, bonusBallSystem); + return applyAttackSpeedMultiplierToCooldown(baseCooldown, attackSpeedMultiplier); + } + + public static float applyAttackSpeedMultiplierToCooldown( + float baseCooldownMs, float attackSpeedMultiplier) { + float boundedMultiplier = boundedCombatSpeedMultiplier(attackSpeedMultiplier); + return Math.max(PlayerCombatState.MIN_SHOT_COOLDOWN_MS, baseCooldownMs / boundedMultiplier); + } + + public static float applyProjectileSpeedMultiplier( + float baseSpeedMultiplier, float projectileSpeedMultiplier) { + return baseSpeedMultiplier * boundedCombatSpeedMultiplier(projectileSpeedMultiplier); + } + + private static float boundedCombatSpeedMultiplier(float multiplier) { + if (Float.isNaN(multiplier)) { + return 1f; + } + return Math.max(MIN_COMBAT_SPEED_MULTIPLIER, multiplier); + } + + public static float effectiveCritChance( + PlayerCombatState combatState, + ShopUpgradeSystem shopUpgradeSystem, + UpgradeSystem upgradeSystem, + TalentTree talentTree) { + Objects.requireNonNull(combatState, "combatState"); + Objects.requireNonNull(shopUpgradeSystem, "shopUpgradeSystem"); + Objects.requireNonNull(upgradeSystem, "upgradeSystem"); + Objects.requireNonNull(talentTree, "talentTree"); + + return EffectiveCombatStats.critChance( + combatState, shopUpgradeSystem, upgradeSystem, talentTree); + } + + public static float effectiveCritMultiplier( + PlayerCombatState combatState, ShopUpgradeSystem shopUpgradeSystem) { + Objects.requireNonNull(combatState, "combatState"); + Objects.requireNonNull(shopUpgradeSystem, "shopUpgradeSystem"); + + return EffectiveCombatStats.critMultiplier(combatState, shopUpgradeSystem); + } +} diff --git a/core/src/main/java/ru/project/tower/player/PlayerStats.java b/core/src/main/java/ru/project/tower/player/PlayerStats.java new file mode 100644 index 0000000..820fa06 --- /dev/null +++ b/core/src/main/java/ru/project/tower/player/PlayerStats.java @@ -0,0 +1,226 @@ +package ru.project.tower.player; + +import com.badlogic.gdx.Preferences; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + + + + +public class PlayerStats { + private static final String CURRENCY_KEY = "player_currency"; + private static final String MAX_WAVE_KEY = "max_wave_reached"; + private static final String TALENT_NODE_KEY_PREFIX = "talent_node_"; + private static final String[] TALENT_NODE_IDS = { + "health_1", + "damage_1", + "cooldown_1", + "speed_1", + "regen_1", + "health_2", + "damage_2", + "cooldown_2", + "speed_2", + "control_1", + "economy_1", + "ability_1", + "utility_1", + "regen_2", + "ability_2", + "attack_precision", + "control_execute", + "engineering_turret", + "survival_barrier", + "economy_reroll", + "utility_bonus", + "ability_blast", + "keystone_pierce", + "keystone_crit", + "keystone_aoe", + "keystone_splash", + "keystone_turret", + "keystone_control_execute", + "keystone_shield_regen", + "keystone_economy_reroll" + }; + private static final Set VALID_TALENT_NODE_IDS = + Collections.unmodifiableSet(new HashSet<>(Arrays.asList(TALENT_NODE_IDS))); + private int currency; + private int maxWaveReached; + private final Preferences preferences; + private int saveBatchDepth; + private boolean flushPending; + + + + private final Map talentLevels = new HashMap<>(); + + private static final String DAMAGE_TALENT_KEY = "talent_damage_level"; + private static final String HEALTH_TALENT_KEY = "talent_health_level"; + private static final String SPEED_TALENT_KEY = "talent_speed_level"; + private static final String COOLDOWN_TALENT_KEY = "talent_cooldown_level"; + private static final String REGEN_TALENT_KEY = "talent_regen_level"; + + + + + public PlayerStats(Preferences preferences) { + this.preferences = preferences; + + currency = preferences.getInteger(CURRENCY_KEY, 0); + maxWaveReached = preferences.getInteger(MAX_WAVE_KEY, 0); + + + + for (String id : TALENT_NODE_IDS) { + talentLevels.put(id, preferences.getInteger(TALENT_NODE_KEY_PREFIX + id, 0)); + } + seedLegacyLevel("damage_1", DAMAGE_TALENT_KEY); + seedLegacyLevel("health_1", HEALTH_TALENT_KEY); + seedLegacyLevel("speed_1", SPEED_TALENT_KEY); + seedLegacyLevel("cooldown_1", COOLDOWN_TALENT_KEY); + seedLegacyLevel("regen_1", REGEN_TALENT_KEY); + } + + private void seedLegacyLevel(String nodeId, String legacyKey) { + if (talentLevels.get(nodeId) == 0) { + int legacy = preferences.getInteger(legacyKey, 0); + if (legacy > 0) { + talentLevels.put(nodeId, legacy); + } + } + } + + + + + public void withBatchedSaves(Runnable changes) { + saveBatchDepth++; + try { + changes.run(); + } finally { + saveBatchDepth--; + if (saveBatchDepth == 0 && flushPending) { + flushPending = false; + preferences.flush(); + } + } + } + + + + + public int getCurrency() { + return currency; + } + + + + + public void addCurrency(int amount) { + if (amount > 0) { + currency += amount; + saveData(); + } + } + + + + + + public boolean spendCurrency(int amount) { + if (amount <= 0) { + return true; + } + + if (currency >= amount) { + currency -= amount; + saveData(); + return true; + } + + return false; + } + + + + + public int getMaxWaveReached() { + return maxWaveReached; + } + + + + + public void updateMaxWave(int waveNumber) { + if (waveNumber > maxWaveReached) { + maxWaveReached = waveNumber; + saveData(); + } + } + + + public int getTalentNodeLevel(String nodeId) { + Integer v = talentLevels.get(nodeId); + return v == null ? 0 : v; + } + + public void incrementTalentNode(String nodeId) { + if (!VALID_TALENT_NODE_IDS.contains(nodeId)) { + throw new IllegalArgumentException("Unknown talent node id: " + nodeId); + } + talentLevels.put(nodeId, getTalentNodeLevel(nodeId) + 1); + saveData(); + } + + + + public int getDamageTalentLevel() { + return getTalentNodeLevel("damage_1") + getTalentNodeLevel("damage_2"); + } + + public int getHealthTalentLevel() { + return getTalentNodeLevel("health_1") + getTalentNodeLevel("health_2"); + } + + public int getSpeedTalentLevel() { + return getTalentNodeLevel("speed_1") + getTalentNodeLevel("speed_2"); + } + + public int getCooldownTalentLevel() { + return getTalentNodeLevel("cooldown_1") + getTalentNodeLevel("cooldown_2"); + } + + + + public int getRegenTalentLevel() { + return getTalentNodeLevel("regen_1") + getTalentNodeLevel("regen_2"); + } + + + + + private void saveData() { + preferences.putInteger(CURRENCY_KEY, currency); + preferences.putInteger(MAX_WAVE_KEY, maxWaveReached); + + for (String id : TALENT_NODE_IDS) { + preferences.putInteger(TALENT_NODE_KEY_PREFIX + id, getTalentNodeLevel(id)); + } + + flushData(); + } + + private void flushData() { + if (saveBatchDepth > 0) { + flushPending = true; + return; + } + + preferences.flush(); + } +} diff --git a/core/src/main/java/ru/project/tower/run/GameplayColor.java b/core/src/main/java/ru/project/tower/run/GameplayColor.java new file mode 100644 index 0000000..214a878 --- /dev/null +++ b/core/src/main/java/ru/project/tower/run/GameplayColor.java @@ -0,0 +1,11 @@ +package ru.project.tower.run; + +public enum GameplayColor { + NEON_RED, + NEON_YELLOW, + NEON_GREEN, + NEON_CYAN, + NEON_BLUE, + NEON_PURPLE, + WHITE +} diff --git a/core/src/main/java/ru/project/tower/run/GameplayEvent.java b/core/src/main/java/ru/project/tower/run/GameplayEvent.java new file mode 100644 index 0000000..a776fa3 --- /dev/null +++ b/core/src/main/java/ru/project/tower/run/GameplayEvent.java @@ -0,0 +1,314 @@ +package ru.project.tower.run; + +import java.util.Objects; + +public abstract class GameplayEvent { + private GameplayEvent() {} + + public static final class EnemyKilled extends GameplayEvent { + public final String enemyKind; + public final GameplayPosition position; + public final int reward; + public final boolean boss; + + public EnemyKilled(String enemyKind, GameplayPosition position, int reward, boolean boss) { + this.enemyKind = requireText(enemyKind, "enemyKind"); + this.position = Objects.requireNonNull(position, "position"); + this.reward = reward; + this.boss = boss; + } + + @Override + public boolean equals(Object other) { + if (this == other) return true; + if (!(other instanceof EnemyKilled)) return false; + EnemyKilled that = (EnemyKilled) other; + return reward == that.reward + && boss == that.boss + && enemyKind.equals(that.enemyKind) + && position.equals(that.position); + } + + @Override + public int hashCode() { + return Objects.hash(enemyKind, position, reward, boss); + } + } + + public static final class PlayerDamaged extends GameplayEvent { + public final int damage; + public final int healthAfterDamage; + public final GameplayPosition position; + + public PlayerDamaged(int damage, int healthAfterDamage, GameplayPosition position) { + this.damage = damage; + this.healthAfterDamage = healthAfterDamage; + this.position = Objects.requireNonNull(position, "position"); + } + + @Override + public boolean equals(Object other) { + if (this == other) return true; + if (!(other instanceof PlayerDamaged)) return false; + PlayerDamaged that = (PlayerDamaged) other; + return damage == that.damage + && healthAfterDamage == that.healthAfterDamage + && position.equals(that.position); + } + + @Override + public int hashCode() { + return Objects.hash(damage, healthAfterDamage, position); + } + } + + public static final class WaveCleared extends GameplayEvent { + public final int clearedWave; + public final int moneyBonus; + public final int currencyReward; + public final boolean shouldShowUpgrade; + public final GameplayPosition playerPosition; + + public WaveCleared( + int clearedWave, + int moneyBonus, + int currencyReward, + boolean shouldShowUpgrade, + GameplayPosition playerPosition) { + this.clearedWave = clearedWave; + this.moneyBonus = moneyBonus; + this.currencyReward = currencyReward; + this.shouldShowUpgrade = shouldShowUpgrade; + this.playerPosition = Objects.requireNonNull(playerPosition, "playerPosition"); + } + + @Override + public boolean equals(Object other) { + if (this == other) return true; + if (!(other instanceof WaveCleared)) return false; + WaveCleared that = (WaveCleared) other; + return clearedWave == that.clearedWave + && moneyBonus == that.moneyBonus + && currencyReward == that.currencyReward + && shouldShowUpgrade == that.shouldShowUpgrade + && playerPosition.equals(that.playerPosition); + } + + @Override + public int hashCode() { + return Objects.hash( + clearedWave, moneyBonus, currencyReward, shouldShowUpgrade, playerPosition); + } + } + + public static final class BonusCollected extends GameplayEvent { + public final String bonusKind; + public final GameplayPosition position; + public final String displayText; + + public BonusCollected(String bonusKind, GameplayPosition position, String displayText) { + this.bonusKind = requireText(bonusKind, "bonusKind"); + this.position = Objects.requireNonNull(position, "position"); + this.displayText = requireText(displayText, "displayText"); + } + + @Override + public boolean equals(Object other) { + if (this == other) return true; + if (!(other instanceof BonusCollected)) return false; + BonusCollected that = (BonusCollected) other; + return bonusKind.equals(that.bonusKind) + && position.equals(that.position) + && displayText.equals(that.displayText); + } + + @Override + public int hashCode() { + return Objects.hash(bonusKind, position, displayText); + } + } + + public static final class GameOver extends GameplayEvent { + public final int reachedWave; + public final int currencyEarned; + + public GameOver(int reachedWave, int currencyEarned) { + this.reachedWave = reachedWave; + this.currencyEarned = currencyEarned; + } + + @Override + public boolean equals(Object other) { + if (this == other) return true; + if (!(other instanceof GameOver)) return false; + GameOver that = (GameOver) other; + return reachedWave == that.reachedWave && currencyEarned == that.currencyEarned; + } + + @Override + public int hashCode() { + return Objects.hash(reachedWave, currencyEarned); + } + } + + public static final class CriticalHit extends GameplayEvent { + public final String enemyKind; + public final GameplayPosition position; + public final int damage; + + public CriticalHit(String enemyKind, GameplayPosition position, int damage) { + this.enemyKind = requireText(enemyKind, "enemyKind"); + this.position = Objects.requireNonNull(position, "position"); + this.damage = damage; + } + + @Override + public boolean equals(Object other) { + if (this == other) return true; + if (!(other instanceof CriticalHit)) return false; + CriticalHit that = (CriticalHit) other; + return damage == that.damage + && enemyKind.equals(that.enemyKind) + && position.equals(that.position); + } + + @Override + public int hashCode() { + return Objects.hash(enemyKind, position, damage); + } + } + + public static final class ExplosionRequested extends GameplayEvent { + public final GameplayPosition position; + public final GameplayColor color; + public final int particleCount; + + public ExplosionRequested( + GameplayPosition position, GameplayColor color, int particleCount) { + this.position = Objects.requireNonNull(position, "position"); + this.color = Objects.requireNonNull(color, "color"); + this.particleCount = particleCount; + } + + @Override + public boolean equals(Object other) { + if (this == other) return true; + if (!(other instanceof ExplosionRequested)) return false; + ExplosionRequested that = (ExplosionRequested) other; + return particleCount == that.particleCount + && position.equals(that.position) + && color == that.color; + } + + @Override + public int hashCode() { + return Objects.hash(position, color, particleCount); + } + } + + public static final class FloatingTextRequested extends GameplayEvent { + public final GameplayPosition position; + public final String text; + public final GameplayColor color; + public final float durationSeconds; + public final float scale; + public final float riseDistance; + + public FloatingTextRequested( + GameplayPosition position, + String text, + GameplayColor color, + float durationSeconds, + float scale, + float riseDistance) { + this.position = Objects.requireNonNull(position, "position"); + this.text = requireText(text, "text"); + this.color = Objects.requireNonNull(color, "color"); + this.durationSeconds = durationSeconds; + this.scale = scale; + this.riseDistance = riseDistance; + } + + @Override + public boolean equals(Object other) { + if (this == other) return true; + if (!(other instanceof FloatingTextRequested)) return false; + FloatingTextRequested that = (FloatingTextRequested) other; + return Float.compare(that.durationSeconds, durationSeconds) == 0 + && Float.compare(that.scale, scale) == 0 + && Float.compare(that.riseDistance, riseDistance) == 0 + && position.equals(that.position) + && text.equals(that.text) + && color == that.color; + } + + @Override + public int hashCode() { + return Objects.hash(position, text, color, durationSeconds, scale, riseDistance); + } + } + + public static final class ShakeRequested extends GameplayEvent { + public final float intensity; + public final float hitstopSeconds; + + public ShakeRequested(float intensity, float hitstopSeconds) { + this.intensity = intensity; + this.hitstopSeconds = hitstopSeconds; + } + + @Override + public boolean equals(Object other) { + if (this == other) return true; + if (!(other instanceof ShakeRequested)) return false; + ShakeRequested that = (ShakeRequested) other; + return Float.compare(that.intensity, intensity) == 0 + && Float.compare(that.hitstopSeconds, hitstopSeconds) == 0; + } + + @Override + public int hashCode() { + return Objects.hash(intensity, hitstopSeconds); + } + } + + public static final class SoundRequested extends GameplayEvent { + public final GameplaySound sound; + public final float volume; + public final float pitch; + public final float pan; + + public SoundRequested(GameplaySound sound, float volume, float pitch, float pan) { + this.sound = Objects.requireNonNull(sound, "sound"); + this.volume = volume; + this.pitch = pitch; + this.pan = pan; + } + + @Override + public boolean equals(Object other) { + if (this == other) return true; + if (!(other instanceof SoundRequested)) return false; + SoundRequested that = (SoundRequested) other; + return Float.compare(that.volume, volume) == 0 + && Float.compare(that.pitch, pitch) == 0 + && Float.compare(that.pan, pan) == 0 + && sound == that.sound; + } + + @Override + public int hashCode() { + return Objects.hash(sound, volume, pitch, pan); + } + } + + private static String requireText(String value, String fieldName) { + if (value == null) { + throw new NullPointerException(fieldName); + } + if (value.isEmpty()) { + throw new IllegalArgumentException(fieldName + " must not be empty"); + } + return value; + } +} diff --git a/core/src/main/java/ru/project/tower/run/GameplayEventDispatcher.java b/core/src/main/java/ru/project/tower/run/GameplayEventDispatcher.java new file mode 100644 index 0000000..837ace4 --- /dev/null +++ b/core/src/main/java/ru/project/tower/run/GameplayEventDispatcher.java @@ -0,0 +1,61 @@ +package ru.project.tower.run; + +import java.util.Objects; + + + + + + +public abstract class GameplayEventDispatcher implements GameplayEventSink { + @Override + public final void emit(GameplayEvent event) { + Objects.requireNonNull(event, "event"); + + if (event instanceof GameplayEvent.EnemyKilled) { + onEnemyKilled((GameplayEvent.EnemyKilled) event); + } else if (event instanceof GameplayEvent.PlayerDamaged) { + onPlayerDamaged((GameplayEvent.PlayerDamaged) event); + } else if (event instanceof GameplayEvent.WaveCleared) { + onWaveCleared((GameplayEvent.WaveCleared) event); + } else if (event instanceof GameplayEvent.BonusCollected) { + onBonusCollected((GameplayEvent.BonusCollected) event); + } else if (event instanceof GameplayEvent.GameOver) { + onGameOver((GameplayEvent.GameOver) event); + } else if (event instanceof GameplayEvent.CriticalHit) { + onCriticalHit((GameplayEvent.CriticalHit) event); + } else if (event instanceof GameplayEvent.ExplosionRequested) { + onExplosionRequested((GameplayEvent.ExplosionRequested) event); + } else if (event instanceof GameplayEvent.FloatingTextRequested) { + onFloatingTextRequested((GameplayEvent.FloatingTextRequested) event); + } else if (event instanceof GameplayEvent.ShakeRequested) { + onShakeRequested((GameplayEvent.ShakeRequested) event); + } else if (event instanceof GameplayEvent.SoundRequested) { + onSoundRequested((GameplayEvent.SoundRequested) event); + } else { + onUnhandled(event); + } + } + + protected void onEnemyKilled(GameplayEvent.EnemyKilled event) {} + + protected void onPlayerDamaged(GameplayEvent.PlayerDamaged event) {} + + protected void onWaveCleared(GameplayEvent.WaveCleared event) {} + + protected void onBonusCollected(GameplayEvent.BonusCollected event) {} + + protected void onGameOver(GameplayEvent.GameOver event) {} + + protected void onCriticalHit(GameplayEvent.CriticalHit event) {} + + protected void onExplosionRequested(GameplayEvent.ExplosionRequested event) {} + + protected void onFloatingTextRequested(GameplayEvent.FloatingTextRequested event) {} + + protected void onShakeRequested(GameplayEvent.ShakeRequested event) {} + + protected void onSoundRequested(GameplayEvent.SoundRequested event) {} + + protected void onUnhandled(GameplayEvent event) {} +} diff --git a/core/src/main/java/ru/project/tower/run/GameplayEventSink.java b/core/src/main/java/ru/project/tower/run/GameplayEventSink.java new file mode 100644 index 0000000..feb86ac --- /dev/null +++ b/core/src/main/java/ru/project/tower/run/GameplayEventSink.java @@ -0,0 +1,10 @@ +package ru.project.tower.run; + + + + + + +public interface GameplayEventSink { + void emit(GameplayEvent event); +} diff --git a/core/src/main/java/ru/project/tower/run/GameplayEventSinks.java b/core/src/main/java/ru/project/tower/run/GameplayEventSinks.java new file mode 100644 index 0000000..52cd1a7 --- /dev/null +++ b/core/src/main/java/ru/project/tower/run/GameplayEventSinks.java @@ -0,0 +1,31 @@ +package ru.project.tower.run; + +import java.util.Objects; + + + + + +public final class GameplayEventSinks { + private static final GameplayEventSink NOOP = + new GameplayEventSink() { + @Override + public void emit(GameplayEvent event) { + Objects.requireNonNull(event, "event"); + } + }; + + private GameplayEventSinks() {} + + public static GameplayEventSink noop() { + return NOOP; + } + + public static void emitAll(GameplayEventSink sink, GameplayEvent... events) { + Objects.requireNonNull(sink, "sink"); + Objects.requireNonNull(events, "events"); + for (GameplayEvent event : events) { + sink.emit(Objects.requireNonNull(event, "event")); + } + } +} diff --git a/core/src/main/java/ru/project/tower/run/GameplayEvents.java b/core/src/main/java/ru/project/tower/run/GameplayEvents.java new file mode 100644 index 0000000..3d91301 --- /dev/null +++ b/core/src/main/java/ru/project/tower/run/GameplayEvents.java @@ -0,0 +1,78 @@ +package ru.project.tower.run; + + + + + +public final class GameplayEvents { + private GameplayEvents() {} + + public static GameplayPosition position(float x, float y) { + return new GameplayPosition(x, y); + } + + public static GameplayEvent.EnemyKilled enemyKilled( + String enemyKind, float x, float y, int reward, boolean boss) { + return new GameplayEvent.EnemyKilled(enemyKind, position(x, y), reward, boss); + } + + public static GameplayEvent.PlayerDamaged playerDamaged( + int damage, int healthAfterDamage, float x, float y) { + return new GameplayEvent.PlayerDamaged(damage, healthAfterDamage, position(x, y)); + } + + public static GameplayEvent.WaveCleared waveCleared( + int clearedWave, + int moneyBonus, + int currencyReward, + boolean shouldShowUpgrade, + float playerX, + float playerY) { + return new GameplayEvent.WaveCleared( + clearedWave, + moneyBonus, + currencyReward, + shouldShowUpgrade, + position(playerX, playerY)); + } + + public static GameplayEvent.BonusCollected bonusCollected( + String bonusKind, float x, float y, String displayText) { + return new GameplayEvent.BonusCollected(bonusKind, position(x, y), displayText); + } + + public static GameplayEvent.GameOver gameOver(int reachedWave, int currencyEarned) { + return new GameplayEvent.GameOver(reachedWave, currencyEarned); + } + + public static GameplayEvent.CriticalHit criticalHit( + String enemyKind, float x, float y, int damage) { + return new GameplayEvent.CriticalHit(enemyKind, position(x, y), damage); + } + + public static GameplayEvent.ExplosionRequested explosion( + float x, float y, GameplayColor color, int particleCount) { + return new GameplayEvent.ExplosionRequested(position(x, y), color, particleCount); + } + + public static GameplayEvent.FloatingTextRequested floatingText( + float x, + float y, + String text, + GameplayColor color, + float durationSeconds, + float scale, + float riseDistance) { + return new GameplayEvent.FloatingTextRequested( + position(x, y), text, color, durationSeconds, scale, riseDistance); + } + + public static GameplayEvent.ShakeRequested shake(float intensity, float hitstopSeconds) { + return new GameplayEvent.ShakeRequested(intensity, hitstopSeconds); + } + + public static GameplayEvent.SoundRequested sound( + GameplaySound sound, float volume, float pitch, float pan) { + return new GameplayEvent.SoundRequested(sound, volume, pitch, pan); + } +} diff --git a/core/src/main/java/ru/project/tower/run/GameplayPosition.java b/core/src/main/java/ru/project/tower/run/GameplayPosition.java new file mode 100644 index 0000000..e0204d0 --- /dev/null +++ b/core/src/main/java/ru/project/tower/run/GameplayPosition.java @@ -0,0 +1,31 @@ +package ru.project.tower.run; + +public final class GameplayPosition { + public final float x; + public final float y; + + public GameplayPosition(float x, float y) { + this.x = x; + this.y = y; + } + + @Override + public boolean equals(Object other) { + if (this == other) return true; + if (!(other instanceof GameplayPosition)) return false; + GameplayPosition that = (GameplayPosition) other; + return Float.compare(that.x, x) == 0 && Float.compare(that.y, y) == 0; + } + + @Override + public int hashCode() { + int result = Float.floatToIntBits(x); + result = 31 * result + Float.floatToIntBits(y); + return result; + } + + @Override + public String toString() { + return "GameplayPosition{" + "x=" + x + ", y=" + y + '}'; + } +} diff --git a/core/src/main/java/ru/project/tower/run/GameplaySound.java b/core/src/main/java/ru/project/tower/run/GameplaySound.java new file mode 100644 index 0000000..7b6dd1b --- /dev/null +++ b/core/src/main/java/ru/project/tower/run/GameplaySound.java @@ -0,0 +1,6 @@ +package ru.project.tower.run; + +public enum GameplaySound { + SHOT, + POP +} diff --git a/core/src/main/java/ru/project/tower/run/RunBulletSnapshot.java b/core/src/main/java/ru/project/tower/run/RunBulletSnapshot.java new file mode 100644 index 0000000..57f7a22 --- /dev/null +++ b/core/src/main/java/ru/project/tower/run/RunBulletSnapshot.java @@ -0,0 +1,19 @@ +package ru.project.tower.run; + +public final class RunBulletSnapshot { + private final float baseSpeed; + private final int baseDamage; + + public RunBulletSnapshot(float baseSpeed, int baseDamage) { + this.baseSpeed = baseSpeed; + this.baseDamage = baseDamage; + } + + public float baseSpeed() { + return baseSpeed; + } + + public int baseDamage() { + return baseDamage; + } +} diff --git a/core/src/main/java/ru/project/tower/run/RunFrameEvents.java b/core/src/main/java/ru/project/tower/run/RunFrameEvents.java new file mode 100644 index 0000000..b3553f1 --- /dev/null +++ b/core/src/main/java/ru/project/tower/run/RunFrameEvents.java @@ -0,0 +1,13 @@ +package ru.project.tower.run; + +public interface RunFrameEvents { + void regeneratePlayer(long nowMs); + + void autoShootIfReady(long nowMs); + + boolean damagePlayerIfVulnerable(int damage, long cooldownMs); + + boolean isPlayerDead(); + + void gameOver(); +} diff --git a/core/src/main/java/ru/project/tower/run/RunFrameOrchestrator.java b/core/src/main/java/ru/project/tower/run/RunFrameOrchestrator.java new file mode 100644 index 0000000..1856c6d --- /dev/null +++ b/core/src/main/java/ru/project/tower/run/RunFrameOrchestrator.java @@ -0,0 +1,264 @@ +package ru.project.tower.run; + +import com.badlogic.gdx.math.Circle; +import com.badlogic.gdx.math.Rectangle; +import com.badlogic.gdx.utils.Array; +import java.util.Objects; +import ru.project.tower.abilities.AbilitySystem; +import ru.project.tower.entities.bullets.BulletEffectsSink; +import ru.project.tower.entities.bullets.BulletSystem; +import ru.project.tower.entities.circles.BaseCircleData; +import ru.project.tower.systems.BonusBallSystem; +import ru.project.tower.systems.CollisionSystem; +import ru.project.tower.systems.EnemySimulationSystem; +import ru.project.tower.systems.SpecialCircleSystem; +import ru.project.tower.waves.SpawnController; +import ru.project.tower.waves.WaveController; +import ru.project.tower.waves.WaveRunOrchestrator; + +public final class RunFrameOrchestrator { + private static final long CONTACT_DAMAGE_COOLDOWN_MS = 1_000L; + private static final float MAX_SIMULATION_DELTA_SECONDS = 1f / 15f; + + private final Array circles; + private final Rectangle square; + private final RunFrameEvents events; + private final FrameOperations operations; + + public RunFrameOrchestrator(Config config) { + this(config.circles, config.square, config.events, new DefaultFrameOperations(config)); + } + + RunFrameOrchestrator( + Array circles, + Rectangle square, + RunFrameEvents events, + FrameOperations operations) { + this.circles = Objects.requireNonNull(circles, "circles"); + this.square = Objects.requireNonNull(square, "square"); + this.events = Objects.requireNonNull(events, "events"); + this.operations = Objects.requireNonNull(operations, "operations"); + } + + public boolean update( + float delta, + long nowMs, + float viewportWidth, + float viewportHeight, + float gameScale, + boolean upgradePickActive) { + float simulationDelta = clampSimulationDelta(delta); + operations.updateWave(nowMs, circles.size, upgradePickActive); + if (upgradePickActive) { + return false; + } + events.regeneratePlayer(nowMs); + + if (operations.isWaveActive()) { + events.autoShootIfReady(nowMs); + } + + operations.updateBonusBalls(simulationDelta, viewportWidth, viewportHeight); + operations.processSpawnerChildren(); + operations.tickAbilities(nowMs); + moveCircles(simulationDelta); + operations.updateSpecialCircles(gameScale); + operations.tickBullets(simulationDelta); + + if (resolveContactDamage()) { + return true; + } + + operations.separateCircles(); + steerAndRemoveOutOfBounds(viewportWidth, viewportHeight, gameScale); + return false; + } + + private static float clampSimulationDelta(float delta) { + if (delta <= 0f) { + return 0f; + } + return Math.min(delta, MAX_SIMULATION_DELTA_SECONDS); + } + + private void moveCircles(float delta) { + for (BaseCircleData circleData : circles) { + operations.prepareCircleForMove(circleData); + circleData.move(delta); + } + } + + private boolean resolveContactDamage() { + for (BaseCircleData circleData : circles) { + if (operations.resolveCircleSquare(circleData) + && events.damagePlayerIfVulnerable( + circleData.damage, CONTACT_DAMAGE_COOLDOWN_MS) + && events.isPlayerDead()) { + events.gameOver(); + return true; + } + } + return false; + } + + private void steerAndRemoveOutOfBounds( + float viewportWidth, float viewportHeight, float gameScale) { + for (int i = 0; i < circles.size; i++) { + BaseCircleData circleData = circles.get(i); + Circle circle = circleData.circle; + + operations.steerTowardPlayer(circleData, gameScale); + + if (operations.shouldRemoveOutOfBounds(circle, viewportWidth, viewportHeight)) { + BaseCircleData.freeIfSpawnPooled(circles.removeIndex(i)); + i--; + } + } + } + + interface FrameOperations { + void updateWave(long nowMs, int activeEnemyCount, boolean upgradePickActive); + + boolean isWaveActive(); + + void updateBonusBalls(float delta, float viewportWidth, float viewportHeight); + + void processSpawnerChildren(); + + void tickAbilities(long nowMs); + + void prepareCircleForMove(BaseCircleData circleData); + + void updateSpecialCircles(float gameScale); + + void tickBullets(float delta); + + boolean resolveCircleSquare(BaseCircleData circleData); + + void separateCircles(); + + void steerTowardPlayer(BaseCircleData circleData, float gameScale); + + boolean shouldRemoveOutOfBounds(Circle circle, float viewportWidth, float viewportHeight); + } + + public static final class Config { + private final Array circles; + private final Rectangle square; + private final WaveController waveController; + private final WaveRunOrchestrator waveRunOrchestrator; + private final BonusBallSystem bonusBallSystem; + private final SpawnController spawnController; + private final AbilitySystem abilitySystem; + private final BulletSystem bulletSystem; + private final BulletEffectsSink bulletEffects; + private final SpecialCircleSystem specialCircleSystem; + private final SpecialCircleSystem.Host specialCircleHost; + private final RunFrameEvents events; + + public Config( + Array circles, + Rectangle square, + WaveController waveController, + WaveRunOrchestrator waveRunOrchestrator, + BonusBallSystem bonusBallSystem, + SpawnController spawnController, + AbilitySystem abilitySystem, + BulletSystem bulletSystem, + BulletEffectsSink bulletEffects, + SpecialCircleSystem specialCircleSystem, + SpecialCircleSystem.Host specialCircleHost, + RunFrameEvents events) { + this.circles = Objects.requireNonNull(circles, "circles"); + this.square = Objects.requireNonNull(square, "square"); + this.waveController = Objects.requireNonNull(waveController, "waveController"); + this.waveRunOrchestrator = + Objects.requireNonNull(waveRunOrchestrator, "waveRunOrchestrator"); + this.bonusBallSystem = Objects.requireNonNull(bonusBallSystem, "bonusBallSystem"); + this.spawnController = Objects.requireNonNull(spawnController, "spawnController"); + this.abilitySystem = Objects.requireNonNull(abilitySystem, "abilitySystem"); + this.bulletSystem = Objects.requireNonNull(bulletSystem, "bulletSystem"); + this.bulletEffects = Objects.requireNonNull(bulletEffects, "bulletEffects"); + this.specialCircleSystem = + Objects.requireNonNull(specialCircleSystem, "specialCircleSystem"); + this.specialCircleHost = Objects.requireNonNull(specialCircleHost, "specialCircleHost"); + this.events = Objects.requireNonNull(events, "events"); + } + } + + private static final class DefaultFrameOperations implements FrameOperations { + private final Config config; + + private DefaultFrameOperations(Config config) { + this.config = config; + } + + @Override + public void updateWave(long nowMs, int activeEnemyCount, boolean upgradePickActive) { + config.waveRunOrchestrator.update(nowMs, activeEnemyCount, upgradePickActive); + } + + @Override + public boolean isWaveActive() { + return config.waveController.isWaveActive(); + } + + @Override + public void updateBonusBalls(float delta, float viewportWidth, float viewportHeight) { + config.bonusBallSystem.update(delta, viewportWidth, viewportHeight); + } + + @Override + public void processSpawnerChildren() { + config.spawnController.processSpawnerChildren(); + } + + @Override + public void tickAbilities(long nowMs) { + config.abilitySystem.tick(nowMs); + } + + @Override + public void prepareCircleForMove(BaseCircleData circleData) { + config.specialCircleSystem.prepareForMovement(circleData, config.square); + } + + @Override + public void updateSpecialCircles(float gameScale) { + config.specialCircleSystem.update( + config.circles, + config.square, + config.bulletSystem, + config.specialCircleHost, + gameScale); + } + + @Override + public void tickBullets(float delta) { + config.bulletSystem.tick(delta, config.circles, config.square, config.bulletEffects); + } + + @Override + public boolean resolveCircleSquare(BaseCircleData circleData) { + return CollisionSystem.resolveCircleSquare(circleData, config.square); + } + + @Override + public void separateCircles() { + CollisionSystem.separateCircles( + config.circles, EnemySimulationSystem.DEFAULT_SEPARATION_ITERATIONS); + } + + @Override + public void steerTowardPlayer(BaseCircleData circleData, float gameScale) { + EnemySimulationSystem.steerTowardPlayer(circleData, config.square, gameScale); + } + + @Override + public boolean shouldRemoveOutOfBounds( + Circle circle, float viewportWidth, float viewportHeight) { + return EnemySimulationSystem.shouldRemoveOutOfBounds( + circle, viewportWidth, viewportHeight); + } + } +} diff --git a/core/src/main/java/ru/project/tower/run/RunRngStreams.java b/core/src/main/java/ru/project/tower/run/RunRngStreams.java new file mode 100644 index 0000000..ec8f29e --- /dev/null +++ b/core/src/main/java/ru/project/tower/run/RunRngStreams.java @@ -0,0 +1,142 @@ +package ru.project.tower.run; + +import java.util.Objects; +import ru.project.tower.support.SeededRandomSource; + + +public final class RunRngStreams { + private static final String WAVE_COMPOSITION = "wave-composition"; + private static final String BONUS_DROPS = "bonus-drops"; + private static final String BOSS_ORDER = "boss-order"; + private static final String UPGRADE_DRAFTS = "upgrade-drafts"; + private static final String COMBAT = "combat"; + + private final long runSeed; + private final SeededRandomSource waveComposition; + private final SeededRandomSource bonusDrops; + private final SeededRandomSource bossOrder; + private final SeededRandomSource upgradeDrafts; + private final SeededRandomSource combat; + + private RunRngStreams( + long runSeed, + SeededRandomSource waveComposition, + SeededRandomSource bonusDrops, + SeededRandomSource bossOrder, + SeededRandomSource upgradeDrafts, + SeededRandomSource combat) { + this.runSeed = runSeed; + this.waveComposition = Objects.requireNonNull(waveComposition, "waveComposition"); + this.bonusDrops = Objects.requireNonNull(bonusDrops, "bonusDrops"); + this.bossOrder = Objects.requireNonNull(bossOrder, "bossOrder"); + this.upgradeDrafts = Objects.requireNonNull(upgradeDrafts, "upgradeDrafts"); + this.combat = Objects.requireNonNull(combat, "combat"); + } + + public static RunRngStreams fromSeed(long runSeed) { + return new RunRngStreams( + runSeed, + stream(runSeed, WAVE_COMPOSITION), + stream(runSeed, BONUS_DROPS), + stream(runSeed, BOSS_ORDER), + stream(runSeed, UPGRADE_DRAFTS), + stream(runSeed, COMBAT)); + } + + public static RunRngStreams fromSnapshot(Snapshot snapshot) { + Snapshot source = Objects.requireNonNull(snapshot, "snapshot"); + return new RunRngStreams( + source.runSeed(), + SeededRandomSource.fromSnapshot(source.waveComposition()), + SeededRandomSource.fromSnapshot(source.bonusDrops()), + SeededRandomSource.fromSnapshot(source.bossOrder()), + SeededRandomSource.fromSnapshot(source.upgradeDrafts()), + SeededRandomSource.fromSnapshot(source.combat())); + } + + private static SeededRandomSource stream(long runSeed, String name) { + return new SeededRandomSource(SeededRandomSource.forkSeed(runSeed, name)); + } + + public long runSeed() { + return runSeed; + } + + public SeededRandomSource waveComposition() { + return waveComposition; + } + + public SeededRandomSource bonusDrops() { + return bonusDrops; + } + + public SeededRandomSource bossOrder() { + return bossOrder; + } + + public SeededRandomSource upgradeDrafts() { + return upgradeDrafts; + } + + public SeededRandomSource combat() { + return combat; + } + + public Snapshot snapshot() { + return new Snapshot( + runSeed, + waveComposition.snapshot(SeededRandomSource.forkSeed(runSeed, WAVE_COMPOSITION)), + bonusDrops.snapshot(SeededRandomSource.forkSeed(runSeed, BONUS_DROPS)), + bossOrder.snapshot(SeededRandomSource.forkSeed(runSeed, BOSS_ORDER)), + upgradeDrafts.snapshot(SeededRandomSource.forkSeed(runSeed, UPGRADE_DRAFTS)), + combat.snapshot(SeededRandomSource.forkSeed(runSeed, COMBAT))); + } + + public static final class Snapshot { + private final long runSeed; + private final SeededRandomSource.Snapshot waveComposition; + private final SeededRandomSource.Snapshot bonusDrops; + private final SeededRandomSource.Snapshot bossOrder; + private final SeededRandomSource.Snapshot upgradeDrafts; + private final SeededRandomSource.Snapshot combat; + + public Snapshot( + long runSeed, + SeededRandomSource.Snapshot waveComposition, + SeededRandomSource.Snapshot bonusDrops, + SeededRandomSource.Snapshot bossOrder, + SeededRandomSource.Snapshot upgradeDrafts, + SeededRandomSource.Snapshot combat) { + this.runSeed = runSeed; + this.waveComposition = Objects.requireNonNull(waveComposition, "waveComposition"); + this.bonusDrops = Objects.requireNonNull(bonusDrops, "bonusDrops"); + this.bossOrder = Objects.requireNonNull(bossOrder, "bossOrder"); + this.upgradeDrafts = Objects.requireNonNull(upgradeDrafts, "upgradeDrafts"); + this.combat = Objects.requireNonNull(combat, "combat"); + } + + public long runSeed() { + return runSeed; + } + + public SeededRandomSource.Snapshot waveComposition() { + return waveComposition; + } + + public SeededRandomSource.Snapshot bonusDrops() { + return bonusDrops; + } + + public SeededRandomSource.Snapshot bossOrder() { + return bossOrder; + } + + public SeededRandomSource.Snapshot upgradeDrafts() { + return upgradeDrafts; + } + + public SeededRandomSource.Snapshot combat() { + return combat; + } + } +} diff --git a/core/src/main/java/ru/project/tower/run/RunSession.java b/core/src/main/java/ru/project/tower/run/RunSession.java new file mode 100644 index 0000000..3395daf --- /dev/null +++ b/core/src/main/java/ru/project/tower/run/RunSession.java @@ -0,0 +1,103 @@ +package ru.project.tower.run; + +import com.badlogic.gdx.utils.Array; +import java.util.Objects; +import ru.project.tower.abilities.AbilitySystem; +import ru.project.tower.entities.bullets.BulletSystem; +import ru.project.tower.entities.circles.BaseCircleData; +import ru.project.tower.systems.BonusBallSystem; +import ru.project.tower.upgrades.UpgradeSystem; +import ru.project.tower.waves.BossSpawnController; +import ru.project.tower.waves.SpawnController; + +public final class RunSession { + private final Array circles; + private final Array spawnedBosses; + private final BulletSystem bulletSystem; + private final BonusBallSystem bonusBallSystem; + private final SpawnController spawnController; + private final BossSpawnController bossSpawnController; + private final AbilitySystem abilitySystem; + private final UpgradeSystem upgradeSystem; + private final RunRngStreams rngStreams; + + RunSession( + Array circles, + Array spawnedBosses, + BulletSystem bulletSystem, + BonusBallSystem bonusBallSystem, + SpawnController spawnController, + BossSpawnController bossSpawnController, + AbilitySystem abilitySystem, + UpgradeSystem upgradeSystem, + RunRngStreams rngStreams) { + this.circles = Objects.requireNonNull(circles, "circles"); + this.spawnedBosses = Objects.requireNonNull(spawnedBosses, "spawnedBosses"); + this.bulletSystem = Objects.requireNonNull(bulletSystem, "bulletSystem"); + this.bonusBallSystem = Objects.requireNonNull(bonusBallSystem, "bonusBallSystem"); + this.spawnController = Objects.requireNonNull(spawnController, "spawnController"); + this.bossSpawnController = + Objects.requireNonNull(bossSpawnController, "bossSpawnController"); + this.abilitySystem = Objects.requireNonNull(abilitySystem, "abilitySystem"); + this.upgradeSystem = Objects.requireNonNull(upgradeSystem, "upgradeSystem"); + this.rngStreams = rngStreams; + } + + public SpawnController spawnController() { + return spawnController; + } + + public BossSpawnController bossSpawnController() { + return bossSpawnController; + } + + public BonusBallSystem bonusBallSystem() { + return bonusBallSystem; + } + + public AbilitySystem abilitySystem() { + return abilitySystem; + } + + public UpgradeSystem upgradeSystem() { + return upgradeSystem; + } + + public RunRngStreams rngStreams() { + return rngStreams; + } + + public void setRenderScale(float gameScale, float adaptedCircleRadius) { + spawnController.setRenderScale(gameScale, adaptedCircleRadius); + bossSpawnController.setRenderScale(gameScale); + } + + public void resizeActiveCircles( + float playerCenterDeltaX, float playerCenterDeltaY, float adaptedCircleRadius) { + for (BaseCircleData circleData : circles) { + circleData.circle.x += playerCenterDeltaX; + circleData.circle.y += playerCenterDeltaY; + circleData.circle.radius = adaptedCircleRadius; + } + } + + public void resetForNewRun() { + clearCircles(); + bonusBallSystem.clear(); + bulletSystem.startNewRun(); + abilitySystem.resetForNewRun(); + upgradeSystem.resetForNewRun(); + spawnedBosses.clear(); + } + + public void dispose() { + resetForNewRun(); + } + + private void clearCircles() { + for (int i = 0; i < circles.size; i++) { + BaseCircleData.freeIfSpawnPooled(circles.get(i)); + } + circles.clear(); + } +} diff --git a/core/src/main/java/ru/project/tower/run/RunSessionConfig.java b/core/src/main/java/ru/project/tower/run/RunSessionConfig.java new file mode 100644 index 0000000..542b06f --- /dev/null +++ b/core/src/main/java/ru/project/tower/run/RunSessionConfig.java @@ -0,0 +1,53 @@ +package ru.project.tower.run; + +import com.badlogic.gdx.math.Rectangle; +import com.badlogic.gdx.utils.Array; +import java.util.Objects; +import ru.project.tower.abilities.AbilityHost; +import ru.project.tower.abilities.AbilityKind; +import ru.project.tower.abilities.PlayerAbilities; +import ru.project.tower.entities.bullets.BulletSystem; +import ru.project.tower.entities.circles.BaseCircleData; +import ru.project.tower.entities.circles.BonusBallData; +import ru.project.tower.support.BossEffectsHost; +import ru.project.tower.support.GameClock; +import ru.project.tower.upgrades.UpgradeHost; + +public final class RunSessionConfig { + final Rectangle square; + final Array circles; + final Array bonusBalls; + final BulletSystem bulletSystem; + final PlayerAbilities playerAbilities; + final Array selectedAbilities; + final Array spawnedBosses; + final GameClock clock; + final BossEffectsHost bossEffectsHost; + final AbilityHost abilityHost; + final UpgradeHost upgradeHost; + + public RunSessionConfig( + Rectangle square, + Array circles, + Array bonusBalls, + BulletSystem bulletSystem, + PlayerAbilities playerAbilities, + Array selectedAbilities, + Array spawnedBosses, + GameClock clock, + BossEffectsHost bossEffectsHost, + AbilityHost abilityHost, + UpgradeHost upgradeHost) { + this.square = Objects.requireNonNull(square, "square"); + this.circles = Objects.requireNonNull(circles, "circles"); + this.bonusBalls = Objects.requireNonNull(bonusBalls, "bonusBalls"); + this.bulletSystem = Objects.requireNonNull(bulletSystem, "bulletSystem"); + this.playerAbilities = Objects.requireNonNull(playerAbilities, "playerAbilities"); + this.selectedAbilities = Objects.requireNonNull(selectedAbilities, "selectedAbilities"); + this.spawnedBosses = Objects.requireNonNull(spawnedBosses, "spawnedBosses"); + this.clock = Objects.requireNonNull(clock, "clock"); + this.bossEffectsHost = Objects.requireNonNull(bossEffectsHost, "bossEffectsHost"); + this.abilityHost = Objects.requireNonNull(abilityHost, "abilityHost"); + this.upgradeHost = Objects.requireNonNull(upgradeHost, "upgradeHost"); + } +} diff --git a/core/src/main/java/ru/project/tower/run/RunSessionFactory.java b/core/src/main/java/ru/project/tower/run/RunSessionFactory.java new file mode 100644 index 0000000..cc2d06e --- /dev/null +++ b/core/src/main/java/ru/project/tower/run/RunSessionFactory.java @@ -0,0 +1,76 @@ +package ru.project.tower.run; + +import java.util.Objects; +import ru.project.tower.abilities.AbilitySystem; +import ru.project.tower.support.RandomSource; +import ru.project.tower.support.ViewportSize; +import ru.project.tower.systems.BonusBallSystem; +import ru.project.tower.upgrades.UpgradeSystem; +import ru.project.tower.waves.BossSpawnController; +import ru.project.tower.waves.SpawnController; + +public final class RunSessionFactory { + private final RandomSource random; + private final RunRngStreams rngStreams; + private final ViewportSize viewport; + + public RunSessionFactory(RandomSource random, ViewportSize viewport) { + this.random = Objects.requireNonNull(random, "random"); + this.rngStreams = null; + this.viewport = Objects.requireNonNull(viewport, "viewport"); + } + + public RunSessionFactory(RunRngStreams rngStreams, ViewportSize viewport) { + this.random = null; + this.rngStreams = Objects.requireNonNull(rngStreams, "rngStreams"); + this.viewport = Objects.requireNonNull(viewport, "viewport"); + } + + public RunSession create(RunSessionConfig config) { + Objects.requireNonNull(config, "config"); + RandomSource waveRandom = rngStreams == null ? random : rngStreams.waveComposition(); + RandomSource bonusRandom = rngStreams == null ? random : rngStreams.bonusDrops(); + RandomSource bossRandom = rngStreams == null ? random : rngStreams.bossOrder(); + RandomSource upgradeRandom = rngStreams == null ? random : rngStreams.upgradeDrafts(); + RandomSource combatRandom = rngStreams == null ? random : rngStreams.combat(); + BonusBallSystem bonusBallSystem = new BonusBallSystem(config.bonusBalls); + SpawnController spawnController = + new SpawnController( + config.square, + config.circles, + config.bonusBalls, + waveRandom, + bonusRandom, + viewport); + BossSpawnController bossSpawnController = + new BossSpawnController( + config.circles, + config.spawnedBosses, + config.bulletSystem, + config.square, + bossRandom, + viewport, + config.bossEffectsHost); + AbilitySystem abilitySystem = + new AbilitySystem( + config.square, + config.circles, + config.playerAbilities, + config.selectedAbilities, + combatRandom, + config.abilityHost, + config.clock); + UpgradeSystem upgradeSystem = new UpgradeSystem(upgradeRandom, config.upgradeHost); + + return new RunSession( + config.circles, + config.spawnedBosses, + config.bulletSystem, + bonusBallSystem, + spawnController, + bossSpawnController, + abilitySystem, + upgradeSystem, + rngStreams); + } +} diff --git a/core/src/main/java/ru/project/tower/run/RunSnapshotCoordinator.java b/core/src/main/java/ru/project/tower/run/RunSnapshotCoordinator.java new file mode 100644 index 0000000..e17c3db --- /dev/null +++ b/core/src/main/java/ru/project/tower/run/RunSnapshotCoordinator.java @@ -0,0 +1,109 @@ +package ru.project.tower.run; + +import com.badlogic.gdx.utils.Array; +import java.util.Objects; +import ru.project.tower.GameState; +import ru.project.tower.abilities.AbilityKind; +import ru.project.tower.entities.bullets.BulletSystem; +import ru.project.tower.player.PlayerCombatState; +import ru.project.tower.upgrades.shop.ShopUpgradeSystem; +import ru.project.tower.waves.WaveController; +import ru.project.tower.waves.WaveTuning; + +public final class RunSnapshotCoordinator { + + private final Host host; + + public interface Host { + GameState gameState(); + + Array selectedAbilities(); + + Array spawnedBosses(); + + PlayerCombatState playerCombatState(); + + BulletSystem bulletSystem(); + + ShopUpgradeSystem shopUpgradeSystem(); + + WaveController waveController(); + + void applyWaveTuning(WaveTuning tuning); + + default RunRngStreams rngStreams() { + return null; + } + } + + public RunSnapshotCoordinator(Host host) { + this.host = Objects.requireNonNull(host, "host"); + } + + public RunStartMode resolveStartMode() { + return host.gameState().isReturnedFromShop() + ? RunStartMode.RESTORE_FROM_SHOP_SNAPSHOT + : RunStartMode.FRESH_RUN; + } + + public GameState.Snapshot restoreRunSnapshot(RunStartMode startMode) { + if (startMode != RunStartMode.RESTORE_FROM_SHOP_SNAPSHOT) { + return null; + } + return host.gameState().restoreGameState(); + } + + public void applyRestoredRunSnapshot(RunStartMode startMode, GameState.Snapshot snapshot) { + if (startMode == RunStartMode.RESTORE_FROM_SHOP_SNAPSHOT) { + applyGameSnapshot(snapshot); + } + } + + public void saveGameSnapshot() { + host.gameState().setSelectedAbilities(host.selectedAbilities()); + host.gameState().setSpawnedBosses(host.spawnedBosses()); + host.gameState().saveGameState(captureGameSnapshot()); + } + + GameState.Snapshot captureGameSnapshot() { + WaveController waveController = host.waveController(); + return RunSnapshotMapper.toGameStateSnapshot( + new RunSnapshotState( + host.playerCombatState().snapshot(), + new RunBulletSnapshot( + host.bulletSystem().getBaseSpeed(), + host.bulletSystem().getBaseDamage()), + host.shopUpgradeSystem().snapshot(), + new GameState.WaveSnapshot( + waveController.getCurrentWave(), + waveController.isWaveActive(), + waveController.getWaveStartTime(), + waveController.getEnemiesSpawnedThisWave(), + waveController.getEnemiesPerWave()), + host.rngStreams() == null ? null : host.rngStreams().snapshot())); + } + + void applyGameSnapshot(GameState.Snapshot snapshot) { + if (snapshot == null) return; + + RunSnapshotState runState = + RunSnapshotMapper.toRunSnapshotState(snapshot, host.playerCombatState().snapshot()); + host.playerCombatState().apply(runState.combat()); + host.bulletSystem() + .increaseBaseSpeed( + runState.bullet().baseSpeed() - host.bulletSystem().getBaseSpeed()); + host.bulletSystem() + .increaseBaseDamage( + runState.bullet().baseDamage() - host.bulletSystem().getBaseDamage()); + host.shopUpgradeSystem().apply(runState.shopUpgrades()); + + WaveController waveController = host.waveController(); + GameState.WaveSnapshot wave = runState.wave(); + waveController.setCurrentWave(wave.getCurrentWave()); + waveController.setWaveActive(wave.isWaveActive()); + waveController.setWaveStartTime(wave.getWaveStartTime()); + waveController.setEnemiesSpawnedThisWave(wave.getEnemiesSpawnedThisWave()); + waveController.setEnemiesPerWave(wave.getEnemiesPerWave()); + host.applyWaveTuning(waveController.currentWaveTuning()); + } +} diff --git a/core/src/main/java/ru/project/tower/run/RunSnapshotMapper.java b/core/src/main/java/ru/project/tower/run/RunSnapshotMapper.java new file mode 100644 index 0000000..de6b004 --- /dev/null +++ b/core/src/main/java/ru/project/tower/run/RunSnapshotMapper.java @@ -0,0 +1,82 @@ +package ru.project.tower.run; + +import java.util.Objects; +import ru.project.tower.GameState; +import ru.project.tower.player.PlayerCombatState; +import ru.project.tower.upgrades.shop.ShopUpgradeSnapshot; + +public final class RunSnapshotMapper { + + private RunSnapshotMapper() {} + + public static GameState.Snapshot toGameStateSnapshot(RunSnapshotState state) { + RunSnapshotState source = Objects.requireNonNull(state, "state"); + PlayerCombatState.Snapshot combat = source.combat(); + RunBulletSnapshot bullet = source.bullet(); + + return new GameState.Snapshot( + combat.money(), + combat.runCurrencyEarned(), + new GameState.HealthSnapshot( + combat.health(), combat.maxHealth(), combat.healthRegenRate()), + new GameState.BulletSnapshot( + bullet.baseSpeed(), bullet.baseDamage(), combat.shotCooldownMs()), + toGameStateUpgradeSnapshot(source.shopUpgrades()), + source.wave(), + source.rng()); + } + + public static RunSnapshotState toRunSnapshotState( + GameState.Snapshot snapshot, PlayerCombatState.Snapshot combatDefaults) { + GameState.Snapshot source = Objects.requireNonNull(snapshot, "snapshot"); + PlayerCombatState.Snapshot defaults = + Objects.requireNonNull(combatDefaults, "combatDefaults"); + GameState.HealthSnapshot health = source.getHealth(); + GameState.BulletSnapshot bullet = source.getBulletStats(); + + return new RunSnapshotState( + new PlayerCombatState.Snapshot( + source.getMoney(), + health.getSquareHealth(), + health.getMaxSquareHealth(), + health.getHealthRegenRate(), + defaults.lastDamageTimeMs(), + defaults.lastHealthRegenTimeMs(), + bullet.getShotCooldown(), + defaults.baseCritChance(), + defaults.baseCritMultiplier(), + defaults.gameOverCurrencyAward(), + defaults.maxWaveReached(), + defaults.gameOverCurrencyAwarded(), + source.getRunCurrencyEarned()), + new RunBulletSnapshot(bullet.getBulletSpeed(), bullet.getBulletDamage()), + toShopUpgradeSnapshot(source.getUpgrades()), + source.getWave(), + source.getRng()); + } + + public static GameState.UpgradeSnapshot toGameStateUpgradeSnapshot( + ShopUpgradeSnapshot snapshot) { + ShopUpgradeSnapshot source = Objects.requireNonNull(snapshot, "snapshot"); + return new GameState.UpgradeSnapshot( + source.getHealthLevel(), + source.getDamageLevel(), + source.getSpeedLevel(), + source.getCooldownLevel(), + source.getRegenLevel(), + source.getCritChanceLevel(), + source.getCritMultiplierLevel()); + } + + public static ShopUpgradeSnapshot toShopUpgradeSnapshot(GameState.UpgradeSnapshot snapshot) { + GameState.UpgradeSnapshot source = Objects.requireNonNull(snapshot, "snapshot"); + return ShopUpgradeSnapshot.of( + source.getHealthUpgradeLevel(), + source.getDamageUpgradeLevel(), + source.getSpeedUpgradeLevel(), + source.getCooldownUpgradeLevel(), + source.getRegenUpgradeLevel(), + source.getCritChanceUpgradeLevel(), + source.getCritMultiplierUpgradeLevel()); + } +} diff --git a/core/src/main/java/ru/project/tower/run/RunSnapshotState.java b/core/src/main/java/ru/project/tower/run/RunSnapshotState.java new file mode 100644 index 0000000..16c191d --- /dev/null +++ b/core/src/main/java/ru/project/tower/run/RunSnapshotState.java @@ -0,0 +1,61 @@ +package ru.project.tower.run; + +import java.util.Objects; +import ru.project.tower.GameState; +import ru.project.tower.player.PlayerCombatState; +import ru.project.tower.upgrades.shop.ShopUpgradeSnapshot; + +public final class RunSnapshotState { + private final PlayerCombatState.Snapshot combat; + private final RunBulletSnapshot bullet; + private final ShopUpgradeSnapshot shopUpgrades; + private final GameState.WaveSnapshot wave; + private final RunRngStreams.Snapshot rng; + + + + + + + + public RunSnapshotState( + PlayerCombatState.Snapshot combat, + RunBulletSnapshot bullet, + ShopUpgradeSnapshot shopUpgrades, + GameState.WaveSnapshot wave) { + this(combat, bullet, shopUpgrades, wave, null); + } + + public RunSnapshotState( + PlayerCombatState.Snapshot combat, + RunBulletSnapshot bullet, + ShopUpgradeSnapshot shopUpgrades, + GameState.WaveSnapshot wave, + RunRngStreams.Snapshot rng) { + this.combat = Objects.requireNonNull(combat, "combat"); + this.bullet = Objects.requireNonNull(bullet, "bullet"); + this.shopUpgrades = Objects.requireNonNull(shopUpgrades, "shopUpgrades"); + this.wave = Objects.requireNonNull(wave, "wave"); + this.rng = rng; + } + + public PlayerCombatState.Snapshot combat() { + return combat; + } + + public RunBulletSnapshot bullet() { + return bullet; + } + + public ShopUpgradeSnapshot shopUpgrades() { + return shopUpgrades; + } + + public GameState.WaveSnapshot wave() { + return wave; + } + + public RunRngStreams.Snapshot rng() { + return rng; + } +} diff --git a/core/src/main/java/ru/project/tower/run/RunStartMode.java b/core/src/main/java/ru/project/tower/run/RunStartMode.java new file mode 100644 index 0000000..57987fc --- /dev/null +++ b/core/src/main/java/ru/project/tower/run/RunStartMode.java @@ -0,0 +1,7 @@ +package ru.project.tower.run; + +public enum RunStartMode { + FRESH_RUN, + RESTART, + RESTORE_FROM_SHOP_SNAPSHOT +} diff --git a/core/src/main/java/ru/project/tower/screens/AbilitySelectionScreen.java b/core/src/main/java/ru/project/tower/screens/AbilitySelectionScreen.java new file mode 100644 index 0000000..1e63c32 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/AbilitySelectionScreen.java @@ -0,0 +1,649 @@ +package ru.project.tower.screens; + +import com.badlogic.gdx.Game; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.InputAdapter; +import com.badlogic.gdx.Screen; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.GL20; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.GlyphLayout; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType; +import com.badlogic.gdx.math.Rectangle; +import com.badlogic.gdx.utils.Array; +import ru.project.tower.DebugLog; +import ru.project.tower.GameContext; +import ru.project.tower.GameState; +import ru.project.tower.abilities.AbilityKind; +import ru.project.tower.abilities.PlayerAbilities; +import ru.project.tower.navigation.ScreenNavigation; +import ru.project.tower.navigation.ScreenNavigator; +import ru.project.tower.screens.abilityselection.AbilitySelectionDependencies; +import ru.project.tower.screens.abilityselection.AbilitySelectionLayout; +import ru.project.tower.screens.abilityselection.AbilitySelectionScaleMetrics; +import ru.project.tower.screens.common.NeonMenuParticleSystem; +import ru.project.tower.support.RobotoFontFactory; +import ru.project.tower.support.ScreenPalette; + + + + +public class AbilitySelectionScreen implements Screen { + private static final int MAX_ABILITY_BUTTONS = 7; + + private SpriteBatch batch; + private ShapeRenderer shapeRenderer; + private BitmapFont titleFont; + private BitmapFont regularFont; + private final ScreenNavigator navigator; + private final PlayerAbilities playerAbilities; + private final GameState gameState; + + private final Color neonBlue = ScreenPalette.BLUE.create(); + private final Color neonPink = ScreenPalette.PINK.create(); + private final Color neonCyan = ScreenPalette.CYAN.create(); + private final Color neonPurple = ScreenPalette.NEON_LIGHT_PURPLE.create(); + private final Color backgroundColor = ScreenPalette.SCREEN.create(); + private final Color neonRed = ScreenPalette.RED.create(); + private final Color neonGreen = ScreenPalette.GREEN.create(); + private final Color neonYellow = ScreenPalette.CYAN.create(); + private final Color fontShadowColor = ScreenPalette.FONT_SHADOW.create(); + private final Color scratchColor = new Color(); + private final Color scratchColor2 = new Color(); + private final Color scratchColor3 = new Color(); + private final GlyphLayout titleLayout = new GlyphLayout(); + private final GlyphLayout abilityButtonTextLayout = new GlyphLayout(); + private final GlyphLayout startButtonTextLayout = new GlyphLayout(); + private final GlyphLayout backButtonTextLayout = new GlyphLayout(); + + private float uiScale; + private int adaptedFontSize; + private float time = 0; + + private final NeonMenuParticleSystem particles = new NeonMenuParticleSystem(); + + private final Array abilityButtons = new Array<>(MAX_ABILITY_BUTTONS); + private final Rectangle[] abilityButtonPool = { + new Rectangle(), + new Rectangle(), + new Rectangle(), + new Rectangle(), + new Rectangle(), + new Rectangle(), + new Rectangle() + }; + private final Array availableAbilities = new Array<>(); + + private final Array selectedAbilities = new Array<>(); + + private final Rectangle startGameButton = new Rectangle(); + private final Rectangle backButton = new Rectangle(); + + + + + public AbilitySelectionScreen(Game game, GameContext ctx) { + this(ScreenNavigation.forGame(game, ctx), AbilitySelectionDependencies.from(ctx)); + } + + public AbilitySelectionScreen( + ScreenNavigator navigator, AbilitySelectionDependencies dependencies) { + this.navigator = navigator; + this.playerAbilities = dependencies.playerAbilities(); + this.gameState = dependencies.gameState(); + try { + DebugLog.log("AbilitySelectionScreen", "Constructing AbilitySelectionScreen"); + DebugLog.log("AbilitySelectionScreen", "Navigator set"); + } catch (Exception e) { + Gdx.app.error("AbilitySelectionScreen", "Error in constructor: ", e); + throw e; + } + } + + @Override + public void show() { + try { + DebugLog.log("AbilitySelectionScreen", "Starting show() method"); + + initializeRenderResources(); + calculateUIScale(); + DebugLog.log("AbilitySelectionScreen", "Calculated UI scale"); + loadFonts(); + + initializeParticles(); + + populateAvailableAbilities(); + + updateButtonLayout(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); + + installInputProcessor(); + } catch (Exception e) { + Gdx.app.error("AbilitySelectionScreen", "Error in show method: ", e); + throw e; + } + } + + private void initializeRenderResources() { + batch = new SpriteBatch(); + DebugLog.log("AbilitySelectionScreen", "Created SpriteBatch"); + + shapeRenderer = new ShapeRenderer(); + DebugLog.log("AbilitySelectionScreen", "Created ShapeRenderer"); + } + + private void loadFonts() { + try { + if (!RobotoFontFactory.exists()) { + Gdx.app.error("AbilitySelectionScreen", "Font file roboto.ttf not found!"); + throw new RuntimeException("Font file not found"); + } + logFontFile(); + + RobotoFontFactory.FontSpec spec = + RobotoFontFactory.spec( + (int) (adaptedFontSize * 1.3f), + 1.5f, + neonPurple, + Color.WHITE, + 1, + 1, + fontShadowColor); + + titleFont = RobotoFontFactory.generate(spec); + DebugLog.log("AbilitySelectionScreen", "Generated title font"); + + regularFont = + RobotoFontFactory.generate( + spec.withSize((int) (adaptedFontSize * 0.9f)).withBorderWidth(1.0f)); + DebugLog.log("AbilitySelectionScreen", "Generated regular font"); + } catch (Exception e) { + Gdx.app.error("AbilitySelectionScreen", "Error loading fonts: ", e); + throw e; + } + } + + private void initializeParticles() { + particles.init( + Gdx.graphics.getWidth(), + Gdx.graphics.getHeight(), + uiScale, + neonBlue, + neonPink, + neonCyan, + neonPurple); + } + + private void populateAvailableAbilities() { + Array purchasedAbilities = playerAbilities.getPurchasedAbilities(); + + logAbilities("Available purchased abilities: ", "Available ability: ", purchasedAbilities); + + availableAbilities.clear(); + selectedAbilities.clear(); + availableAbilities.addAll(purchasedAbilities); + logAvailableAbilitiesPopulated(); + } + + private void updateButtonLayout(int width, int height) { + AbilitySelectionLayout layout = + AbilitySelectionLayout.calculate(width, height, uiScale, availableAbilities.size); + + createAbilityButtons(layout); + + setRect(startGameButton, layout.startGameButton()); + setRect(backButton, layout.backButton()); + } + + private void installInputProcessor() { + Gdx.input.setInputProcessor( + new InputAdapter() { + @Override + public boolean touchDown(int screenX, int screenY, int pointer, int button) { + float touchX = screenX; + float touchY = Gdx.graphics.getHeight() - screenY; + + for (int i = 0; i < abilityButtons.size; i++) { + if (i < availableAbilities.size + && abilityButtons.get(i).contains(touchX, touchY)) { + toggleAbilitySelection(availableAbilities.get(i)); + return true; + } + } + + if (startGameButton.contains(touchX, touchY)) { + startGame(); + return true; + } + + if (backButton.contains(touchX, touchY)) { + navigator.showMainMenu(); + return true; + } + + return false; + } + }); + } + + private void logFontFile() { + if (DebugLog.DEBUG) { + DebugLog.log("AbilitySelectionScreen", "Font file exists: roboto.ttf"); + } + } + + private void logAvailableAbilitiesPopulated() { + if (DebugLog.DEBUG) { + DebugLog.log( + "AbilitySelectionScreen", + "Populated availableAbilities, total: " + availableAbilities.size); + } + } + + + + + private void createAbilityButtons(AbilitySelectionLayout layout) { + abilityButtons.clear(); + + for (int i = 0; i < layout.abilityButtonCount(); i++) { + Rectangle abilityButton = abilityButtonPool[i]; + setRect(abilityButton, layout.abilityButton(i)); + abilityButtons.add(abilityButton); + } + } + + private void setRect(Rectangle target, AbilitySelectionLayout.Rect source) { + target.set(source.x(), source.y(), source.width(), source.height()); + } + + + + + private void calculateUIScale() { + AbilitySelectionScaleMetrics metrics = + AbilitySelectionScaleMetrics.calculate( + Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); + uiScale = metrics.uiScale(); + adaptedFontSize = metrics.adaptedFontSize(); + } + + + + + private void toggleAbilitySelection(AbilityKind ability) { + if (DebugLog.DEBUG) { + DebugLog.log("AbilitySelectionScreen", "Toggling ability: " + ability.persistedId()); + } + if (selectedAbilities.contains(ability, true)) { + selectedAbilities.removeValue(ability, true); + if (DebugLog.DEBUG) { + DebugLog.log( + "AbilitySelectionScreen", + "Removed ability: " + + ability.persistedId() + + ", total: " + + selectedAbilities.size); + } + } else { + if (selectedAbilities.size < 3) { + selectedAbilities.add(ability); + if (DebugLog.DEBUG) { + DebugLog.log( + "AbilitySelectionScreen", + "Added ability: " + + ability.persistedId() + + ", total: " + + selectedAbilities.size); + } + } + } + } + + + + + private void startGame() { + try { + DebugLog.log("AbilitySelectionScreen", "Starting game..."); + + if (navigator == null) { + Gdx.app.error("AbilitySelectionScreen", "Screen navigator is null!"); + throw new RuntimeException("Screen navigator is null"); + } + + if (gameState == null) { + Gdx.app.error("AbilitySelectionScreen", "GameState instance is null!"); + throw new RuntimeException("GameState instance is null"); + } + DebugLog.log("AbilitySelectionScreen", "Got GameState instance"); + + gameState.resetGameState(); + DebugLog.log("AbilitySelectionScreen", "Reset game state"); + + logAbilities( + "Selected abilities before setting: ", + "Selected ability before setting: ", + selectedAbilities); + + gameState.setSelectedAbilities(selectedAbilities); + DebugLog.log("AbilitySelectionScreen", "Set selected abilities to GameState"); + + Array checkAbilities = gameState.getSelectedAbilities(); + logAbilities( + "Checking set abilities count: ", "Checking set ability: ", checkAbilities); + + try { + DebugLog.log("AbilitySelectionScreen", "Navigating to GameScreen"); + navigator.showGameScreen(); + DebugLog.log("AbilitySelectionScreen", "Game started successfully"); + } catch (Exception e) { + Gdx.app.error( + "AbilitySelectionScreen", "Error creating or setting GameScreen: ", e); + throw e; + } + } catch (Exception e) { + Gdx.app.error("AbilitySelectionScreen", "Error in startGame: ", e); + throw e; + } + } + + private void logAbilities( + String countPrefix, String abilityPrefix, Array abilities) { + if (DebugLog.DEBUG) { + DebugLog.log("AbilitySelectionScreen", countPrefix + abilities.size); + for (AbilityKind ability : abilities) { + DebugLog.log("AbilitySelectionScreen", abilityPrefix + ability.persistedId()); + } + } + } + + private void renderNeonButton(Rectangle button, Color color, boolean isSelected) { + float glow = (float) (0.5f + 0.5f * Math.sin(time * 2.0f)); + + float mouseX = Gdx.input.getX(); + float mouseY = Gdx.graphics.getHeight() - Gdx.input.getY(); + boolean isHovered = button.contains(mouseX, mouseY); + boolean isPressed = isHovered && Gdx.input.isTouched(); + Color borderColor = buttonBorderColor(color, isHovered, isPressed); + + renderButtonFillAndGlow(button, borderColor, isSelected, isHovered, glow); + renderButtonBorder(button, borderColor, isSelected, isHovered, glow); + } + + private Color buttonBorderColor(Color color, boolean isHovered, boolean isPressed) { + if (isPressed) return neonPink; + if (isHovered) return neonCyan; + return color; + } + + private void renderButtonFillAndGlow( + Rectangle button, + Color borderColor, + boolean isSelected, + boolean isHovered, + float glow) { + shapeRenderer.set(ShapeType.Filled); + if (isSelected) { + shapeRenderer.setColor(0.025f, 0.09f, 0.14f, 0.96f); + } else { + shapeRenderer.setColor(0.035f, 0.043f, 0.071f, 0.96f); + } + shapeRenderer.rect(button.x, button.y, button.width, button.height); + + if (isSelected || isHovered) { + scratchColor.set(borderColor); + scratchColor.a = isSelected ? 0.18f : 0.08f; + shapeRenderer.setColor(scratchColor); + shapeRenderer.rect(button.x, button.y, button.width, button.height); + } + + if (isSelected) { + scratchColor2.set(borderColor); + scratchColor2.a = 0.16f * glow; + shapeRenderer.setColor(scratchColor2); + shapeRenderer.rect( + button.x, button.y + button.height - 5f * uiScale, button.width, 3f * uiScale); + } + } + + private void renderButtonBorder( + Rectangle button, + Color borderColor, + boolean isSelected, + boolean isHovered, + float glow) { + + shapeRenderer.end(); + shapeRenderer.begin(ShapeType.Line); + + scratchColor3.set(borderColor); + scratchColor3.a = isSelected ? 0.95f : isHovered ? 0.85f : 0.7f; + shapeRenderer.setColor(scratchColor3); + + int thickness = isSelected ? 2 : 1; + for (int i = 0; i < thickness; i++) { + shapeRenderer.rect( + button.x + i, button.y + i, button.width - i * 2, button.height - i * 2); + } + + shapeRenderer.end(); + shapeRenderer.begin(ShapeType.Filled); + } + + private void renderNeonGrid() { + shapeRenderer.begin(ShapeRenderer.ShapeType.Line); + + float alpha = 0.18f + 0.06f * (float) Math.sin(time * 0.5f); + shapeRenderer.setColor(ScreenPalette.BLUE.set(scratchColor, alpha)); + + float spacing = 50f * uiScale; + float offset = (time * 10f) % spacing; + + for (float y = offset; y < Gdx.graphics.getHeight(); y += spacing) { + shapeRenderer.line(0, y, Gdx.graphics.getWidth(), y); + } + + shapeRenderer.setColor(ScreenPalette.BLUE.set(scratchColor, alpha)); + for (float x = offset; x < Gdx.graphics.getWidth(); x += spacing) { + shapeRenderer.line(x, 0, x, Gdx.graphics.getHeight()); + } + + shapeRenderer.end(); + } + + @Override + public void render(float delta) { + try { + updateFrameState(delta); + clearBackground(); + renderBackgroundEffects(); + renderButtonShapes(); + renderButtonText(); + } catch (Exception e) { + Gdx.app.error("AbilitySelectionScreen", "Error in render method: ", e); + throw e; + } + } + + private void updateFrameState(float delta) { + time += delta; + + particles.update( + delta, + Gdx.graphics.getWidth(), + Gdx.graphics.getHeight(), + uiScale, + neonBlue, + neonPink, + neonCyan, + neonPurple); + } + + private void clearBackground() { + Gdx.gl.glClearColor( + backgroundColor.r, backgroundColor.g, backgroundColor.b, backgroundColor.a); + Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); + } + + private void renderBackgroundEffects() { + renderNeonGrid(); + particles.render(shapeRenderer); + } + + private void renderButtonShapes() { + shapeRenderer.begin(ShapeType.Filled); + for (int i = 0; i < abilityButtons.size; i++) { + if (i < availableAbilities.size) { + AbilityKind ability = availableAbilities.get(i); + boolean isSelected = selectedAbilities.contains(ability, true); + Color buttonColor = getAbilityColor(ability); + renderNeonButton(abilityButtons.get(i), buttonColor, isSelected); + } + } + + renderNeonButton(startGameButton, neonGreen, false); + renderNeonButton(backButton, neonRed, false); + shapeRenderer.end(); + } + + private void renderButtonText() { + batch.begin(); + try { + renderTitleText(); + renderAbilityButtonText(); + renderStartButtonText(); + renderBackButtonText(); + batch.end(); + } catch (Exception e) { + Gdx.app.error("AbilitySelectionScreen", "Error rendering text: ", e); + } finally { + if (batch.isDrawing()) batch.end(); + } + } + + private void renderTitleText() { + String titleText = "Выберите способности"; + titleLayout.setText(titleFont, titleText); + float titleX = (Gdx.graphics.getWidth() - titleLayout.width) / 2; + float titleY = Gdx.graphics.getHeight() - 80 * uiScale; + titleFont.draw(batch, titleText, titleX, titleY); + } + + private void renderAbilityButtonText() { + for (int i = 0; i < abilityButtons.size; i++) { + if (i < availableAbilities.size) { + Rectangle button = abilityButtons.get(i); + AbilityKind ability = availableAbilities.get(i); + String buttonText = getAbilityName(ability); + + abilityButtonTextLayout.setText(regularFont, buttonText); + float textX = button.x + (button.width - abilityButtonTextLayout.width) / 2; + float textY = button.y + (button.height + abilityButtonTextLayout.height) / 2; + regularFont.draw(batch, buttonText, textX, textY); + } + } + } + + private String startButtonText(boolean wrap) { + if (selectedAbilities.size == 1) { + return wrap ? "Начать\nс 1 способностью" : "Начать с 1 способностью"; + } + if (selectedAbilities.size == 0) { + return wrap ? "Начать\nбез способностей" : "Начать без способностей"; + } + return "Начать игру"; + } + + private void renderStartButtonText() { + String startButtonText = startButtonText(false); + startButtonTextLayout.setText(regularFont, startButtonText); + float horizontalPadding = 20f * uiScale; + if (startButtonTextLayout.width > startGameButton.width - horizontalPadding * 2f) { + startButtonText = startButtonText(true); + startButtonTextLayout.setText(regularFont, startButtonText); + } + float startTextX = + startGameButton.x + (startGameButton.width - startButtonTextLayout.width) / 2; + float startTextY = + startGameButton.y + (startGameButton.height + startButtonTextLayout.height) / 2; + regularFont.draw(batch, startButtonText, startTextX, startTextY); + } + + private void renderBackButtonText() { + String backText = "<"; + backButtonTextLayout.setText(regularFont, backText); + float backTextX = backButton.x + (backButton.width - backButtonTextLayout.width) / 2; + float backTextY = backButton.y + (backButton.height + backButtonTextLayout.height) / 2; + regularFont.draw(batch, backText, backTextX, backTextY); + } + + + + + private Color getAbilityColor(AbilityKind ability) { + switch (ability) { + case FREEZE: + return neonCyan; + case EXPLOSION: + return neonRed; + case SHIELD: + return neonBlue; + case IMPULSE: + return neonPurple; + case DASH: + return neonCyan; + case PULL: + return neonPurple; + case TURRET: + return neonGreen; + default: + return neonYellow; + } + } + + + + + private String getAbilityName(AbilityKind ability) { + return ability.selectionName(); + } + + @Override + public void resize(int width, int height) { + calculateUIScale(); + updateButtonLayout(width, height); + } + + @Override + public void pause() {} + + @Override + public void resume() {} + + @Override + public void hide() { + Gdx.input.setInputProcessor(null); + } + + @Override + public void dispose() { + if (batch != null) { + batch.dispose(); + batch = null; + } + if (shapeRenderer != null) { + shapeRenderer.dispose(); + shapeRenderer = null; + } + if (titleFont != null) { + titleFont.dispose(); + titleFont = null; + } + if (regularFont != null) { + regularFont.dispose(); + regularFont = null; + } + } +} diff --git a/core/src/main/java/ru/project/tower/screens/AbilityShopScreen.java b/core/src/main/java/ru/project/tower/screens/AbilityShopScreen.java new file mode 100644 index 0000000..313e4c9 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/AbilityShopScreen.java @@ -0,0 +1,488 @@ +package ru.project.tower.screens; + +import com.badlogic.gdx.Game; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Screen; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.GL20; +import com.badlogic.gdx.graphics.Pixmap; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType; +import com.badlogic.gdx.scenes.scene2d.InputEvent; +import com.badlogic.gdx.scenes.scene2d.Stage; +import com.badlogic.gdx.scenes.scene2d.ui.Label; +import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane; +import com.badlogic.gdx.scenes.scene2d.ui.Table; +import com.badlogic.gdx.scenes.scene2d.ui.TextButton; +import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; +import com.badlogic.gdx.scenes.scene2d.utils.NinePatchDrawable; +import com.badlogic.gdx.utils.Align; +import com.badlogic.gdx.utils.viewport.ScreenViewport; +import ru.project.tower.DebugLog; +import ru.project.tower.GameContext; +import ru.project.tower.abilities.AbilityKind; +import ru.project.tower.abilities.PlayerAbilities; +import ru.project.tower.navigation.ScreenNavigation; +import ru.project.tower.navigation.ScreenNavigator; +import ru.project.tower.player.PlayerStats; +import ru.project.tower.screens.abilityshop.AbilityShopCardView; +import ru.project.tower.screens.abilityshop.AbilityShopDependencies; +import ru.project.tower.screens.abilityshop.AbilityShopPurchaseService; +import ru.project.tower.screens.abilityshop.AbilityShopResources; +import ru.project.tower.screens.abilityshop.AbilityShopScaleMetrics; +import ru.project.tower.support.RobotoFontFactory; +import ru.project.tower.support.ScreenPalette; + +public class AbilityShopScreen implements Screen { + private final ScreenNavigator navigator; + private SpriteBatch batch; + private ShapeRenderer shapeRenderer; + private Stage stage; + private final AbilityShopResources resources = new AbilityShopResources(); + + private final PlayerStats playerStats; + private final PlayerAbilities playerAbilities; + + private float uiScale; + private int adaptedFontSize; + private static final AbilityKind[] ABILITY_TYPES = AbilityKind.values(); + private float time; + + private final Color neonPink = ScreenPalette.PINK.create(); + private final Color gridBlue = ScreenPalette.BLUE.create(); + private final Color neonCyan = ScreenPalette.CYAN.create(); + private final Color neonPurple = ScreenPalette.NEON_LIGHT_PURPLE.create(); + private final Color neonGreen = ScreenPalette.GREEN.create(); + private final Color neonRed = ScreenPalette.RED.create(); + private final Color buttonDisabled = ScreenPalette.BUTTON_DISABLED.create(); + private final Color fontShadowColor = ScreenPalette.FONT_SHADOW.create(); + + private Color[] abilityColors = { + neonCyan, neonRed, neonGreen, neonPurple, neonCyan, neonPurple, neonGreen + }; + + public AbilityShopScreen(Game game, GameContext ctx) { + this(ScreenNavigation.forGame(game, ctx), AbilityShopDependencies.from(ctx)); + } + + public AbilityShopScreen(ScreenNavigator navigator, AbilityShopDependencies dependencies) { + this.navigator = navigator; + this.playerStats = dependencies.playerStats(); + this.playerAbilities = dependencies.playerAbilities(); + } + + + + + private void rebuildScreenAssets() { + resources.rebuild(); + createFont(); + } + + private void createFont() { + BitmapFont generatedFont = null; + BitmapFont generatedButtonFont = null; + try { + + if (RobotoFontFactory.exists()) { + DebugLog.log("AbilityShopScreen", "Найден файл шрифта roboto.ttf"); + + RobotoFontFactory.FontSpec spec = createFontSpec(); + generatedFont = RobotoFontFactory.generate(spec); + + generatedButtonFont = generateButtonFont(spec); + + installGeneratedFonts(generatedFont, generatedButtonFont); + generatedFont = null; + generatedButtonFont = null; + } else { + logMissingRobotoFont(); + installFallbackFonts(); + } + } catch (Exception e) { + + installFallbackFonts(); + Gdx.app.error("AbilityShopScreen", "Ошибка при создании шрифта: " + e.getMessage()); + } finally { + disposeGeneratedFont(generatedFont); + disposeGeneratedFont(generatedButtonFont); + } + } + + private RobotoFontFactory.FontSpec createFontSpec() { + return RobotoFontFactory.spec( + adaptedFontSize, + 1f * (uiScale < 1 ? 1 : uiScale), + neonPurple, + Color.WHITE, + 1, + 1, + fontShadowColor); + } + + private BitmapFont generateButtonFont(RobotoFontFactory.FontSpec spec) { + return RobotoFontFactory.generate(spec.withSize((int) (adaptedFontSize * 0.85f))); + } + + private void installGeneratedFonts(BitmapFont generatedFont, BitmapFont generatedButtonFont) { + resources.installFonts(generatedFont, generatedButtonFont); + } + + private void logMissingRobotoFont() { + Gdx.app.error( + "AbilityShopScreen", + "Файл шрифта roboto.ttf не найден, используем стандартный шрифт"); + } + + private void installFallbackFonts() { + resources.installFonts(RobotoFontFactory.fallback(), RobotoFontFactory.fallback(0.85f)); + } + + private void disposeGeneratedFont(BitmapFont generatedFont) { + if (generatedFont != null) generatedFont.dispose(); + } + + private void createUI() { + DebugLog.log("AbilityShopScreen", "Создание UI"); + + createButtonStyle(); + + createLabelStyles(); + + Table table = createAbilityShopTable(); + Label balanceLabel = addAbilityShopHeader(table); + addAbilityCards(table, balanceLabel); + addBackButton(table); + + Gdx.input.setInputProcessor(stage); + + DebugLog.log("AbilityShopScreen", "UI создан успешно"); + } + + private Table createAbilityShopTable() { + Table table = new Table(); + table.setFillParent(true); + stage.addActor(table); + return table; + } + + private Label addAbilityShopHeader(Table table) { + Label titleLabel = new Label("МАГАЗИН", resources.skin()); + table.add(titleLabel).padTop(14 * uiScale).padBottom(8 * uiScale); + table.row(); + + Label balanceLabel = new Label("Баланс: " + playerStats.getCurrency(), resources.skin()); + table.add(balanceLabel).padBottom(8 * uiScale); + table.row(); + return balanceLabel; + } + + private void addAbilityCards(Table table, Label balanceLabel) { + float screenWidth = Gdx.graphics.getWidth(); + Table abilitiesContainer = createAbilityCardsContainer(balanceLabel, screenWidth); + ScrollPane scrollPane = createAbilityScrollPane(abilitiesContainer); + + table.add(scrollPane).padLeft(10 * uiScale).padRight(10 * uiScale).expand().fill(); + table.row(); + } + + private Table createAbilityCardsContainer(Label balanceLabel, float screenWidth) { + float cardWidth = Math.min(screenWidth - 20f * uiScale, 420f * uiScale); + Table abilitiesContainer = new Table(); + + for (int i = 0; i < ABILITY_TYPES.length; i++) { + Table abilityCard = createAbilityCard(i, balanceLabel, cardWidth); + abilitiesContainer.add(abilityCard).pad(4 * uiScale).width(cardWidth).expandX(); + abilitiesContainer.row(); + } + return abilitiesContainer; + } + + private ScrollPane createAbilityScrollPane(Table abilitiesContainer) { + ScrollPane scrollPane = new ScrollPane(abilitiesContainer, resources.skin()); + scrollPane.setFadeScrollBars(false); + scrollPane.setScrollingDisabled(true, false); + return scrollPane; + } + + private void addBackButton(Table table) { + TextButton backButton = new TextButton("НАЗАД", resources.skin()); + backButton.addListener( + new ClickListener() { + @Override + public void clicked(InputEvent event, float x, float y) { + handleBackClick(); + } + }); + + table.add(backButton).pad(10 * uiScale).size(150 * uiScale, 50 * uiScale); + } + + private void handleBackClick() { + try { + navigator.showMainMenu(); + } catch (Exception e) { + Gdx.app.error( + "AbilityShopScreen", "Ошибка при возврате в главное меню: " + e.getMessage()); + } + } + + private Table createAbilityCard(int index, Label balanceLabel, float cardWidth) { + AbilityKind ability = ABILITY_TYPES[index]; + AbilityShopCardView cardView = + AbilityShopCardView.forAbility( + ability, + playerAbilities.hasAbility(ability), + playerStats.getMaxWaveReached()); + + Table abilityCard = new Table(); + abilityCard.setBackground(createCardBackground(abilityColors[index])); + abilityCard.pad(8 * uiScale); + + Label nameLabel = new Label(cardView.name(), resources.skin()); + nameLabel.setAlignment(Align.left); + nameLabel.setWrap(true); + + Label detailsLabel = new Label(cardView.detailsText(), resources.skin()); + detailsLabel.setAlignment(Align.left); + detailsLabel.setWrap(true); + + final TextButton buyButton = new TextButton(cardView.buttonText(), resources.skin()); + + if (cardView.buttonDisabled()) { + buyButton.setDisabled(true); + } else { + buyButton.addListener( + new ClickListener() { + @Override + public void clicked(InputEvent event, float x, float y) { + tryPurchaseAbility(index, buyButton, balanceLabel); + } + }); + } + + float buttonWidth = Math.min(94f * uiScale, cardWidth * 0.32f); + float contentWidth = cardWidth - buttonWidth - 34f * uiScale; + abilityCard.add(nameLabel).padRight(8 * uiScale).width(contentWidth).expandX().left(); + abilityCard.add(buyButton).size(buttonWidth, 36 * uiScale).right(); + abilityCard.row(); + abilityCard + .add(detailsLabel) + .padTop(4 * uiScale) + .colspan(2) + .width(cardWidth - 18f * uiScale) + .left(); + return abilityCard; + } + + private void createButtonStyle() { + TextButton.TextButtonStyle buttonStyle = createShopButtonStyle(); + Color[] uniqueCardColors = {neonCyan, neonRed, neonGreen, neonPurple}; + + installButtonDrawables(buttonStyle); + cacheCardBackgrounds(uniqueCardColors); + + resources.skin().add("default", buttonStyle); + } + + private TextButton.TextButtonStyle createShopButtonStyle() { + TextButton.TextButtonStyle buttonStyle = new TextButton.TextButtonStyle(); + buttonStyle.font = + resources.buttonFont() != null ? resources.buttonFont() : resources.font(); + buttonStyle.fontColor = Color.WHITE; + buttonStyle.overFontColor = neonCyan; + buttonStyle.downFontColor = neonPink; + return buttonStyle; + } + + private void installButtonDrawables(TextButton.TextButtonStyle buttonStyle) { + buttonStyle.up = createOwnedDrawable(buildBorderPixmap(neonPurple, 2), 3); + buttonStyle.over = createOwnedDrawable(buildBorderPixmap(neonCyan, 3), 3); + buttonStyle.down = createOwnedDrawable(buildBorderPixmap(neonPink, 3), 3); + buttonStyle.disabled = createOwnedDrawable(buildBorderPixmap(buttonDisabled, 2), 3); + } + + private NinePatchDrawable createOwnedDrawable(Pixmap pixmap, int split) { + return resources.screenAssets().ownNinePatch(pixmap, split); + } + + private void cacheCardBackgrounds(Color[] uniqueCardColors) { + int cardSplit = (int) (3 * uiScale); + for (Color c : uniqueCardColors) { + resources.putCardBackground(c, createOwnedDrawable(buildCardPixmap(c), cardSplit)); + } + } + + private void createLabelStyles() { + Label.LabelStyle labelStyle = new Label.LabelStyle(resources.font(), Color.WHITE); + resources.skin().add("default", labelStyle); + + ScrollPane.ScrollPaneStyle scrollPaneStyle = new ScrollPane.ScrollPaneStyle(); + resources.skin().add("default", scrollPaneStyle); + } + + private static Pixmap buildBorderPixmap(Color borderColor, int borderThickness) { + Pixmap px = new Pixmap(20, 20, Pixmap.Format.RGBA8888); + px.setColor(0.05f, 0.07f, 0.12f, 0.92f); + px.fill(); + px.setColor(borderColor); + for (int i = 0; i < borderThickness; i++) { + px.drawRectangle(i, i, 20 - i * 2, 20 - i * 2); + } + return px; + } + + private static Pixmap buildCardPixmap(Color borderColor) { + Pixmap px = new Pixmap(20, 20, Pixmap.Format.RGBA8888); + px.setColor(0.06f, 0.08f, 0.13f, 0.9f); + px.fill(); + px.setColor(borderColor); + for (int i = 0; i < 2; i++) { + px.drawRectangle(i, i, 20 - i * 2, 20 - i * 2); + } + return px; + } + + private NinePatchDrawable createCardBackground(Color color) { + NinePatchDrawable cached = resources.cardBackground(color); + if (cached != null) return cached; + + Gdx.app.error("AbilityShopScreen", "Unknown card color — no atlas region pre-packed"); + return resources.hasCardBackgrounds() ? resources.firstCardBackground() : null; + } + + private void calculateUIScale() { + AbilityShopScaleMetrics metrics = + AbilityShopScaleMetrics.calculate( + Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); + uiScale = metrics.uiScale(); + adaptedFontSize = metrics.adaptedFontSize(); + } + + private void tryPurchaseAbility(int index, TextButton buyButton, Label balanceLabel) { + try { + AbilityKind abilityType = ABILITY_TYPES[index]; + + AbilityShopPurchaseService.Result result = + AbilityShopPurchaseService.tryPurchase( + abilityType, playerStats, playerAbilities); + if (result == AbilityShopPurchaseService.Result.PURCHASED) { + buyButton.setText("КУПЛЕНО"); + buyButton.setDisabled(true); + + balanceLabel.setText("Баланс: " + playerStats.getCurrency()); + logPurchasedAbility(abilityType); + } else if (result == AbilityShopPurchaseService.Result.INSUFFICIENT_FUNDS) { + DebugLog.log("AbilityShopScreen", "Недостаточно средств для покупки способности"); + } else if (result == AbilityShopPurchaseService.Result.LOCKED) { + DebugLog.log("AbilityShopScreen", "Способность еще не разблокирована прогрессом"); + } else { + DebugLog.log("AbilityShopScreen", "Способность уже куплена"); + } + } catch (Exception e) { + Gdx.app.error("AbilityShopScreen", "Ошибка при покупке способности: " + e.getMessage()); + } + } + + private void logPurchasedAbility(AbilityKind abilityType) { + if (DebugLog.DEBUG) { + DebugLog.log( + "AbilityShopScreen", "Куплена способность: " + abilityType.selectionName()); + } + } + + @Override + public void render(float delta) { + time += delta; + Gdx.gl.glClearColor(0.035f, 0.043f, 0.071f, 1f); + Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); + + renderBackdrop(); + stage.act(delta); + stage.draw(); + } + + private void renderBackdrop() { + if (shapeRenderer == null) return; + shapeRenderer.begin(ShapeType.Line); + float spacing = 54f * uiScale; + float offset = (time * 6f) % spacing; + shapeRenderer.setColor(ScreenPalette.BLUE.set(gridBlue, 0.38f)); + for (float x = offset; x < Gdx.graphics.getWidth(); x += spacing) { + shapeRenderer.line(x, 0, x, Gdx.graphics.getHeight()); + } + for (float y = offset; y < Gdx.graphics.getHeight(); y += spacing) { + shapeRenderer.line(0, y, Gdx.graphics.getWidth(), y); + } + shapeRenderer.end(); + } + + @Override + public void show() { + dispose(); + DebugLog.log("AbilityShopScreen", "Создание экрана магазина способностей"); + calculateUIScale(); + batch = new SpriteBatch(); + shapeRenderer = new ShapeRenderer(); + stage = new Stage(new ScreenViewport()); + rebuildScreenAssets(); + createUI(); + } + + @Override + public void resize(int width, int height) { + logResize(width, height); + calculateUIScale(); + stage.getViewport().update(width, height, true); + + + stage.clear(); + disposeScreenAssets(); + rebuildScreenAssets(); + createUI(); + } + + private void logResize(int width, int height) { + if (DebugLog.DEBUG) { + DebugLog.log("AbilityShopScreen", "Изменение размера экрана: " + width + "x" + height); + } + } + + @Override + public void pause() {} + + @Override + public void resume() {} + + @Override + public void hide() { + Gdx.input.setInputProcessor(null); + } + + @Override + public void dispose() { + try { + if (stage != null) { + stage.dispose(); + stage = null; + } + if (batch != null) { + batch.dispose(); + batch = null; + } + if (shapeRenderer != null) { + shapeRenderer.dispose(); + shapeRenderer = null; + } + resources.dispose(); + } catch (Exception e) { + Gdx.app.error("AbilityShopScreen", "Ошибка в методе dispose(): " + e.getMessage()); + } + } + + private void disposeScreenAssets() { + resources.dispose(); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/GameScreen.java b/core/src/main/java/ru/project/tower/screens/GameScreen.java new file mode 100644 index 0000000..b6a1c6f --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/GameScreen.java @@ -0,0 +1,1887 @@ +package ru.project.tower.screens; + +import com.badlogic.gdx.Game; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Screen; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.GL20; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.math.Rectangle; +import com.badlogic.gdx.utils.Array; +import ru.project.tower.DebugLog; +import ru.project.tower.GameContext; +import ru.project.tower.GameState; +import ru.project.tower.abilities.AbilityHost; +import ru.project.tower.abilities.AbilityKind; +import ru.project.tower.abilities.AbilitySystem; +import ru.project.tower.abilities.PlayerAbilities; +import ru.project.tower.entities.bullets.BulletEffectsSink; +import ru.project.tower.entities.bullets.BulletSystem; +import ru.project.tower.entities.circles.BaseCircleData; +import ru.project.tower.entities.circles.BasicCircleData; +import ru.project.tower.entities.circles.BonusBallData; +import ru.project.tower.entities.circles.FastCircleData; +import ru.project.tower.entities.circles.HealerCircleData; +import ru.project.tower.entities.circles.StrongCircleData; +import ru.project.tower.entities.circles.bosses.SwarmQueenData; +import ru.project.tower.entities.particles.FloatingText; +import ru.project.tower.entities.particles.NeonParticle; +import ru.project.tower.navigation.ScreenNavigation; +import ru.project.tower.navigation.ScreenNavigator; +import ru.project.tower.player.PlayerCombatState; +import ru.project.tower.player.PlayerRunCombatCalculator; +import ru.project.tower.player.PlayerStats; +import ru.project.tower.run.GameplayEvent; +import ru.project.tower.run.GameplayEventSink; +import ru.project.tower.run.GameplayEvents; +import ru.project.tower.run.GameplaySound; +import ru.project.tower.run.RunFrameEvents; +import ru.project.tower.run.RunFrameOrchestrator; +import ru.project.tower.run.RunRngStreams; +import ru.project.tower.run.RunSession; +import ru.project.tower.run.RunSessionConfig; +import ru.project.tower.run.RunSessionFactory; +import ru.project.tower.run.RunSnapshotCoordinator; +import ru.project.tower.run.RunStartMode; +import ru.project.tower.screens.gamescreen.GameScreenComposition; +import ru.project.tower.screens.gamescreen.GameScreenDependencies; +import ru.project.tower.screens.gamescreen.abilities.GameScreenAbilityHost; +import ru.project.tower.screens.gamescreen.actions.GameScreenActionRouter; +import ru.project.tower.screens.gamescreen.actions.GameScreenInputAction; +import ru.project.tower.screens.gamescreen.assets.GameScreenFontAssets; +import ru.project.tower.screens.gamescreen.assets.GameScreenMaterialAssets; +import ru.project.tower.screens.gamescreen.assets.GameScreenSoundAssets; +import ru.project.tower.screens.gamescreen.events.GameScreenBulletEffectsHostAdapter; +import ru.project.tower.screens.gamescreen.events.GameScreenBulletEffectsSink; +import ru.project.tower.screens.gamescreen.events.GameScreenEnemyKillEventHandler; +import ru.project.tower.screens.gamescreen.events.GameScreenEnemyKillHostAdapter; +import ru.project.tower.screens.gamescreen.events.GameScreenGameplayEventSink; +import ru.project.tower.screens.gamescreen.gameobjects.GameScreenGameObjectModel; +import ru.project.tower.screens.gamescreen.gameobjects.GameScreenGameObjectRenderer; +import ru.project.tower.screens.gamescreen.hud.GameScreenHudModel; +import ru.project.tower.screens.gamescreen.hud.GameScreenHudRenderer; +import ru.project.tower.screens.gamescreen.input.GameScreenInputController; +import ru.project.tower.screens.gamescreen.input.GameScreenInputHostAdapter; +import ru.project.tower.screens.gamescreen.input.GameScreenInputModel; +import ru.project.tower.screens.gamescreen.layout.GameScreenLayout; +import ru.project.tower.screens.gamescreen.layout.GameScreenScaleMetrics; +import ru.project.tower.screens.gamescreen.layout.SafeAreaInsetsProvider; +import ru.project.tower.screens.gamescreen.model.GameScreenGameOverOverlayModel; +import ru.project.tower.screens.gamescreen.model.GameScreenPauseOverlayModel; +import ru.project.tower.screens.gamescreen.render.GameScreenGameOverOverlayRenderer; +import ru.project.tower.screens.gamescreen.render.GameScreenMenuButtonRenderer; +import ru.project.tower.screens.gamescreen.render.GameScreenPauseOverlayRenderer; +import ru.project.tower.screens.gamescreen.render.GameScreenRenderModelAssembler; +import ru.project.tower.screens.gamescreen.render.GameScreenUpgradePickOverlay; +import ru.project.tower.screens.gamescreen.render.PauseScreenshotOwner; +import ru.project.tower.screens.gamescreen.run.GameScreenRunFrameEvents; +import ru.project.tower.screens.gamescreen.run.GameScreenRunFrameHostAdapter; +import ru.project.tower.screens.gamescreen.run.GameScreenRunSnapshotHost; +import ru.project.tower.screens.gamescreen.run.GameScreenRunSnapshotHostAdapter; +import ru.project.tower.screens.gamescreen.shop.GameScreenShopController; +import ru.project.tower.screens.gamescreen.shop.GameScreenShopUpgradeHost; +import ru.project.tower.screens.gamescreen.shop.GameScreenShopUpgradeHostAdapter; +import ru.project.tower.screens.gamescreen.shop.ShopUpgradePreviewValues; +import ru.project.tower.screens.gamescreen.special.GameScreenBossEffectsHost; +import ru.project.tower.screens.gamescreen.special.GameScreenSpecialCircleHost; +import ru.project.tower.screens.gamescreen.special.GameScreenSpecialCircleHostAdapter; +import ru.project.tower.screens.gamescreen.upgrades.GameScreenUpgradeHost; +import ru.project.tower.screens.gamescreen.upgrades.GameScreenUpgradeHostAdapter; +import ru.project.tower.screens.gamescreen.vfx.GameScreenBackgroundRenderer; +import ru.project.tower.screens.gamescreen.vfx.GameScreenFloatingTextSystem; +import ru.project.tower.screens.gamescreen.vfx.GameScreenImpactEffects; +import ru.project.tower.screens.gamescreen.vfx.GameScreenParticleEffects; +import ru.project.tower.screens.gamescreen.vfx.GameScreenVfxModel; +import ru.project.tower.screens.gamescreen.vfx.GameScreenVfxRenderer; +import ru.project.tower.screens.gamescreen.waves.GameScreenWaveClearRewardHandler; +import ru.project.tower.screens.gamescreen.waves.GameScreenWaveClearRewardHostAdapter; +import ru.project.tower.screens.gamescreen.waves.GameScreenWaveRunEvents; +import ru.project.tower.screens.gamescreen.waves.GameScreenWaveRunHostAdapter; +import ru.project.tower.support.BossEffectsHost; +import ru.project.tower.support.GameClock; +import ru.project.tower.support.GdxViewportSize; +import ru.project.tower.support.MathUtilsRandomSource; +import ru.project.tower.support.PausableGameClock; +import ru.project.tower.support.RandomSource; +import ru.project.tower.support.ScreenPalette; +import ru.project.tower.support.ViewportSize; +import ru.project.tower.systems.BossPlayerCombatModifiers; +import ru.project.tower.systems.BonusBallSystem; +import ru.project.tower.systems.EnemyDeathHandler; +import ru.project.tower.systems.PlayerShootingSystem; +import ru.project.tower.systems.SpecialCircleSystem; +import ru.project.tower.talents.TalentData; +import ru.project.tower.talents.TalentTree; +import ru.project.tower.upgrades.UpgradeHost; +import ru.project.tower.upgrades.UpgradeSystem; +import ru.project.tower.upgrades.shop.ShopUpgradeKind; +import ru.project.tower.upgrades.shop.ShopUpgradeSystem; +import ru.project.tower.waves.BossSpawnController; +import ru.project.tower.waves.SpawnController; +import ru.project.tower.waves.WaveController; +import ru.project.tower.waves.WaveRunEvents; +import ru.project.tower.waves.WaveRunOrchestrator; +import ru.project.tower.waves.WaveTuning; + +public class GameScreen + implements Screen, + GameScreenRunFrameHostAdapter.Port, + GameScreenWaveRunHostAdapter.Port, + GameScreenRunSnapshotHostAdapter.Port, + GameScreenUpgradeHostAdapter.Port, + GameScreenShopUpgradeHostAdapter.Port, + GameScreenWaveClearRewardHostAdapter.Port, + GameScreenBulletEffectsHostAdapter.Port, + GameScreenSpecialCircleHostAdapter.Port, + GameScreenEnemyKillHostAdapter.Port, + GameScreenInputHostAdapter.Port { + private SpriteBatch batch; + private final GameScreenFontAssets fontAssets = new GameScreenFontAssets(); + private final GameScreenMaterialAssets materialAssets = new GameScreenMaterialAssets(); + private ShapeRenderer shapeRenderer; + private final Rectangle square = new Rectangle(); + private Array circles; + private BulletSystem bulletSystem; + private EnemyDeathHandler enemyDeathHandler; + private GameScreenSoundAssets soundAssets; + private final GameplayEventSink gameplayEventSink = createGameplayEventSink(); + private final GameScreenWaveClearRewardHandler waveClearRewardHandler = + new GameScreenWaveClearRewardHandler( + new GameScreenWaveClearRewardHostAdapter(this), + gameplayEventSink, + new MathUtilsRandomSource()); + private final BulletEffectsSink bulletEffects = + new GameScreenBulletEffectsSink( + new GameScreenBulletEffectsHostAdapter(this), gameplayEventSink); + private Array bonusBalls = new Array<>(); + private BonusBallSystem bonusBallSystem; + private PlayerShootingSystem playerShootingSystem = new PlayerShootingSystem(); + + private long lastShotTime; + private final ScreenNavigator navigator; + private final PlayerCombatState playerCombatState = new PlayerCombatState(); + private boolean gameOver = false; + private boolean hudHelpVisible = false; + private final Rectangle restartButton = new Rectangle(); + private final Rectangle menuButton = new Rectangle(); + private final Rectangle gameMenuButton = new Rectangle(); + private static final float SQUARE_SIZE = 54f; + private static final float BULLET_RADIUS = 5f; + private static final float SHOOTING_RANGE = 150f; + + private final ShopUpgradeSystem shopUpgradeSystem = + new ShopUpgradeSystem( + new GameScreenShopUpgradeHost(new GameScreenShopUpgradeHostAdapter(this))); + private final GameScreenShopController shopController = + new GameScreenShopController(shopUpgradeSystem); + + private static final float WAVE_INDICATOR_HEIGHT = 15f; + private static final float WAVE_INDICATOR_PADDING = 10f; + private static final String SMOKE_OPEN_SHOP_PROPERTY = "tower.smoke.openShop"; + private static final String SMOKE_STATE_PROPERTY = "tower.smoke.state"; + private static final String SMOKE_VISUAL_FIXTURE_PROPERTY = "tower.smoke.visualFixture"; + private static final String SMOKE_REVIEW_STATE_PROPERTY = "tower.smoke.reviewState"; + private static final String SMOKE_WAVE_CLEAR_STATE = "waveClear"; + private static final String SMOKE_UPGRADE_PICK_STATE = "upgradePick"; + private static final String SMOKE_MATERIAL_SHOWCASE_STATE = "materialShowcase"; + private static final String SMOKE_SHOP_OPENING_STATE = "shopOpening"; + private static final String SMOKE_ABILITY_STATE_PREFIX = "ability-"; + private static final float SMOKE_SHOP_OPENING_PROGRESS = 0.56f; + private static final float PLAYER_CENTER_Y_RATIO = 0.52f; + private static final float SMOKE_REWARD_TEXT_HEIGHT = 15f; + + private final WaveController waveController = new WaveController(); + private WaveRunOrchestrator waveRunOrchestrator; + private SpawnController spawnController; + private BossSpawnController bossSpawnController; + private UpgradeSystem upgradeSystem; + private RunFrameOrchestrator runFrameOrchestrator; + private final PausableGameClock gameClock = new PausableGameClock(GameClock.SYSTEM); + + private float uiScale = 1.0f; + private float gameScale = 1.0f; + private float adaptedSquareSize; + private float adaptedCircleRadius; + private float adaptedBulletRadius; + private int adaptedFontSize; + private final Array smokeVisualCircles = new Array<>(); + private final Array smokeVisualBonusBalls = new Array<>(); + private final Array smokeVisualBackgroundParticles = new Array<>(); + private final Array smokeVisualBulletParticles = new Array<>(); + private final Array smokeVisualFloatingTexts = new Array<>(); + + + + + + private long getAbilityCooldownReduction() { + return (long) talentTree.getStatBonus(TalentData.TalentType.COOLDOWN); + } + + private void triggerDamageShake(int damage) { + impactEffects.applyDamageShake(damage); + } + + @Override + public boolean damagePlayerIfVulnerable(int damage, long damageCooldownMs) { + long now = gameClock.nowMs(); + boolean damageBlocked = isPlayerDamageBlocked(now); + boolean accepted = + playerCombatState.damageIfVulnerable( + damage, damageCooldownMs, now, ignoredNow -> damageBlocked); + if (accepted && !damageBlocked) { + gameplayEventSink.emit( + GameplayEvents.playerDamaged( + damage, + playerCombatState.getHealth(), + square.x + square.width / 2f, + square.y + square.height / 2f)); + } + return accepted; + } + + private boolean isPlayerDamageBlocked(long now) { + return abilitySystem != null + && (abilitySystem.isShieldActive(now) || abilitySystem.isDashInvulnerable(now)); + } + + @Override + public void regeneratePlayer(long nowMs) { + playerCombatState.regenerateIfReady(nowMs); + } + + @Override + public long lastShotTime() { + return lastShotTime; + } + + @Override + public float effectiveShotCooldown() { + return getEffectiveShotCooldown(); + } + + @Override + public int playerHealth() { + return playerCombatState.getHealth(); + } + + @Override + public void handleEnemyKilled(BaseCircleData enemy) { + enemyDeathHandler.handleEnemyKilled( + enemy, gameScale, waveController.getCurrentEnemySpeedMultiplier()); + } + + @Override + public boolean spendMoney(int amount) { + return playerCombatState.spendMoney(amount); + } + + @Override + public void addMoney(int amount) { + playerCombatState.addMoney(amount); + } + + @Override + public void addCurrency(int amount) { + playerCombatState.addRunCurrencyEarned(amount); + playerStats.addCurrency(amount); + } + + @Override + public void addMaxHealth(int amount) { + playerCombatState.setMaxHealth(playerCombatState.getMaxHealth() + amount); + } + + @Override + public void healToFull() { + playerCombatState.setHealth(playerCombatState.getMaxHealth()); + } + + @Override + public void addBaseDamage(int amount) { + bulletSystem.increaseBaseDamage(amount); + } + + @Override + public void addBaseSpeed(float amount) { + bulletSystem.increaseBaseSpeed(amount); + } + + @Override + public void reduceShotCooldown(float amount, float minimum) { + playerCombatState.reduceShotCooldown(amount); + } + + @Override + public void addHealthRegen(int amount) { + playerCombatState.setHealthRegenRate(playerCombatState.getHealthRegenRate() + amount); + } + + @Override + public void spawnQueenMinion(SwarmQueenData queen) { + bossSpawnController.spawnQueenMinion(queen); + } + + private void triggerCritHitstop() { + impactEffects.applyCritHitstop(); + } + + @Override + public void triggerBossKillShake() { + impactEffects.applyBossKillShake(); + } + + @Override + public void triggerKillShake() { + impactEffects.applyKillShake(); + } + + private EnemyDeathHandler createEnemyDeathHandler() { + return createEnemyDeathHandler(new MathUtilsRandomSource()); + } + + private EnemyDeathHandler createEnemyDeathHandler(RandomSource random) { + return new EnemyDeathHandler( + circles, + (x, y, color) -> particleEffects.createExplosion(x, y, color), + gameplayEventSink, + random); + } + + private GameScreenEnemyKillEventHandler createEnemyKillEventHandler() { + return new GameScreenEnemyKillEventHandler( + new GameScreenEnemyKillHostAdapter(this), NEON_YELLOW); + } + + private GameplayEventSink createGameplayEventSink() { + return new GameScreenGameplayEventSink( + createGameplayEventHost(), createGameplayEventPalette()); + } + + private GameScreenGameplayEventSink.Host createGameplayEventHost() { + return new GameplayEventHostBridge(); + } + + private final class GameplayEventHostBridge implements GameScreenGameplayEventSink.Host { + @Override + public void spawnFloatingText(float x, float y, String text, Color color) { + GameScreen.this.spawnFloatingText(x, y, text, color); + } + + @Override + public void spawnFloatingText( + float x, + float y, + String text, + Color color, + float maxLifetime, + float initialScale, + float riseSpeed) { + GameScreen.this.spawnFloatingText( + x, y, text, color, maxLifetime, initialScale, riseSpeed); + } + + @Override + public void applyShake(float intensity, float hitstopSeconds) { + impactEffects.applyShake(intensity, hitstopSeconds); + } + + @Override + public void triggerDamageShake(int damage) { + GameScreen.this.triggerDamageShake(damage); + } + + @Override + public void playSound(GameplaySound sound, float volume, float pitch, float pan) { + soundAssets.play(sound, volume, pitch, pan); + } + + @Override + public void createExplosion(float x, float y, Color color) { + particleEffects.createExplosion(x, y, color); + } + + @Override + public void createExplosion(float x, float y, Color color, int particleCount) { + particleEffects.createExplosion(x, y, color, particleCount); + } + + @Override + public void addCurrency(int amount) { + GameScreen.this.addCurrency(amount); + } + + @Override + public void updateMaxWave(int wave) { + playerStats.updateMaxWave(wave); + } + + @Override + public void handleEnemyKilled(GameplayEvent.EnemyKilled event) { + enemyKillEventHandler.handle(event); + } + } + + private GameScreenGameplayEventSink.Palette createGameplayEventPalette() { + return new GameScreenGameplayEventSink.Palette( + NEON_RED, NEON_YELLOW, NEON_GREEN, NEON_CYAN, NEON_BLUE, NEON_PURPLE); + } + + + + + + private boolean isPaused = false; + private boolean shouldPause = false; + private final PauseScreenshotOwner pauseScreenshotOwner = new PauseScreenshotOwner(); + private GameScreenPauseOverlayRenderer pauseOverlayRenderer; + private final GameScreenPauseOverlayModel pauseOverlayModel = new GameScreenPauseOverlayModel(); + private final Rectangle resumeButton = new Rectangle(); + private final Rectangle exitButton = new Rectangle(); + + + + private AbilitySystem abilitySystem; + + + + + + + private final GameScreenImpactEffects impactEffects = new GameScreenImpactEffects(); + + private static final Color NEON_RED = ScreenPalette.RED.create(); + private static final Color NEON_GREEN = ScreenPalette.GREEN.create(); + private static final Color NEON_BLUE = ScreenPalette.BLUE.create(); + private static final Color NEON_YELLOW = ScreenPalette.GOLD.create(); + private static final Color NEON_CYAN = ScreenPalette.CYAN.create(); + private static final Color NEON_PINK = ScreenPalette.PINK.create(); + private static final Color NEON_PURPLE = ScreenPalette.NEON_LIGHT_PURPLE.create(); + private static final Color PRICE_TEXT_COLOR = ScreenPalette.TEXT_PRICE.create(); + private static final Color SHADOW_WEAVER_COLOR = ScreenPalette.SHADOW_WEAVER.create(); + private static final Color GLACIAL_WARDEN_COLOR = ScreenPalette.GLACIAL_WARDEN.create(); + private static final Color BASIC_CIRCLE_COLOR = ScreenPalette.BASIC_ENEMY.create(); + private static final Color FAST_CIRCLE_COLOR = ScreenPalette.PINK.create(); + private static final Color SPLITTER_CIRCLE_COLOR = ScreenPalette.ORANGE.create(); + private static final Color SPAWNER_CIRCLE_COLOR = ScreenPalette.SUPPORT_ENEMY.create(); + private static final Color[] BACKGROUND_PARTICLE_COLORS = { + NEON_BLUE, NEON_PINK, NEON_CYAN, NEON_PURPLE + }; + private static final String UPGRADE_PICK_TITLE = "Выберите улучшение"; + private final SpecialCircleSystem specialCircleSystem = + new SpecialCircleSystem(NEON_RED, NEON_BLUE, NEON_YELLOW, NEON_CYAN, NEON_PURPLE); + private final GameScreenParticleEffects particleEffects = new GameScreenParticleEffects(); + private final GameScreenEnemyKillEventHandler enemyKillEventHandler = + createEnemyKillEventHandler(); + private final BossEffectsHost bossEffectsHost = new GameScreenBossEffectsHost(particleEffects); + private final SpecialCircleSystem.Host specialCircleHost = + new GameScreenSpecialCircleHost( + new GameScreenSpecialCircleHostAdapter(this), particleEffects); + + private static final float pulseSpeed = 2f; + + + + private final Color scratchColor = new Color(); + private final Color scratchColor2 = new Color(); + private final Color scratchColor3 = new Color(); + private final Color scratchColor4 = new Color(); + private final Color scratchColor5 = new Color(); + + private void setRect(Rectangle rect, float x, float y, float width, float height) { + rect.set(x, y, width, height); + } + + private void setRect(Rectangle rect, GameScreenLayout.Rect layoutRect) { + if (layoutRect == null) return; + setRect(rect, layoutRect.x(), layoutRect.y(), layoutRect.width(), layoutRect.height()); + } + + @Override + public void spawnFloatingText(float x, float y, String text, Color color) { + floatingTextSystem.spawn(x, y, text, color); + } + + @Override + public void playGameplaySound(GameplaySound sound, float volume, float pitch, float pan) { + soundAssets.play(sound, volume, pitch, pan); + } + + @Override + public void spawnFloatingText( + float x, + float y, + String text, + Color color, + float maxLifetime, + float initialScale, + float riseSpeed) { + floatingTextSystem.spawn(x, y, text, color, maxLifetime, initialScale, riseSpeed); + } + + private float time = 0; + private static final Color BACKGROUND_COLOR = ScreenPalette.SCREEN.create(); + + private final PlayerStats playerStats; + private final PlayerAbilities playerAbilities; + private final GameScreenDependencies dependencies; + private final GameScreenComposition composition; + private final ViewportSize viewportSize; + private final SafeAreaInsetsProvider safeAreaInsetsProvider; + private final RunSessionFactory runSessionFactory; + private final GameState gameState; + private final TalentTree talentTree; + + private final GameScreenFloatingTextSystem floatingTextSystem = + new GameScreenFloatingTextSystem(); + + private static final Color BOSS_PROJECTILE_COLOR = new Color(0.8f, 0.2f, 0.8f, 1f); + + private Array spawnedBosses = new Array<>(); + + private Array selectedAbilities; + private RunSession runSession; + + private final GameScreenGameObjectModel gameObjectModel = new GameScreenGameObjectModel(); + private final GameScreenHudModel hudModel = new GameScreenHudModel(); + private final GameScreenVfxModel vfxModel = new GameScreenVfxModel(); + private final GameScreenGameOverOverlayModel gameOverOverlayModel = + new GameScreenGameOverOverlayModel(); + private final GameScreenRenderModelAssembler renderModelAssembler = + new GameScreenRenderModelAssembler( + gameObjectModel, hudModel, vfxModel, pauseOverlayModel, gameOverOverlayModel); + private final GameScreenGameObjectRenderer gameObjectRenderer = + new GameScreenGameObjectRenderer(renderModelAssembler::gameObjectModel); + private final GameScreenHudRenderer hudRenderer = + new GameScreenHudRenderer(renderModelAssembler::hudModel); + private final GameScreenVfxRenderer vfxRenderer = + new GameScreenVfxRenderer(renderModelAssembler::vfxModel); + private final GameScreenBackgroundRenderer backgroundRenderer = + new GameScreenBackgroundRenderer(); + private final GameScreenMenuButtonRenderer menuButtonRenderer = + new GameScreenMenuButtonRenderer(); + private final GameScreenUpgradePickOverlay upgradePickOverlay = + new GameScreenUpgradePickOverlay(NEON_CYAN, NEON_GREEN, NEON_PURPLE); + private RunSnapshotCoordinator runSnapshotCoordinator; + private final GameScreenGameOverOverlayRenderer gameOverOverlayRenderer = + new GameScreenGameOverOverlayRenderer(); + private final GameScreenInputModel inputModel = new GameScreenInputModel(); + + private final GameScreenActionRouter actionRouter = + new GameScreenActionRouter(new GameScreenActionHost()); + private final GameScreenInputController inputController = + new GameScreenInputController(new GameScreenInputHostAdapter(this)); + + @Override + public GameScreenInputModel inputModel() { + inputModel.fillScreenFields( + new GameScreenInputModel.ScreenFields( + upgradeSystem != null && upgradeSystem.isPickActive(), + upgradePickOverlay.canAcceptSelection(), + isPaused, + upgradePickOverlay.buttons(), + upgradePickOverlay.rerollButton(), + gameOver, + uiScale, + gameMenuButton, + restartButton, + menuButton, + resumeButton, + exitButton, + bonusBalls)); + shopController.fillInputModelShopFields(inputModel, playerAbilities); + return inputModel; + } + + @Override + public void performInputAction(GameScreenInputAction action) { + actionRouter.perform(action); + } + + @Override + public void scrollShopUpgrades(float amount) { + shopController.scrollBy(amount); + rebuildShopController(); + } + + @Override + public void applyPick(int index) { + upgradeSystem.applyPick(index); + } + + @Override + public void rerollPick() { + if (upgradeSystem.rerollsRemaining() <= 0) return; + float discount = shopUpgradeSystem.cardRerollDiscount(); + int rerollCost = upgradeSystem.rerollCost(discount); + UpgradeSystem.OfferCardView[] previousOffer = upgradeSystem.activeOfferViews(); + if (spendMoney(rerollCost) && upgradeSystem.rerollPick(discount)) { + upgradePickOverlay.rebuild(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), uiScale); + upgradePickOverlay.startReroll(previousOffer, upgradeSystem.activeOfferViews()); + } + } + + @Override + public void buyShopUpgrade(ShopUpgradeKind kind) { + shopController.buyUpgrade(kind); + } + + private void rebuildShopController() { + shopController.rebuild( + viewportSize.getWidth(), + viewportSize.getHeight(), + uiScale, + selectedAbilities, + playerAbilities, + safeAreaInsetsProvider.current()); + } + + private final class GameScreenActionHost implements GameScreenActionRouter.Host { + @Override + public void showUpgradePanel(GameScreenActionRouter.UpgradePanel panel) { + shopController.showPanel(panel); + rebuildShopController(); + } + + @Override + public void toggleShop() { + shopController.toggleShop(); + rebuildShopController(); + } + + @Override + public void toggleHudHelp() { + hudHelpVisible = !hudHelpVisible; + } + + @Override + public void scrollUpgrades(int direction) { + shopController.scroll(direction); + rebuildShopController(); + } + + @Override + public void buyUpgrade(GameScreenActionRouter.Upgrade upgrade) { + shopController.buyUpgrade(upgrade); + } + + @Override + public void activateAbility(GameScreenActionRouter.Ability ability) { + long now = gameClock.nowMs(); + switch (ability) { + case FREEZE: + abilitySystem.activateFreeze(0, 0, now); + break; + case EXPLOSION: + abilitySystem.activateExplosion(0, 0, now); + break; + case SHIELD: + abilitySystem.activateShield(now); + break; + case IMPULSE: + abilitySystem.activateImpulse(now); + break; + case DASH: + abilitySystem.activateDash(now); + break; + case PULL: + abilitySystem.activatePull(now); + break; + case TURRET: + abilitySystem.activateTurret(now); + break; + } + } + + @Override + public void requestPause() { + shouldPause = true; + } + + @Override + public void restartGame() { + GameScreen.this.restartGame(); + } + + @Override + public void returnToMainMenu() { + GameScreen.this.returnToMainMenu(); + } + + @Override + public void resumeGameFromPause() { + gameClock.resume(); + isPaused = false; + pauseScreenshotOwner.disposeAndClear(); + } + + @Override + public void exitPauseToMenu() { + pauseScreenshotOwner.disposeAndClear(); + returnToMainMenu(); + } + } + + @Override + public void collectBonusBall(int index) { + BonusBallSystem.CollectionEvent event = bonusBallSystem.collect(index); + applyBonusCollectionEffect(event.effect); + gameplayEventSink.emit( + GameplayEvents.bonusCollected(event.type.name(), event.x, event.y, event.text)); + } + + private void applyBonusCollectionEffect(BonusBallSystem.CollectionEffect effect) { + if (effect == null) return; + if (effect.healAmount() > 0) { + playerCombatState.setHealth( + Math.min( + playerCombatState.getMaxHealth(), + playerCombatState.getHealth() + effect.healAmount())); + } + if (effect.coinAmount() > 0) { + playerCombatState.addMoney(effect.coinAmount()); + } + if (effect.abilityCharge() > 0 && abilitySystem != null) { + abilitySystem.reduceAllCooldowns(effect.abilityCharge() * 1_500L); + } + if (effect.shieldPulse() > 0 && abilitySystem != null) { + abilitySystem.grantShieldPulse(gameClock.nowMs(), 1_200 + effect.shieldPulse() * 20); + } + } + + public GameScreen(Game game, GameContext ctx) { + this(navigatorFor(game, ctx), GameScreenDependencies.from(ctx), new GdxViewportSize()); + } + + GameScreen(Game game, GameContext ctx, ViewportSize viewportSize) { + this(navigatorFor(game, ctx), GameScreenDependencies.from(ctx), viewportSize); + } + + public GameScreen(ScreenNavigator navigator, GameContext ctx) { + this(navigator, GameScreenDependencies.from(ctx), new GdxViewportSize()); + } + + GameScreen(ScreenNavigator navigator, GameContext ctx, ViewportSize viewportSize) { + this(navigator, GameScreenDependencies.from(ctx), viewportSize); + } + + public GameScreen(ScreenNavigator navigator, GameScreenDependencies dependencies) { + this(navigator, dependencies, new GdxViewportSize()); + } + + GameScreen( + ScreenNavigator navigator, + GameScreenDependencies dependencies, + ViewportSize viewportSize) { + this(navigator, dependencies, viewportSize, new GameScreenComposition(dependencies)); + } + + GameScreen( + ScreenNavigator navigator, + GameScreenDependencies dependencies, + ViewportSize viewportSize, + GameScreenComposition composition) { + this( + navigator, + dependencies, + viewportSize, + composition, + composition.createRunSessionFactory(viewportSize)); + } + + GameScreen( + ScreenNavigator navigator, + GameScreenDependencies dependencies, + ViewportSize viewportSize, + RunSessionFactory runSessionFactory) { + this( + navigator, + dependencies, + viewportSize, + new GameScreenComposition(dependencies), + runSessionFactory); + } + + GameScreen( + ScreenNavigator navigator, + GameScreenDependencies dependencies, + ViewportSize viewportSize, + GameScreenComposition composition, + RunSessionFactory runSessionFactory) { + this.dependencies = dependencies; + this.composition = composition; + this.navigator = navigator; + this.viewportSize = viewportSize; + this.runSessionFactory = runSessionFactory; + this.safeAreaInsetsProvider = dependencies.safeAreaInsetsProvider(); + try { + DebugLog.log("GameScreen", "Constructing GameScreen"); + playerStats = dependencies.playerStats(); + playerAbilities = dependencies.playerAbilities(); + gameState = dependencies.gameState(); + talentTree = dependencies.talentTree(); + soundAssets = new GameScreenSoundAssets(dependencies.assetService()); + + if (gameState == null) { + Gdx.app.error("GameScreen", "GameState instance is null!"); + throw new RuntimeException("GameState instance is null"); + } + + selectedAbilities = gameState.getSelectedAbilities(); + + logSelectedAbilities("Got selected abilities, count: ", "Selected ability: "); + + DebugLog.log("GameScreen", "GameScreen constructed successfully"); + } catch (Exception e) { + Gdx.app.error("GameScreen", "Error in constructor: ", e); + throw e; + } + } + + private static ScreenNavigator navigatorFor(Game game, GameContext ctx) { + if (game == null) return null; + return ScreenNavigation.forGame(game, ctx); + } + + @Override + public void show() { + try { + DebugLog.log("GameScreen", "Showing GameScreen"); + + initializeRenderResources(); + initializeRunResources(); + + DebugLog.log("GameScreen", "Got GameState instance"); + + RunStartMode startMode = runSnapshotCoordinator.resolveStartMode(); + GameState.Snapshot restoredSnapshot = + runSnapshotCoordinator.restoreRunSnapshot(startMode); + + refreshRunSelections(); + + logSelectedAbilities("Received abilities count: ", "Received ability: "); + + calculateScaleFactor(); + DebugLog.log("GameScreen", "Scale factors calculated"); + + positionPlayerSquare(); + initializeRunSessionAndInput(); + initializeNewRunTimeline(); + initializeVisualEffectsAndOverlays(); + + runSnapshotCoordinator.applyRestoredRunSnapshot(startMode, restoredSnapshot); + } catch (Exception e) { + Gdx.app.error("GameScreen", "Error in show method: ", e); + throw e; + } + } + + private void initializeRenderResources() { + batch = new SpriteBatch(); + shapeRenderer = new ShapeRenderer(); + impactEffects.captureBaseProjection(shapeRenderer, batch); + } + + private void initializeRunResources() { + soundAssets.load(); + + circles = new Array(); + bulletSystem = composition.createBulletSystem(); + enemyDeathHandler = createEnemyDeathHandler(); + runSnapshotCoordinator = new RunSnapshotCoordinator(createRunSnapshotHost()); + + DebugLog.log("GameScreen", "Basic initialization complete"); + } + + private void refreshRunSelections() { + selectedAbilities = gameState.getSelectedAbilities(); + spawnedBosses = gameState.getSpawnedBosses(); + } + + private void positionPlayerSquare() { + square.set( + Gdx.graphics.getWidth() / 2f - adaptedSquareSize / 2f, + Gdx.graphics.getHeight() * PLAYER_CENTER_Y_RATIO - adaptedSquareSize / 2f, + adaptedSquareSize, + adaptedSquareSize); + } + + private void initializeRunSessionAndInput() { + createRunSession(); + rebuildShopController(); + if (smokeShopOpeningStateEnabled()) { + shopController.setShopTransitionProgressForReview(SMOKE_SHOP_OPENING_PROGRESS); + rebuildShopController(); + } else if (Boolean.getBoolean(SMOKE_OPEN_SHOP_PROPERTY)) { + shopController.setShopOpenImmediately(true); + rebuildShopController(); + } + if (smokeUpgradePickStateEnabled()) { + playerCombatState.setMoney(45); + upgradeSystem.triggerPick(); + upgradePickOverlay.rebuild(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), uiScale); + upgradePickOverlay.startReveal(upgradeSystem.activeOfferViews()); + } + inputController.install(); + fontAssets.rebuild(adaptedFontSize); + materialAssets.rebuild(); + } + + private void initializeNewRunTimeline() { + bulletSystem.applyTalentBaseStats(); + + gameClock.resetToWallNow(); + long now = gameClock.nowMs(); + resetCombatStateForNewRun(now); + lastShotTime = now; + + waveController.resetForNewRun(now); + activateSmokeAbilityShowcase(); + } + + private void activateSmokeAbilityShowcase() { + AbilityKind ability = smokeAbilityShowcaseKind(); + if (ability == null || abilitySystem == null) return; + actionRouter.perform(GameScreenInputAction.valueOf("ACTIVATE_" + ability.name())); + } + + private void initializeVisualEffectsAndOverlays() { + particleEffects.initBackgroundParticles( + Gdx.graphics.getWidth(), + Gdx.graphics.getHeight(), + uiScale, + BACKGROUND_PARTICLE_COLORS); + rebuildSmokeVisualFixture(); + + createGameMenuButton(); + rebuildPauseOverlayRenderer(); + } + + private boolean smokeVisualFixtureEnabled() { + return Boolean.getBoolean(SMOKE_VISUAL_FIXTURE_PROPERTY); + } + + private boolean smokeReviewStateEnabled() { + return Boolean.getBoolean(SMOKE_REVIEW_STATE_PROPERTY); + } + + private boolean smokeWaveClearStateEnabled() { + return SMOKE_WAVE_CLEAR_STATE.equals(System.getProperty(SMOKE_STATE_PROPERTY, "")); + } + + private boolean smokeUpgradePickStateEnabled() { + return SMOKE_UPGRADE_PICK_STATE.equals(System.getProperty(SMOKE_STATE_PROPERTY, "")); + } + + private boolean smokeMaterialShowcaseStateEnabled() { + return SMOKE_MATERIAL_SHOWCASE_STATE.equals(System.getProperty(SMOKE_STATE_PROPERTY, "")); + } + + private boolean smokeShopOpeningStateEnabled() { + return SMOKE_SHOP_OPENING_STATE.equals(System.getProperty(SMOKE_STATE_PROPERTY, "")); + } + + private boolean smokeDeterministicReviewStateEnabled() { + return smokeVisualFixtureEnabled() + || smokeReviewStateEnabled() + || smokeWaveClearStateEnabled() + || smokeUpgradePickStateEnabled() + || smokeMaterialShowcaseStateEnabled() + || smokeShopOpeningStateEnabled() + || smokeAbilityShowcaseKind() != null; + } + + private AbilityKind smokeAbilityShowcaseKind() { + String state = System.getProperty(SMOKE_STATE_PROPERTY, ""); + if (state == null || !state.startsWith(SMOKE_ABILITY_STATE_PREFIX)) { + return null; + } + String abilityId = state.substring(SMOKE_ABILITY_STATE_PREFIX.length()); + return AbilityKind.fromPersistedId(abilityId).orElse(null); + } + + private void rebuildSmokeVisualFixture() { + if (!smokeDeterministicReviewStateEnabled()) { + smokeVisualCircles.clear(); + smokeVisualBonusBalls.clear(); + smokeVisualBackgroundParticles.clear(); + smokeVisualBulletParticles.clear(); + smokeVisualFloatingTexts.clear(); + return; + } + + smokeVisualCircles.clear(); + smokeVisualBonusBalls.clear(); + smokeVisualBackgroundParticles.clear(); + smokeVisualBulletParticles.clear(); + smokeVisualFloatingTexts.clear(); + + float width = Gdx.graphics.getWidth(); + float height = Gdx.graphics.getHeight(); + float sx = width / 405f; + float sy = height / 682f; + + addSmokeCircle(new FastCircleData(), 85.5f, 181.5f, 5.5f, sx, sy, height); + addSmokeCircle(new BasicCircleData(), 151f, 252f, 6f, sx, sy, height); + addSmokeCircle(new BasicCircleData(), 224f, 221f, 6f, sx, sy, height); + addSmokeCircle(new StrongCircleData(), 115f, 294f, 8f, sx, sy, height); + addSmokeCircle(new HealerCircleData(), 307.5f, 539.5f, 6.5f, sx, sy, height); + addSmokeCircle(new FastCircleData(), 54.5f, 357.5f, 5.5f, sx, sy, height); + addSmokeCircle(new FastCircleData(), 98.5f, 390.5f, 5.5f, sx, sy, height); + addSmokeCircle(new BasicCircleData(), 345f, 264f, 6f, sx, sy, height); + addSmokeCircle(new HealerCircleData(), 282.5f, 340.5f, 6.5f, sx, sy, height); + addSmokeCircle(new BasicCircleData(), 190f, 176f, 6f, sx, sy, height); + + addSmokeRewardText(82f * sx, height - (158f + SMOKE_REWARD_TEXT_HEIGHT) * sy); + addSmokeRewardText(width - 82f * sx, 158f * sy); + if (smokeWaveClearStateEnabled()) { + addSmokeWaveClearText( + width * 0.5f, height - 4f, "Волна 12 очищена! +125", NEON_GREEN, 1.5f); + addSmokeWaveClearText(width * 0.5f, 4f, "+4 монет", NEON_YELLOW, 1.2f); + } + if (smokeMaterialShowcaseStateEnabled()) { + addSmokeBonusBall(332f, 452f, 15f, sx, sy, height, BonusBallData.BonusType.DAMAGE); + } + } + + private void addSmokeRewardText(float x, float y) { + FloatingText reward = new FloatingText(); + reward.configure(x, y, "+1", ScreenPalette.GREEN.create(), 3f, 0.55f, 0f); + smokeVisualFloatingTexts.add(reward); + } + + private void addSmokeWaveClearText( + float x, float y, String text, Color color, float initialScale) { + FloatingText floatingText = new FloatingText(); + floatingText.configure(x, y, text, color, 4f, initialScale, 0f); + smokeVisualFloatingTexts.add(floatingText); + } + + private void addSmokeBonusBall( + float referenceCenterX, + float referenceCenterYFromTop, + float referenceRadius, + float sx, + float sy, + float height, + BonusBallData.BonusType type) { + float scale = Math.min(sx, sy); + BonusBallData bonusBall = new BonusBallData(); + bonusBall.configure( + referenceCenterX * sx, + height - referenceCenterYFromTop * sy, + referenceRadius * scale, + 0f, + 0f, + type); + smokeVisualBonusBalls.add(bonusBall); + } + + private void addSmokeCircle( + BaseCircleData circle, + float referenceCenterX, + float referenceCenterYFromTop, + float referenceRadius, + float sx, + float sy, + float height) { + float scale = Math.min(sx, sy); + circle.configure( + referenceCenterX * sx, + height - referenceCenterYFromTop * sy, + referenceRadius * scale, + 0f, + 0f, + circle instanceof StrongCircleData ? 3 : 1, + 1); + smokeVisualCircles.add(circle); + } + + private void logSelectedAbilities(String countPrefix, String abilityPrefix) { + if (DebugLog.DEBUG) { + DebugLog.log("GameScreen", countPrefix + selectedAbilities.size); + for (AbilityKind ability : selectedAbilities) { + DebugLog.log("GameScreen", abilityPrefix + ability.persistedId()); + } + } + } + + private void createRunSession() { + runSession = + runSessionFactory.create( + new RunSessionConfig( + square, + circles, + bonusBalls, + bulletSystem, + playerAbilities, + selectedAbilities, + spawnedBosses, + gameClock, + bossEffectsHost, + createAbilityHost(), + createUpgradeHost())); + runSession.setRenderScale(gameScale, adaptedCircleRadius); + RunRngStreams rngStreams = runSession.rngStreams(); + if (rngStreams != null) { + playerShootingSystem = new PlayerShootingSystem(rngStreams.combat()); + enemyDeathHandler = createEnemyDeathHandler(rngStreams.waveComposition()); + } + spawnController = runSession.spawnController(); + bossSpawnController = runSession.bossSpawnController(); + bonusBallSystem = runSession.bonusBallSystem(); + abilitySystem = runSession.abilitySystem(); + upgradeSystem = runSession.upgradeSystem(); + waveRunOrchestrator = new WaveRunOrchestrator(waveController, createWaveRunEvents()); + runFrameOrchestrator = new RunFrameOrchestrator(createRunFrameConfig()); + } + + private RunFrameOrchestrator.Config createRunFrameConfig() { + return new RunFrameOrchestrator.Config( + circles, + square, + waveController, + waveRunOrchestrator, + bonusBallSystem, + spawnController, + abilitySystem, + bulletSystem, + bulletEffects, + specialCircleSystem, + specialCircleHost, + createRunFrameEvents()); + } + + private RunFrameEvents createRunFrameEvents() { + return new GameScreenRunFrameEvents(new GameScreenRunFrameHostAdapter(this)); + } + + private WaveRunEvents createWaveRunEvents() { + return new GameScreenWaveRunEvents(new GameScreenWaveRunHostAdapter(this)); + } + + @Override + public void applyWaveTuning(WaveTuning tuning) { + spawnController.setWaveTuning( + tuning.currentWave(), + tuning.strongCircleChance(), + tuning.fastCircleChance(), + tuning.splitterCircleChance(), + tuning.basicCircleHealth(), + tuning.strongCircleHealth(), + tuning.circleDamage(), + tuning.enemySpeedMultiplier()); + bossSpawnController.setCurrentWave(tuning.currentWave()); + } + + @Override + public void spawnWaveCircle() { + spawnController.spawnWaveCircle(); + } + + @Override + public void spawnRandomBoss() { + bossSpawnController.spawnRandomBoss(); + } + + @Override + public void handleWaveCleared(WaveController.WaveClearReward reward) { + waveClearRewardHandler.handle(reward); + } + + @Override + public void triggerUpgradePick() { + upgradeSystem.triggerPick(); + upgradePickOverlay.rebuild(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), uiScale); + upgradePickOverlay.startReveal(upgradeSystem.activeOfferViews()); + } + + @Override + public void endWave() { + bonusBallSystem.endWave(); + } + + @Override + public void addUpgradeFloatingText(float x, float y, String text, Color color) { + spawnFloatingText(x, y, text, color, 2.5f, 1.3f, 20f); + } + + @Override + public float playerCenterX() { + return square.x + square.width / 2f; + } + + @Override + public float playerCenterY() { + return square.y + square.height / 2f; + } + + @Override + public float viewportWidth() { + return Gdx.graphics.getWidth(); + } + + @Override + public float viewportHeight() { + return Gdx.graphics.getHeight(); + } + + private RunSnapshotCoordinator.Host createRunSnapshotHost() { + return new GameScreenRunSnapshotHost( + new GameScreenRunSnapshotHostAdapter(this), + gameState, + selectedAbilities, + spawnedBosses, + playerCombatState, + bulletSystem, + shopUpgradeSystem, + waveController); + } + + @Override + public RunRngStreams rngStreams() { + return runSession == null ? null : runSession.rngStreams(); + } + + private AbilityHost createAbilityHost() { + return new GameScreenAbilityHost( + createAbilityHostBridge(), bulletSystem, playerShootingSystem, gameplayEventSink); + } + + private GameScreenAbilityHost.Host createAbilityHostBridge() { + return new AbilityHostBridge(); + } + + private final class AbilityHostBridge implements GameScreenAbilityHost.Host { + @Override + public void addFloatingText(float x, float y, String text, Color color) { + GameScreen.this.spawnFloatingText(x, y, text, color); + } + + @Override + public void createExplosion(float x, float y, Color color) { + particleEffects.createExplosion(x, y, color); + } + + @Override + public void triggerKillShake() { + GameScreen.this.triggerKillShake(); + } + + @Override + public void triggerCritHitstop() { + GameScreen.this.triggerCritHitstop(); + } + + @Override + public float activeBonusDamageMultiplier() { + return getActiveBonusDamageMultiplier(); + } + + @Override + public float abilityScalingFactor() { + return getAbilityScalingFactor(); + } + + @Override + public float gameScale() { + return gameScale; + } + + @Override + public long abilityCooldownReductionMs() { + return getAbilityCooldownReduction(); + } + + @Override + public void addMoney(int amount) { + playerCombatState.addMoney(amount); + } + + @Override + public void killEnemy(BaseCircleData enemy) { + enemyDeathHandler.handleEnemyKilled( + enemy, gameScale, waveController.getCurrentEnemySpeedMultiplier()); + } + + @Override + public float activeBonusSpeedMultiplier() { + return getActiveBonusSpeedMultiplier(); + } + + @Override + public float adaptedBulletRadius() { + return adaptedBulletRadius; + } + } + + private UpgradeHost createUpgradeHost() { + return new GameScreenUpgradeHost( + new GameScreenUpgradeHostAdapter(this), bulletSystem, playerCombatState); + } + + private void calculateScaleFactor() { + float screenWidth = viewportSize.getWidth(); + float screenHeight = viewportSize.getHeight(); + GameScreenScaleMetrics metrics = + GameScreenScaleMetrics.calculate( + screenWidth, + screenHeight, + SQUARE_SIZE, + SpawnController.CIRCLE_RADIUS, + BULLET_RADIUS); + + uiScale = metrics.uiScale(); + gameScale = metrics.gameScale(); + adaptedSquareSize = metrics.adaptedSquareSize(); + adaptedCircleRadius = metrics.adaptedCircleRadius(); + adaptedBulletRadius = metrics.adaptedBulletRadius(); + adaptedFontSize = metrics.adaptedFontSize(); + + logScaleMetrics(screenWidth, screenHeight); + + if (spawnController != null) { + spawnController.setRenderScale(gameScale, adaptedCircleRadius); + } + if (bossSpawnController != null) { + bossSpawnController.setRenderScale(gameScale); + } + } + + private void logScaleMetrics(float screenWidth, float screenHeight) { + if (DebugLog.DEBUG) { + DebugLog.log( + "Scaling", + "UI Scale: " + + uiScale + + ", Game Scale: " + + gameScale + + ", Font Size: " + + adaptedFontSize + + ", Screen: " + + screenWidth + + "x" + + screenHeight); + } + } + + private void createGameMenuButton() { + int abilityCount = selectedAbilities == null ? 0 : selectedAbilities.size; + GameScreenLayout layout = + GameScreenLayout.calculate( + viewportSize.getWidth(), + viewportSize.getHeight(), + uiScale, + 0f, + GameScreenLayout.Panel.ATTACK, + abilityCount, + safeAreaInsetsProvider.current()); + setRect(gameMenuButton, layout.menuButton()); + } + + private void createRestartButton() { + GameScreenLayout.GameOverButtons buttons = + GameScreenLayout.gameOverButtons( + Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), uiScale); + setRect(restartButton, buttons.restartButton()); + setRect(menuButton, buttons.menuButton()); + } + + private void renderPauseMenu() { + if (pauseOverlayRenderer == null) { + rebuildPauseOverlayRenderer(); + } + pauseOverlayRenderer.render( + renderModelAssembler.pauseOverlayModel( + resumeButton, + exitButton, + Gdx.graphics.getWidth(), + Gdx.graphics.getHeight(), + uiScale, + NEON_GREEN, + NEON_RED, + NEON_CYAN, + NEON_PINK, + inputController.isPointerOver(resumeButton), + inputController.isPointerPressed(resumeButton), + inputController.isPointerOver(exitButton), + inputController.isPointerPressed(exitButton))); + } + + private void rebuildPauseOverlayRenderer() { + disposePauseOverlayRenderer(); + pauseOverlayRenderer = + new GameScreenPauseOverlayRenderer( + batch, + shapeRenderer, + fontAssets.font(), + pauseScreenshotOwner, + scratchColor); + pauseOverlayRenderer.initShader(); + } + + private void disposePauseOverlayRenderer() { + if (pauseOverlayRenderer != null) { + pauseOverlayRenderer.dispose(); + pauseOverlayRenderer = null; + } + } + + private void restartGame() { + startRun(RunStartMode.RESTART); + gameState.resetGameState(); + } + + private void startRun(RunStartMode startMode) { + if (startMode != RunStartMode.RESTART) { + return; + } + runSession.resetForNewRun(); + gameClock.resetToWallNow(); + long now = gameClock.nowMs(); + resetCombatStateForNewRun(now); + waveController.resetForNewRun(now); + gameOver = false; + + shopController.reset(); + } + + @Override + public void shootAtNearestCircle(long nowMs) { + boolean shot = + playerShootingSystem.shootAtNearestCircle( + circles, + square, + bulletSystem, + gameplayEventSink, + new PlayerShootingSystem.ShotConfig( + SHOOTING_RANGE, + gameScale, + adaptedBulletRadius, + getActiveBonusSpeedMultiplier(), + getActiveBonusDamageMultiplier(), + getEffectiveCritChance(), + getEffectiveCritMultiplier())); + if (shot) { + lastShotTime = nowMs; + } + } + + @Override + public void render(float delta) { + + + impactEffects.resetProjection(shapeRenderer, batch); + + if (renderPausedFrame()) return; + + delta = prepareActiveFrame(delta); + if (renderTerminalFrame()) return; + if (updateRunFrame(delta)) return; + + renderLiveFrame(); + capturePauseRequestIfNeeded(); + } + + private boolean renderPausedFrame() { + if (isPaused) { + renderPauseMenu(); + return true; + } + return false; + } + + private float prepareActiveFrame(float delta) { + float adjustedDelta = impactEffects.applyFrameEffects(delta, shapeRenderer, batch); + updateFrameVisualState(adjustedDelta); + renderBackgroundAndMenuButton(); + return adjustedDelta; + } + + private boolean renderTerminalFrame() { + if (gameOver) { + renderGameOver(); + return true; + } + return false; + } + + private boolean updateRunFrame(float delta) { + return runFrameOrchestrator.update( + delta, + gameClock.nowMs(), + Gdx.graphics.getWidth(), + Gdx.graphics.getHeight(), + gameScale, + upgradeSystem.isPickActive()); + } + + private void renderLiveFrame() { + populateLiveRenderModels(); + gameObjectRenderer.renderGameObjects(); + vfxRenderer.renderVfx(); + hudRenderer.renderHud(); + if (upgradeSystem.isPickActive()) { + upgradePickOverlay.render( + shapeRenderer, + batch, + fontAssets.upgradePickFont(), + upgradeSystem.activeOfferViews(), + upgradeSystem.rerollsRemaining(), + upgradeSystem.rerollCost(shopUpgradeSystem.cardRerollDiscount()), + uiScale, + UPGRADE_PICK_TITLE); + } + } + + private void populateLiveRenderModels() { + long now = gameClock.nowMs(); + boolean reviewState = smokeDeterministicReviewStateEnabled(); + Array renderCircles = reviewState ? smokeVisualCircles : circles; + Array renderBonusBalls = reviewState ? smokeVisualBonusBalls : bonusBalls; + Array renderBulletParticles = + reviewState ? smokeVisualBulletParticles : particleEffects.bulletParticles(); + Array renderFloatingTexts = + reviewState ? smokeVisualFloatingTexts : floatingTextSystem.items(); + boolean renderWaveActive = reviewState || waveController.isWaveActive(); + long renderEnemiesPerWave = reviewState ? 9L : waveController.getEnemiesPerWave(); + long renderEnemiesSpawned = reviewState ? 3L : waveController.getEnemiesSpawnedThisWave(); + int renderCurrentWave = reviewState ? 3 : waveController.getCurrentWave(); + int renderMoney = reviewState ? 8 : playerCombatState.getMoney(); + int renderRunCurrencyEarned = reviewState ? 15 : playerCombatState.getRunCurrencyEarned(); + int renderDamage = + reviewState + ? 12_400 + : bulletSystem.getEffectiveDamage(getActiveBonusDamageMultiplier()); + float renderSpeed = + reviewState + ? 450f + : bulletSystem.getEffectiveSpeed(getActiveBonusSpeedMultiplier()); + int renderHealthRegen = reviewState ? 1_200 : playerCombatState.getHealthRegenRate(); + float renderCooldown = reviewState ? 800f : getEffectiveShotCooldown(); + float renderCritChance = reviewState ? 0.05f : getEffectiveCritChance(); + float renderTime = reviewState ? 0f : time; + renderModelAssembler.populateLiveModels( + shapeRenderer, + batch, + fontAssets.font(), + fontAssets.floatingTextFont(), + fontAssets.hudFonts(), + materialAssets, + square, + renderCircles, + renderBonusBalls, + bulletSystem.getBullets(), + renderBulletParticles, + renderFloatingTexts, + abilitySystem, + now, + renderTime, + pulseSpeed, + uiScale, + gameScale, + adaptedSquareSize, + SHOOTING_RANGE, + reviewState, + waveController.getCurrentStrongCircleHealth(), + waveController.getCurrentBasicCircleHealth(), + viewportSize.getWidth(), + viewportSize.getHeight(), + renderWaveActive, + renderEnemiesPerWave, + renderEnemiesSpawned, + renderCurrentWave, + waveController.getWaveStartTime(), + waveController.getTimeBetweenWaves(), + playerCombatState.getHealth(), + playerCombatState.getMaxHealth(), + renderMoney, + renderRunCurrencyEarned, + renderDamage, + renderSpeed, + renderHealthRegen, + renderCooldown, + renderCritChance, + getEffectiveCritMultiplier(), + WAVE_INDICATOR_HEIGHT, + WAVE_INDICATOR_PADDING, + SHADOW_WEAVER_COLOR, + GLACIAL_WARDEN_COLOR, + BASIC_CIRCLE_COLOR, + FAST_CIRCLE_COLOR, + SPLITTER_CIRCLE_COLOR, + SPAWNER_CIRCLE_COLOR, + NEON_RED, + NEON_BLUE, + NEON_CYAN, + NEON_GREEN, + NEON_YELLOW, + NEON_PINK, + NEON_PURPLE, + PRICE_TEXT_COLOR, + BOSS_PROJECTILE_COLOR, + scratchColor, + scratchColor3, + scratchColor4, + scratchColor5); + shopController.setDeterministicReviewPricing(reviewState); + ShopUpgradePreviewValues shopPreviewValues = + ShopUpgradePreviewValues.fromEffectiveStats( + shopUpgradeSystem, + renderDamage, + renderSpeed, + renderCooldown, + renderCritChance, + getEffectiveCritMultiplier(), + playerCombatState.getMaxHealth(), + renderHealthRegen, + reviewState ? 1f : getActiveBonusDamageMultiplier(), + reviewState ? 1f : getActiveBonusSpeedMultiplier(), + reviewState + ? 1f + : upgradeSystem.getRunCooldownMult() + * bonusBallSystem.getCooldownMultiplier()); + shopController.fillHudPanelFields(hudModel, shopPreviewValues, abilitySystem, now); + hudModel.setHudHelpVisible(hudHelpVisible); + } + + private void capturePauseRequestIfNeeded() { + if (shouldPause) { + pauseScreenshotOwner.capture( + 0, 0, Gdx.graphics.getBackBufferWidth(), Gdx.graphics.getBackBufferHeight()); + gameClock.pause(); + isPaused = true; + shouldPause = false; + } + } + + private void updateFrameVisualState(float delta) { + time += delta; + if (!smokeShopOpeningStateEnabled()) { + shopController.updateTransition(delta); + } + upgradePickOverlay.update(delta); + particleEffects.update(delta, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); + particleEffects.emitBulletTrails( + delta, bulletSystem.getBullets(), NEON_GREEN, NEON_YELLOW, BOSS_PROJECTILE_COLOR); + floatingTextSystem.update(delta); + } + + private void renderBackgroundAndMenuButton() { + Gdx.gl.glClearColor( + BACKGROUND_COLOR.r, BACKGROUND_COLOR.g, BACKGROUND_COLOR.b, BACKGROUND_COLOR.a); + Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); + + float backgroundTime = smokeDeterministicReviewStateEnabled() ? 0f : time; + backgroundRenderer.render( + shapeRenderer, + smokeDeterministicReviewStateEnabled() + ? smokeVisualBackgroundParticles + : particleEffects.backgroundParticles(), + Gdx.graphics.getWidth(), + Gdx.graphics.getHeight(), + backgroundTime, + uiScale, + NEON_BLUE, + scratchColor); + float menuGlow = 0.3f + 0.3f * (float) Math.sin(time * pulseSpeed); + menuButtonRenderer.render( + shapeRenderer, + gameMenuButton, + NEON_RED, + NEON_CYAN, + NEON_PINK, + Color.WHITE, + scratchColor, + uiScale, + menuGlow, + inputController.isPointerOver(gameMenuButton), + inputController.isPointerPressed(gameMenuButton)); + } + + @Override + public void resize(int width, int height) { + float previousPlayerCenterX = playerCenterX(); + float previousPlayerCenterY = playerCenterY(); + + calculateScaleFactor(); + + updateProjectionForResize(width, height); + resizePlayerSquare(width, height); + createGameMenuButton(); + resizeSpawnedCircles(previousPlayerCenterX, previousPlayerCenterY); + rebuildSmokeVisualFixture(); + + bulletSystem.updateRadius(adaptedBulletRadius); + + rebuildShopController(); + + + + if (upgradeSystem != null && upgradeSystem.isPickActive()) { + upgradePickOverlay.rebuild(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), uiScale); + } + + inputController.install(); + + fontAssets.rebuild(adaptedFontSize); + materialAssets.rebuild(); + rebuildPauseOverlayRenderer(); + } + + private void updateProjectionForResize(int width, int height) { + if (shapeRenderer != null) { + shapeRenderer.getProjectionMatrix().setToOrtho2D(0, 0, width, height); + } + if (batch != null) { + batch.getProjectionMatrix().setToOrtho2D(0, 0, width, height); + } + impactEffects.captureBaseProjection(shapeRenderer, batch); + } + + private void resizePlayerSquare(int width, int height) { + square.width = adaptedSquareSize; + square.height = adaptedSquareSize; + square.x = width / 2f - adaptedSquareSize / 2f; + square.y = height * PLAYER_CENTER_Y_RATIO - adaptedSquareSize / 2f; + } + + private void resizeSpawnedCircles(float previousPlayerCenterX, float previousPlayerCenterY) { + runSession.resizeActiveCircles( + playerCenterX() - previousPlayerCenterX, + playerCenterY() - previousPlayerCenterY, + adaptedCircleRadius); + } + + @Override + public void pause() { + gameClock.pause(); + } + + @Override + public void resume() { + if (!isPaused) { + gameClock.resume(); + } + } + + @Override + public void hide() { + + inputController.uninstall(); + gameState.setSpawnedBosses(spawnedBosses); + } + + @Override + public void dispose() { + if (batch != null) { + batch.dispose(); + batch = null; + } + if (shapeRenderer != null) { + shapeRenderer.dispose(); + shapeRenderer = null; + } + fontAssets.dispose(); + materialAssets.dispose(); + soundAssets.dispose(); + if (runSession != null) { + runSession.dispose(); + runSession = null; + } + disposePauseOverlayRenderer(); + pauseScreenshotOwner.disposeAndClear(); + } + + @Override + public void gameOver() { + gameOver = true; + waveController.setWaveActive(false); + createRestartButton(); + + int wave = waveController.getCurrentWave(); + int currencyEarned = playerCombatState.awardGameOverCurrencyOnce(wave); + gameplayEventSink.emit(GameplayEvents.gameOver(wave, currencyEarned)); + } + + private void renderGameOver() { + gameOverOverlayRenderer.render( + renderModelAssembler.gameOverOverlayModel( + shapeRenderer, + batch, + fontAssets.font(), + fontAssets.gameOverTitleFont(), + restartButton, + menuButton, + uiScale, + time, + pulseSpeed, + Gdx.graphics.getWidth(), + Gdx.graphics.getHeight(), + waveController.getCurrentWave(), + playerCombatState.getMoney(), + inputController.isPointerOver(restartButton), + inputController.isPointerPressed(restartButton), + inputController.isPointerOver(menuButton), + inputController.isPointerPressed(menuButton), + NEON_RED, + NEON_BLUE, + NEON_CYAN, + NEON_PINK, + scratchColor, + scratchColor2)); + } + + private float getAbilityScalingFactor() { + return PlayerRunCombatCalculator.abilityScalingFactor(waveController.getCurrentWave()); + } + + private void returnToMainMenu() { + Gdx.app.postRunnable( + () -> { + if (navigator != null) { + navigator.showMainMenu(); + } + }); + } + + private void saveGameSnapshot() { + if (runSnapshotCoordinator == null) { + runSnapshotCoordinator = new RunSnapshotCoordinator(createRunSnapshotHost()); + } + runSnapshotCoordinator.saveGameSnapshot(); + } + + private void resetCombatStateForNewRun(long now) { + PlayerRunCombatCalculator.resetCombatStateForNewRun(playerCombatState, talentTree, now); + } + + private float getEffectiveShotCooldown() { + return PlayerRunCombatCalculator.effectiveShotCooldown( + playerCombatState, + upgradeSystem, + bonusBallSystem, + BossPlayerCombatModifiers.attackSpeedMultiplier(circles)); + } + + private float getActiveBonusSpeedMultiplier() { + return PlayerRunCombatCalculator.applyProjectileSpeedMultiplier( + bonusBallSystem.getSpeedMultiplier(), + BossPlayerCombatModifiers.projectileSpeedMultiplier(circles)); + } + + private float getActiveBonusDamageMultiplier() { + return bonusBallSystem.getDamageMultiplier(); + } + + private float getEffectiveCritChance() { + return PlayerRunCombatCalculator.effectiveCritChance( + playerCombatState, shopUpgradeSystem, upgradeSystem, talentTree); + } + + private float getEffectiveCritMultiplier() { + return PlayerRunCombatCalculator.effectiveCritMultiplier( + playerCombatState, shopUpgradeSystem); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/MainScreen.java b/core/src/main/java/ru/project/tower/screens/MainScreen.java new file mode 100644 index 0000000..eba6083 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/MainScreen.java @@ -0,0 +1,454 @@ +package ru.project.tower.screens; + +import com.badlogic.gdx.Game; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Screen; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.GL20; +import com.badlogic.gdx.graphics.Pixmap; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.GlyphLayout; +import com.badlogic.gdx.graphics.g2d.NinePatch; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.scenes.scene2d.InputEvent; +import com.badlogic.gdx.scenes.scene2d.Stage; +import com.badlogic.gdx.scenes.scene2d.ui.Skin; +import com.badlogic.gdx.scenes.scene2d.ui.Table; +import com.badlogic.gdx.scenes.scene2d.ui.TextButton; +import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; +import com.badlogic.gdx.scenes.scene2d.utils.NinePatchDrawable; +import com.badlogic.gdx.utils.viewport.ScreenViewport; +import ru.project.tower.DebugLog; +import ru.project.tower.GameContext; +import ru.project.tower.navigation.ScreenNavigation; +import ru.project.tower.navigation.ScreenNavigator; +import ru.project.tower.screens.common.NeonMenuParticleSystem; +import ru.project.tower.screens.main.MainScreenScaleMetrics; +import ru.project.tower.support.RobotoFontFactory; +import ru.project.tower.support.ScreenAssets; +import ru.project.tower.support.ScreenPalette; +import ru.project.tower.support.UiAtlasBuilder; + +public class MainScreen implements Screen { + private Stage stage; + private Skin skin; + private TextureAtlas uiAtlas; + private ScreenAssets screenAssets; + private SpriteBatch batch; + private final ScreenNavigator navigator; + private BitmapFont font; + private BitmapFont titleFont; + private ShapeRenderer shapeRenderer; + + private final Color neonBlue = ScreenPalette.BLUE.create(); + private final Color neonPink = ScreenPalette.PINK.create(); + private final Color neonCyan = ScreenPalette.CYAN.create(); + private final Color neonPurple = ScreenPalette.NEON_LIGHT_PURPLE.create(); + private final Color backgroundColor = ScreenPalette.SCREEN.create(); + private final Color fontShadowColor = ScreenPalette.FONT_SHADOW.create(); + private final Color scratchColor = new Color(); + private final GlyphLayout titleLayout = new GlyphLayout(); + + private float uiScale; + private int adaptedFontSize; + + private final NeonMenuParticleSystem particles = new NeonMenuParticleSystem(); + private float time = 0; + private float pulseSpeed = 2.0f; + private static final String TITLE_TOP = "Square"; + private static final String TITLE_BOTTOM = "Defense"; + private static final float TITLE_FONT_SCALE = 1.32f; + private static final float TITLE_LINE_GAP_SCALE = 0.92f; + + public MainScreen(Game game, GameContext ctx) { + this(ScreenNavigation.forGame(game, ctx)); + } + + public MainScreen(ScreenNavigator navigator) { + this.navigator = navigator; + } + + @Override + public void show() { + dispose(); + initializeRenderResources(); + calculateUIScale(); + initializeStage(); + rebuildGeneratedMenuResources(); + createMenuTable(); + initializeParticles(); + } + + private void rebuildGeneratedMenuResources() { + disposeGeneratedMenuResources(); + createFont(); + screenAssets = new ScreenAssets(); + skin = screenAssets.skin(); + screenAssets.font("default", font); + createButtonStyle(); + } + + private void initializeRenderResources() { + batch = new SpriteBatch(); + shapeRenderer = new ShapeRenderer(); + } + + private void initializeStage() { + stage = new Stage(new ScreenViewport()); + Gdx.input.setInputProcessor(stage); + } + + private void createFont() { + font = + RobotoFontFactory.generate( + RobotoFontFactory.spec( + adaptedFontSize, + 2f, + neonPurple, + Color.WHITE, + 1, + 1, + fontShadowColor)); + titleFont = RobotoFontFactory.generate(createTitleFontSpec()); + } + + private RobotoFontFactory.FontSpec createTitleFontSpec() { + int titleSize = Math.round(adaptedFontSize * TITLE_FONT_SCALE * uiScale); + int titleShadowOffset = Math.max(1, Math.round(TITLE_FONT_SCALE * uiScale)); + return RobotoFontFactory.spec( + titleSize, + 2f * TITLE_FONT_SCALE * uiScale, + neonPurple, + Color.WHITE, + titleShadowOffset, + titleShadowOffset, + fontShadowColor); + } + + private TextButton.TextButtonStyle createButtonStyle() { + TextButton.TextButtonStyle buttonStyle = new TextButton.TextButtonStyle(); + buttonStyle.font = font; + buttonStyle.fontColor = Color.WHITE; + buttonStyle.overFontColor = neonCyan; + buttonStyle.downFontColor = neonPink; + + try (UiAtlasBuilder atlasBuilder = new UiAtlasBuilder(128, 128)) { + atlasBuilder.add("btn_up", buildBorderPixmap(neonCyan, 2)); + atlasBuilder.add("btn_over", buildBorderPixmap(neonCyan, 3)); + atlasBuilder.add("btn_down", buildBorderPixmap(neonPink, 3)); + uiAtlas = screenAssets.setAtlas(atlasBuilder.build()); + } + + buttonStyle.up = + new NinePatchDrawable(new NinePatch(uiAtlas.findRegion("btn_up"), 3, 3, 3, 3)); + buttonStyle.over = + new NinePatchDrawable(new NinePatch(uiAtlas.findRegion("btn_over"), 3, 3, 3, 3)); + buttonStyle.down = + new NinePatchDrawable(new NinePatch(uiAtlas.findRegion("btn_down"), 3, 3, 3, 3)); + + skin.add("default", buttonStyle); + return buttonStyle; + } + + private void createMenuTable() { + Table table = createMainMenuTable(); + MenuButtonLayout layout = calculateMenuButtonLayout(); + + TextButton gameButton = addMenuButton(table, "ИГРАТЬ", layout); + TextButton talentButton = addMenuButton(table, "ТАЛАНТЫ", layout); + TextButton abilityShopButton = addMenuButton(table, "МАГАЗИН", layout); + + installMenuButtonListeners(gameButton, talentButton, abilityShopButton); + } + + private Table createMainMenuTable() { + Table table = new Table(); + table.setFillParent(true); + table.padTop(Gdx.graphics.getHeight() * 0.22f); + stage.addActor(table); + return table; + } + + private MenuButtonLayout calculateMenuButtonLayout() { + float minButtonWidth = 180 * uiScale; + float maxButtonWidth = Gdx.graphics.getWidth() * 0.7f; + float buttonWidth = Math.min(maxButtonWidth, Math.max(minButtonWidth, 300 * uiScale)); + + float minButtonHeight = 50 * uiScale; + float maxButtonHeight = Gdx.graphics.getHeight() * 0.12f; + float buttonHeight = Math.min(maxButtonHeight, Math.max(minButtonHeight, 60 * uiScale)); + + return new MenuButtonLayout(buttonWidth, buttonHeight, Math.max(10, 20 * uiScale)); + } + + private TextButton addMenuButton(Table table, String text, MenuButtonLayout layout) { + TextButton button = new TextButton(text, skin); + table.add(button).size(layout.buttonWidth, layout.buttonHeight).pad(layout.buttonPadding); + table.row(); + return button; + } + + private void installMenuButtonListeners( + TextButton gameButton, TextButton talentButton, TextButton abilityShopButton) { + gameButton.addListener( + new ClickListener() { + @Override + public void clicked(InputEvent event, float x, float y) { + navigator.showAbilitySelection(); + } + }); + + talentButton.addListener( + new ClickListener() { + @Override + public void clicked(InputEvent event, float x, float y) { + handleTalentClick(); + } + }); + + abilityShopButton.addListener( + new ClickListener() { + @Override + public void clicked(InputEvent event, float x, float y) { + handleAbilityShopClick(); + } + }); + } + + private void handleTalentClick() { + try { + DebugLog.log("MainScreen", "Attempting to open TalentTreeScreen..."); + navigator.showTalentTree(); + } catch (RuntimeException e) { + Gdx.app.error("MainScreen", "Error opening talents", e); + } + } + + private void handleAbilityShopClick() { + try { + navigator.showAbilityShop(); + } catch (Exception e) { + Gdx.app.error("MainScreen", "Error opening ability shop", e); + } + } + + private static final class MenuButtonLayout { + private final float buttonWidth; + private final float buttonHeight; + private final float buttonPadding; + + private MenuButtonLayout(float buttonWidth, float buttonHeight, float buttonPadding) { + this.buttonWidth = buttonWidth; + this.buttonHeight = buttonHeight; + this.buttonPadding = buttonPadding; + } + } + + private void initializeParticles() { + particles.init( + Gdx.graphics.getWidth(), + Gdx.graphics.getHeight(), + uiScale, + neonBlue, + neonPink, + neonCyan, + neonPurple); + } + + private void renderNeonTitleText() { + time += Gdx.graphics.getDeltaTime(); + + float glow = 0.5f + 0.5f * (float) Math.sin(time * pulseSpeed); + float scale = 1.0f + 0.1f * glow; + + batch.begin(); + + titleFont.getData().setScale(scale); + + float titleY = Gdx.graphics.getHeight() * 0.86f; + float lineGap = titleFont.getLineHeight() * TITLE_LINE_GAP_SCALE * scale; + + drawCenteredTitleLine(TITLE_TOP, titleY, glow); + drawCenteredTitleLine(TITLE_BOTTOM, titleY - lineGap, glow); + + titleFont.getData().setScale(1.0f); + + batch.end(); + } + + private void drawCenteredTitleLine(String text, float y, float glow) { + titleLayout.setText(titleFont, text); + float x = (Gdx.graphics.getWidth() - titleLayout.width) / 2f; + drawTitleLine(text, x, y, glow); + } + + private void drawTitleLine(String text, float x, float y, float glow) { + drawGlowLayer(batch, text, x, y, ScreenPalette.PINK, 0.15f + 0.18f * glow, 3f); + drawGlowLayer(batch, text, x, y, ScreenPalette.BLUE, 0.26f + 0.22f * glow, 2f); + drawGlowLayer(batch, text, x, y, ScreenPalette.CYAN, 0.45f + 0.26f * glow, 1f); + + titleFont.setColor(Color.WHITE); + titleFont.draw(batch, text, x, y); + } + + private void drawGlowLayer( + SpriteBatch batch, + String text, + float x, + float y, + ScreenPalette palette, + float alpha, + float offset) { + titleFont.setColor(palette.set(scratchColor, alpha)); + titleFont.draw(batch, text, x + offset, y + offset); + titleFont.draw(batch, text, x - offset, y - offset); + } + + private void calculateUIScale() { + float screenWidth = Gdx.graphics.getWidth(); + float screenHeight = Gdx.graphics.getHeight(); + + MainScreenScaleMetrics metrics = + MainScreenScaleMetrics.calculate(screenWidth, screenHeight); + uiScale = metrics.uiScale(); + adaptedFontSize = metrics.adaptedFontSize(); + + if (DebugLog.DEBUG) { + logScaleMetrics(screenWidth, screenHeight, metrics); + } + } + + private void logScaleMetrics( + float screenWidth, float screenHeight, MainScreenScaleMetrics metrics) { + DebugLog.log( + "MainScreen", + "UI Scale: " + + uiScale + + ", Font Size: " + + adaptedFontSize + + ", Portrait: " + + metrics.isPortrait() + + ", Screen: " + + screenWidth + + "x" + + screenHeight); + } + + private void renderNeonGrid() { + + shapeRenderer.begin(ShapeRenderer.ShapeType.Line); + + float alpha = 0.2f + 0.1f * (float) Math.sin(time * 0.5f); + shapeRenderer.setColor(ScreenPalette.BLUE.set(scratchColor, alpha)); + + float spacing = 50f * uiScale; + float offset = (time * 10f) % spacing; + + for (float y = offset; y < Gdx.graphics.getHeight(); y += spacing) { + shapeRenderer.line(0, y, Gdx.graphics.getWidth(), y); + } + + for (float x = offset; x < Gdx.graphics.getWidth(); x += spacing) { + shapeRenderer.line(x, 0, x, Gdx.graphics.getHeight()); + } + + shapeRenderer.end(); + } + + @Override + public void render(float delta) { + + time += delta; + particles.update( + delta, + Gdx.graphics.getWidth(), + Gdx.graphics.getHeight(), + uiScale, + neonBlue, + neonPink, + neonCyan, + neonPurple); + + Gdx.gl.glClearColor( + backgroundColor.r, backgroundColor.g, backgroundColor.b, backgroundColor.a); + Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); + + renderNeonGrid(); + + particles.render(shapeRenderer); + + renderNeonTitleText(); + + stage.act(delta); + stage.draw(); + } + + @Override + public void resize(int width, int height) { + + calculateUIScale(); + + stage.getViewport().update(width, height, true); + stage.clear(); + disposeGeneratedMenuResources(); + rebuildGeneratedMenuResources(); + createMenuTable(); + initializeParticles(); + } + + @Override + public void pause() {} + + @Override + public void resume() {} + + @Override + public void hide() { + Gdx.input.setInputProcessor(null); + } + + @Override + public void dispose() { + if (stage != null) { + stage.dispose(); + stage = null; + } + disposeGeneratedMenuResources(); + if (batch != null) { + batch.dispose(); + batch = null; + } + if (shapeRenderer != null) { + shapeRenderer.dispose(); + shapeRenderer = null; + } + } + + private void disposeGeneratedMenuResources() { + if (screenAssets != null) { + screenAssets.dispose(); + } + screenAssets = null; + skin = null; + font = null; + if (titleFont != null) { + titleFont.dispose(); + } + titleFont = null; + uiAtlas = null; + } + + + private static Pixmap buildBorderPixmap(Color borderColor, int borderThickness) { + Pixmap px = new Pixmap(20, 20, Pixmap.Format.RGBA8888); + px.setColor(0.05f, 0.07f, 0.12f, 0.92f); + px.fill(); + px.setColor(borderColor); + for (int i = 0; i < borderThickness; i++) { + px.drawRectangle(i, i, 20 - i * 2, 20 - i * 2); + } + return px; + } +} diff --git a/core/src/main/java/ru/project/tower/screens/TalentTreeScreen.java b/core/src/main/java/ru/project/tower/screens/TalentTreeScreen.java new file mode 100644 index 0000000..82ebd35 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/TalentTreeScreen.java @@ -0,0 +1,796 @@ +package ru.project.tower.screens; + +import com.badlogic.gdx.Game; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.InputMultiplexer; +import com.badlogic.gdx.Screen; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.GL20; +import com.badlogic.gdx.graphics.Pixmap; +import com.badlogic.gdx.graphics.g2d.Batch; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.GlyphLayout; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.math.MathUtils; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.math.Vector3; +import com.badlogic.gdx.scenes.scene2d.Actor; +import com.badlogic.gdx.scenes.scene2d.InputEvent; +import com.badlogic.gdx.scenes.scene2d.Stage; +import com.badlogic.gdx.scenes.scene2d.ui.Label; +import com.badlogic.gdx.scenes.scene2d.ui.Skin; +import com.badlogic.gdx.scenes.scene2d.ui.Table; +import com.badlogic.gdx.scenes.scene2d.ui.TextButton; +import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; +import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable; +import com.badlogic.gdx.utils.viewport.ScreenViewport; +import java.util.List; +import ru.project.tower.DebugLog; +import ru.project.tower.GameContext; +import ru.project.tower.navigation.ScreenNavigation; +import ru.project.tower.navigation.ScreenNavigator; +import ru.project.tower.player.PlayerStats; +import ru.project.tower.screens.common.NeonMenuParticleSystem; +import ru.project.tower.screens.talenttree.TalentTreeScaleMetrics; +import ru.project.tower.screens.talenttree.TalentTreeScreenDependencies; +import ru.project.tower.support.RobotoFontFactory; +import ru.project.tower.support.ScreenAssets; +import ru.project.tower.support.ScreenPalette; +import ru.project.tower.support.UiAtlasBuilder; +import ru.project.tower.talents.TalentData; +import ru.project.tower.talents.TalentTree; + +public class TalentTreeScreen implements Screen { + private static final String SMOKE_STATE_PROPERTY = "tower.smoke.state"; + private static final String SMOKE_TALENT_POPUP_STATE = "talentPopup"; + + private final ScreenNavigator navigator; + private Stage uiStage; + private Stage worldStage; + private ShapeRenderer shapeRenderer; + private final TalentTree talentTree; + private final PlayerStats playerStats; + private Skin skin; + private TextureAtlas uiAtlas; + private ScreenAssets screenAssets; + private BitmapFont font; + private BitmapFont smallFont; + private Table infoPopup; + private Label nameLabel, descLabel, costLabel, balanceLabel; + private TextButton upgradeButton; + private TalentNodeActor selectedNode; + private Vector3 lastTouch = new Vector3(); + private boolean isDragging = false; + private float time = 0; + + private final Color neonBlue = ScreenPalette.BLUE.create(); + private final Color neonCyan = ScreenPalette.CYAN.create(); + private final Color neonPurple = ScreenPalette.NEON_LIGHT_PURPLE.create(); + private final Color lockedGray = ScreenPalette.LOCKED_GRAY.create(); + private final Color purchasedColor = ScreenPalette.GREEN.create(); + private final Color backgroundColor = ScreenPalette.SCREEN.create(); + private final Color fontShadowColor = ScreenPalette.FONT_SHADOW.create(); + private final Color scratchColor = new Color(); + private final Color scratchColor2 = new Color(); + private final Vector2 treeCenter = new Vector2(); + + private float uiScale; + private int adaptedFontSize; + private final NeonMenuParticleSystem particles = + new NeonMenuParticleSystem(NeonMenuParticleSystem.Profile.DRIFTING); + + public TalentTreeScreen(Game game, GameContext ctx) { + this(ScreenNavigation.forGame(game, ctx), TalentTreeScreenDependencies.from(ctx)); + } + + public TalentTreeScreen(ScreenNavigator navigator, TalentTreeScreenDependencies dependencies) { + this.navigator = navigator; + this.talentTree = dependencies.talentTree(); + this.playerStats = dependencies.playerStats(); + } + + @Override + public void show() { + DebugLog.log("TalentTreeScreen", "Initializing..."); + try { + this.shapeRenderer = new ShapeRenderer(); + + calculateUIScale(); + + this.worldStage = new Stage(new ScreenViewport()); + this.uiStage = new Stage(new ScreenViewport()); + + rebuildScreenAssets(); + initTreeWorld(); + initUI(); + + centerCameraOnTree(); + applySmokeStateIfRequested(); + + particles.init( + Gdx.graphics.getWidth(), + Gdx.graphics.getHeight(), + uiScale, + neonBlue, + neonPurple, + neonBlue, + neonPurple); + + InputMultiplexer plexer = new InputMultiplexer(uiStage, worldStage); + Gdx.input.setInputProcessor(plexer); + + DebugLog.log("TalentTreeScreen", "Initialized successfully."); + } catch (RuntimeException t) { + Gdx.app.error("TalentTreeScreen", "FATAL CRASH DURING SHOW", t); + dispose(); + throw new IllegalStateException("TalentTreeScreen show failed", t); + } + } + + private void rebuildScreenAssets() { + screenAssets = new ScreenAssets(); + initFonts(); + initSkin(); + } + + private void initFonts() { + BitmapFont generatedFont = null; + BitmapFont generatedSmallFont = null; + if (RobotoFontFactory.exists()) { + try { + RobotoFontFactory.FontSpec spec = + RobotoFontFactory.spec( + adaptedFontSize, + 1.5f * (uiScale < 1 ? 1 : uiScale), + neonPurple, + Color.WHITE, + 1, + 1, + fontShadowColor) + .withCharacters(RobotoFontFactory.FONT_CHARACTERS_WITH_DEFAULTS); + generatedFont = RobotoFontFactory.generate(spec); + + generatedSmallFont = + RobotoFontFactory.generate( + spec.withSize((int) (adaptedFontSize * 0.7f)) + .withBorderWidth(1.0f * (uiScale < 1 ? 1 : uiScale))); + + font = screenAssets.font("default", generatedFont); + generatedFont = null; + smallFont = screenAssets.font("small", generatedSmallFont); + generatedSmallFont = null; + } finally { + if (generatedFont != null) generatedFont.dispose(); + if (generatedSmallFont != null) generatedSmallFont.dispose(); + } + } else { + font = screenAssets.font("default", RobotoFontFactory.fallback()); + smallFont = screenAssets.font("small", RobotoFontFactory.fallback(0.8f)); + } + } + + private void initSkin() { + skin = screenAssets.skin(); + + + int btnW = (int) (100 * uiScale); + int btnH = (int) (40 * uiScale); + + Pixmap pUp = new Pixmap(btnW, btnH, Pixmap.Format.RGBA8888); + pUp.setColor(0, 0, 0, 0.6f); + pUp.fill(); + pUp.setColor(neonCyan); + pUp.drawRectangle(0, 0, btnW, btnH); + pUp.drawRectangle(1, 1, btnW - 2, btnH - 2); + + Pixmap pDown = new Pixmap(btnW, btnH, Pixmap.Format.RGBA8888); + pDown.setColor(0.1f, 0.3f, 0.5f, 0.8f); + pDown.fill(); + pDown.setColor(neonCyan); + pDown.drawRectangle(0, 0, btnW, btnH); + + try (UiAtlasBuilder atlasBuilder = new UiAtlasBuilder(512, 256)) { + atlasBuilder.add("btn_up", pUp); + atlasBuilder.add("btn_down", pDown); + uiAtlas = screenAssets.setAtlas(atlasBuilder.build()); + } + + TextButton.TextButtonStyle style = new TextButton.TextButtonStyle(); + style.font = font; + style.up = new TextureRegionDrawable(uiAtlas.findRegion("btn_up")); + style.down = new TextureRegionDrawable(uiAtlas.findRegion("btn_down")); + style.overFontColor = neonCyan; + + skin.add("default", style); + skin.add("default", new Label.LabelStyle(font, Color.WHITE)); + skin.add("small", new Label.LabelStyle(smallFont, Color.WHITE)); + + Label.LabelStyle titleStyle = new Label.LabelStyle(font, neonCyan); + skin.add("title", titleStyle); + } + + + + + + + public static Vector2 computeTreeCenter(TalentTree tree) { + return computeTreeCenterInto(tree, new Vector2()); + } + + public static Vector2 computeTreeCenterInto(TalentTree tree, Vector2 out) { + if (out == null) { + throw new IllegalArgumentException("out must not be null"); + } + if (tree == null) return out.set(0f, 0f); + List all = tree.getAllTalents(); + if (all == null || all.isEmpty()) return out.set(0f, 0f); + float minX = Float.POSITIVE_INFINITY, maxX = Float.NEGATIVE_INFINITY; + float minY = Float.POSITIVE_INFINITY, maxY = Float.NEGATIVE_INFINITY; + for (TalentData td : all) { + if (td == null) continue; + float x = td.getX(); + float y = td.getY(); + if (x < minX) minX = x; + if (x > maxX) maxX = x; + if (y < minY) minY = y; + if (y > maxY) maxY = y; + } + if (minX == Float.POSITIVE_INFINITY) return out.set(0f, 0f); + return out.set((minX + maxX) * 0.5f, (minY + maxY) * 0.5f); + } + + private void centerCameraOnTree() { + if (worldStage == null) return; + computeTreeCenterInto(talentTree, treeCenter); + worldStage.getCamera().position.set(treeCenter.x * uiScale, treeCenter.y * uiScale, 0f); + worldStage.getCamera().update(); + } + + private void applySmokeStateIfRequested() { + if (SMOKE_TALENT_POPUP_STATE.equals(System.getProperty(SMOKE_STATE_PROPERTY, ""))) { + showTalentPopupForSmoke("keystone_splash"); + } + } + + private void showTalentPopupForSmoke(String talentId) { + if (worldStage == null || infoPopup == null) return; + com.badlogic.gdx.utils.Array actors = worldStage.getActors(); + for (int i = 0, n = actors.size; i < n; i++) { + if (!(actors.get(i) instanceof TalentNodeActor)) continue; + TalentNodeActor node = (TalentNodeActor) actors.get(i); + if (!node.talent.getId().equals(talentId)) continue; + selectedNode = node; + updatePopup(node.talent); + infoPopup.setPosition( + computePanelX(uiStage.getViewport().getWorldWidth(), infoPopup.getWidth()), + computePanelY(uiStage.getViewport().getWorldHeight(), infoPopup.getHeight())); + infoPopup.setVisible(true); + return; + } + } + + private void initTreeWorld() { + List talents = talentTree.getAllTalents(); + if (talents == null) return; + for (TalentData td : talents) { + if (td != null) worldStage.addActor(new TalentNodeActor(td)); + } + } + + private void initUI() { + createInfoPopup(); + addTopBar(); + } + + private void createInfoPopup() { + infoPopup = new Table(); + float popupW = 300 * uiScale; + float popupH = 240 * uiScale; + infoPopup.setBackground(getNeonWindowBg((int) popupW, (int) popupH)); + infoPopup.setVisible(false); + + createInfoPopupLabels(); + upgradeButton = createUpgradeButton(); + TextButton close = createInfoPopupCloseButton(); + populateInfoPopup(close, popupW, popupH); + } + + private void createInfoPopupLabels() { + nameLabel = new Label("", skin, "title"); + descLabel = new Label("", skin, "small"); + descLabel.setWrap(true); + costLabel = new Label("", skin); + } + + private TextButton createUpgradeButton() { + TextButton button = new TextButton("УЛУЧШИТЬ", skin); + button.addListener( + new ClickListener() { + @Override + public void clicked(InputEvent event, float x, float y) { + if (selectedNode != null && !upgradeButton.isDisabled()) + purchase(selectedNode.talent); + } + }); + return button; + } + + private TextButton createInfoPopupCloseButton() { + TextButton close = new TextButton("X", skin); + close.addListener( + new ClickListener() { + @Override + public void clicked(InputEvent e, float x, float y) { + infoPopup.setVisible(false); + selectedNode = null; + } + }); + return close; + } + + private void populateInfoPopup(TextButton close, float popupW, float popupH) { + Table inner = new Table(); + inner.add(nameLabel).pad(5 * uiScale).row(); + inner.add(descLabel).width(240 * uiScale).pad(10 * uiScale).row(); + inner.add(costLabel).pad(5 * uiScale).row(); + inner.add(upgradeButton).size(160 * uiScale, 45 * uiScale).pad(10 * uiScale); + + infoPopup.add(close).right().size(40 * uiScale, 40 * uiScale).pad(5 * uiScale).row(); + infoPopup.add(inner).expand().center(); + infoPopup.setSize(popupW, popupH); + infoPopup.setPosition( + computePanelX(uiStage.getViewport().getWorldWidth(), popupW), + computePanelY(uiStage.getViewport().getWorldHeight(), popupH)); + uiStage.addActor(infoPopup); + } + + private void addTopBar() { + Table top = new Table(); + top.setFillParent(true); + top.top(); + balanceLabel = new Label("Баланс: " + playerStats.getCurrency(), skin); + TextButton back = new TextButton("НАЗАД", skin); + back.addListener( + new ClickListener() { + @Override + public void clicked(InputEvent e, float x, float y) { + navigator.showMainMenu(); + } + }); + top.add(balanceLabel).expandX().left().pad(15 * uiScale); + top.add(back).right().pad(10 * uiScale).size(120 * uiScale, 40 * uiScale); + uiStage.addActor(top); + } + + private TextureRegionDrawable getNeonWindowBg(int w, int h) { + Pixmap pix = new Pixmap(w, h, Pixmap.Format.RGBA8888); + pix.setColor(0.05f, 0.05f, 0.1f, 0.9f); + pix.fill(); + pix.setColor(neonBlue); + pix.drawRectangle(0, 0, w, h); + pix.drawRectangle(1, 1, w - 2, h - 2); + + + pix.setColor(neonCyan); + pix.fillRectangle(0, 0, 10, 2); + pix.fillRectangle(0, 0, 2, 10); + pix.fillRectangle(w - 10, 0, 10, 2); + pix.fillRectangle(w - 2, 0, 2, 10); + pix.fillRectangle(0, h - 2, 10, 2); + pix.fillRectangle(0, h - 10, 2, 10); + pix.fillRectangle(w - 10, h - 2, 10, 2); + pix.fillRectangle(w - 2, h - 10, 2, 10); + + return screenAssets.own(pix); + } + + + + + + + + public static float computePanelX(float viewportW, float panelW) { + return Math.max(0f, (viewportW - panelW) / 2f); + } + + + + + + + public static float computePanelY(float viewportH, float panelH) { + return Math.max(0f, (viewportH - panelH) / 2f); + } + + private void purchase(TalentData t) { + int lvl = talentTree.getCurrentLevel(t.getId()); + if (talentTree.canUpgradeTalent(t.getId()) && playerStats.spendCurrency(t.getCost(lvl))) { + talentTree.upgradeTalent(t.getId()); + updatePopup(t); + balanceLabel.setText("Баланс: " + playerStats.getCurrency()); + } + } + + private void updatePopup(TalentData t) { + int lvl = talentTree.getCurrentLevel(t.getId()); + nameLabel.setText(t.getName() + " (" + lvl + "/" + t.getMaxLevel() + ")"); + descLabel.setText(t.getDescription() + "\n" + talentTree.boundedRatingText(t.getId())); + if (lvl >= t.getMaxLevel()) { + costLabel.setText("МАКС."); + upgradeButton.setDisabled(true); + } else { + int c = t.getCost(lvl); + costLabel.setText("Цена: " + c); + upgradeButton.setDisabled( + !talentTree.canUpgradeTalent(t.getId()) || playerStats.getCurrency() < c); + } + } + + @Override + public void render(float delta) { + Gdx.gl.glClearColor(backgroundColor.r, backgroundColor.g, backgroundColor.b, 1); + Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); + + time += delta; + handleIn(); + particles.update( + delta, + Gdx.graphics.getWidth(), + Gdx.graphics.getHeight(), + uiScale, + neonBlue, + neonPurple, + neonBlue, + neonPurple); + + renderBackgroundGrid(); + shapeRenderer.setProjectionMatrix(uiStage.getCamera().combined); + particles.render(shapeRenderer); + + worldStage.act(delta); + worldStage.getCamera().update(); + shapeRenderer.setProjectionMatrix(worldStage.getCamera().combined); + + renderTalentConnections(); + renderTalentNodes(); + + worldStage.draw(); + + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); + uiStage.act(delta); + uiStage.draw(); + } + + private void renderTalentConnections() { + Gdx.gl.glEnable(GL20.GL_BLEND); + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE); + + renderTalentConnectionGlowPass(); + renderTalentConnectionCorePass(); + + Gdx.gl.glLineWidth(1); + } + + private void renderTalentConnectionGlowPass() { + shapeRenderer.begin(ShapeRenderer.ShapeType.Line); + Gdx.gl.glLineWidth(5 * uiScale); + for (TalentData t : talentTree.getAllTalents()) { + for (String dep : t.getDependencyIds()) { + TalentData p = talentTree.getTalent(dep); + if (p != null) { + boolean active = talentConnectionActive(t, p); + Color baseCol = talentConnectionColor(active); + scratchColor.set(baseCol); + scratchColor.a = + (0.2f + 0.1f * MathUtils.sin(time * 2f)) * (active ? 1f : 0.5f); + shapeRenderer.setColor(scratchColor); + shapeRenderer.line( + t.getX() * uiScale, + t.getY() * uiScale, + p.getX() * uiScale, + p.getY() * uiScale); + } + } + } + shapeRenderer.end(); + } + + private void renderTalentConnectionCorePass() { + shapeRenderer.begin(ShapeRenderer.ShapeType.Line); + Gdx.gl.glLineWidth(1 * uiScale); + for (TalentData t : talentTree.getAllTalents()) { + for (String dep : t.getDependencyIds()) { + TalentData p = talentTree.getTalent(dep); + if (p != null) { + shapeRenderer.setColor(talentConnectionColor(talentConnectionActive(t, p))); + shapeRenderer.line( + t.getX() * uiScale, + t.getY() * uiScale, + p.getX() * uiScale, + p.getY() * uiScale); + } + } + } + shapeRenderer.end(); + } + + private boolean talentConnectionActive(TalentData child, TalentData parent) { + return talentTree.getCurrentLevel(child.getId()) > 0 + || talentTree.getCurrentLevel(parent.getId()) > 0; + } + + private Color talentConnectionColor(boolean active) { + return active ? neonBlue : lockedGray; + } + + private void renderTalentNodes() { + Gdx.gl.glEnable(GL20.GL_BLEND); + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE); + shapeRenderer.setProjectionMatrix(worldStage.getCamera().combined); + + renderTalentNodeGlowPass(); + renderTalentNodeFillPass(); + renderTalentNodeBorderPass(); + + Gdx.gl.glLineWidth(1); + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); + } + + private void renderTalentNodeGlowPass() { + float glowScale = 1.0f + 0.1f * MathUtils.sin(time * 3f); + float alpha = 0.4f * (0.8f + 0.2f * MathUtils.sin(time * 5f)); + + shapeRenderer.begin(ShapeRenderer.ShapeType.Line); + Gdx.gl.glLineWidth(3 * uiScale); + com.badlogic.gdx.utils.Array actors = worldStage.getActors(); + for (int i = 0, n = actors.size; i < n; i++) { + if (actors.get(i) instanceof TalentNodeActor) { + TalentNodeActor node = (TalentNodeActor) actors.get(i); + scratchColor.set(talentNodeColor(node)); + scratchColor.a = alpha; + shapeRenderer.setColor(scratchColor); + node.drawHex(node.getX() + node.r, node.getY() + node.r, node.r * glowScale, false); + } + } + shapeRenderer.end(); + } + + private void renderTalentNodeFillPass() { + shapeRenderer.begin(ShapeRenderer.ShapeType.Filled); + com.badlogic.gdx.utils.Array actors = worldStage.getActors(); + for (int i = 0, n = actors.size; i < n; i++) { + if (actors.get(i) instanceof TalentNodeActor) { + TalentNodeActor node = (TalentNodeActor) actors.get(i); + int level = talentTree.getCurrentLevel(node.talent.getId()); + boolean unlocked = talentTree.isUnlocked(node.talent.getId()); + scratchColor2.set(talentNodeColor(node)); + scratchColor2.a = (level > 0 || unlocked) ? 0.3f : 0.1f; + shapeRenderer.setColor(scratchColor2); + node.drawHex(node.getX() + node.r, node.getY() + node.r, node.r * 0.85f, true); + } + } + shapeRenderer.end(); + } + + private void renderTalentNodeBorderPass() { + shapeRenderer.begin(ShapeRenderer.ShapeType.Line); + Gdx.gl.glLineWidth(2 * uiScale); + com.badlogic.gdx.utils.Array actors = worldStage.getActors(); + for (int i = 0, n = actors.size; i < n; i++) { + if (actors.get(i) instanceof TalentNodeActor) { + TalentNodeActor node = (TalentNodeActor) actors.get(i); + shapeRenderer.setColor(talentNodeColor(node)); + node.drawHex(node.getX() + node.r, node.getY() + node.r, node.r * 0.85f, false); + } + } + shapeRenderer.end(); + } + + private Color talentNodeColor(TalentNodeActor node) { + int level = talentTree.getCurrentLevel(node.talent.getId()); + if (level > 0) return purchasedColor; + if (talentTree.isUnlocked(node.talent.getId())) return neonBlue; + return lockedGray; + } + + private void renderBackgroundGrid() { + shapeRenderer.setProjectionMatrix(uiStage.getCamera().combined); + shapeRenderer.begin(ShapeRenderer.ShapeType.Line); + float alpha = 0.1f + 0.05f * MathUtils.sin(time * 0.5f); + shapeRenderer.setColor(scratchColor.set(0.1f, 0.2f, 0.4f, alpha)); + + float cellSize = 60 * uiScale; + float offsetX = (time * 10f * uiScale) % cellSize; + float offsetY = (time * 5f * uiScale) % cellSize; + + for (float x = -offsetX; x < Gdx.graphics.getWidth(); x += cellSize) { + shapeRenderer.line(x, 0, x, Gdx.graphics.getHeight()); + } + for (float y = -offsetY; y < Gdx.graphics.getHeight(); y += cellSize) { + shapeRenderer.line(0, y, Gdx.graphics.getWidth(), y); + } + shapeRenderer.end(); + } + + private void calculateUIScale() { + TalentTreeScaleMetrics metrics = + TalentTreeScaleMetrics.calculate(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); + uiScale = metrics.uiScale(); + adaptedFontSize = metrics.adaptedFontSize(); + } + + private void handleIn() { + if (Gdx.input.isTouched()) { + if (!isDragging) { + isDragging = true; + lastTouch.set(Gdx.input.getX(), Gdx.input.getY(), 0); + } else { + float dx = lastTouch.x - Gdx.input.getX(); + float dy = Gdx.input.getY() - lastTouch.y; + worldStage.getCamera().translate(dx, dy, 0); + lastTouch.set(Gdx.input.getX(), Gdx.input.getY(), 0); + } + } else isDragging = false; + } + + @Override + public void resize(int w, int h) { + calculateUIScale(); + worldStage.getViewport().update(w, h, false); + uiStage.getViewport().update(w, h, true); + centerCameraOnTree(); + updateTalentNodeBounds(); + resizeInfoPopup(w, h); + + uiStage.clear(); + disposeScreenAssets(); + rebuildScreenAssets(); + initUI(); + applySmokeStateIfRequested(); + } + + private void updateTalentNodeBounds() { + if (worldStage == null) { + return; + } + com.badlogic.gdx.utils.Array actors = worldStage.getActors(); + for (int i = 0, n = actors.size; i < n; i++) { + if (actors.get(i) instanceof TalentNodeActor) { + ((TalentNodeActor) actors.get(i)).updateBounds(); + } + } + } + + private void resizeInfoPopup(int viewportWidth, int viewportHeight) { + if (infoPopup == null) { + return; + } + infoPopup.setSize(300 * uiScale, 240 * uiScale); + infoPopup.setPosition( + computePanelX(viewportWidth, infoPopup.getWidth()), + computePanelY(viewportHeight, infoPopup.getHeight())); + } + + @Override + public void pause() {} + + @Override + public void resume() {} + + @Override + public void hide() { + Gdx.input.setInputProcessor(null); + } + + @Override + public void dispose() { + if (worldStage != null) { + worldStage.dispose(); + worldStage = null; + } + if (uiStage != null) { + uiStage.dispose(); + uiStage = null; + } + if (shapeRenderer != null) { + shapeRenderer.dispose(); + shapeRenderer = null; + } + disposeScreenAssets(); + } + + private void disposeScreenAssets() { + if (screenAssets != null) screenAssets.dispose(); + screenAssets = null; + skin = null; + uiAtlas = null; + font = null; + smallFont = null; + } + + private class TalentNodeActor extends Actor { + final TalentData talent; + float r = 40; + final GlyphLayout layout = new GlyphLayout(); + final String typeInitial; + final StringBuilder levelText = new StringBuilder(5); + private final float[] hexVertices = new float[12]; + + TalentNodeActor(TalentData t) { + this.talent = t; + this.typeInitial = t.getType().toString().substring(0, 1); + updateBounds(); + addListener( + new ClickListener() { + @Override + public void clicked(InputEvent e, float x, float y) { + selectedNode = TalentNodeActor.this; + updatePopup(talent); + infoPopup.setPosition( + computePanelX( + uiStage.getViewport().getWorldWidth(), + infoPopup.getWidth()), + computePanelY( + uiStage.getViewport().getWorldHeight(), + infoPopup.getHeight())); + infoPopup.setVisible(true); + } + }); + } + + void updateBounds() { + r = 40 * uiScale; + float tx = talent.getX() * uiScale; + float ty = talent.getY() * uiScale; + setBounds(tx - r, ty - r, r * 2, r * 2); + } + + @Override + public void draw(Batch batch, float alpha) { + int lvl = talentTree.getCurrentLevel(talent.getId()); + font.setColor(Color.WHITE); + layout.setText(font, typeInitial); + font.draw( + batch, + typeInitial, + getX() + r - layout.width / 2, + getY() + r + layout.height / 2); + + + levelText.setLength(0); + levelText.append(lvl).append('/').append(talent.getMaxLevel()); + smallFont.setColor(neonCyan); + layout.setText(smallFont, levelText); + smallFont.draw(batch, levelText, getX() + r - layout.width / 2, getY() - 5 * uiScale); + } + + private void drawHex(float x, float y, float radius, boolean filled) { + for (int i = 0; i < 6; i++) { + hexVertices[i * 2] = x + radius * MathUtils.cosDeg(i * 60 + 30); + hexVertices[i * 2 + 1] = y + radius * MathUtils.sinDeg(i * 60 + 30); + } + if (filled) { + for (int i = 0; i < 6; i++) { + shapeRenderer.triangle( + x, + y, + hexVertices[i * 2], + hexVertices[i * 2 + 1], + hexVertices[((i + 1) % 6) * 2], + hexVertices[((i + 1) % 6) * 2 + 1]); + } + } else { + for (int i = 0; i < 6; i++) { + shapeRenderer.line( + hexVertices[i * 2], + hexVertices[i * 2 + 1], + hexVertices[((i + 1) % 6) * 2], + hexVertices[((i + 1) % 6) * 2 + 1]); + } + } + } + } +} diff --git a/core/src/main/java/ru/project/tower/screens/abilityselection/AbilitySelectionDependencies.java b/core/src/main/java/ru/project/tower/screens/abilityselection/AbilitySelectionDependencies.java new file mode 100644 index 0000000..1b9c2d8 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/abilityselection/AbilitySelectionDependencies.java @@ -0,0 +1,30 @@ +package ru.project.tower.screens.abilityselection; + +import java.util.Objects; +import ru.project.tower.GameContext; +import ru.project.tower.GameState; +import ru.project.tower.abilities.PlayerAbilities; + + +public final class AbilitySelectionDependencies { + private final PlayerAbilities playerAbilities; + private final GameState gameState; + + public AbilitySelectionDependencies(PlayerAbilities playerAbilities, GameState gameState) { + this.playerAbilities = Objects.requireNonNull(playerAbilities, "playerAbilities"); + this.gameState = Objects.requireNonNull(gameState, "gameState"); + } + + public static AbilitySelectionDependencies from(GameContext ctx) { + Objects.requireNonNull(ctx, "ctx"); + return new AbilitySelectionDependencies(ctx.playerAbilities, ctx.gameState); + } + + public PlayerAbilities playerAbilities() { + return playerAbilities; + } + + public GameState gameState() { + return gameState; + } +} diff --git a/core/src/main/java/ru/project/tower/screens/abilityselection/AbilitySelectionLayout.java b/core/src/main/java/ru/project/tower/screens/abilityselection/AbilitySelectionLayout.java new file mode 100644 index 0000000..bdc3d1c --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/abilityselection/AbilitySelectionLayout.java @@ -0,0 +1,145 @@ +package ru.project.tower.screens.abilityselection; + +public final class AbilitySelectionLayout { + private static final int MAX_ABILITY_BUTTONS = 7; + + private final float buttonWidth; + private final float buttonHeight; + private final float buttonPadding; + private final Rect[] abilityButtons; + private final Rect startGameButton; + private final Rect backButton; + + private AbilitySelectionLayout( + float buttonWidth, + float buttonHeight, + float buttonPadding, + Rect[] abilityButtons, + Rect startGameButton, + Rect backButton) { + this.buttonWidth = buttonWidth; + this.buttonHeight = buttonHeight; + this.buttonPadding = buttonPadding; + this.abilityButtons = abilityButtons; + this.startGameButton = startGameButton; + this.backButton = backButton; + } + + public static AbilitySelectionLayout calculate( + int width, int height, float uiScale, int availableAbilityCount) { + float buttonWidth = Math.min(300 * uiScale, width * 0.6f); + float buttonHeight = Math.min(80 * uiScale, height * 0.12f); + float buttonPadding = 20 * uiScale; + int totalButtons = Math.min(MAX_ABILITY_BUTTONS, Math.max(0, availableAbilityCount)); + Rect[] abilityButtons = new Rect[totalButtons]; + + Rect startGameButton = + new Rect(width / 2f - buttonWidth / 2f, buttonPadding, buttonWidth, buttonHeight); + float abilityTop = height - Math.min(150 * uiScale, height * 0.22f); + float abilityBottom = startGameButton.y + startGameButton.height + buttonPadding; + float abilityStackSpace = Math.max(0f, abilityTop - abilityBottom); + float abilityStackHeight = + totalButtons == 0 + ? 0f + : totalButtons * buttonHeight + (totalButtons - 1) * buttonPadding; + + if (totalButtons > 0 && abilityStackHeight > abilityStackSpace) { + float compressedButtonHeight = + abilityStackSpace / (totalButtons + (totalButtons - 1) * 0.25f); + buttonHeight = Math.max(1f, compressedButtonHeight); + buttonPadding = Math.max(1f, buttonHeight * 0.25f); + abilityStackHeight = totalButtons * buttonHeight + (totalButtons - 1) * buttonPadding; + } + + float idealFirstAbilityY = height / 2f + abilityStackHeight / 2f - buttonHeight; + float minFirstAbilityY = + totalButtons == 0 + ? idealFirstAbilityY + : abilityBottom + (totalButtons - 1) * (buttonHeight + buttonPadding); + float maxFirstAbilityY = abilityTop - buttonHeight; + float firstAbilityY = clamp(idealFirstAbilityY, minFirstAbilityY, maxFirstAbilityY); + for (int i = 0; i < totalButtons; i++) { + abilityButtons[i] = + new Rect( + width / 2f - buttonWidth / 2f, + firstAbilityY - i * (buttonHeight + buttonPadding), + buttonWidth, + buttonHeight); + } + + float backSize = 50 * uiScale; + float backPadding = 30 * uiScale; + Rect backButton = + new Rect(backPadding, height - backSize - backPadding, backSize, backSize); + + return new AbilitySelectionLayout( + buttonWidth, + buttonHeight, + buttonPadding, + abilityButtons, + startGameButton, + backButton); + } + + private static float clamp(float value, float min, float max) { + return Math.min(Math.max(value, min), max); + } + + public float buttonWidth() { + return buttonWidth; + } + + public float buttonHeight() { + return buttonHeight; + } + + public float buttonPadding() { + return buttonPadding; + } + + public int abilityButtonCount() { + return abilityButtons.length; + } + + public Rect abilityButton(int index) { + return abilityButtons[index]; + } + + public Rect startGameButton() { + return startGameButton; + } + + public Rect backButton() { + return backButton; + } + + public static final class Rect { + private final float x; + private final float y; + private final float width; + private final float height; + + private Rect(float x, float y, float width, float height) { + this.x = x; + this.y = y; + this.width = width; + this.height = height; + } + + public float x() { + return x; + } + + public float y() { + return y; + } + + public float width() { + return width; + } + + public float height() { + return height; + } + } +} diff --git a/core/src/main/java/ru/project/tower/screens/abilityselection/AbilitySelectionScaleMetrics.java b/core/src/main/java/ru/project/tower/screens/abilityselection/AbilitySelectionScaleMetrics.java new file mode 100644 index 0000000..2f76afe --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/abilityselection/AbilitySelectionScaleMetrics.java @@ -0,0 +1,45 @@ +package ru.project.tower.screens.abilityselection; + +public final class AbilitySelectionScaleMetrics { + private static final float BASE_WIDTH = 1280f; + private static final float BASE_HEIGHT = 720f; + + private final float uiScale; + private final int adaptedFontSize; + + private AbilitySelectionScaleMetrics(float uiScale, int adaptedFontSize) { + this.uiScale = uiScale; + this.adaptedFontSize = adaptedFontSize; + } + + public static AbilitySelectionScaleMetrics calculate( + float viewportWidth, float viewportHeight) { + float scaleX = viewportWidth / BASE_WIDTH; + float scaleY = viewportHeight / BASE_HEIGHT; + boolean isPortrait = viewportHeight > viewportWidth; + + float uiScale; + int adaptedFontSize; + if (isPortrait) { + uiScale = clamp(scaleY * 1.2f, 1.0f, 2.2f); + adaptedFontSize = (int) Math.min(32, Math.max(18, 22 * uiScale)); + } else { + uiScale = clamp(Math.min(scaleX, scaleY) * 1.2f, 0.8f, 1.8f); + adaptedFontSize = (int) Math.min(28, Math.max(16, 20 * uiScale)); + } + + return new AbilitySelectionScaleMetrics(uiScale, adaptedFontSize); + } + + private static float clamp(float value, float min, float max) { + return Math.min(Math.max(min, value), max); + } + + public float uiScale() { + return uiScale; + } + + public int adaptedFontSize() { + return adaptedFontSize; + } +} diff --git a/core/src/main/java/ru/project/tower/screens/abilityshop/AbilityShopCardView.java b/core/src/main/java/ru/project/tower/screens/abilityshop/AbilityShopCardView.java new file mode 100644 index 0000000..8a16c52 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/abilityshop/AbilityShopCardView.java @@ -0,0 +1,70 @@ +package ru.project.tower.screens.abilityshop; + +import ru.project.tower.abilities.AbilityKind; + +public final class AbilityShopCardView { + private final String name; + private final String priceText; + private final String unlockText; + private final String detailsText; + private final String buttonText; + private final boolean buttonDisabled; + + private AbilityShopCardView( + String name, + String priceText, + String unlockText, + String detailsText, + String buttonText, + boolean buttonDisabled) { + this.name = name; + this.priceText = priceText; + this.unlockText = unlockText; + this.detailsText = detailsText; + this.buttonText = buttonText; + this.buttonDisabled = buttonDisabled; + } + + public static AbilityShopCardView forAbility(AbilityKind ability, boolean owned) { + return forAbility(ability, owned, ability.unlockWaveRequirement()); + } + + public static AbilityShopCardView forAbility( + AbilityKind ability, boolean owned, int maxWaveReached) { + boolean locked = !owned && maxWaveReached < ability.unlockWaveRequirement(); + String priceText = ability.shopPrice() + " монет"; + return new AbilityShopCardView( + ability.selectionName(), + priceText, + ability.unlockWaveRequirement() == 0 + ? "Доступно сразу" + : "Откроется: волна " + ability.unlockWaveRequirement(), + locked ? priceText + " / волна " + ability.unlockWaveRequirement() : priceText, + owned ? "КУПЛЕНО" : locked ? "ЗАКРЫТО" : "КУПИТЬ", + owned || locked); + } + + public String name() { + return name; + } + + public String priceText() { + return priceText; + } + + public String unlockText() { + return unlockText; + } + + public String detailsText() { + return detailsText; + } + + public String buttonText() { + return buttonText; + } + + public boolean buttonDisabled() { + return buttonDisabled; + } +} diff --git a/core/src/main/java/ru/project/tower/screens/abilityshop/AbilityShopDependencies.java b/core/src/main/java/ru/project/tower/screens/abilityshop/AbilityShopDependencies.java new file mode 100644 index 0000000..6a39efb --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/abilityshop/AbilityShopDependencies.java @@ -0,0 +1,30 @@ +package ru.project.tower.screens.abilityshop; + +import java.util.Objects; +import ru.project.tower.GameContext; +import ru.project.tower.abilities.PlayerAbilities; +import ru.project.tower.player.PlayerStats; + + +public final class AbilityShopDependencies { + private final PlayerStats playerStats; + private final PlayerAbilities playerAbilities; + + public AbilityShopDependencies(PlayerStats playerStats, PlayerAbilities playerAbilities) { + this.playerStats = Objects.requireNonNull(playerStats, "playerStats"); + this.playerAbilities = Objects.requireNonNull(playerAbilities, "playerAbilities"); + } + + public static AbilityShopDependencies from(GameContext ctx) { + Objects.requireNonNull(ctx, "ctx"); + return new AbilityShopDependencies(ctx.playerStats, ctx.playerAbilities); + } + + public PlayerStats playerStats() { + return playerStats; + } + + public PlayerAbilities playerAbilities() { + return playerAbilities; + } +} diff --git a/core/src/main/java/ru/project/tower/screens/abilityshop/AbilityShopPurchaseService.java b/core/src/main/java/ru/project/tower/screens/abilityshop/AbilityShopPurchaseService.java new file mode 100644 index 0000000..d54f488 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/abilityshop/AbilityShopPurchaseService.java @@ -0,0 +1,31 @@ +package ru.project.tower.screens.abilityshop; + +import ru.project.tower.abilities.AbilityKind; +import ru.project.tower.abilities.PlayerAbilities; +import ru.project.tower.player.PlayerStats; + +public final class AbilityShopPurchaseService { + private AbilityShopPurchaseService() {} + + public static Result tryPurchase( + AbilityKind ability, PlayerStats playerStats, PlayerAbilities playerAbilities) { + if (playerAbilities.hasAbility(ability)) { + return Result.ALREADY_OWNED; + } + if (!playerAbilities.canUnlock(ability, playerStats.getMaxWaveReached())) { + return Result.LOCKED; + } + if (!playerStats.spendCurrency(ability.shopPrice())) { + return Result.INSUFFICIENT_FUNDS; + } + playerAbilities.purchaseAbility(ability); + return Result.PURCHASED; + } + + public enum Result { + PURCHASED, + ALREADY_OWNED, + LOCKED, + INSUFFICIENT_FUNDS + } +} diff --git a/core/src/main/java/ru/project/tower/screens/abilityshop/AbilityShopResources.java b/core/src/main/java/ru/project/tower/screens/abilityshop/AbilityShopResources.java new file mode 100644 index 0000000..5b5915a --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/abilityshop/AbilityShopResources.java @@ -0,0 +1,73 @@ +package ru.project.tower.screens.abilityshop; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.scenes.scene2d.ui.Skin; +import com.badlogic.gdx.scenes.scene2d.utils.NinePatchDrawable; +import com.badlogic.gdx.utils.Disposable; +import java.util.IdentityHashMap; +import ru.project.tower.support.ScreenAssets; + + +public final class AbilityShopResources implements Disposable { + private final IdentityHashMap cardBackgrounds = + new IdentityHashMap<>(); + + private ScreenAssets screenAssets; + private Skin skin; + private BitmapFont font; + private BitmapFont buttonFont; + + public void rebuild() { + dispose(); + screenAssets = new ScreenAssets(); + skin = screenAssets.skin(); + } + + public ScreenAssets screenAssets() { + return screenAssets; + } + + public Skin skin() { + return skin; + } + + public BitmapFont font() { + return font; + } + + public BitmapFont buttonFont() { + return buttonFont; + } + + public void installFonts(BitmapFont font, BitmapFont buttonFont) { + this.font = screenAssets.font("default", font); + this.buttonFont = screenAssets.font("button", buttonFont); + } + + public void putCardBackground(Color color, NinePatchDrawable drawable) { + cardBackgrounds.put(color, drawable); + } + + public NinePatchDrawable cardBackground(Color color) { + return cardBackgrounds.get(color); + } + + public boolean hasCardBackgrounds() { + return !cardBackgrounds.isEmpty(); + } + + public NinePatchDrawable firstCardBackground() { + return cardBackgrounds.values().iterator().next(); + } + + @Override + public void dispose() { + if (screenAssets != null) screenAssets.dispose(); + screenAssets = null; + skin = null; + font = null; + buttonFont = null; + cardBackgrounds.clear(); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/abilityshop/AbilityShopScaleMetrics.java b/core/src/main/java/ru/project/tower/screens/abilityshop/AbilityShopScaleMetrics.java new file mode 100644 index 0000000..35fcf93 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/abilityshop/AbilityShopScaleMetrics.java @@ -0,0 +1,41 @@ +package ru.project.tower.screens.abilityshop; + +public final class AbilityShopScaleMetrics { + private static final float BASE_WIDTH = 1280f; + private static final float BASE_HEIGHT = 720f; + + private final float uiScale; + private final int adaptedFontSize; + + private AbilityShopScaleMetrics(float uiScale, int adaptedFontSize) { + this.uiScale = uiScale; + this.adaptedFontSize = adaptedFontSize; + } + + public static AbilityShopScaleMetrics calculate(float viewportWidth, float viewportHeight) { + boolean isPortrait = viewportHeight > viewportWidth; + float scaleX = viewportWidth / BASE_WIDTH; + float scaleY = viewportHeight / BASE_HEIGHT; + + if (isPortrait) { + float phoneScale = Math.min(viewportWidth / 360f, viewportHeight / 640f); + float uiScale = clamp(phoneScale, 0.88f, 1.25f); + return new AbilityShopScaleMetrics(uiScale, (int) clamp(18 * uiScale, 16, 22)); + } + + float uiScale = clamp(Math.min(scaleX, scaleY), 0.7f, 1.5f); + return new AbilityShopScaleMetrics(uiScale, (int) clamp(20 * uiScale, 18, 28)); + } + + public float uiScale() { + return uiScale; + } + + public int adaptedFontSize() { + return adaptedFontSize; + } + + private static float clamp(float value, float min, float max) { + return Math.min(max, Math.max(min, value)); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/common/NeonMenuParticleSystem.java b/core/src/main/java/ru/project/tower/screens/common/NeonMenuParticleSystem.java new file mode 100644 index 0000000..86accd1 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/common/NeonMenuParticleSystem.java @@ -0,0 +1,171 @@ +package ru.project.tower.screens.common; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.GL20; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.math.MathUtils; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.utils.Array; + +public final class NeonMenuParticleSystem { + public enum Profile { + RISING(-30f, 30f, -10f, 50f, 1f, 4f, 1f, 3f, 1f, false, 0.1f), + DRIFTING(-20f, 20f, -20f, 20f, 1f, 3f, 2f, 5f, 0.5f, true, 0f); + + final float minVelocityX; + final float maxVelocityX; + final float minVelocityY; + final float maxVelocityY; + final float minSize; + final float maxSize; + final float minLifetime; + final float maxLifetime; + final float alphaMultiplier; + final boolean replaceExpired; + final float spawnChance; + + Profile( + float minVelocityX, + float maxVelocityX, + float minVelocityY, + float maxVelocityY, + float minSize, + float maxSize, + float minLifetime, + float maxLifetime, + float alphaMultiplier, + boolean replaceExpired, + float spawnChance) { + this.minVelocityX = minVelocityX; + this.maxVelocityX = maxVelocityX; + this.minVelocityY = minVelocityY; + this.maxVelocityY = maxVelocityY; + this.minSize = minSize; + this.maxSize = maxSize; + this.minLifetime = minLifetime; + this.maxLifetime = maxLifetime; + this.alphaMultiplier = alphaMultiplier; + this.replaceExpired = replaceExpired; + this.spawnChance = spawnChance; + } + } + + private final Profile profile; + private final Array particles = new Array<>(); + + public NeonMenuParticleSystem() { + this(Profile.RISING); + } + + public NeonMenuParticleSystem(Profile profile) { + this.profile = profile; + } + + public void init( + float width, + float height, + float uiScale, + Color colorA, + Color colorB, + Color colorC, + Color colorD) { + particles.clear(); + int particleCount = (int) (50 * uiScale); + for (int i = 0; i < particleCount; i++) { + spawn( + MathUtils.random(0, width), + MathUtils.random(0, height), + uiScale, + randomColor(colorA, colorB, colorC, colorD)); + } + } + + public void update( + float delta, + float width, + float height, + float uiScale, + Color colorA, + Color colorB, + Color colorC, + Color colorD) { + for (int i = particles.size - 1; i >= 0; i--) { + NeonParticle particle = particles.get(i); + particle.update(delta); + if (particle.lifetime <= 0f) { + particles.removeIndex(i); + if (profile.replaceExpired) { + spawn( + MathUtils.random(0, width), + MathUtils.random(0, height), + uiScale, + randomColor(colorA, colorB, colorC, colorD)); + } + } + } + + if (profile.spawnChance > 0f && MathUtils.random() < profile.spawnChance) { + spawn( + MathUtils.random(0, width), + 0f, + uiScale, + randomColor(colorA, colorB, colorC, colorD)); + } + } + + public void render(ShapeRenderer shapeRenderer) { + Gdx.gl.glEnable(GL20.GL_BLEND); + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE); + + shapeRenderer.begin(ShapeRenderer.ShapeType.Filled); + for (NeonParticle particle : particles) { + shapeRenderer.setColor(particle.color); + shapeRenderer.circle(particle.position.x, particle.position.y, particle.size); + } + shapeRenderer.end(); + + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); + } + + private void spawn(float x, float y, float uiScale, Color color) { + particles.add(new NeonParticle(x, y, uiScale, color, profile)); + } + + private static Color randomColor(Color colorA, Color colorB, Color colorC, Color colorD) { + float choice = MathUtils.random(); + if (choice < 0.25f) return colorA; + if (choice < 0.5f) return colorB; + if (choice < 0.75f) return colorC; + return colorD; + } + + private static final class NeonParticle { + final Vector2 position; + final Vector2 velocity; + final Color color; + final float size; + final float maxLifetime; + final float alphaMultiplier; + float lifetime; + + private NeonParticle(float x, float y, float uiScale, Color color, Profile profile) { + position = new Vector2(x, y); + velocity = + new Vector2( + MathUtils.random(profile.minVelocityX, profile.maxVelocityX), + MathUtils.random(profile.minVelocityY, profile.maxVelocityY)); + size = MathUtils.random(profile.minSize, profile.maxSize) * uiScale; + maxLifetime = MathUtils.random(profile.minLifetime, profile.maxLifetime); + lifetime = maxLifetime; + alphaMultiplier = profile.alphaMultiplier; + this.color = new Color(color); + } + + private void update(float delta) { + position.add(velocity.x * delta, velocity.y * delta); + lifetime -= delta; + color.a = (lifetime / maxLifetime) * alphaMultiplier; + } + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/GameScreenComposition.java b/core/src/main/java/ru/project/tower/screens/gamescreen/GameScreenComposition.java new file mode 100644 index 0000000..a72c0d9 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/GameScreenComposition.java @@ -0,0 +1,32 @@ +package ru.project.tower.screens.gamescreen; + +import java.util.Objects; +import ru.project.tower.entities.bullets.BulletSystem; +import ru.project.tower.entities.bullets.BulletTalentProvider; +import ru.project.tower.run.RunSessionFactory; +import ru.project.tower.support.MathUtilsRandomSource; +import ru.project.tower.support.RandomSource; +import ru.project.tower.support.ViewportSize; + + +public final class GameScreenComposition { + private final GameScreenDependencies dependencies; + private final RandomSource random; + + public GameScreenComposition(GameScreenDependencies dependencies) { + this(dependencies, new MathUtilsRandomSource()); + } + + GameScreenComposition(GameScreenDependencies dependencies, RandomSource random) { + this.dependencies = Objects.requireNonNull(dependencies, "dependencies"); + this.random = Objects.requireNonNull(random, "random"); + } + + public BulletSystem createBulletSystem() { + return new BulletSystem(BulletTalentProvider.fromTalentTree(dependencies.talentTree())); + } + + public RunSessionFactory createRunSessionFactory(ViewportSize viewportSize) { + return new RunSessionFactory(random, Objects.requireNonNull(viewportSize, "viewportSize")); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/GameScreenDependencies.java b/core/src/main/java/ru/project/tower/screens/gamescreen/GameScreenDependencies.java new file mode 100644 index 0000000..2313cbf --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/GameScreenDependencies.java @@ -0,0 +1,71 @@ +package ru.project.tower.screens.gamescreen; + +import java.util.Objects; +import ru.project.tower.GameContext; +import ru.project.tower.GameState; +import ru.project.tower.abilities.PlayerAbilities; +import ru.project.tower.player.PlayerStats; +import ru.project.tower.screens.gamescreen.layout.SafeAreaInsetsProvider; +import ru.project.tower.support.GameAssetService; +import ru.project.tower.talents.TalentTree; + + +public final class GameScreenDependencies { + private final PlayerStats playerStats; + private final PlayerAbilities playerAbilities; + private final GameState gameState; + private final TalentTree talentTree; + private final GameAssetService assetService; + private final SafeAreaInsetsProvider safeAreaInsetsProvider; + + public GameScreenDependencies( + PlayerStats playerStats, + PlayerAbilities playerAbilities, + GameState gameState, + TalentTree talentTree, + GameAssetService assetService, + SafeAreaInsetsProvider safeAreaInsetsProvider) { + this.playerStats = Objects.requireNonNull(playerStats, "playerStats"); + this.playerAbilities = Objects.requireNonNull(playerAbilities, "playerAbilities"); + this.gameState = Objects.requireNonNull(gameState, "gameState"); + this.talentTree = Objects.requireNonNull(talentTree, "talentTree"); + this.assetService = Objects.requireNonNull(assetService, "assetService"); + this.safeAreaInsetsProvider = + Objects.requireNonNull(safeAreaInsetsProvider, "safeAreaInsetsProvider"); + } + + public static GameScreenDependencies from(GameContext ctx) { + Objects.requireNonNull(ctx, "ctx"); + return new GameScreenDependencies( + ctx.playerStats, + ctx.playerAbilities, + ctx.gameState, + ctx.talentTree, + ctx.assetService, + ctx.safeAreaInsetsProvider); + } + + public PlayerStats playerStats() { + return playerStats; + } + + public PlayerAbilities playerAbilities() { + return playerAbilities; + } + + public GameState gameState() { + return gameState; + } + + public TalentTree talentTree() { + return talentTree; + } + + public GameAssetService assetService() { + return assetService; + } + + public SafeAreaInsetsProvider safeAreaInsetsProvider() { + return safeAreaInsetsProvider; + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/abilities/GameScreenAbilityHost.java b/core/src/main/java/ru/project/tower/screens/gamescreen/abilities/GameScreenAbilityHost.java new file mode 100644 index 0000000..e5c0c5e --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/abilities/GameScreenAbilityHost.java @@ -0,0 +1,122 @@ +package ru.project.tower.screens.gamescreen.abilities; + +import com.badlogic.gdx.graphics.Color; +import java.util.Objects; +import ru.project.tower.abilities.AbilityHost; +import ru.project.tower.abilities.Turret; +import ru.project.tower.entities.bullets.BulletSystem; +import ru.project.tower.entities.circles.BaseCircleData; +import ru.project.tower.run.GameplayEventSink; +import ru.project.tower.systems.EnemyClassifier; +import ru.project.tower.systems.PlayerShootingSystem; + +public final class GameScreenAbilityHost implements AbilityHost { + private final Host host; + private final BulletSystem bulletSystem; + private final PlayerShootingSystem playerShootingSystem; + private final GameplayEventSink gameplayEventSink; + + public GameScreenAbilityHost( + Host host, + BulletSystem bulletSystem, + PlayerShootingSystem playerShootingSystem, + GameplayEventSink gameplayEventSink) { + this.host = Objects.requireNonNull(host, "host"); + this.bulletSystem = Objects.requireNonNull(bulletSystem, "bulletSystem"); + this.playerShootingSystem = + Objects.requireNonNull(playerShootingSystem, "playerShootingSystem"); + this.gameplayEventSink = Objects.requireNonNull(gameplayEventSink, "gameplayEventSink"); + } + + @Override + public void addFloatingText(float x, float y, String text, Color color) { + host.addFloatingText(x, y, text, color); + } + + @Override + public void createExplosion(float x, float y, Color color) { + host.createExplosion(x, y, color); + } + + @Override + public void triggerKillShake() { + host.triggerKillShake(); + } + + @Override + public void triggerCritHitstop() { + host.triggerCritHitstop(); + } + + @Override + public int effectiveBulletDamage() { + return bulletSystem.getEffectiveDamage(host.activeBonusDamageMultiplier()); + } + + @Override + public float abilityScalingFactor() { + return host.abilityScalingFactor(); + } + + @Override + public float gameScale() { + return host.gameScale(); + } + + @Override + public long abilityCooldownReductionMs() { + return host.abilityCooldownReductionMs(); + } + + @Override + public boolean isBoss(BaseCircleData circle) { + return EnemyClassifier.isBoss(circle); + } + + @Override + public void addMoney(int amount) { + host.addMoney(amount); + } + + @Override + public void killEnemy(BaseCircleData enemy) { + host.killEnemy(enemy); + } + + @Override + public void onTurretShot(Turret turret, BaseCircleData target, long now) { + playerShootingSystem.shootTurretAtTarget( + turret, + target, + bulletSystem, + gameplayEventSink, + host.adaptedBulletRadius(), + host.gameScale() * host.activeBonusSpeedMultiplier()); + } + + public interface Host { + void addFloatingText(float x, float y, String text, Color color); + + void createExplosion(float x, float y, Color color); + + void triggerKillShake(); + + void triggerCritHitstop(); + + float activeBonusDamageMultiplier(); + + float abilityScalingFactor(); + + float gameScale(); + + long abilityCooldownReductionMs(); + + void addMoney(int amount); + + void killEnemy(BaseCircleData enemy); + + float activeBonusSpeedMultiplier(); + + float adaptedBulletRadius(); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/actions/GameScreenActionRouter.java b/core/src/main/java/ru/project/tower/screens/gamescreen/actions/GameScreenActionRouter.java new file mode 100644 index 0000000..7d78bb1 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/actions/GameScreenActionRouter.java @@ -0,0 +1,180 @@ +package ru.project.tower.screens.gamescreen.actions; + +public final class GameScreenActionRouter { + public enum UpgradePanel { + ATTACK, + HEALTH, + ABILITIES + } + + public enum Upgrade { + DAMAGE, + SPEED, + COOLDOWN, + CRIT_CHANCE, + CRIT_MULTIPLIER, + HEALTH, + REGEN + } + + public enum Ability { + FREEZE, + EXPLOSION, + SHIELD, + IMPULSE, + DASH, + PULL, + TURRET + } + + public interface Host { + void showUpgradePanel(UpgradePanel panel); + + void toggleShop(); + + void toggleHudHelp(); + + void scrollUpgrades(int direction); + + void buyUpgrade(Upgrade upgrade); + + void activateAbility(Ability ability); + + void requestPause(); + + void restartGame(); + + void returnToMainMenu(); + + void resumeGameFromPause(); + + void exitPauseToMenu(); + } + + private final Host host; + + public GameScreenActionRouter(Host host) { + this.host = host; + } + + public void perform(GameScreenInputAction action) { + if (routePanelAction(action)) return; + if (routeScrollAction(action)) return; + if (routeUpgradeAction(action)) return; + if (routeAbilityAction(action)) return; + routeMenuAction(action); + } + + private boolean routePanelAction(GameScreenInputAction action) { + switch (action) { + case SHOW_ATTACK_UPGRADES: + host.showUpgradePanel(UpgradePanel.ATTACK); + return true; + case SHOW_HEALTH_UPGRADES: + host.showUpgradePanel(UpgradePanel.HEALTH); + return true; + case SHOW_ABILITY_BUTTONS: + host.showUpgradePanel(UpgradePanel.ABILITIES); + return true; + case TOGGLE_SHOP: + host.toggleShop(); + return true; + case TOGGLE_HUD_HELP: + host.toggleHudHelp(); + return true; + default: + return false; + } + } + + private boolean routeScrollAction(GameScreenInputAction action) { + switch (action) { + case SCROLL_UP: + host.scrollUpgrades(-1); + return true; + case SCROLL_DOWN: + host.scrollUpgrades(1); + return true; + default: + return false; + } + } + + private boolean routeUpgradeAction(GameScreenInputAction action) { + switch (action) { + case UPGRADE_DAMAGE: + host.buyUpgrade(Upgrade.DAMAGE); + return true; + case UPGRADE_SPEED: + host.buyUpgrade(Upgrade.SPEED); + return true; + case UPGRADE_COOLDOWN: + host.buyUpgrade(Upgrade.COOLDOWN); + return true; + case UPGRADE_CRIT_CHANCE: + host.buyUpgrade(Upgrade.CRIT_CHANCE); + return true; + case UPGRADE_CRIT_MULTIPLIER: + host.buyUpgrade(Upgrade.CRIT_MULTIPLIER); + return true; + case UPGRADE_HEALTH: + host.buyUpgrade(Upgrade.HEALTH); + return true; + case UPGRADE_REGEN: + host.buyUpgrade(Upgrade.REGEN); + return true; + default: + return false; + } + } + + private boolean routeAbilityAction(GameScreenInputAction action) { + switch (action) { + case ACTIVATE_FREEZE: + host.activateAbility(Ability.FREEZE); + return true; + case ACTIVATE_EXPLOSION: + host.activateAbility(Ability.EXPLOSION); + return true; + case ACTIVATE_SHIELD: + host.activateAbility(Ability.SHIELD); + return true; + case ACTIVATE_IMPULSE: + host.activateAbility(Ability.IMPULSE); + return true; + case ACTIVATE_DASH: + host.activateAbility(Ability.DASH); + return true; + case ACTIVATE_PULL: + host.activateAbility(Ability.PULL); + return true; + case ACTIVATE_TURRET: + host.activateAbility(Ability.TURRET); + return true; + default: + return false; + } + } + + private void routeMenuAction(GameScreenInputAction action) { + switch (action) { + case REQUEST_PAUSE: + host.requestPause(); + break; + case RESTART_GAME: + host.restartGame(); + break; + case RETURN_TO_MAIN_MENU: + host.returnToMainMenu(); + break; + case RESUME_GAME_FROM_PAUSE: + host.resumeGameFromPause(); + break; + case EXIT_PAUSE_TO_MENU: + host.exitPauseToMenu(); + break; + default: + break; + } + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/actions/GameScreenInputAction.java b/core/src/main/java/ru/project/tower/screens/gamescreen/actions/GameScreenInputAction.java new file mode 100644 index 0000000..fa4e01f --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/actions/GameScreenInputAction.java @@ -0,0 +1,30 @@ +package ru.project.tower.screens.gamescreen.actions; + +public enum GameScreenInputAction { + SHOW_ATTACK_UPGRADES, + SHOW_HEALTH_UPGRADES, + SHOW_ABILITY_BUTTONS, + TOGGLE_SHOP, + TOGGLE_HUD_HELP, + SCROLL_UP, + SCROLL_DOWN, + UPGRADE_DAMAGE, + UPGRADE_SPEED, + UPGRADE_COOLDOWN, + UPGRADE_CRIT_CHANCE, + UPGRADE_CRIT_MULTIPLIER, + UPGRADE_HEALTH, + UPGRADE_REGEN, + ACTIVATE_FREEZE, + ACTIVATE_EXPLOSION, + ACTIVATE_SHIELD, + ACTIVATE_IMPULSE, + ACTIVATE_DASH, + ACTIVATE_PULL, + ACTIVATE_TURRET, + REQUEST_PAUSE, + RESTART_GAME, + RETURN_TO_MAIN_MENU, + RESUME_GAME_FROM_PAUSE, + EXIT_PAUSE_TO_MENU +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/assets/GameScreenFontAssets.java b/core/src/main/java/ru/project/tower/screens/gamescreen/assets/GameScreenFontAssets.java new file mode 100644 index 0000000..18bdf55 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/assets/GameScreenFontAssets.java @@ -0,0 +1,212 @@ +package ru.project.tower.screens.gamescreen.assets; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.utils.Disposable; +import ru.project.tower.screens.gamescreen.visual.GameScreenVisualTokens; +import ru.project.tower.support.RobotoFontFactory; +import ru.project.tower.support.ScreenAssets; + +public final class GameScreenFontAssets implements Disposable { + private static final int REFERENCE_FONT_SIZE = 29; + private static final float FLOATING_TEXT_FONT_SCALE = 1.5f; + private static final float GAME_OVER_TITLE_FONT_SCALE = 1.5f; + private static final float UPGRADE_PICK_FONT_SCALE = 1.5f; + private static final int TOP_BAR_SIZE = 16; + private static final int STAT_SIZE = 16; + private static final int TAB_SIZE = 15; + private static final int CARD_TITLE_SIZE = GameScreenVisualTokens.Type.CARD_TITLE_SIZE; + private static final int CARD_VALUE_SIZE = GameScreenVisualTokens.Type.CARD_VALUE_SIZE; + private static final int CARD_ARROW_SIZE = GameScreenVisualTokens.Type.CARD_ARROW_SIZE; + private static final int PRICE_SIZE = 13; + private static final int DOCK_LABEL_SIZE = 13; + private static final int DOCK_COOLDOWN_SIZE = 15; + + private ScreenAssets screenAssets; + private BitmapFont font; + private BitmapFont floatingTextFont; + private BitmapFont gameOverTitleFont; + private BitmapFont upgradePickFont; + private HudFonts hudFonts; + + public void rebuild(int fontSize) { + dispose(); + + screenAssets = new ScreenAssets(); + font = + screenAssets.font( + "default", + RobotoFontFactory.generate( + RobotoFontFactory.spec( + fontSize, + 0f, + Color.CLEAR, + Color.WHITE, + 0, + 0, + Color.CLEAR))); + floatingTextFont = + screenAssets.font( + "floating-text", + RobotoFontFactory.generate( + RobotoFontFactory.spec( + Math.round(fontSize * FLOATING_TEXT_FONT_SCALE), + 0f, + Color.CLEAR, + Color.WHITE, + 0, + 0, + Color.CLEAR))); + gameOverTitleFont = + screenAssets.font( + "game-over-title", + RobotoFontFactory.generate( + RobotoFontFactory.spec( + Math.round(fontSize * GAME_OVER_TITLE_FONT_SCALE), + 0f, + Color.CLEAR, + Color.WHITE, + 0, + 0, + Color.CLEAR))); + upgradePickFont = + screenAssets.font( + "upgrade-pick", + RobotoFontFactory.generate( + RobotoFontFactory.spec( + Math.round(fontSize * UPGRADE_PICK_FONT_SCALE), + 0f, + Color.CLEAR, + Color.WHITE, + 0, + 0, + Color.CLEAR))); + hudFonts = new HudFonts(screenAssets, tokenScale(fontSize)); + } + + public BitmapFont font() { + return font; + } + + public BitmapFont floatingTextFont() { + return floatingTextFont; + } + + public BitmapFont gameOverTitleFont() { + return gameOverTitleFont; + } + + public BitmapFont upgradePickFont() { + return upgradePickFont; + } + + public HudFonts hudFonts() { + return hudFonts; + } + + @Override + public void dispose() { + if (screenAssets != null) { + screenAssets.dispose(); + } + screenAssets = null; + font = null; + floatingTextFont = null; + gameOverTitleFont = null; + upgradePickFont = null; + hudFonts = null; + } + + private static float tokenScale(int fontSize) { + return Math.max(0.72f, fontSize / (float) REFERENCE_FONT_SIZE); + } + + private static BitmapFont generateUiTokenFont( + ScreenAssets screenAssets, String name, int size) { + return screenAssets.font( + name, + RobotoFontFactory.generateUi( + RobotoFontFactory.spec( + size, 0f, Color.CLEAR, Color.WHITE, 0, 0, Color.CLEAR))); + } + + private static int scaledSize(int referenceSize, float scale) { + return Math.max(8, Math.round(referenceSize * scale)); + } + + public static final class HudFonts { + private final BitmapFont topBar; + private final BitmapFont stat; + private final BitmapFont tab; + private final BitmapFont cardTitle; + private final BitmapFont cardValue; + private final BitmapFont cardArrow; + private final BitmapFont price; + private final BitmapFont dockLabel; + private final BitmapFont dockCooldown; + + private HudFonts(ScreenAssets screenAssets, float scale) { + topBar = + generateUiTokenFont( + screenAssets, "hud-top-bar", scaledSize(TOP_BAR_SIZE, scale)); + stat = generateUiTokenFont(screenAssets, "hud-stat", scaledSize(STAT_SIZE, scale)); + tab = generateUiTokenFont(screenAssets, "hud-tab", scaledSize(TAB_SIZE, scale)); + cardTitle = + generateUiTokenFont( + screenAssets, "hud-card-title", scaledSize(CARD_TITLE_SIZE, scale)); + cardValue = + generateUiTokenFont( + screenAssets, "hud-card-value", scaledSize(CARD_VALUE_SIZE, scale)); + cardArrow = + generateUiTokenFont( + screenAssets, "hud-card-arrow", scaledSize(CARD_ARROW_SIZE, scale)); + price = + generateUiTokenFont( + screenAssets, "hud-price", scaledSize(PRICE_SIZE, scale)); + dockLabel = + generateUiTokenFont( + screenAssets, "hud-dock-label", scaledSize(DOCK_LABEL_SIZE, scale)); + dockCooldown = + generateUiTokenFont( + screenAssets, + "hud-dock-cooldown", + scaledSize(DOCK_COOLDOWN_SIZE, scale)); + } + + public BitmapFont topBar() { + return topBar; + } + + public BitmapFont stat() { + return stat; + } + + public BitmapFont tab() { + return tab; + } + + public BitmapFont cardTitle() { + return cardTitle; + } + + public BitmapFont cardValue() { + return cardValue; + } + + public BitmapFont cardArrow() { + return cardArrow; + } + + public BitmapFont price() { + return price; + } + + public BitmapFont dockLabel() { + return dockLabel; + } + + public BitmapFont dockCooldown() { + return dockCooldown; + } + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/assets/GameScreenMaterialAssets.java b/core/src/main/java/ru/project/tower/screens/gamescreen/assets/GameScreenMaterialAssets.java new file mode 100644 index 0000000..f7b873f --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/assets/GameScreenMaterialAssets.java @@ -0,0 +1,1056 @@ +package ru.project.tower.screens.gamescreen.assets; + +import com.badlogic.gdx.graphics.Pixmap; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.utils.Disposable; + +public final class GameScreenMaterialAssets implements Disposable { + private static final int RANGE_RING_SUPERSAMPLE = 4; + private static final int BONUS_ORB_SUPERSAMPLE = 4; + private static final int ENEMY_SUPERSAMPLE = 4; + private static final int HUD_ICON_SUPERSAMPLE = 4; + private static final int ABILITY_SUPERSAMPLE = 4; + private static final float FAST_ENEMY_CORE_ALPHA = 0.10f; + private static final float ARMORED_ENEMY_CUTOUT_ALPHA = 0.82f; + private static final float ARMORED_ENEMY_PLATE_ALPHA = 0.12f; + private static final int SPLITTER_ENEMY_SPOKES = 4; + private static final float RANGE_RING_HALF_THICKNESS = 0.34f; + private static final float RANGE_RING_FADE = 0.86f; + + private Texture radialGlow; + private Texture playerRangeGlow; + private Texture cooldownRing; + private Texture basicEnemy; + private Texture fastEnemy; + private Texture armoredEnemy; + private Texture supportEnemy; + private Texture splitterEnemy; + private Texture playerTower; + private Texture rangeRing; + private Texture bonusOrb; + private Texture hudAttackIcon; + private Texture hudRegenIcon; + private Texture hudCooldownIcon; + private Texture hudCritIcon; + private Texture hudShieldIcon; + private Texture hudBonusIcon; + private Texture abilityShieldShell; + private Texture abilityShockwave; + private Texture abilityTurretCore; + + public void rebuild() { + dispose(); + radialGlow = textureFrom(createRadialGlow(96)); + playerRangeGlow = textureFrom(createPlayerRangeGlow(192)); + cooldownRing = textureFrom(createCooldownRing(96)); + basicEnemy = textureFrom(createCircleEnemy(64, BasicEnemyStyle.BASIC)); + fastEnemy = textureFrom(createFastEnemy(64)); + armoredEnemy = textureFrom(createArmoredEnemy(64)); + supportEnemy = textureFrom(createCircleEnemy(64, BasicEnemyStyle.SUPPORT)); + splitterEnemy = textureFrom(createSplitterEnemy(64)); + playerTower = textureFrom(createPlayerTower(128)); + rangeRing = textureFrom(createRangeRing(384)); + bonusOrb = textureFrom(createBonusOrb(96)); + hudAttackIcon = hudIconTextureFrom(createHudIcon(96, HudIconStyle.SWORD)); + hudRegenIcon = hudIconTextureFrom(createHudIcon(96, HudIconStyle.PLUS)); + hudCooldownIcon = hudIconTextureFrom(createHudIcon(96, HudIconStyle.COOLDOWN)); + hudCritIcon = hudIconTextureFrom(createHudIcon(96, HudIconStyle.DIAMOND)); + hudShieldIcon = hudIconTextureFrom(createHudIcon(96, HudIconStyle.SHIELD)); + hudBonusIcon = hudIconTextureFrom(createHudIcon(96, HudIconStyle.HEX)); + abilityShieldShell = textureFrom(createAbilityShieldShell(192)); + abilityShockwave = textureFrom(createAbilityShockwave(192)); + abilityTurretCore = textureFrom(createAbilityTurretCore(96)); + } + + public Texture radialGlow() { + return radialGlow; + } + + public Texture playerRangeGlow() { + return playerRangeGlow; + } + + public Texture cooldownRing() { + return cooldownRing; + } + + public Texture basicEnemy() { + return basicEnemy; + } + + public Texture fastEnemy() { + return fastEnemy; + } + + public Texture armoredEnemy() { + return armoredEnemy; + } + + public Texture supportEnemy() { + return supportEnemy; + } + + public Texture splitterEnemy() { + return splitterEnemy; + } + + public Texture playerTower() { + return playerTower; + } + + public Texture rangeRing() { + return rangeRing; + } + + public Texture bonusOrb() { + return bonusOrb; + } + + public Texture hudAttackIcon() { + return hudAttackIcon; + } + + public Texture hudRegenIcon() { + return hudRegenIcon; + } + + public Texture hudCooldownIcon() { + return hudCooldownIcon; + } + + public Texture hudCritIcon() { + return hudCritIcon; + } + + public Texture hudShieldIcon() { + return hudShieldIcon; + } + + public Texture hudBonusIcon() { + return hudBonusIcon; + } + + public Texture abilityShieldShell() { + return abilityShieldShell; + } + + public Texture abilityShockwave() { + return abilityShockwave; + } + + public Texture abilityTurretCore() { + return abilityTurretCore; + } + + @Override + public void dispose() { + if (radialGlow != null) { + radialGlow.dispose(); + } + if (playerRangeGlow != null) { + playerRangeGlow.dispose(); + } + if (cooldownRing != null) { + cooldownRing.dispose(); + } + if (basicEnemy != null) { + basicEnemy.dispose(); + } + if (fastEnemy != null) { + fastEnemy.dispose(); + } + if (armoredEnemy != null) { + armoredEnemy.dispose(); + } + if (supportEnemy != null) { + supportEnemy.dispose(); + } + if (splitterEnemy != null) { + splitterEnemy.dispose(); + } + if (playerTower != null) { + playerTower.dispose(); + } + if (rangeRing != null) { + rangeRing.dispose(); + } + if (bonusOrb != null) { + bonusOrb.dispose(); + } + if (hudAttackIcon != null) { + hudAttackIcon.dispose(); + } + if (hudRegenIcon != null) { + hudRegenIcon.dispose(); + } + if (hudCooldownIcon != null) { + hudCooldownIcon.dispose(); + } + if (hudCritIcon != null) { + hudCritIcon.dispose(); + } + if (hudShieldIcon != null) { + hudShieldIcon.dispose(); + } + if (hudBonusIcon != null) { + hudBonusIcon.dispose(); + } + if (abilityShieldShell != null) { + abilityShieldShell.dispose(); + } + if (abilityShockwave != null) { + abilityShockwave.dispose(); + } + if (abilityTurretCore != null) { + abilityTurretCore.dispose(); + } + radialGlow = null; + playerRangeGlow = null; + cooldownRing = null; + basicEnemy = null; + fastEnemy = null; + armoredEnemy = null; + supportEnemy = null; + splitterEnemy = null; + playerTower = null; + rangeRing = null; + bonusOrb = null; + hudAttackIcon = null; + hudRegenIcon = null; + hudCooldownIcon = null; + hudCritIcon = null; + hudShieldIcon = null; + hudBonusIcon = null; + abilityShieldShell = null; + abilityShockwave = null; + abilityTurretCore = null; + } + + private static Texture textureFrom(Pixmap pixmap) { + Texture texture = new Texture(pixmap); + texture.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear); + pixmap.dispose(); + return texture; + } + + private static Texture hudIconTextureFrom(Pixmap pixmap) { + Texture texture = new Texture(pixmap, true); + texture.setFilter(Texture.TextureFilter.MipMapLinearLinear, Texture.TextureFilter.Linear); + pixmap.dispose(); + return texture; + } + + private static Pixmap createRadialGlow(int size) { + Pixmap pixmap = new Pixmap(size, size, Pixmap.Format.RGBA8888); + float center = (size - 1) / 2f; + float radius = center; + for (int y = 0; y < size; y++) { + for (int x = 0; x < size; x++) { + float dx = (x - center) / radius; + float dy = (y - center) / radius; + float distance = (float) Math.sqrt(dx * dx + dy * dy); + float alpha = smoothGlow(distance); + pixmap.drawPixel(x, y, rgba(255, 255, 255, alpha)); + } + } + return pixmap; + } + + private static Pixmap createPlayerRangeGlow(int size) { + Pixmap pixmap = new Pixmap(size, size, Pixmap.Format.RGBA8888); + float center = (size - 1) / 2f; + float radius = center; + for (int y = 0; y < size; y++) { + for (int x = 0; x < size; x++) { + float dx = (x - center) / radius; + float dy = (y - center) / radius; + float distance = (float) Math.sqrt(dx * dx + dy * dy); + float alpha = playerRangeGlowAlpha(distance); + pixmap.drawPixel(x, y, rgba(255, 255, 255, alpha)); + } + } + return pixmap; + } + + private static Pixmap createCooldownRing(int size) { + Pixmap pixmap = new Pixmap(size, size, Pixmap.Format.RGBA8888); + float center = (size - 1) / 2f; + float outer = center; + float inner = center * 0.74f; + float innerFade = center * 0.75f; + for (int y = 0; y < size; y++) { + for (int x = 0; x < size; x++) { + float dx = x - center; + float dy = y - center; + float distance = (float) Math.sqrt(dx * dx + dy * dy); + if (distance > outer) continue; + float angle = (float) Math.toDegrees(Math.atan2(dy, dx)); + if (angle < 0f) angle += 360f; + boolean activeArc = angle >= 275f || angle <= 160f; + int conicR = activeArc ? 34 : 255; + int conicG = activeArc ? 217 : 255; + int conicB = activeArc ? 255 : 255; + float conicA = activeArc ? 0.95f : 0.12f; + int pixel = rgba(conicR, conicG, conicB, conicA); + if (distance < innerFade) { + float radialAlpha = + distance < inner + ? 0.96f + : 0.96f * (innerFade - distance) / (innerFade - inner); + pixel = mixRgba(conicR, conicG, conicB, conicA, 13, 17, 28, radialAlpha); + } + pixmap.drawPixel(x, y, pixel); + } + } + return pixmap; + } + + private static Pixmap createCircleEnemy(int size, BasicEnemyStyle style) { + Pixmap pixmap = new Pixmap(size, size, Pixmap.Format.RGBA8888); + float center = (size - 1) / 2f; + float outer = center * 0.76f; + float inner = outer * 0.67f; + int borderR = style == BasicEnemyStyle.BASIC ? 178 : 180; + int borderG = style == BasicEnemyStyle.BASIC ? 197 : 255; + int borderB = style == BasicEnemyStyle.BASIC ? 255 : 236; + int fillR = style == BasicEnemyStyle.BASIC ? 77 : 37; + int fillG = style == BasicEnemyStyle.BASIC ? 124 : 223; + int fillB = style == BasicEnemyStyle.BASIC ? 255 : 181; + float samples = ENEMY_SUPERSAMPLE * ENEMY_SUPERSAMPLE; + for (int y = 0; y < size; y++) { + for (int x = 0; x < size; x++) { + float outerCoverage = 0f; + float innerCoverage = 0f; + for (int sy = 0; sy < ENEMY_SUPERSAMPLE; sy++) { + for (int sx = 0; sx < ENEMY_SUPERSAMPLE; sx++) { + float sampleX = enemySample(x, sx); + float sampleY = enemySample(y, sy); + outerCoverage += circleCoverage(sampleX, sampleY, center, outer); + innerCoverage += circleCoverage(sampleX, sampleY, center, inner); + } + } + outerCoverage /= samples; + innerCoverage /= samples; + if (outerCoverage <= 0f) continue; + float[] pixel = {0f, 0f, 0f, 0f}; + pixel = + blend( + pixel[0], + pixel[1], + pixel[2], + pixel[3], + borderR, + borderG, + borderB, + 0.90f * outerCoverage); + pixel = + blend( + pixel[0], + pixel[1], + pixel[2], + pixel[3], + fillR, + fillG, + fillB, + innerCoverage); + pixmap.drawPixel( + x, + y, + rgba( + Math.round(pixel[0]), + Math.round(pixel[1]), + Math.round(pixel[2]), + pixel[3])); + } + } + if (style == BasicEnemyStyle.SUPPORT) { + drawSupportMark(pixmap, center, size); + } + return pixmap; + } + + private static Pixmap createFastEnemy(int size) { + Pixmap pixmap = new Pixmap(size, size, Pixmap.Format.RGBA8888); + float center = (size - 1) / 2f; + float outer = center * 0.76f; + float inner = outer * 0.62f; + float samples = ENEMY_SUPERSAMPLE * ENEMY_SUPERSAMPLE; + for (int y = 0; y < size; y++) { + for (int x = 0; x < size; x++) { + float outerCoverage = 0f; + float innerCoverage = 0f; + for (int sy = 0; sy < ENEMY_SUPERSAMPLE; sy++) { + for (int sx = 0; sx < ENEMY_SUPERSAMPLE; sx++) { + float sampleX = enemySample(x, sx); + float sampleY = enemySample(y, sy); + outerCoverage += diamondCoverage(sampleX, sampleY, center, outer); + innerCoverage += diamondCoverage(sampleX, sampleY, center, inner); + } + } + outerCoverage /= samples; + innerCoverage /= samples; + if (outerCoverage <= 0f) continue; + float[] pixel = blend(0f, 0f, 0f, 0f, 255f, 115f, 223f, outerCoverage); + pixel = + blend( + pixel[0], + pixel[1], + pixel[2], + pixel[3], + 255f, + 79f, + 216f, + FAST_ENEMY_CORE_ALPHA * innerCoverage); + pixmap.drawPixel( + x, + y, + rgba( + Math.round(pixel[0]), + Math.round(pixel[1]), + Math.round(pixel[2]), + pixel[3])); + } + } + return pixmap; + } + + private static Pixmap createArmoredEnemy(int size) { + Pixmap pixmap = new Pixmap(size, size, Pixmap.Format.RGBA8888); + float outerInset = size * 0.14f; + float border = size * 0.10f; + float innerInset = outerInset + border; + int inset = rgba(255, 155, 183, 0.22f); + float samples = ENEMY_SUPERSAMPLE * ENEMY_SUPERSAMPLE; + for (int y = 0; y < size; y++) { + for (int x = 0; x < size; x++) { + float outerCoverage = 0f; + float innerCoverage = 0f; + for (int sy = 0; sy < ENEMY_SUPERSAMPLE; sy++) { + for (int sx = 0; sx < ENEMY_SUPERSAMPLE; sx++) { + float sampleX = enemySample(x, sx); + float sampleY = enemySample(y, sy); + outerCoverage += + boxCoverage( + sampleX, + sampleY, + outerInset, + size - outerInset, + outerInset, + size - outerInset); + innerCoverage += + boxCoverage( + sampleX, + sampleY, + innerInset, + size - innerInset, + innerInset, + size - innerInset); + } + } + outerCoverage /= samples; + innerCoverage /= samples; + if (outerCoverage <= 0f) continue; + float[] pixel = blend(0f, 0f, 0f, 0f, 255f, 155f, 183f, outerCoverage); + pixel = + blend( + pixel[0], + pixel[1], + pixel[2], + pixel[3], + 11f, + 10f, + 18f, + ARMORED_ENEMY_CUTOUT_ALPHA * innerCoverage); + pixel = + blend( + pixel[0], + pixel[1], + pixel[2], + pixel[3], + 255f, + 122f, + 160f, + ARMORED_ENEMY_PLATE_ALPHA * innerCoverage); + pixmap.drawPixel( + x, + y, + rgba( + Math.round(pixel[0]), + Math.round(pixel[1]), + Math.round(pixel[2]), + pixel[3])); + } + } + float insetBorder = border * 0.8f; + for (int y = Math.round(innerInset + insetBorder); + y <= Math.round(size - innerInset - insetBorder); + y++) { + for (int x = Math.round(innerInset + insetBorder); + x <= Math.round(size - innerInset - insetBorder); + x++) { + boolean edge = + x <= innerInset + insetBorder * 2f + || x >= size - innerInset - insetBorder * 2f + || y <= innerInset + insetBorder * 2f + || y >= size - innerInset - insetBorder * 2f; + if (edge) pixmap.drawPixel(x, y, inset); + } + } + return pixmap; + } + + private static Pixmap createSplitterEnemy(int size) { + Pixmap pixmap = new Pixmap(size, size, Pixmap.Format.RGBA8888); + float center = (size - 1) / 2f; + float outer = center * 0.74f; + float inner = outer * 0.45f; + float spokeStart = inner * 0.54f; + float spokeEnd = outer * 0.88f; + float spokeThickness = size * 0.045f; + float samples = ENEMY_SUPERSAMPLE * ENEMY_SUPERSAMPLE; + for (int y = 0; y < size; y++) { + for (int x = 0; x < size; x++) { + float outerCoverage = 0f; + float innerCoverage = 0f; + float spokeCoverage = 0f; + for (int sy = 0; sy < ENEMY_SUPERSAMPLE; sy++) { + for (int sx = 0; sx < ENEMY_SUPERSAMPLE; sx++) { + float sampleX = enemySample(x, sx); + float sampleY = enemySample(y, sy); + outerCoverage += circleCoverage(sampleX, sampleY, center, outer); + innerCoverage += circleCoverage(sampleX, sampleY, center, inner); + float sampleSpokeCoverage = 0f; + for (int spoke = 0; spoke < SPLITTER_ENEMY_SPOKES; spoke++) { + float angle = (float) (spoke * Math.PI * 2f / SPLITTER_ENEMY_SPOKES); + sampleSpokeCoverage = + Math.max( + sampleSpokeCoverage, + spokeCoverage( + sampleX, + sampleY, + center, + spokeStart, + spokeEnd, + spokeThickness, + angle)); + } + spokeCoverage += sampleSpokeCoverage; + } + } + outerCoverage /= samples; + innerCoverage /= samples; + spokeCoverage /= samples; + if (outerCoverage <= 0f && spokeCoverage <= 0f) continue; + float[] pixel = {0f, 0f, 0f, 0f}; + pixel = + blend( + pixel[0], + pixel[1], + pixel[2], + pixel[3], + 190f, + 202f, + 255f, + 0.80f * outerCoverage); + pixel = + blend( + pixel[0], + pixel[1], + pixel[2], + pixel[3], + 92f, + 78f, + 255f, + 0.44f * innerCoverage); + pixel = + blend( + pixel[0], + pixel[1], + pixel[2], + pixel[3], + 70f, + 235f, + 255f, + 0.92f * spokeCoverage); + pixmap.drawPixel( + x, + y, + rgba( + Math.round(pixel[0]), + Math.round(pixel[1]), + Math.round(pixel[2]), + pixel[3])); + } + } + return pixmap; + } + + private static Pixmap createPlayerTower(int size) { + Pixmap pixmap = new Pixmap(size, size, Pixmap.Format.RGBA8888); + float center = (size - 1) / 2f; + float halfBody = size * (27f / 134f); + float border = size * (3f / 134f); + float spread = size * (7f / 134f); + float blur = size * (24f / 134f); + for (int y = 0; y < size; y++) { + for (int x = 0; x < size; x++) { + float dx = Math.abs(x - center) - halfBody; + float dy = Math.abs(y - center) - halfBody; + float outsideX = Math.max(dx, 0f); + float outsideY = Math.max(dy, 0f); + float outsideDistance = + (float) Math.sqrt(outsideX * outsideX + outsideY * outsideY); + float insideDistance = Math.max(dx, dy); + float centerDx = x - center; + float centerDy = y - center; + float radialDistance = (float) Math.sqrt(centerDx * centerDx + centerDy * centerDy); + float glowRadius = halfBody + blur * 1.45f; + + float red = 0f; + float green = 0f; + float blue = 0f; + float alpha = 0f; + + float glowAlpha = + playerTowerGlowAlpha(radialDistance, glowRadius, outsideDistance, spread); + if (outsideDistance > 0f || insideDistance <= 0f) { + float[] blended = blend(red, green, blue, alpha, 73f, 92f, 255f, glowAlpha); + red = blended[0]; + green = blended[1]; + blue = blended[2]; + alpha = blended[3]; + } + + if (insideDistance <= 0f) { + float[] filled = blend(red, green, blue, alpha, 83f, 97f, 255f, 1f); + red = filled[0]; + green = filled[1]; + blue = filled[2]; + alpha = filled[3]; + if (insideDistance >= -border) { + float[] bordered = blend(red, green, blue, alpha, 154f, 165f, 255f, 0.80f); + red = bordered[0]; + green = bordered[1]; + blue = bordered[2]; + alpha = bordered[3]; + } + } + + pixmap.drawPixel( + x, y, rgba(Math.round(red), Math.round(green), Math.round(blue), alpha)); + } + } + return pixmap; + } + + private static float playerTowerGlowAlpha( + float radialDistance, float glowRadius, float outsideDistance, float spread) { + float radialFalloff = Math.max(0f, 1f - radialDistance / glowRadius); + float alpha = radialFalloff * radialFalloff * 0.50f; + if (outsideDistance <= spread) { + alpha += 0.18f * (1f - outsideDistance / spread) * radialFalloff; + } + return alpha; + } + + private static Pixmap createRangeRing(int size) { + Pixmap pixmap = new Pixmap(size, size, Pixmap.Format.RGBA8888); + float center = (size - 1) / 2f; + float radius = center - 1f; + float samples = RANGE_RING_SUPERSAMPLE * RANGE_RING_SUPERSAMPLE; + for (int y = 0; y < size; y++) { + for (int x = 0; x < size; x++) { + float coverage = 0f; + for (int sy = 0; sy < RANGE_RING_SUPERSAMPLE; sy++) { + for (int sx = 0; sx < RANGE_RING_SUPERSAMPLE; sx++) { + float sampleX = x + (sx + 0.5f) / RANGE_RING_SUPERSAMPLE - 0.5f; + float sampleY = y + (sy + 0.5f) / RANGE_RING_SUPERSAMPLE - 0.5f; + coverage += rangeRingCoverage(sampleX, sampleY, center, radius); + } + } + coverage /= samples; + if (coverage <= 0f) continue; + pixmap.drawPixel(x, y, rgba(255, 255, 255, coverage)); + } + } + return pixmap; + } + + private static float rangeRingCoverage(float x, float y, float center, float radius) { + float dx = x - center; + float dy = y - center; + float distance = (float) Math.sqrt(dx * dx + dy * dy); + float ringDistance = Math.abs(distance - radius); + return Math.max( + 0f, + Math.min( + 1f, + (RANGE_RING_HALF_THICKNESS + RANGE_RING_FADE - ringDistance) + / RANGE_RING_FADE)); + } + + private static Pixmap createBonusOrb(int size) { + Pixmap pixmap = new Pixmap(size, size, Pixmap.Format.RGBA8888); + float center = (size - 1) / 2f; + float radius = center; + float samples = BONUS_ORB_SUPERSAMPLE * BONUS_ORB_SUPERSAMPLE; + for (int y = 0; y < size; y++) { + for (int x = 0; x < size; x++) { + float coreAlpha = 0f; + float glowAlpha = 0f; + for (int sy = 0; sy < BONUS_ORB_SUPERSAMPLE; sy++) { + for (int sx = 0; sx < BONUS_ORB_SUPERSAMPLE; sx++) { + float sampleX = x + (sx + 0.5f) / BONUS_ORB_SUPERSAMPLE - 0.5f; + float sampleY = y + (sy + 0.5f) / BONUS_ORB_SUPERSAMPLE - 0.5f; + float coverage = bonusOrbCoverage(sampleX, sampleY, center, radius); + float dx = (sampleX - center) / radius; + float dy = (sampleY - center) / radius; + float distance = (float) Math.sqrt(dx * dx + dy * dy); + coreAlpha += distance <= 0.45f ? coverage : 0f; + glowAlpha += coverage * Math.max(0f, 1f - distance); + } + } + coreAlpha /= samples; + glowAlpha /= samples; + float alpha = Math.min(1f, coreAlpha * 0.92f + glowAlpha * 0.58f); + if (alpha <= 0f) continue; + pixmap.drawPixel(x, y, rgba(255, 255, 255, alpha)); + } + } + return pixmap; + } + + private static Pixmap createHudIcon(int size, HudIconStyle style) { + Pixmap pixmap = new Pixmap(size, size, Pixmap.Format.RGBA8888); + float samples = HUD_ICON_SUPERSAMPLE * HUD_ICON_SUPERSAMPLE; + float max = size - 1f; + for (int y = 0; y < size; y++) { + for (int x = 0; x < size; x++) { + float coverage = 0f; + for (int sy = 0; sy < HUD_ICON_SUPERSAMPLE; sy++) { + for (int sx = 0; sx < HUD_ICON_SUPERSAMPLE; sx++) { + float sampleX = + x + (sx + 0.5f) / HUD_ICON_SUPERSAMPLE - 0.5f; + float sampleY = + y + (sy + 0.5f) / HUD_ICON_SUPERSAMPLE - 0.5f; + float nx = sampleX / max * 2f - 1f; + float ny = 1f - sampleY / max * 2f; + coverage += hudIconCoverage(nx, ny, style); + } + } + coverage /= samples; + if (coverage > 0f) { + pixmap.drawPixel(x, y, rgba(255, 255, 255, coverage)); + } + } + } + return pixmap; + } + + private static Pixmap createAbilityShieldShell(int size) { + Pixmap pixmap = new Pixmap(size, size, Pixmap.Format.RGBA8888); + float center = (size - 1f) / 2f; + float radius = center * 0.86f; + float samples = ABILITY_SUPERSAMPLE * ABILITY_SUPERSAMPLE; + for (int y = 0; y < size; y++) { + for (int x = 0; x < size; x++) { + float alpha = 0f; + for (int sy = 0; sy < ABILITY_SUPERSAMPLE; sy++) { + for (int sx = 0; sx < ABILITY_SUPERSAMPLE; sx++) { + float sampleX = x + (sx + 0.5f) / ABILITY_SUPERSAMPLE - 0.5f; + float sampleY = y + (sy + 0.5f) / ABILITY_SUPERSAMPLE - 0.5f; + float dx = sampleX - center; + float dy = sampleY - center; + float distance = (float) Math.sqrt(dx * dx + dy * dy); + float ring = 1f - clamp01(Math.abs(distance - radius) / (size * 0.040f)); + float inner = 1f - clamp01(distance / (radius * 0.78f)); + float outerGlow = 1f - clamp01((distance - radius) / (size * 0.18f)); + alpha += Math.max(ring * 0.88f, Math.max(inner * 0.13f, outerGlow * 0.16f)); + } + } + alpha = clamp01(alpha / samples); + if (alpha > 0f) pixmap.drawPixel(x, y, rgba(255, 255, 255, alpha)); + } + } + return pixmap; + } + + private static Pixmap createAbilityShockwave(int size) { + Pixmap pixmap = new Pixmap(size, size, Pixmap.Format.RGBA8888); + float center = (size - 1f) / 2f; + float radius = center * 0.72f; + float samples = ABILITY_SUPERSAMPLE * ABILITY_SUPERSAMPLE; + for (int y = 0; y < size; y++) { + for (int x = 0; x < size; x++) { + float alpha = 0f; + for (int sy = 0; sy < ABILITY_SUPERSAMPLE; sy++) { + for (int sx = 0; sx < ABILITY_SUPERSAMPLE; sx++) { + float sampleX = x + (sx + 0.5f) / ABILITY_SUPERSAMPLE - 0.5f; + float sampleY = y + (sy + 0.5f) / ABILITY_SUPERSAMPLE - 0.5f; + float dx = sampleX - center; + float dy = sampleY - center; + float distance = (float) Math.sqrt(dx * dx + dy * dy); + float ring = 1f - clamp01(Math.abs(distance - radius) / (size * 0.06f)); + float core = 1f - clamp01(distance / (radius * 0.38f)); + alpha += Math.max(ring * 0.72f, core * 0.26f); + } + } + alpha = clamp01(alpha / samples); + if (alpha > 0f) pixmap.drawPixel(x, y, rgba(255, 255, 255, alpha)); + } + } + return pixmap; + } + + private static Pixmap createAbilityTurretCore(int size) { + Pixmap pixmap = new Pixmap(size, size, Pixmap.Format.RGBA8888); + float center = (size - 1f) / 2f; + float radius = center * 0.58f; + float samples = ABILITY_SUPERSAMPLE * ABILITY_SUPERSAMPLE; + for (int y = 0; y < size; y++) { + for (int x = 0; x < size; x++) { + float alpha = 0f; + for (int sy = 0; sy < ABILITY_SUPERSAMPLE; sy++) { + for (int sx = 0; sx < ABILITY_SUPERSAMPLE; sx++) { + float sampleX = x + (sx + 0.5f) / ABILITY_SUPERSAMPLE - 0.5f; + float sampleY = y + (sy + 0.5f) / ABILITY_SUPERSAMPLE - 0.5f; + float dx = sampleX - center; + float dy = sampleY - center; + float distance = (float) Math.sqrt(dx * dx + dy * dy); + float body = circleCoverage(sampleX, sampleY, center, radius); + float rim = 1f - clamp01(Math.abs(distance - radius) / (size * 0.05f)); + float barrel = boxCoverage( + sampleX, + sampleY, + center + radius * 0.10f, + center + radius * 1.06f, + center - radius * 0.12f, + center + radius * 0.12f); + alpha += Math.max(Math.max(body * 0.55f, rim), barrel); + } + } + alpha = clamp01(alpha / samples); + if (alpha > 0f) pixmap.drawPixel(x, y, rgba(255, 255, 255, alpha)); + } + } + return pixmap; + } + + private static float hudIconCoverage(float x, float y, HudIconStyle style) { + switch (style) { + case SWORD: + return swordCoverage(x, y); + case PLUS: + return Math.max( + unitBoxCoverage(x, y, -0.12f, 0.12f, -0.72f, 0.72f), + unitBoxCoverage(x, y, -0.72f, 0.72f, -0.12f, 0.12f)); + case COOLDOWN: + float distance = (float) Math.sqrt(x * x + y * y); + float ring = Math.abs(distance - 0.56f) <= 0.12f ? 1f : 0f; + return Math.max(ring, segmentCoverage(x, y, 0f, 0f, 0.38f, 0.38f, 0.10f)); + case DIAMOND: + return Math.abs(Math.abs(x) + Math.abs(y) - 0.70f) <= 0.10f ? 1f : 0f; + case SHIELD: + return shieldCoverage(x, y); + case HEX: + float hexDistance = + Math.max(Math.abs(y), Math.abs(x) * 0.86f + Math.abs(y) * 0.5f); + return Math.abs(hexDistance - 0.68f) <= 0.09f ? 1f : 0f; + default: + return 0f; + } + } + + private static float swordCoverage(float x, float y) { + float axisX = 0.30f; + float axisY = 0.954f; + float crossX = -axisY; + float crossY = axisX; + float u = x * axisX + y * axisY; + float v = x * crossX + y * crossY; + + float blade = 0f; + if (u >= -0.16f && u <= 0.78f) { + float tip = clamp01((0.78f - u) / 0.22f); + float halfWidth = u > 0.56f ? 0.04f + 0.11f * tip : 0.15f; + blade = Math.abs(v) <= halfWidth ? 1f : 0f; + } + float guard = Math.abs(u + 0.24f) <= 0.07f && Math.abs(v) <= 0.48f ? 1f : 0f; + float handle = u >= -0.78f && u <= -0.28f && Math.abs(v) <= 0.085f ? 1f : 0f; + float pommelDistance = (float) Math.sqrt((u + 0.84f) * (u + 0.84f) + v * v); + float pommel = pommelDistance <= 0.13f ? 1f : 0f; + return Math.max(Math.max(blade, guard), Math.max(handle, pommel)); + } + + private static float shieldCoverage(float x, float y) { + float topToBottom = (1f - y) * 0.5f; + float halfWidth; + if (topToBottom < 0.16f) { + halfWidth = 0.82f * topToBottom / 0.16f; + } else if (topToBottom < 0.68f) { + halfWidth = 0.82f - (topToBottom - 0.16f) * 0.14f / 0.52f; + } else { + halfWidth = 0.68f * (1f - topToBottom) / 0.32f; + } + return Math.abs(x) <= halfWidth ? 1f : 0f; + } + + private static float segmentCoverage( + float x, float y, float x1, float y1, float x2, float y2, float width) { + float dx = x2 - x1; + float dy = y2 - y1; + float length2 = dx * dx + dy * dy; + if (length2 <= 0f) return 0f; + float t = ((x - x1) * dx + (y - y1) * dy) / length2; + t = clamp01(t); + float closestX = x1 + dx * t; + float closestY = y1 + dy * t; + float distance = + (float) + Math.sqrt( + (x - closestX) * (x - closestX) + + (y - closestY) * (y - closestY)); + return distance <= width * 0.5f ? 1f : 0f; + } + + private static float unitBoxCoverage( + float x, float y, float left, float right, float bottom, float top) { + return x >= left && x <= right && y >= bottom && y <= top ? 1f : 0f; + } + + private static float bonusOrbCoverage(float x, float y, float center, float radius) { + float dx = (x - center) / radius; + float dy = (y - center) / radius; + float distance = (float) Math.sqrt(dx * dx + dy * dy); + float coreEdge = 0.45f; + if (distance <= coreEdge) { + return 1f; + } + return Math.max(0f, 1f - (distance - coreEdge) / (1f - coreEdge)); + } + + private enum HudIconStyle { + SWORD, + PLUS, + COOLDOWN, + DIAMOND, + SHIELD, + HEX + } + + private static float enemySample(int pixel, int sample) { + return pixel + (sample + 0.5f) / ENEMY_SUPERSAMPLE - 0.5f; + } + + private static float circleCoverage(float x, float y, float center, float radius) { + float dx = x - center; + float dy = y - center; + float distance = (float) Math.sqrt(dx * dx + dy * dy); + return clamp01(radius + 0.5f - distance); + } + + private static float diamondCoverage(float x, float y, float center, float radius) { + float distance = Math.abs(x - center) + Math.abs(y - center); + return clamp01(radius + 0.5f - distance); + } + + private static float boxCoverage( + float x, float y, float left, float right, float bottom, float top) { + float horizontal = Math.min(x - left + 0.5f, right - x + 0.5f); + float vertical = Math.min(y - bottom + 0.5f, top - y + 0.5f); + return clamp01(Math.min(horizontal, vertical)); + } + + private static float spokeCoverage( + float x, + float y, + float center, + float innerRadius, + float outerRadius, + float thickness, + float angle) { + float dx = x - center; + float dy = y - center; + float along = Math.abs(dx * (float) Math.cos(angle) + dy * (float) Math.sin(angle)); + if (along < innerRadius || along > outerRadius) return 0f; + float across = Math.abs(-dx * (float) Math.sin(angle) + dy * (float) Math.cos(angle)); + return clamp01(thickness + 0.5f - across); + } + + private static float clamp01(float value) { + return Math.max(0f, Math.min(1f, value)); + } + + private static void drawSupportMark(Pixmap pixmap, float center, int size) { + int mark = rgba(7, 17, 15, 1f); + int halfWidth = Math.round(size * 0.21f); + int halfThickness = Math.max(1, Math.round(size * 0.03f)); + for (int y = Math.round(center - halfThickness); + y <= Math.round(center + halfThickness); + y++) { + for (int x = Math.round(center - halfWidth); x <= Math.round(center + halfWidth); x++) { + pixmap.drawPixel(x, y, mark); + } + } + for (int y = Math.round(center - halfWidth); y <= Math.round(center + halfWidth); y++) { + for (int x = Math.round(center - halfThickness); + x <= Math.round(center + halfThickness); + x++) { + pixmap.drawPixel(x, y, mark); + } + } + } + + private static float smoothGlow(float distance) { + float clamped = Math.max(0f, Math.min(1f, distance)); + float falloff = 1f - clamped; + return falloff * falloff * falloff; + } + + private static float playerRangeGlowAlpha(float distance) { + float falloff = clamp01(1f - distance); + return (float) Math.pow(falloff, 0.72f); + } + + private static float[] blend( + float baseR, + float baseG, + float baseB, + float baseA, + float sourceR, + float sourceG, + float sourceB, + float sourceA) { + float outA = sourceA + baseA * (1f - sourceA); + if (outA <= 0f) { + return new float[] {0f, 0f, 0f, 0f}; + } + float outR = (sourceR * sourceA + baseR * baseA * (1f - sourceA)) / outA; + float outG = (sourceG * sourceA + baseG * baseA * (1f - sourceA)) / outA; + float outB = (sourceB * sourceA + baseB * baseA * (1f - sourceA)) / outA; + return new float[] {outR, outG, outB, outA}; + } + + private static int rgba(int r, int g, int b, float alpha) { + int a = Math.round(Math.max(0f, Math.min(1f, alpha)) * 255f); + return (r << 24) | (g << 16) | (b << 8) | a; + } + + private static int mixRgba( + int baseR, + int baseG, + int baseB, + float baseA, + int sourceR, + int sourceG, + int sourceB, + float sourceA) { + float[] mixed = blend(baseR, baseG, baseB, baseA, sourceR, sourceG, sourceB, sourceA); + return rgba(Math.round(mixed[0]), Math.round(mixed[1]), Math.round(mixed[2]), mixed[3]); + } + + private enum BasicEnemyStyle { + BASIC, + SUPPORT + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/assets/GameScreenSoundAssets.java b/core/src/main/java/ru/project/tower/screens/gamescreen/assets/GameScreenSoundAssets.java new file mode 100644 index 0000000..75cda24 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/assets/GameScreenSoundAssets.java @@ -0,0 +1,27 @@ +package ru.project.tower.screens.gamescreen.assets; + +import com.badlogic.gdx.utils.Disposable; +import ru.project.tower.run.GameplaySound; +import ru.project.tower.support.GameAssetService; +import ru.project.tower.support.GameplaySoundAssets; + +public final class GameScreenSoundAssets implements Disposable { + private final GameplaySoundAssets sounds; + + public GameScreenSoundAssets(GameAssetService assetService) { + sounds = new GameplaySoundAssets(assetService, "GameScreen"); + } + + public void load() { + sounds.load(); + } + + public void play(GameplaySound sound, float volume, float pitch, float pan) { + sounds.play(sound, volume, pitch, pan); + } + + @Override + public void dispose() { + sounds.dispose(); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/events/GameScreenBulletEffectsHostAdapter.java b/core/src/main/java/ru/project/tower/screens/gamescreen/events/GameScreenBulletEffectsHostAdapter.java new file mode 100644 index 0000000..2ada756 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/events/GameScreenBulletEffectsHostAdapter.java @@ -0,0 +1,42 @@ +package ru.project.tower.screens.gamescreen.events; + +import java.util.Objects; +import ru.project.tower.entities.circles.BaseCircleData; + +public final class GameScreenBulletEffectsHostAdapter implements GameScreenBulletEffectsSink.Host { + private final Port port; + + public GameScreenBulletEffectsHostAdapter(Port port) { + this.port = Objects.requireNonNull(port, "port"); + } + + @Override + public void handleEnemyKilled(BaseCircleData enemy) { + port.handleEnemyKilled(enemy); + } + + @Override + public boolean damagePlayerIfVulnerable(int damage, long damageCooldownMs) { + return port.damagePlayerIfVulnerable(damage, damageCooldownMs); + } + + @Override + public int playerHealth() { + return port.playerHealth(); + } + + @Override + public void gameOver() { + port.gameOver(); + } + + public interface Port { + void handleEnemyKilled(BaseCircleData enemy); + + boolean damagePlayerIfVulnerable(int damage, long damageCooldownMs); + + int playerHealth(); + + void gameOver(); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/events/GameScreenBulletEffectsSink.java b/core/src/main/java/ru/project/tower/screens/gamescreen/events/GameScreenBulletEffectsSink.java new file mode 100644 index 0000000..cc04ce5 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/events/GameScreenBulletEffectsSink.java @@ -0,0 +1,72 @@ +package ru.project.tower.screens.gamescreen.events; + +import java.util.Objects; +import ru.project.tower.DebugLog; +import ru.project.tower.entities.bullets.BulletData; +import ru.project.tower.entities.bullets.BulletEffectsSink; +import ru.project.tower.entities.circles.BaseCircleData; +import ru.project.tower.run.GameplayColor; +import ru.project.tower.run.GameplayEventSink; +import ru.project.tower.run.GameplayEvents; + +public final class GameScreenBulletEffectsSink implements BulletEffectsSink { + private static final long ENEMY_BULLET_DAMAGE_COOLDOWN_MS = 500L; + + private final Host host; + private final GameplayEventSink gameplayEventSink; + + public GameScreenBulletEffectsSink(Host host, GameplayEventSink gameplayEventSink) { + this.host = Objects.requireNonNull(host, "host"); + this.gameplayEventSink = Objects.requireNonNull(gameplayEventSink, "gameplayEventSink"); + } + + @Override + public void onEnemyHit(BaseCircleData enemy, int damage, boolean isCrit) { + if (DebugLog.DEBUG) { + DebugLog.log( + "Collision", + "Bullet hit circle! Circle health: " + + enemy.health + + ", Bullet damage: " + + damage); + } + } + + @Override + public void onCrit(BaseCircleData enemy, int damage) { + gameplayEventSink.emit( + GameplayEvents.floatingText( + enemy.getX(), + enemy.getY(), + "CRIT! " + damage, + GameplayColor.NEON_RED, + 1f, + 1f, + 50f)); + gameplayEventSink.emit(GameplayEvents.shake(4f, 0.05f)); + } + + @Override + public void onEnemyKilled(BaseCircleData enemy) { + DebugLog.log("Collision", "Circle destroyed!"); + host.handleEnemyKilled(enemy); + } + + @Override + public void onEnemyBulletHitPlayer(BulletData bullet) { + if (host.damagePlayerIfVulnerable(bullet.damage, ENEMY_BULLET_DAMAGE_COOLDOWN_MS) + && host.playerHealth() <= 0) { + host.gameOver(); + } + } + + public interface Host { + void handleEnemyKilled(BaseCircleData enemy); + + boolean damagePlayerIfVulnerable(int damage, long damageCooldownMs); + + int playerHealth(); + + void gameOver(); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/events/GameScreenEnemyKillEventHandler.java b/core/src/main/java/ru/project/tower/screens/gamescreen/events/GameScreenEnemyKillEventHandler.java new file mode 100644 index 0000000..225b1c6 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/events/GameScreenEnemyKillEventHandler.java @@ -0,0 +1,78 @@ +package ru.project.tower.screens.gamescreen.events; + +import com.badlogic.gdx.graphics.Color; +import java.util.Objects; +import ru.project.tower.entities.circles.FastCircleData; +import ru.project.tower.entities.circles.StrongCircleData; +import ru.project.tower.entities.circles.bosses.SwarmQueenData; +import ru.project.tower.run.GameplayEvent; +import ru.project.tower.run.GameplaySound; + +public final class GameScreenEnemyKillEventHandler { + private static final float KILL_REWARD_LIFETIME_SECONDS = 1.0f; + private static final float KILL_REWARD_INITIAL_SCALE = 0.65f; + private static final float KILL_REWARD_RISE_SPEED = 50f; + + public interface Host { + void triggerBossKillShake(); + + void triggerKillShake(); + + void spawnFloatingText(float x, float y, String text, Color color); + + void spawnFloatingText( + float x, + float y, + String text, + Color color, + float maxLifetime, + float initialScale, + float riseSpeed); + + void playGameplaySound(GameplaySound sound, float volume, float pitch, float pan); + + void addMoney(int amount); + } + + private final Host host; + private final Color rewardColor; + + public GameScreenEnemyKillEventHandler(Host host, Color rewardColor) { + this.host = Objects.requireNonNull(host, "host"); + this.rewardColor = Objects.requireNonNull(rewardColor, "rewardColor"); + } + + public void handle(GameplayEvent.EnemyKilled event) { + Objects.requireNonNull(event, "event"); + + if (event.boss) { + host.triggerBossKillShake(); + } else { + host.triggerKillShake(); + } + host.spawnFloatingText( + event.position.x, + event.position.y + 10f, + "+" + event.reward, + rewardColor, + KILL_REWARD_LIFETIME_SECONDS, + KILL_REWARD_INITIAL_SCALE, + KILL_REWARD_RISE_SPEED); + playEnemyKilledSound(event.enemyKind); + host.addMoney(event.reward); + } + + private void playEnemyKilledSound(String enemyKind) { + float volume = 0.5f; + float pitch = 1.0f; + if (SwarmQueenData.class.getSimpleName().equals(enemyKind)) { + pitch = 0.5f; + volume = 0.8f; + } else if (StrongCircleData.class.getSimpleName().equals(enemyKind)) { + pitch = 0.8f; + } else if (FastCircleData.class.getSimpleName().equals(enemyKind)) { + pitch = 1.2f; + } + host.playGameplaySound(GameplaySound.POP, volume, pitch, 0f); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/events/GameScreenEnemyKillHostAdapter.java b/core/src/main/java/ru/project/tower/screens/gamescreen/events/GameScreenEnemyKillHostAdapter.java new file mode 100644 index 0000000..e78d43a --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/events/GameScreenEnemyKillHostAdapter.java @@ -0,0 +1,71 @@ +package ru.project.tower.screens.gamescreen.events; + +import com.badlogic.gdx.graphics.Color; +import java.util.Objects; +import ru.project.tower.run.GameplaySound; + +public final class GameScreenEnemyKillHostAdapter implements GameScreenEnemyKillEventHandler.Host { + private final Port port; + + public GameScreenEnemyKillHostAdapter(Port port) { + this.port = Objects.requireNonNull(port, "port"); + } + + @Override + public void triggerBossKillShake() { + port.triggerBossKillShake(); + } + + @Override + public void triggerKillShake() { + port.triggerKillShake(); + } + + @Override + public void spawnFloatingText(float x, float y, String text, Color color) { + port.spawnFloatingText(x, y, text, color); + } + + @Override + public void spawnFloatingText( + float x, + float y, + String text, + Color color, + float maxLifetime, + float initialScale, + float riseSpeed) { + port.spawnFloatingText(x, y, text, color, maxLifetime, initialScale, riseSpeed); + } + + @Override + public void playGameplaySound(GameplaySound sound, float volume, float pitch, float pan) { + port.playGameplaySound(sound, volume, pitch, pan); + } + + @Override + public void addMoney(int amount) { + port.addMoney(amount); + } + + public interface Port { + void triggerBossKillShake(); + + void triggerKillShake(); + + void spawnFloatingText(float x, float y, String text, Color color); + + void spawnFloatingText( + float x, + float y, + String text, + Color color, + float maxLifetime, + float initialScale, + float riseSpeed); + + void playGameplaySound(GameplaySound sound, float volume, float pitch, float pan); + + void addMoney(int amount); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/events/GameScreenGameplayEventSink.java b/core/src/main/java/ru/project/tower/screens/gamescreen/events/GameScreenGameplayEventSink.java new file mode 100644 index 0000000..4ddbaec --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/events/GameScreenGameplayEventSink.java @@ -0,0 +1,153 @@ +package ru.project.tower.screens.gamescreen.events; + +import com.badlogic.gdx.graphics.Color; +import java.util.Objects; +import ru.project.tower.DebugLog; +import ru.project.tower.run.GameplayColor; +import ru.project.tower.run.GameplayEvent; +import ru.project.tower.run.GameplayEventDispatcher; +import ru.project.tower.run.GameplaySound; + +public final class GameScreenGameplayEventSink extends GameplayEventDispatcher { + private final Host host; + private final Palette palette; + + public GameScreenGameplayEventSink(Host host, Palette palette) { + this.host = Objects.requireNonNull(host, "host"); + this.palette = Objects.requireNonNull(palette, "palette"); + } + + @Override + protected void onFloatingTextRequested(GameplayEvent.FloatingTextRequested event) { + host.spawnFloatingText( + event.position.x, + event.position.y, + event.text, + colorFor(event.color), + event.durationSeconds, + event.scale, + event.riseDistance); + } + + @Override + protected void onShakeRequested(GameplayEvent.ShakeRequested event) { + host.applyShake(event.intensity, event.hitstopSeconds); + } + + @Override + protected void onSoundRequested(GameplayEvent.SoundRequested event) { + host.playSound(event.sound, event.volume, event.pitch, event.pan); + } + + @Override + protected void onExplosionRequested(GameplayEvent.ExplosionRequested event) { + host.createExplosion( + event.position.x, event.position.y, colorFor(event.color), event.particleCount); + } + + @Override + protected void onBonusCollected(GameplayEvent.BonusCollected event) { + host.spawnFloatingText( + event.position.x, event.position.y, event.displayText, palette.neonYellow); + host.createExplosion(event.position.x, event.position.y, palette.neonYellow); + } + + @Override + protected void onPlayerDamaged(GameplayEvent.PlayerDamaged event) { + host.triggerDamageShake(event.damage); + } + + @Override + protected void onGameOver(GameplayEvent.GameOver event) { + if (event.currencyEarned > 0) { + host.addCurrency(event.currencyEarned); + host.updateMaxWave(event.reachedWave); + DebugLog.log( + "GameOver", + "Начислено " + + event.currencyEarned + + " монет за прохождение " + + event.reachedWave + + " волн"); + } + } + + @Override + protected void onEnemyKilled(GameplayEvent.EnemyKilled event) { + host.handleEnemyKilled(event); + } + + private Color colorFor(GameplayColor color) { + switch (color) { + case NEON_RED: + return palette.neonRed; + case NEON_YELLOW: + return palette.neonYellow; + case NEON_GREEN: + return palette.neonGreen; + case NEON_CYAN: + return palette.neonCyan; + case NEON_BLUE: + return palette.neonBlue; + case NEON_PURPLE: + return palette.neonPurple; + case WHITE: + return Color.WHITE; + default: + throw new IllegalArgumentException("Unsupported gameplay color: " + color); + } + } + + public interface Host { + void spawnFloatingText(float x, float y, String text, Color color); + + void spawnFloatingText( + float x, + float y, + String text, + Color color, + float maxLifetime, + float initialScale, + float riseSpeed); + + void applyShake(float intensity, float hitstopSeconds); + + void triggerDamageShake(int damage); + + void playSound(GameplaySound sound, float volume, float pitch, float pan); + + void createExplosion(float x, float y, Color color); + + void createExplosion(float x, float y, Color color, int particleCount); + + void addCurrency(int amount); + + void updateMaxWave(int wave); + + void handleEnemyKilled(GameplayEvent.EnemyKilled event); + } + + public static final class Palette { + private final Color neonRed; + private final Color neonYellow; + private final Color neonGreen; + private final Color neonCyan; + private final Color neonBlue; + private final Color neonPurple; + + public Palette( + Color neonRed, + Color neonYellow, + Color neonGreen, + Color neonCyan, + Color neonBlue, + Color neonPurple) { + this.neonRed = Objects.requireNonNull(neonRed, "neonRed"); + this.neonYellow = Objects.requireNonNull(neonYellow, "neonYellow"); + this.neonGreen = Objects.requireNonNull(neonGreen, "neonGreen"); + this.neonCyan = Objects.requireNonNull(neonCyan, "neonCyan"); + this.neonBlue = Objects.requireNonNull(neonBlue, "neonBlue"); + this.neonPurple = Objects.requireNonNull(neonPurple, "neonPurple"); + } + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/gameobjects/GameScreenGameObjectModel.java b/core/src/main/java/ru/project/tower/screens/gamescreen/gameobjects/GameScreenGameObjectModel.java new file mode 100644 index 0000000..05e49e5 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/gameobjects/GameScreenGameObjectModel.java @@ -0,0 +1,418 @@ +package ru.project.tower.screens.gamescreen.gameobjects; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.math.Rectangle; +import com.badlogic.gdx.utils.Array; +import ru.project.tower.abilities.AbilitySystem; +import ru.project.tower.entities.bullets.BulletData; +import ru.project.tower.entities.circles.BaseCircleData; +import ru.project.tower.entities.circles.BonusBallData; +import ru.project.tower.screens.gamescreen.assets.GameScreenMaterialAssets; + +public final class GameScreenGameObjectModel { + private final GameScreenGameObjectRenderContext renderContext = + new GameScreenGameObjectRenderContext(); + private final GameScreenGameObjectViewModel viewModel = new GameScreenGameObjectViewModel(); + + public GameScreenGameObjectModel() {} + + GameScreenGameObjectRenderContext renderContext() { + return renderContext; + } + + GameScreenGameObjectViewModel viewModel() { + return viewModel; + } + + public void populateRenderContext(RenderContextData data) { + populateRenderContext( + data.shapeRenderer(), + data.batch(), + data.materialAssets(), + data.scratchColor(), + data.scratchColor3(), + data.scratchColor4(), + data.scratchColor5()); + } + + public void populateRenderContext( + ShapeRenderer shapeRenderer, + SpriteBatch batch, + GameScreenMaterialAssets materialAssets, + Color scratchColor, + Color scratchColor3, + Color scratchColor4, + Color scratchColor5) { + renderContext.shapeRenderer = shapeRenderer; + renderContext.batch = batch; + renderContext.materialAssets = materialAssets; + renderContext.scratchColor = scratchColor; + renderContext.scratchColor3 = scratchColor3; + renderContext.scratchColor4 = scratchColor4; + renderContext.scratchColor5 = scratchColor5; + } + + public void populateView(ViewState state) { + populateView( + state.square(), + state.circles(), + state.bonusBalls(), + state.bullets(), + state.abilitySystem(), + state.nowMs(), + state.time(), + state.pulseSpeed(), + state.uiScale(), + state.gameScale(), + state.shootingRange(), + state.reviewVisuals(), + state.currentStrongCircleHealth(), + state.currentBasicCircleHealth(), + state.shadowWeaverColor(), + state.glacialWardenColor(), + state.basicCircleColor(), + state.fastCircleColor(), + state.splitterCircleColor(), + state.spawnerCircleColor(), + state.neonBlue(), + state.neonCyan(), + state.neonGreen(), + state.neonYellow(), + state.bossProjectileColor()); + } + + public void populateView( + Rectangle square, + Array circles, + Array bonusBalls, + Array bullets, + AbilitySystem abilitySystem, + long nowMs, + float time, + float pulseSpeed, + float uiScale, + float gameScale, + float shootingRange, + boolean reviewVisuals, + int currentStrongCircleHealth, + int currentBasicCircleHealth, + Color shadowWeaverColor, + Color glacialWardenColor, + Color basicCircleColor, + Color fastCircleColor, + Color splitterCircleColor, + Color spawnerCircleColor, + Color neonBlue, + Color neonCyan, + Color neonGreen, + Color neonYellow, + Color bossProjectileColor) { + viewModel.square = square; + viewModel.circles = circles; + viewModel.bonusBalls = bonusBalls; + viewModel.bullets = bullets; + viewModel.abilitySystem = abilitySystem; + viewModel.nowMs = nowMs; + viewModel.time = time; + viewModel.pulseSpeed = pulseSpeed; + viewModel.uiScale = uiScale; + viewModel.gameScale = gameScale; + viewModel.shootingRange = shootingRange; + viewModel.reviewVisuals = reviewVisuals; + viewModel.currentStrongCircleHealth = currentStrongCircleHealth; + viewModel.currentBasicCircleHealth = currentBasicCircleHealth; + viewModel.shadowWeaverColor = shadowWeaverColor; + viewModel.glacialWardenColor = glacialWardenColor; + viewModel.basicCircleColor = basicCircleColor; + viewModel.fastCircleColor = fastCircleColor; + viewModel.splitterCircleColor = splitterCircleColor; + viewModel.spawnerCircleColor = spawnerCircleColor; + viewModel.neonBlue = neonBlue; + viewModel.neonCyan = neonCyan; + viewModel.neonGreen = neonGreen; + viewModel.neonYellow = neonYellow; + viewModel.bossProjectileColor = bossProjectileColor; + } + + public static final class RenderContextData { + private final ShapeRenderer shapeRenderer; + private final SpriteBatch batch; + private final GameScreenMaterialAssets materialAssets; + private final Color scratchColor; + private final Color scratchColor3; + private final Color scratchColor4; + private final Color scratchColor5; + + public RenderContextData( + ShapeRenderer shapeRenderer, + SpriteBatch batch, + GameScreenMaterialAssets materialAssets, + Color scratchColor, + Color scratchColor3, + Color scratchColor4, + Color scratchColor5) { + this.shapeRenderer = shapeRenderer; + this.batch = batch; + this.materialAssets = materialAssets; + this.scratchColor = scratchColor; + this.scratchColor3 = scratchColor3; + this.scratchColor4 = scratchColor4; + this.scratchColor5 = scratchColor5; + } + + public ShapeRenderer shapeRenderer() { + return shapeRenderer; + } + + public SpriteBatch batch() { + return batch; + } + + public GameScreenMaterialAssets materialAssets() { + return materialAssets; + } + + public Color scratchColor() { + return scratchColor; + } + + public Color scratchColor3() { + return scratchColor3; + } + + public Color scratchColor4() { + return scratchColor4; + } + + public Color scratchColor5() { + return scratchColor5; + } + } + + public static final class ViewState { + private final Rectangle square; + private final Array circles; + private final Array bonusBalls; + private final Array bullets; + private final AbilitySystem abilitySystem; + private final long nowMs; + private final float time; + private final float pulseSpeed; + private final float uiScale; + private final float gameScale; + private final float shootingRange; + private final boolean reviewVisuals; + private final int currentStrongCircleHealth; + private final int currentBasicCircleHealth; + private final Color shadowWeaverColor; + private final Color glacialWardenColor; + private final Color basicCircleColor; + private final Color fastCircleColor; + private final Color splitterCircleColor; + private final Color spawnerCircleColor; + private final Color neonBlue; + private final Color neonCyan; + private final Color neonGreen; + private final Color neonYellow; + private final Color bossProjectileColor; + + public ViewState( + Rectangle square, + Array circles, + Array bonusBalls, + Array bullets, + AbilitySystem abilitySystem, + long nowMs, + float time, + float pulseSpeed, + float uiScale, + float gameScale, + float shootingRange, + boolean reviewVisuals, + int currentStrongCircleHealth, + int currentBasicCircleHealth, + Color shadowWeaverColor, + Color glacialWardenColor, + Color basicCircleColor, + Color fastCircleColor, + Color splitterCircleColor, + Color spawnerCircleColor, + Color neonBlue, + Color neonCyan, + Color neonGreen, + Color neonYellow, + Color bossProjectileColor) { + this.square = square; + this.circles = circles; + this.bonusBalls = bonusBalls; + this.bullets = bullets; + this.abilitySystem = abilitySystem; + this.nowMs = nowMs; + this.time = time; + this.pulseSpeed = pulseSpeed; + this.uiScale = uiScale; + this.gameScale = gameScale; + this.shootingRange = shootingRange; + this.reviewVisuals = reviewVisuals; + this.currentStrongCircleHealth = currentStrongCircleHealth; + this.currentBasicCircleHealth = currentBasicCircleHealth; + this.shadowWeaverColor = shadowWeaverColor; + this.glacialWardenColor = glacialWardenColor; + this.basicCircleColor = basicCircleColor; + this.fastCircleColor = fastCircleColor; + this.splitterCircleColor = splitterCircleColor; + this.spawnerCircleColor = spawnerCircleColor; + this.neonBlue = neonBlue; + this.neonCyan = neonCyan; + this.neonGreen = neonGreen; + this.neonYellow = neonYellow; + this.bossProjectileColor = bossProjectileColor; + } + + public Rectangle square() { + return square; + } + + public Array circles() { + return circles; + } + + public Array bonusBalls() { + return bonusBalls; + } + + public Array bullets() { + return bullets; + } + + public AbilitySystem abilitySystem() { + return abilitySystem; + } + + public long nowMs() { + return nowMs; + } + + public float time() { + return time; + } + + public float pulseSpeed() { + return pulseSpeed; + } + + public float uiScale() { + return uiScale; + } + + public float gameScale() { + return gameScale; + } + + public float shootingRange() { + return shootingRange; + } + + public boolean reviewVisuals() { + return reviewVisuals; + } + + public int currentStrongCircleHealth() { + return currentStrongCircleHealth; + } + + public int currentBasicCircleHealth() { + return currentBasicCircleHealth; + } + + public Color shadowWeaverColor() { + return shadowWeaverColor; + } + + public Color glacialWardenColor() { + return glacialWardenColor; + } + + public Color basicCircleColor() { + return basicCircleColor; + } + + public Color fastCircleColor() { + return fastCircleColor; + } + + public Color splitterCircleColor() { + return splitterCircleColor; + } + + public Color spawnerCircleColor() { + return spawnerCircleColor; + } + + public Color neonBlue() { + return neonBlue; + } + + public Color neonCyan() { + return neonCyan; + } + + public Color neonGreen() { + return neonGreen; + } + + public Color neonYellow() { + return neonYellow; + } + + public Color bossProjectileColor() { + return bossProjectileColor; + } + } +} + +final class GameScreenGameObjectRenderContext { + ShapeRenderer shapeRenderer; + SpriteBatch batch; + GameScreenMaterialAssets materialAssets; + Color scratchColor; + Color scratchColor3; + Color scratchColor4; + Color scratchColor5; + + Color withAlpha(Color base, float alpha) { + scratchColor.set(base); + scratchColor.a = alpha; + return scratchColor; + } +} + +final class GameScreenGameObjectViewModel { + Rectangle square; + Array circles; + Array bonusBalls; + Array bullets; + AbilitySystem abilitySystem; + long nowMs; + float time; + float pulseSpeed; + float uiScale; + float gameScale; + float shootingRange; + boolean reviewVisuals; + int currentStrongCircleHealth; + int currentBasicCircleHealth; + Color shadowWeaverColor; + Color glacialWardenColor; + Color basicCircleColor; + Color fastCircleColor; + Color splitterCircleColor; + Color spawnerCircleColor; + Color neonBlue; + Color neonCyan; + Color neonGreen; + Color neonYellow; + Color bossProjectileColor; +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/gameobjects/GameScreenGameObjectRenderer.java b/core/src/main/java/ru/project/tower/screens/gamescreen/gameobjects/GameScreenGameObjectRenderer.java new file mode 100644 index 0000000..d9bbf3a --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/gameobjects/GameScreenGameObjectRenderer.java @@ -0,0 +1,1105 @@ +package ru.project.tower.screens.gamescreen.gameobjects; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.GL20; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType; +import com.badlogic.gdx.math.MathUtils; +import com.badlogic.gdx.math.Vector2; +import ru.project.tower.entities.bullets.BulletData; +import ru.project.tower.entities.circles.BaseCircleData; +import ru.project.tower.entities.circles.BasicCircleData; +import ru.project.tower.entities.circles.BonusBallData; +import ru.project.tower.entities.circles.FastCircleData; +import ru.project.tower.entities.circles.HealerCircleData; +import ru.project.tower.entities.circles.SpawnerCircleData; +import ru.project.tower.entities.circles.SplitterCircleData; +import ru.project.tower.entities.circles.StrongCircleData; +import ru.project.tower.entities.circles.bosses.GlacialWardenData; +import ru.project.tower.entities.circles.bosses.IllusionMasterData; +import ru.project.tower.entities.circles.bosses.JuggernautData; +import ru.project.tower.entities.circles.bosses.ShadowWeaverData; +import ru.project.tower.entities.circles.bosses.SwarmQueenData; +import ru.project.tower.entities.circles.bosses.VolatileReactorData; +import ru.project.tower.support.ScreenPalette; + +public final class GameScreenGameObjectRenderer { + private static final float MOCK_RANGE_RADIUS_TO_SQUARE_SIZE = 126f / 54f; + private static final float MIN_ENEMY_VISUAL_RADIUS = 6.25f; + private static final int RANGE_RING_SEGMENTS = 192; + + public interface Host { + public GameScreenGameObjectModel gameObjectModel(); + } + + private final Host host; + + public GameScreenGameObjectRenderer(Host host) { + this.host = host; + } + + public void renderGameObjects() { + Gdx.gl.glEnable(GL20.GL_BLEND); + renderShootingRangeIndicator(); + renderNeonSquare(); + renderNeonCircles(); + renderEliteAura(); + renderBonusBalls(); + renderNeonBullets(); + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); + } + + private GameScreenGameObjectModel model() { + return host.gameObjectModel(); + } + + private GameScreenGameObjectRenderContext context() { + return model().renderContext(); + } + + private GameScreenGameObjectViewModel view() { + return model().viewModel(); + } + + void renderNeonSquare() { + GameScreenGameObjectRenderContext context = context(); + GameScreenGameObjectViewModel view = view(); + if (renderPlayerTowerMaterial(context, view)) { + return; + } + ShapeRenderer shapeRenderer = context.shapeRenderer; + + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE); + shapeRenderer.begin(ShapeType.Filled); + + boolean shieldOn = view.abilitySystem.isShieldActive(view.nowMs); + Color playerColor = shieldOn ? view.neonCyan : view.neonBlue; + shapeRenderer.setColor(context.withAlpha(playerColor, 0.08f)); + shapeRenderer.rect( + view.square.x - 13f * view.uiScale, + view.square.y - 13f * view.uiScale, + view.square.width + 26f * view.uiScale, + view.square.height + 26f * view.uiScale); + shapeRenderer.setColor(context.withAlpha(playerColor, 0.18f)); + shapeRenderer.rect( + view.square.x - 7f * view.uiScale, + view.square.y - 7f * view.uiScale, + view.square.width + 14f * view.uiScale, + view.square.height + 14f * view.uiScale); + + Color squareColor = context.scratchColor3.set(playerColor); + squareColor.a = 0.9f; + shapeRenderer.setColor(squareColor); + shapeRenderer.rect(view.square.x, view.square.y, view.square.width, view.square.height); + drawPlayerBorder(shapeRenderer, view); + + shapeRenderer.end(); + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); + } + + private boolean renderPlayerTowerMaterial( + GameScreenGameObjectRenderContext context, GameScreenGameObjectViewModel view) { + if (context.batch == null + || context.materialAssets == null + || context.materialAssets.playerTower() == null) { + return false; + } + float centerX = view.square.x + view.square.width / 2f; + float centerY = view.square.y + view.square.height / 2f; + float size = view.square.width + 80f * view.uiScale; + SpriteBatch batch = context.batch; + batch.begin(); + batch.setColor(Color.WHITE); + batch.draw( + context.materialAssets.playerTower(), + centerX - size / 2f, + centerY - size / 2f, + size, + size); + batch.end(); + return true; + } + + private void drawPlayerBorder(ShapeRenderer shapeRenderer, GameScreenGameObjectViewModel view) { + float border = 3f * view.uiScale; + shapeRenderer.setColor(0.604f, 0.647f, 1f, 0.42f); + shapeRenderer.rect(view.square.x, view.square.y, view.square.width, border); + shapeRenderer.rect( + view.square.x, + view.square.y + view.square.height - border, + view.square.width, + border); + shapeRenderer.rect(view.square.x, view.square.y, border, view.square.height); + shapeRenderer.rect( + view.square.x + view.square.width - border, + view.square.y, + border, + view.square.height); + } + + void renderEliteAura() { + GameScreenGameObjectRenderContext context = context(); + GameScreenGameObjectViewModel view = view(); + ShapeRenderer shapeRenderer = context.shapeRenderer; + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE); + float pulse = 0.5f + 0.5f * (float) Math.sin(view.time * view.pulseSpeed * 2f); + if (renderEliteAuraMaterial(context, view, pulse)) { + return; + } + shapeRenderer.begin(ShapeType.Filled); + for (BaseCircleData circle : view.circles) { + if (!circle.isElite()) continue; + float radius = circle.getRadius(); + for (int i = 3; i >= 1; i--) { + float alpha = 0.15f * pulse * (4 - i) / 3f; + shapeRenderer.setColor(ScreenPalette.GOLD.set(context.scratchColor, alpha)); + shapeRenderer.circle(circle.getX(), circle.getY(), radius + 4f * i * view.uiScale); + } + } + shapeRenderer.end(); + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); + } + + private boolean renderEliteAuraMaterial( + GameScreenGameObjectRenderContext context, + GameScreenGameObjectViewModel view, + float pulse) { + if (context.batch == null + || context.materialAssets == null + || context.materialAssets.radialGlow() == null) { + return false; + } + SpriteBatch batch = context.batch; + Texture glow = context.materialAssets.radialGlow(); + batch.begin(); + for (BaseCircleData circle : view.circles) { + if (!circle.isElite()) continue; + float radius = circle.getRadius() + 14f * view.uiScale; + Color auraColor = ScreenPalette.GOLD.set(context.scratchColor, 0.24f * pulse); + batch.setColor(auraColor); + batch.draw( + glow, circle.getX() - radius, circle.getY() - radius, radius * 2f, radius * 2f); + } + batch.setColor(Color.WHITE); + batch.end(); + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); + return true; + } + + void renderBonusBalls() { + GameScreenGameObjectRenderContext context = context(); + GameScreenGameObjectViewModel view = view(); + if (context.batch != null + && context.materialAssets != null + && context.materialAssets.bonusOrb() != null + && renderBonusOrbMaterial(context, view)) { + return; + } + ShapeRenderer shapeRenderer = context.shapeRenderer; + Gdx.gl.glEnable(GL20.GL_BLEND); + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE); + shapeRenderer.begin(ShapeType.Filled); + + for (BonusBallData ball : view.bonusBalls) { + float glow = ball.getGlowAmount(); + + for (int i = 3; i > 0; i--) { + shapeRenderer.setColor( + context.withAlpha(view.neonYellow, 0.2f * glow * (4 - i) / 3f)); + shapeRenderer.circle( + ball.getX(), ball.getY(), ball.getRadius() * (1f + i * 0.4f * glow)); + } + + shapeRenderer.setColor(view.neonYellow); + shapeRenderer.circle(ball.getX(), ball.getY(), ball.getRadius()); + } + + shapeRenderer.end(); + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); + } + + private boolean renderBonusOrbMaterial( + GameScreenGameObjectRenderContext context, GameScreenGameObjectViewModel view) { + if (context.batch == null + || context.materialAssets == null + || context.materialAssets.bonusOrb() == null) { + return false; + } + SpriteBatch batch = context.batch; + Texture orb = context.materialAssets.bonusOrb(); + Gdx.gl.glEnable(GL20.GL_BLEND); + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE); + batch.begin(); + for (BonusBallData ball : view.bonusBalls) { + float glow = ball.getGlowAmount(); + float size = ball.getRadius() * (2.6f + 1.8f * glow); + batch.setColor( + view.neonYellow.r, view.neonYellow.g, view.neonYellow.b, 0.62f + 0.38f * glow); + batch.draw(orb, ball.getX() - size / 2f, ball.getY() - size / 2f, size, size); + } + batch.setColor(Color.WHITE); + batch.end(); + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); + return true; + } + + void renderNeonBullets() { + GameScreenGameObjectRenderContext context = context(); + GameScreenGameObjectViewModel view = view(); + ShapeRenderer shapeRenderer = context.shapeRenderer; + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE); + shapeRenderer.begin(ShapeType.Filled); + + for (BulletData bullet : view.bullets) { + float glow = + 0.5f + + 0.5f + * (float) + Math.sin( + view.time * view.pulseSpeed * 1.5f + + bullet.getX() * 0.02f); + float critBoost = bullet.isCrit() ? 2.0f : 1.0f; + float extraRadius = 3f * glow * view.uiScale * critBoost; + + Color bulletColor; + if (bullet.isEnemyBullet()) { + bulletColor = view.bossProjectileColor; + } else if (bullet.isCrit()) { + bulletColor = view.neonYellow; + } else { + bulletColor = view.neonGreen; + } + Color glowColor = context.scratchColor4.set(bulletColor); + + for (int i = 2; i > 0; i--) { + float alpha = 0.3f * (3 - i) / 2 * glow; + float extraSize = extraRadius * i; + glowColor.a = alpha; + shapeRenderer.setColor(glowColor); + shapeRenderer.circle(bullet.getX(), bullet.getY(), bullet.getRadius() + extraSize); + } + + shapeRenderer.setColor(bulletColor); + shapeRenderer.circle(bullet.getX(), bullet.getY(), bullet.getRadius() * critBoost); + } + + shapeRenderer.end(); + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); + } + + void renderShootingRangeIndicator() { + GameScreenGameObjectRenderContext context = context(); + GameScreenGameObjectViewModel view = view(); + float squareCenterX = view.square.x + view.square.width / 2; + float squareCenterY = view.square.y + view.square.height / 2; + float adjustedRange = + Math.min( + view.shootingRange * view.gameScale, + view.square.width * MOCK_RANGE_RADIUS_TO_SQUARE_SIZE); + renderPlayerRangeGlowMaterial(context, view, squareCenterX, squareCenterY, adjustedRange); + if (renderRangeRingMaterial(context, view, squareCenterX, squareCenterY, adjustedRange)) { + return; + } + ShapeRenderer shapeRenderer = context.shapeRenderer; + shapeRenderer.begin(ShapeType.Line); + Gdx.gl.glLineWidth(1f); + shapeRenderer.setColor(context.withAlpha(view.neonYellow, 0.42f)); + shapeRenderer.circle(squareCenterX, squareCenterY, adjustedRange, RANGE_RING_SEGMENTS); + shapeRenderer.end(); + Gdx.gl.glLineWidth(1f); + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); + } + + private void renderPlayerRangeGlowMaterial( + GameScreenGameObjectRenderContext context, + GameScreenGameObjectViewModel view, + float centerX, + float centerY, + float radius) { + if (context.batch == null + || context.materialAssets == null + || context.materialAssets.playerRangeGlow() == null) { + return; + } + float size = radius * 2f; + SpriteBatch batch = context.batch; + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE); + batch.begin(); + batch.setColor(view.neonBlue.r, view.neonBlue.g, view.neonBlue.b, 0.20f); + batch.draw( + context.materialAssets.playerRangeGlow(), + centerX - size / 2f, + centerY - size / 2f, + size, + size); + batch.setColor(Color.WHITE); + batch.end(); + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); + } + + private boolean renderRangeRingMaterial( + GameScreenGameObjectRenderContext context, + GameScreenGameObjectViewModel view, + float centerX, + float centerY, + float radius) { + if (context.batch == null + || context.materialAssets == null + || context.materialAssets.rangeRing() == null) { + return false; + } + float size = radius * 2f; + SpriteBatch batch = context.batch; + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); + batch.begin(); + batch.setColor(view.neonYellow.r, view.neonYellow.g, view.neonYellow.b, 0.36f); + batch.draw( + context.materialAssets.rangeRing(), + centerX - size / 2f, + centerY - size / 2f, + size, + size); + batch.setColor(Color.WHITE); + batch.end(); + return true; + } + + void renderNeonCircles() { + GameScreenGameObjectRenderContext context = context(); + GameScreenGameObjectViewModel view = view(); + ShapeRenderer shapeRenderer = context.shapeRenderer; + + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); + renderMaterialEnemySprites(context(), view); + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE); + renderLegacySpecialEnemies(shapeRenderer, view); + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); + } + + private void renderLegacySpecialEnemies( + ShapeRenderer shapeRenderer, GameScreenGameObjectViewModel view) { + shapeRenderer.begin(ShapeType.Filled); + + for (BaseCircleData circle : view.circles) { + if (usesMaterialEnemySprite(circle)) continue; + float time = view.time; + float pulseSpeed = view.pulseSpeed; + float uiScale = view.uiScale; + float glow = 0.5f + 0.5f * (float) Math.sin(time * pulseSpeed + circle.getX() * 0.02f); + float extraRadius = 5f * glow * uiScale; + + Color baseColor = + renderTypeSpecificDecorations(circle, shapeRenderer, glow, extraRadius); + renderSharedCircleDecorations(circle, shapeRenderer, baseColor); + } + + shapeRenderer.end(); + } + + private void renderMaterialEnemySprites( + GameScreenGameObjectRenderContext context, GameScreenGameObjectViewModel view) { + renderMaterialEnemyGlows(context(), view); + if (context.batch == null || context.materialAssets == null) { + renderMaterialEnemyCirclesFallback(context.shapeRenderer, view); + return; + } + SpriteBatch batch = context.batch; + batch.begin(); + for (BaseCircleData circle : view.circles) { + if (!usesMaterialEnemySprite(circle)) continue; + Texture texture = mockEnemyTexture(context, circle); + if (texture == null) continue; + float size = mockEnemyTextureSize(circle); + batch.setColor(Color.WHITE); + batch.draw(texture, circle.getX() - size / 2f, circle.getY() - size / 2f, size, size); + batch.setColor(1f, 1f, 1f, 0.42f); + batch.draw(texture, circle.getX() - size / 2f, circle.getY() - size / 2f, size, size); + } + batch.setColor(Color.WHITE); + batch.end(); + } + + private boolean usesMaterialEnemySprite(BaseCircleData circle) { + return circle instanceof BasicCircleData + || circle instanceof FastCircleData + || circle instanceof StrongCircleData + || circle instanceof HealerCircleData + || circle instanceof SpawnerCircleData + || circle instanceof SplitterCircleData; + } + + private Texture mockEnemyTexture( + GameScreenGameObjectRenderContext context, BaseCircleData circle) { + if (circle instanceof FastCircleData) { + return context.materialAssets.fastEnemy(); + } + if (circle instanceof StrongCircleData) { + return context.materialAssets.armoredEnemy(); + } + if (circle instanceof HealerCircleData || circle instanceof SpawnerCircleData) { + return context.materialAssets.supportEnemy(); + } + if (circle instanceof SplitterCircleData) { + return context.materialAssets.splitterEnemy(); + } + return context.materialAssets.basicEnemy(); + } + + private float mockEnemyTextureSize(BaseCircleData circle) { + float visualRadius = + view().reviewVisuals ? circle.getRadius() : runtimeEnemyVisualRadius(circle); + float size = visualRadius * 2f / 0.76f; + if (circle instanceof FastCircleData) { + return size * 1.36f; + } + return size; + } + + private float runtimeEnemyVisualRadius(BaseCircleData circle) { + return Math.min(circle.getRadius(), mockEnemyReferenceRadius(circle) * view().uiScale); + } + + private float mockEnemyReferenceRadius(BaseCircleData circle) { + if (circle instanceof StrongCircleData) { + return 8f; + } + if (circle instanceof HealerCircleData || circle instanceof SpawnerCircleData) { + return 6.5f; + } + if (circle instanceof SplitterCircleData) { + return 6.3f; + } + if (circle instanceof FastCircleData) { + return 5.5f; + } + return 6f; + } + + private void renderMaterialEnemyCirclesFallback( + ShapeRenderer shapeRenderer, GameScreenGameObjectViewModel view) { + shapeRenderer.begin(ShapeType.Filled); + for (BaseCircleData circle : view.circles) { + if (!usesMaterialEnemySprite(circle)) continue; + if (circle instanceof FastCircleData) { + renderMockFastEnemy(shapeRenderer, circle); + } else if (circle instanceof StrongCircleData) { + renderMockArmoredEnemy(shapeRenderer, circle); + } else if (circle instanceof HealerCircleData || circle instanceof SpawnerCircleData) { + renderMockSupportEnemy(shapeRenderer, circle); + } else if (circle instanceof SplitterCircleData) { + renderMockSplitterEnemy(shapeRenderer, circle); + } else { + renderMockBasicEnemy(shapeRenderer, circle); + } + } + shapeRenderer.end(); + } + + private void renderMaterialEnemyGlows( + GameScreenGameObjectRenderContext context, GameScreenGameObjectViewModel view) { + if (context.batch == null + || context.materialAssets == null + || context.materialAssets.radialGlow() == null) { + return; + } + SpriteBatch batch = context.batch; + Texture glow = context.materialAssets.radialGlow(); + batch.begin(); + for (BaseCircleData circle : view.circles) { + if (!usesMaterialEnemySprite(circle)) continue; + setMockGlowColor(batch, circle); + float visualRadius = + view.reviewVisuals ? circle.getRadius() : runtimeEnemyVisualRadius(circle); + float radius = visualRadius + 14f * view.uiScale; + batch.draw( + glow, circle.getX() - radius, circle.getY() - radius, radius * 2f, radius * 2f); + } + batch.setColor(Color.WHITE); + batch.end(); + } + + private void setMockGlowColor(SpriteBatch batch, BaseCircleData circle) { + if (circle instanceof FastCircleData) { + batch.setColor(1f, 0.31f, 0.847f, 0.76f); + } else if (circle instanceof StrongCircleData) { + batch.setColor(1f, 0.478f, 0.627f, 0.66f); + } else if (circle instanceof HealerCircleData || circle instanceof SpawnerCircleData) { + batch.setColor(0.145f, 0.875f, 0.710f, 0.74f); + } else { + batch.setColor(0.302f, 0.486f, 1f, 0.82f); + } + } + + private void renderMockBasicEnemy(ShapeRenderer shapeRenderer, BaseCircleData circle) { + float radius = circle.getRadius(); + float scale = view().uiScale; + shapeRenderer.setColor(0.302f, 0.486f, 1f, 0.10f); + shapeRenderer.circle(circle.getX(), circle.getY(), radius + 3f * scale); + shapeRenderer.setColor(0.698f, 0.773f, 1f, 0.82f); + shapeRenderer.circle(circle.getX(), circle.getY(), radius); + shapeRenderer.setColor(0.302f, 0.486f, 1f, 0.94f); + shapeRenderer.circle(circle.getX(), circle.getY(), Math.max(1f, radius - 2f * scale)); + } + + private void renderMockFastEnemy(ShapeRenderer shapeRenderer, BaseCircleData circle) { + float radius = circle.getRadius(); + float scale = view().uiScale; + shapeRenderer.setColor(1f, 0.31f, 0.847f, 0.10f); + renderDiamond(shapeRenderer, circle.getX(), circle.getY(), radius + 3f * scale); + shapeRenderer.setColor(1f, 0.451f, 0.875f, 0.90f); + renderDiamond(shapeRenderer, circle.getX(), circle.getY(), radius); + shapeRenderer.setColor(1f, 0.31f, 0.847f, 0.16f); + renderDiamond( + shapeRenderer, circle.getX(), circle.getY(), Math.max(1f, radius - 2f * scale)); + } + + private void renderMockArmoredEnemy(ShapeRenderer shapeRenderer, BaseCircleData circle) { + float radius = circle.getRadius(); + float scale = view().uiScale; + float size = radius * 2f; + float x = circle.getX() - radius; + float y = circle.getY() - radius; + shapeRenderer.setColor(1f, 0.478f, 0.627f, 0.08f); + shapeRenderer.rect(x - 3f * scale, y - 3f * scale, size + 6f * scale, size + 6f * scale); + shapeRenderer.setColor(1f, 0.608f, 0.718f, 0.84f); + shapeRenderer.rect(x, y, size, size); + shapeRenderer.setColor(0.07f, 0.05f, 0.08f, 0.92f); + shapeRenderer.rect(x + 2f * scale, y + 2f * scale, size - 4f * scale, size - 4f * scale); + shapeRenderer.setColor(1f, 0.478f, 0.627f, 0.08f); + shapeRenderer.rect(x + 2f * scale, y + 2f * scale, size - 4f * scale, size - 4f * scale); + shapeRenderer.setColor(1f, 0.608f, 0.718f, 0.16f); + shapeRenderer.rect(x + 4f * scale, y + 4f * scale, size - 8f * scale, size - 8f * scale); + } + + private void renderMockSupportEnemy(ShapeRenderer shapeRenderer, BaseCircleData circle) { + float radius = circle.getRadius(); + float scale = view().uiScale; + shapeRenderer.setColor(0.145f, 0.875f, 0.710f, 0.10f); + shapeRenderer.circle(circle.getX(), circle.getY(), radius + 3f * scale); + shapeRenderer.setColor(0.706f, 1f, 0.925f, 0.82f); + shapeRenderer.circle(circle.getX(), circle.getY(), radius); + shapeRenderer.setColor(0.145f, 0.875f, 0.710f, 0.94f); + shapeRenderer.circle(circle.getX(), circle.getY(), Math.max(1f, radius - 2f * scale)); + shapeRenderer.setColor(0.027f, 0.067f, 0.059f, 0.95f); + shapeRenderer.rect( + circle.getX() - 3.5f * scale, circle.getY() - 1f * scale, 7f * scale, 2f * scale); + shapeRenderer.rect( + circle.getX() - 1f * scale, circle.getY() - 3.5f * scale, 2f * scale, 7f * scale); + } + + private void renderMockSplitterEnemy(ShapeRenderer shapeRenderer, BaseCircleData circle) { + float radius = circle.getRadius(); + float scale = view().uiScale; + shapeRenderer.setColor(0.27f, 0.32f, 1f, 0.10f); + shapeRenderer.circle(circle.getX(), circle.getY(), radius + 3f * scale); + shapeRenderer.setColor(0.745f, 0.792f, 1f, 0.78f); + shapeRenderer.circle(circle.getX(), circle.getY(), radius); + shapeRenderer.setColor(0.275f, 0.922f, 1f, 0.86f); + float spoke = Math.max(2f, radius * 0.28f); + shapeRenderer.rectLine( + circle.getX() - radius * 0.72f, + circle.getY(), + circle.getX() + radius * 0.72f, + circle.getY(), + spoke); + shapeRenderer.rectLine( + circle.getX(), + circle.getY() - radius * 0.72f, + circle.getX(), + circle.getY() + radius * 0.72f, + spoke); + } + + private Color renderTypeSpecificDecorations( + BaseCircleData circle, ShapeRenderer shapeRenderer, float glow, float extraRadius) { + if (circle instanceof VolatileReactorData) { + return renderVolatileReactor((VolatileReactorData) circle, shapeRenderer, glow); + } else if (circle instanceof ShadowWeaverData) { + renderShadowWeaver((ShadowWeaverData) circle, shapeRenderer, glow, extraRadius); + return view().shadowWeaverColor; + } else if (circle instanceof JuggernautData) { + renderJuggernaut((JuggernautData) circle, shapeRenderer); + return view().shadowWeaverColor; + } else if (circle instanceof SwarmQueenData) { + renderSwarmQueen((SwarmQueenData) circle, shapeRenderer); + return view().shadowWeaverColor; + } else if (circle instanceof GlacialWardenData) { + renderGlacialWarden((GlacialWardenData) circle, shapeRenderer, glow); + return view().glacialWardenColor; + } else if (circle instanceof IllusionMasterData) { + return renderIllusionMaster((IllusionMasterData) circle, shapeRenderer); + } else if (circle instanceof BasicCircleData) { + return view().basicCircleColor; + } else if (circle instanceof StrongCircleData) { + return context().scratchColor3.set(1f, 0.61f, 0.72f, 1f); + } else if (circle instanceof FastCircleData) { + return view().fastCircleColor; + } else if (circle instanceof HealerCircleData) { + return view().spawnerCircleColor; + } else if (circle instanceof SplitterCircleData) { + return view().splitterCircleColor; + } else if (circle instanceof SpawnerCircleData) { + return view().spawnerCircleColor; + } + return view().neonBlue; + } + + private Color renderVolatileReactor( + VolatileReactorData reactor, ShapeRenderer shapeRenderer, float glow) { + float[] color = reactor.getColor(); + Color baseColor = context().scratchColor3.set(color[0], color[1], color[2], color[3]); + + for (VolatileReactorData.FireZone zone : reactor.getFireZones()) { + float[] zoneColor = zone.getColor(); + Color fireColor = + context() + .scratchColor4 + .set(zoneColor[0], zoneColor[1], zoneColor[2], zoneColor[3]); + + for (int i = 2; i > 0; i--) { + float alpha = fireColor.a * 0.5f * (3 - i) / 2; + Color glowColor = context().scratchColor5.set(fireColor); + glowColor.a = alpha; + shapeRenderer.setColor(glowColor); + shapeRenderer.circle(zone.x, zone.y, zone.radius * (1f + 0.3f * i)); + } + + shapeRenderer.setColor(fireColor); + shapeRenderer.circle(zone.x, zone.y, zone.radius); + } + + float heatGlow = reactor.getHeatLevel() * glow; + Color ventColor = context().scratchColor4.set(1f, 0.3f + heatGlow * 0.7f, 0.1f, 0.7f); + for (int i = 0; i < 4; i++) { + float angle = (float) (i * Math.PI / 2); + float ventX = reactor.getX() + (float) Math.cos(angle) * reactor.getRadius() * 0.7f; + float ventY = reactor.getY() + (float) Math.sin(angle) * reactor.getRadius() * 0.7f; + shapeRenderer.setColor(ventColor); + shapeRenderer.circle(ventX, ventY, reactor.getRadius() * 0.2f); + } + return baseColor; + } + + private void renderShadowWeaver( + ShadowWeaverData weaver, ShapeRenderer shapeRenderer, float glow, float extraRadius) { + if (!weaver.isTeleporting()) { + for (int i = 1; i <= 3; i++) { + float alpha = 0.3f * (1f - i / 4f); + Color trailColor = context().scratchColor4.set(0.8f, 0.2f, 0.8f, alpha); + shapeRenderer.setColor(trailColor); + shapeRenderer.circle( + weaver.getX(), + weaver.getY() - i * 10f, + weaver.getRadius() * (1f - i * 0.1f)); + } + } + + for (ShadowWeaverData.ShadowCloneData clone : weaver.getClones()) { + float[] cloneColor = clone.getColor(); + Color cloneBaseColor = + context() + .scratchColor4 + .set(cloneColor[0], cloneColor[1], cloneColor[2], cloneColor[3]); + + for (int i = 2; i > 0; i--) { + float alpha = 0.2f * (3 - i) / 2 * glow; + Color glowColor = context().scratchColor5.set(cloneBaseColor); + glowColor.a = alpha; + shapeRenderer.setColor(glowColor); + shapeRenderer.circle( + clone.getX(), clone.getY(), clone.getRadius() + extraRadius * i); + } + + shapeRenderer.setColor(cloneBaseColor); + shapeRenderer.circle(clone.getX(), clone.getY(), clone.getRadius()); + } + } + + private void renderJuggernaut(JuggernautData juggernaut, ShapeRenderer shapeRenderer) { + float time = view().time; + float pulseSpeed = view().pulseSpeed; + + for (int i = 0; i < juggernaut.getCurrentLayer(); i++) { + float layerGlow = 0.3f + 0.2f * (float) Math.sin(time * pulseSpeed * (1 + i * 0.5f)); + Color armorColor = + context() + .scratchColor4 + .set( + 0.7f + layerGlow * 0.3f, + 0.7f + layerGlow * 0.3f, + 0.7f + layerGlow * 0.3f, + 0.5f); + shapeRenderer.setColor(armorColor); + shapeRenderer.circle( + juggernaut.getX(), juggernaut.getY(), juggernaut.getRadius() * (1f + 0.2f * i)); + } + + if (juggernaut.isPreparingCharge()) { + float chargeProgress = juggernaut.getChargeProgress(); + Color chargeColor = + context().scratchColor4.set(1f, 0.2f, 0.2f, 0.3f + chargeProgress * 0.4f); + shapeRenderer.setColor(chargeColor); + shapeRenderer.circle( + juggernaut.getX(), + juggernaut.getY(), + juggernaut.getRadius() * (1f + chargeProgress * 0.5f)); + } + } + + private void renderSwarmQueen(SwarmQueenData queen, ShapeRenderer shapeRenderer) { + if (queen.isCharging()) { + float chargeProgress = queen.getChargeProgress(); + Color chargeColor = + context().scratchColor4.set(1f, 0.5f, 0.8f, 0.3f + chargeProgress * 0.4f); + shapeRenderer.setColor(chargeColor); + shapeRenderer.circle( + queen.getX(), queen.getY(), queen.getRadius() * (1f + chargeProgress * 0.5f)); + } + + Color orbColor = queen.getOrbitalParticleColor(); + shapeRenderer.setColor(orbColor); + for (Vector2 particle : queen.getOrbitalParticles()) { + shapeRenderer.circle(particle.x, particle.y, queen.getRadius() * 0.15f); + } + } + + private void renderGlacialWarden( + GlacialWardenData warden, ShapeRenderer shapeRenderer, float glow) { + float time = view().time; + float uiScale = view().uiScale; + + renderGlacialWardenAura(warden, shapeRenderer, glow); + renderGlacialWardenSpikes(warden, shapeRenderer, glow, time, uiScale); + renderGlacialWardenShards(warden, shapeRenderer); + renderGlacialWardenPrisonCharge(warden, shapeRenderer, time, uiScale); + renderGlacialWardenActivePrison(warden, shapeRenderer, glow, time, uiScale); + } + + private void renderGlacialWardenAura( + GlacialWardenData warden, ShapeRenderer shapeRenderer, float glow) { + Color auraColor = context().scratchColor4.set(0.7f, 0.8f, 1f, 0.2f + glow * 0.1f); + shapeRenderer.setColor(auraColor); + shapeRenderer.circle(warden.getX(), warden.getY(), warden.getAuraRadius()); + } + + private void renderGlacialWardenSpikes( + GlacialWardenData warden, + ShapeRenderer shapeRenderer, + float glow, + float time, + float uiScale) { + int spikes = 8; + float spikeLength = warden.getRadius() * 0.4f; + for (int i = 0; i < spikes; i++) { + float angle = (float) (i * Math.PI * 2 / spikes + time * 0.5f); + float x1 = warden.getX() + (float) Math.cos(angle) * warden.getRadius(); + float y1 = warden.getY() + (float) Math.sin(angle) * warden.getRadius(); + float x2 = warden.getX() + (float) Math.cos(angle) * (warden.getRadius() + spikeLength); + float y2 = warden.getY() + (float) Math.sin(angle) * (warden.getRadius() + spikeLength); + + Color spikeColor = context().scratchColor4.set(0.8f, 0.9f, 1f, 0.7f + glow * 0.3f); + shapeRenderer.setColor(spikeColor); + shapeRenderer.rectLine(x1, y1, x2, y2, 3f * uiScale); + } + } + + private void renderGlacialWardenShards(GlacialWardenData warden, ShapeRenderer shapeRenderer) { + for (GlacialWardenData.IceShard shard : warden.getActiveShards()) { + float alpha = shard.getAlpha(); + Color shardColor = context().scratchColor4.set(0.8f, 0.9f, 1f, alpha); + + for (int i = 1; i <= 3; i++) { + float trailAlpha = alpha * (1f - i / 4f); + Color trailColor = context().scratchColor5.set(shardColor); + trailColor.a = trailAlpha; + shapeRenderer.setColor(trailColor); + float trailX = shard.x - shard.velocity.x * 0.02f * i; + float trailY = shard.y - shard.velocity.y * 0.02f * i; + shapeRenderer.circle( + trailX, trailY, GlacialWardenData.getShardRadius() * (1f - i * 0.2f)); + } + + shapeRenderer.setColor(shardColor); + shapeRenderer.circle(shard.x, shard.y, GlacialWardenData.getShardRadius()); + } + } + + private void renderGlacialWardenPrisonCharge( + GlacialWardenData warden, ShapeRenderer shapeRenderer, float time, float uiScale) { + if (!warden.isCastingPrison()) return; + + float progress = warden.getPrisonCastProgress(); + Vector2 pos = warden.getPrisonChargePosition(); + + Color chargeColor = context().scratchColor4.set(0.7f, 0.8f, 1f, 0.3f + progress * 0.4f); + shapeRenderer.setColor(chargeColor); + shapeRenderer.circle(pos.x, pos.y, GlacialWardenData.getPrisonRadius() * progress); + + int crystals = 6; + for (int i = 0; i < crystals; i++) { + float angle = (float) (i * Math.PI * 2 / crystals + time * 2f); + float dist = GlacialWardenData.getPrisonRadius() * 0.5f * progress; + float x = pos.x + (float) Math.cos(angle) * dist; + float y = pos.y + (float) Math.sin(angle) * dist; + + Color crystalColor = + context().scratchColor4.set(0.8f, 0.9f, 1f, 0.5f + progress * 0.5f); + shapeRenderer.setColor(crystalColor); + shapeRenderer.circle(x, y, 5f * uiScale); + } + } + + private void renderGlacialWardenActivePrison( + GlacialWardenData warden, + ShapeRenderer shapeRenderer, + float glow, + float time, + float uiScale) { + if (!warden.isPrisonActive()) return; + + Vector2 pos = warden.getPrisonChargePosition(); + Color prisonColor = context().scratchColor4.set(0.7f, 0.8f, 1f, 0.4f + glow * 0.2f); + shapeRenderer.setColor(prisonColor); + shapeRenderer.circle(pos.x, pos.y, GlacialWardenData.getPrisonRadius()); + + int crystals = 8; + for (int i = 0; i < crystals; i++) { + float angle = (float) (i * Math.PI * 2 / crystals + time); + float x = pos.x + (float) Math.cos(angle) * GlacialWardenData.getPrisonRadius(); + float y = pos.y + (float) Math.sin(angle) * GlacialWardenData.getPrisonRadius(); + + Color crystalColor = context().scratchColor4.set(0.8f, 0.9f, 1f, 0.6f + glow * 0.4f); + shapeRenderer.setColor(crystalColor); + shapeRenderer.circle(x, y, 8f * uiScale); + } + } + + private Color renderIllusionMaster(IllusionMasterData master, ShapeRenderer shapeRenderer) { + float[] color = master.getColor(); + Color baseColor = context().scratchColor3.set(color[0], color[1], color[2], color[3]); + + renderIllusionMasterIllusions(master, shapeRenderer); + if (master.isDistortionActive()) { + float intensity = master.getDistortionIntensity(); + shapeRenderer.setColor(context().scratchColor4.set(1f, 1f, 1f, intensity * 0.3f)); + shapeRenderer.circle( + master.getX(), master.getY(), master.getRadius() * (1f + intensity)); + } + return baseColor; + } + + private void renderIllusionMasterIllusions( + IllusionMasterData master, ShapeRenderer shapeRenderer) { + for (IllusionMasterData.IllusionData illusion : master.getIllusions()) { + float[] color = illusion.getColor(); + shapeRenderer.setColor(color[0], color[1], color[2], color[3]); + shapeRenderer.circle(illusion.getX(), illusion.getY(), illusion.getRadius()); + } + } + + private void renderSharedCircleDecorations( + BaseCircleData circle, ShapeRenderer shapeRenderer, Color baseColor) { + float time = view().time; + float pulseSpeed = view().pulseSpeed; + float uiScale = view().uiScale; + float healthRatio = + (float) circle.health + / (circle instanceof StrongCircleData + ? view().currentStrongCircleHealth + : view().currentBasicCircleHealth); + + float uniquePhase = (circle.getX() * 0.03f + circle.getY() * 0.02f) % (2 * MathUtils.PI); + float pulseIntensity = 0.6f + 0.4f * (float) Math.sin(time * pulseSpeed + uniquePhase); + + if (healthRatio < 0.3f) { + pulseIntensity = 0.4f + 0.6f * (float) Math.sin(time * pulseSpeed * 2 + uniquePhase); + } + + Color glowColor = context().scratchColor4.set(baseColor); + glowColor.r = MathUtils.clamp(glowColor.r * pulseIntensity, 0, 1); + glowColor.g = MathUtils.clamp(glowColor.g * pulseIntensity, 0, 1); + glowColor.b = MathUtils.clamp(glowColor.b * pulseIntensity, 0, 1); + + renderStrongCircleDecorations(circle, shapeRenderer, glowColor, pulseIntensity, uiScale); + renderFastCircleDecorations(circle, shapeRenderer, glowColor, pulseIntensity, uiScale); + renderSplitterCircleDecorations( + circle, shapeRenderer, glowColor, time, pulseSpeed, uiScale); + renderSpawnerCircleDecorations(circle, shapeRenderer, glowColor, time, pulseSpeed, uiScale); + renderFrozenCircleOverlay(circle, shapeRenderer, time, uiScale); + renderCircleBody(circle, shapeRenderer, glowColor); + } + + private void renderStrongCircleDecorations( + BaseCircleData circle, + ShapeRenderer shapeRenderer, + Color glowColor, + float pulseIntensity, + float uiScale) { + if (!(circle instanceof StrongCircleData)) return; + for (int i = 3; i > 0; i--) { + float alpha = 0.2f * (4 - i) / 3 * pulseIntensity; + float extraSize = 5f * i * uiScale; + Color armorColor = context().scratchColor5.set(glowColor); + armorColor.a = alpha; + shapeRenderer.setColor(armorColor); + shapeRenderer.circle(circle.getX(), circle.getY(), circle.getRadius() + extraSize); + } + } + + private void renderFastCircleDecorations( + BaseCircleData circle, + ShapeRenderer shapeRenderer, + Color glowColor, + float pulseIntensity, + float uiScale) { + if (!(circle instanceof FastCircleData)) return; + + float speedAlpha = 0.3f * pulseIntensity; + Color speedColor = context().scratchColor5.set(glowColor); + speedColor.a = speedAlpha; + + float velocityLength = circle.velocity.len(); + float normalizedVelocityX = velocityLength == 0f ? 0f : circle.velocity.x / velocityLength; + float normalizedVelocityY = velocityLength == 0f ? 0f : circle.velocity.y / velocityLength; + + shapeRenderer.setColor(speedColor); + for (int i = 0; i < 3; i++) { + float offset = i * 5f * uiScale; + shapeRenderer.circle( + circle.getX() - normalizedVelocityX * offset, + circle.getY() - normalizedVelocityY * offset, + circle.getRadius() * (1 - i * 0.2f)); + } + } + + private void renderSplitterCircleDecorations( + BaseCircleData circle, + ShapeRenderer shapeRenderer, + Color glowColor, + float time, + float pulseSpeed, + float uiScale) { + if (!(circle instanceof SplitterCircleData)) return; + + float splitAlpha = 0.25f + 0.15f * (float) Math.sin(time * pulseSpeed * 2); + Color splitColor = context().scratchColor5.set(glowColor); + splitColor.a = splitAlpha; + + shapeRenderer.setColor(splitColor); + shapeRenderer.circle(circle.getX(), circle.getY(), circle.getRadius() * 1.5f); + + for (int i = 0; i < 4; i++) { + float angle = MathUtils.PI / 2 * i + time * 0.5f; + float lineLength = circle.getRadius() * 1.3f; + shapeRenderer.rectLine( + circle.getX(), + circle.getY(), + circle.getX() + MathUtils.cos(angle) * lineLength, + circle.getY() + MathUtils.sin(angle) * lineLength, + 1.5f * uiScale); + } + } + + private void renderSpawnerCircleDecorations( + BaseCircleData circle, + ShapeRenderer shapeRenderer, + Color glowColor, + float time, + float pulseSpeed, + float uiScale) { + if (!(circle instanceof SpawnerCircleData)) return; + + for (int i = 0; i < 2; i++) { + float spawnPulse = + 0.3f + 0.2f * (float) Math.sin(time * pulseSpeed * 1.5f + i * MathUtils.PI); + float waveRadius = + circle.getRadius() + * (1.5f + i * 0.5f) + * (1 + 0.3f * (float) Math.sin(time * 3 + i * MathUtils.PI)); + + Color waveColor = context().scratchColor5.set(glowColor); + waveColor.a = spawnPulse * 0.3f; + + shapeRenderer.setColor(waveColor); + shapeRenderer.circle(circle.getX(), circle.getY(), waveRadius); + } + + float orbitSpeed = time * 2; + int pointCount = 3; + float orbitRadius = circle.getRadius() * 0.6f; + shapeRenderer.setColor(context().withAlpha(glowColor, 0.7f)); + for (int i = 0; i < pointCount; i++) { + float angle = orbitSpeed + i * (MathUtils.PI * 2 / pointCount); + shapeRenderer.circle( + circle.getX() + MathUtils.cos(angle) * orbitRadius, + circle.getY() + MathUtils.sin(angle) * orbitRadius, + 2f * uiScale); + } + } + + private void renderFrozenCircleOverlay( + BaseCircleData circle, ShapeRenderer shapeRenderer, float time, float uiScale) { + if (!circle.isFrozen()) return; + + shapeRenderer.setColor( + context().withAlpha(view().neonCyan, 0.4f + 0.3f * (float) Math.sin(time * 5f))); + shapeRenderer.circle(circle.getX(), circle.getY(), circle.getRadius() * 1.3f); + + for (int i = 0; i < 6; i++) { + float angle = i * MathUtils.PI / 3; + float spikeLength = circle.getRadius() * 0.7f; + shapeRenderer.rectLine( + circle.getX() + MathUtils.cos(angle) * circle.getRadius() * 0.9f, + circle.getY() + MathUtils.sin(angle) * circle.getRadius() * 0.9f, + circle.getX() + MathUtils.cos(angle) * (circle.getRadius() + spikeLength), + circle.getY() + MathUtils.sin(angle) * (circle.getRadius() + spikeLength), + 2f * uiScale); + } + } + + private void renderCircleBody( + BaseCircleData circle, ShapeRenderer shapeRenderer, Color glowColor) { + Color circleColor = context().scratchColor5.set(glowColor); + circleColor.a = 0.9f; + shapeRenderer.setColor(circleColor); + float radius = Math.max(circle.getRadius(), MIN_ENEMY_VISUAL_RADIUS * view().uiScale); + shapeRenderer.setColor(context().withAlpha(circleColor, 0.12f)); + shapeRenderer.circle(circle.getX(), circle.getY(), radius + 4f * view().uiScale); + circleColor.a = 0.94f; + shapeRenderer.setColor(circleColor); + if (circle instanceof FastCircleData) { + renderDiamond(shapeRenderer, circle.getX(), circle.getY(), radius * 1.05f); + } else if (circle instanceof StrongCircleData) { + shapeRenderer.rect( + circle.getX() - radius, circle.getY() - radius, radius * 2f, radius * 2f); + } else { + shapeRenderer.circle(circle.getX(), circle.getY(), radius); + } + renderSupportMark(circle, shapeRenderer, radius); + } + + private void renderDiamond(ShapeRenderer shapeRenderer, float x, float y, float radius) { + shapeRenderer.triangle(x, y + radius, x + radius, y, x, y - radius); + shapeRenderer.triangle(x, y + radius, x - radius, y, x, y - radius); + } + + private void renderSupportMark( + BaseCircleData circle, ShapeRenderer shapeRenderer, float radius) { + if (!(circle instanceof SpawnerCircleData) && !(circle instanceof HealerCircleData)) return; + shapeRenderer.setColor(0.02f, 0.07f, 0.06f, 0.92f); + float mark = Math.max(2f, radius * 0.25f); + shapeRenderer.rect( + circle.getX() - mark * 1.8f, + circle.getY() - mark * 0.45f, + mark * 3.6f, + mark * 0.9f); + shapeRenderer.rect( + circle.getX() - mark * 0.45f, + circle.getY() - mark * 1.8f, + mark * 0.9f, + mark * 3.6f); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/hud/GameScreenHudModel.java b/core/src/main/java/ru/project/tower/screens/gamescreen/hud/GameScreenHudModel.java new file mode 100644 index 0000000..80b5a19 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/hud/GameScreenHudModel.java @@ -0,0 +1,661 @@ +package ru.project.tower.screens.gamescreen.hud; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.math.Rectangle; +import ru.project.tower.abilities.AbilityKind; +import ru.project.tower.screens.gamescreen.assets.GameScreenFontAssets.HudFonts; +import ru.project.tower.screens.gamescreen.assets.GameScreenMaterialAssets; +import ru.project.tower.screens.gamescreen.shop.ShopUpgradePreviewValues; + +public final class GameScreenHudModel { + private final GameScreenHudRenderContext renderContext = new GameScreenHudRenderContext(); + private final GameScreenHudViewModel viewModel = new GameScreenHudViewModel(); + + public GameScreenHudModel() {} + + GameScreenHudRenderContext renderContext() { + return renderContext; + } + + GameScreenHudViewModel viewModel() { + return viewModel; + } + + public void populateRenderContext(RenderContextData data) { + populateRenderContext( + data.shapeRenderer(), + data.batch(), + data.font(), + data.hudFonts(), + data.materialAssets(), + data.neonRed(), + data.neonCyan(), + data.neonBlue(), + data.neonPink(), + data.priceTextColor(), + data.scratchColor()); + } + + public void populateRenderContext( + ShapeRenderer shapeRenderer, + SpriteBatch batch, + BitmapFont font, + HudFonts hudFonts, + GameScreenMaterialAssets materialAssets, + Color neonRed, + Color neonCyan, + Color neonBlue, + Color neonPink, + Color priceTextColor, + Color scratchColor) { + renderContext.shapeRenderer = shapeRenderer; + renderContext.batch = batch; + renderContext.font = font; + renderContext.hudFonts = hudFonts; + renderContext.materialAssets = materialAssets; + renderContext.neonRed = neonRed; + renderContext.neonCyan = neonCyan; + renderContext.neonBlue = neonBlue; + renderContext.neonPink = neonPink; + renderContext.priceTextColor = priceTextColor; + renderContext.scratchColor = scratchColor; + } + + public void populateWaveAndStats(WaveAndStatsState state) { + populateWaveAndStats( + state.viewportWidth(), + state.viewportHeight(), + state.uiScale(), + state.time(), + state.pulseSpeed(), + state.waveIndicatorHeight(), + state.waveIndicatorPadding(), + state.waveActive(), + state.enemiesPerWave(), + state.enemiesSpawnedThisWave(), + state.currentWave(), + state.nowMs(), + state.waveStartTime(), + state.timeBetweenWaves(), + state.squareHealth(), + state.maxSquareHealth(), + state.money(), + state.runCurrencyEarned()); + } + + public void populateWaveAndStats( + int viewportWidth, + int viewportHeight, + float uiScale, + float time, + float pulseSpeed, + float waveIndicatorHeight, + float waveIndicatorPadding, + boolean waveActive, + long enemiesPerWave, + long enemiesSpawnedThisWave, + int currentWave, + long nowMs, + long waveStartTime, + long timeBetweenWaves, + int squareHealth, + int maxSquareHealth, + int money, + int runCurrencyEarned) { + viewModel.viewportWidth = viewportWidth; + viewModel.viewportHeight = viewportHeight; + viewModel.uiScale = uiScale; + viewModel.time = time; + viewModel.pulseSpeed = pulseSpeed; + viewModel.waveIndicatorHeight = waveIndicatorHeight; + viewModel.waveIndicatorPadding = waveIndicatorPadding; + viewModel.waveActive = waveActive; + viewModel.enemiesPerWave = enemiesPerWave; + viewModel.enemiesSpawnedThisWave = enemiesSpawnedThisWave; + viewModel.currentWave = currentWave; + viewModel.nowMs = nowMs; + viewModel.waveStartTime = waveStartTime; + viewModel.timeBetweenWaves = timeBetweenWaves; + viewModel.squareHealth = squareHealth; + viewModel.maxSquareHealth = maxSquareHealth; + viewModel.money = money; + viewModel.runCurrencyEarned = runCurrencyEarned; + } + + public void fillShopPanelFields(ShopPanelFields fields) { + viewModel.departmentButtonsY = fields.departmentButtonsY(); + viewModel.showingAttackUpgrades = fields.showingAttackUpgrades(); + viewModel.showingAbilities = fields.showingAbilities(); + viewModel.shopExpanded = fields.shopExpanded(); + viewModel.shopTransitionProgress = fields.shopTransitionProgress(); + viewModel.attackDepartmentButton = fields.attackDepartmentButton(); + viewModel.healthDepartmentButton = fields.healthDepartmentButton(); + viewModel.abilitiesDepartmentButton = fields.abilitiesDepartmentButton(); + viewModel.shopToggleButton = fields.shopToggleButton(); + viewModel.topBar = fields.topBar(); + viewModel.waveBar = fields.waveBar(); + viewModel.statStrip = fields.statStrip(); + viewModel.shopSheet = fields.shopSheet(); + viewModel.shopHandle = fields.shopHandle(); + viewModel.abilityDock = fields.abilityDock(); + viewModel.dockLabel = fields.dockLabel(); + } + + public void populateCombatStats( + int effectiveDamage, + float effectiveSpeed, + int healthRegenRate, + float effectiveCooldownMs, + float effectiveCritChance, + float effectiveCritMultiplier) { + viewModel.effectiveDamage = effectiveDamage; + viewModel.effectiveSpeed = effectiveSpeed; + viewModel.healthRegenRate = healthRegenRate; + viewModel.effectiveCooldownMs = effectiveCooldownMs; + viewModel.effectiveCritChance = effectiveCritChance; + viewModel.effectiveCritMultiplier = effectiveCritMultiplier; + } + + public void setHudHelpVisible(boolean visible) { + viewModel.hudHelpVisible = visible; + } + + public void setAttackButton( + int index, Rectangle bounds, Color color, CharSequence label, int price) { + setAttackButton(index, bounds, color, label, price, 0f); + } + + public void setAttackButton( + int index, + Rectangle bounds, + Color color, + CharSequence label, + int price, + float statDelta) { + setAttackButton(index, bounds, color, label, price, statDelta, null, null); + } + + public void setAttackButton( + int index, + Rectangle bounds, + Color color, + CharSequence label, + int price, + float statDelta, + CharSequence currentValue, + CharSequence nextValue) { + setHudButton( + viewModel.attackButtons[index], + bounds, + color, + label, + price, + statDelta, + currentValue, + nextValue); + } + + public void setAttackButton( + int index, Rectangle bounds, Color color, ShopUpgradePreviewValues.PreviewRow row) { + setHudButton(viewModel.attackButtons[index], bounds, color, row); + } + + public void setHealthButton( + int index, Rectangle bounds, Color color, CharSequence label, int price) { + setHudButton(viewModel.healthButtons[index], bounds, color, label, price, 0f); + } + + public void setHealthButton( + int index, Rectangle bounds, Color color, ShopUpgradePreviewValues.PreviewRow row) { + setHudButton(viewModel.healthButtons[index], bounds, color, row); + } + + public void setBonusButton( + int index, Rectangle bounds, Color color, CharSequence label, int price) { + setBonusButton(index, bounds, color, label, price, 0f); + } + + public void setBonusButton( + int index, + Rectangle bounds, + Color color, + CharSequence label, + int price, + float statDelta) { + setBonusButton(index, bounds, color, label, price, statDelta, null, null); + } + + public void setBonusButton( + int index, + Rectangle bounds, + Color color, + CharSequence label, + int price, + float statDelta, + CharSequence currentValue, + CharSequence nextValue) { + setHudButton( + viewModel.bonusButtons[index], + bounds, + color, + label, + price, + statDelta, + currentValue, + nextValue); + } + + public void setBonusButton( + int index, Rectangle bounds, Color color, ShopUpgradePreviewValues.PreviewRow row) { + setHudButton(viewModel.bonusButtons[index], bounds, color, row); + } + + public void clearAbilityButtons() { + viewModel.hasAnyAbilityButton = false; + for (GameScreenHudViewModel.AbilityButton button : viewModel.abilityButtons) { + button.bounds = null; + button.cooldownMs = 0L; + } + } + + public void setAbilityButton( + AbilityKind ability, Rectangle bounds, Color color, long cooldownMs) { + GameScreenHudViewModel.AbilityButton button = viewModel.abilityButton(ability); + button.bounds = bounds; + button.color = color; + if (bounds != null) { + viewModel.hasAnyAbilityButton = true; + button.cooldownMs = cooldownMs; + } + } + + private void setHudButton( + GameScreenHudViewModel.HudButton button, + Rectangle bounds, + Color color, + CharSequence label, + int price, + float statDelta) { + setHudButton(button, bounds, color, label, price, statDelta, null, null); + } + + private void setHudButton( + GameScreenHudViewModel.HudButton button, + Rectangle bounds, + Color color, + CharSequence label, + int price, + float statDelta, + CharSequence currentValue, + CharSequence nextValue) { + button.bounds = bounds; + button.color = color; + button.label = label; + button.price = price; + button.statDelta = statDelta; + button.currentValue = currentValue; + button.nextValue = nextValue; + button.description = null; + button.disabledReason = null; + button.kind = null; + button.iconToken = null; + button.colorToken = null; + button.maxed = false; + } + + private void setHudButton( + GameScreenHudViewModel.HudButton button, + Rectangle bounds, + Color color, + ShopUpgradePreviewValues.PreviewRow row) { + button.bounds = bounds; + button.color = color; + button.label = row.gameName(); + button.price = row.price(); + button.statDelta = 0f; + button.currentValue = row.currentValue(); + button.nextValue = row.nextValue(); + button.description = row.description(); + button.disabledReason = null; + button.kind = row.kind(); + button.iconToken = row.iconToken(); + button.colorToken = row.colorToken(); + button.maxed = row.maxed(); + } + + public static final class RenderContextData { + private final ShapeRenderer shapeRenderer; + private final SpriteBatch batch; + private final BitmapFont font; + private final HudFonts hudFonts; + private final GameScreenMaterialAssets materialAssets; + private final Color neonRed; + private final Color neonCyan; + private final Color neonBlue; + private final Color neonPink; + private final Color priceTextColor; + private final Color scratchColor; + + public RenderContextData( + ShapeRenderer shapeRenderer, + SpriteBatch batch, + BitmapFont font, + HudFonts hudFonts, + GameScreenMaterialAssets materialAssets, + Color neonRed, + Color neonCyan, + Color neonBlue, + Color neonPink, + Color priceTextColor, + Color scratchColor) { + this.shapeRenderer = shapeRenderer; + this.batch = batch; + this.font = font; + this.hudFonts = hudFonts; + this.materialAssets = materialAssets; + this.neonRed = neonRed; + this.neonCyan = neonCyan; + this.neonBlue = neonBlue; + this.neonPink = neonPink; + this.priceTextColor = priceTextColor; + this.scratchColor = scratchColor; + } + + public ShapeRenderer shapeRenderer() { + return shapeRenderer; + } + + public SpriteBatch batch() { + return batch; + } + + public BitmapFont font() { + return font; + } + + public HudFonts hudFonts() { + return hudFonts; + } + + public GameScreenMaterialAssets materialAssets() { + return materialAssets; + } + + public Color neonRed() { + return neonRed; + } + + public Color neonCyan() { + return neonCyan; + } + + public Color neonBlue() { + return neonBlue; + } + + public Color neonPink() { + return neonPink; + } + + public Color priceTextColor() { + return priceTextColor; + } + + public Color scratchColor() { + return scratchColor; + } + } + + public static final class WaveAndStatsState { + private final int viewportWidth; + private final int viewportHeight; + private final float uiScale; + private final float time; + private final float pulseSpeed; + private final float waveIndicatorHeight; + private final float waveIndicatorPadding; + private final boolean waveActive; + private final long enemiesPerWave; + private final long enemiesSpawnedThisWave; + private final int currentWave; + private final long nowMs; + private final long waveStartTime; + private final long timeBetweenWaves; + private final int squareHealth; + private final int maxSquareHealth; + private final int money; + private final int runCurrencyEarned; + + public WaveAndStatsState( + int viewportWidth, + int viewportHeight, + float uiScale, + float time, + float pulseSpeed, + float waveIndicatorHeight, + float waveIndicatorPadding, + boolean waveActive, + long enemiesPerWave, + long enemiesSpawnedThisWave, + int currentWave, + long nowMs, + long waveStartTime, + long timeBetweenWaves, + int squareHealth, + int maxSquareHealth, + int money, + int runCurrencyEarned) { + this.viewportWidth = viewportWidth; + this.viewportHeight = viewportHeight; + this.uiScale = uiScale; + this.time = time; + this.pulseSpeed = pulseSpeed; + this.waveIndicatorHeight = waveIndicatorHeight; + this.waveIndicatorPadding = waveIndicatorPadding; + this.waveActive = waveActive; + this.enemiesPerWave = enemiesPerWave; + this.enemiesSpawnedThisWave = enemiesSpawnedThisWave; + this.currentWave = currentWave; + this.nowMs = nowMs; + this.waveStartTime = waveStartTime; + this.timeBetweenWaves = timeBetweenWaves; + this.squareHealth = squareHealth; + this.maxSquareHealth = maxSquareHealth; + this.money = money; + this.runCurrencyEarned = runCurrencyEarned; + } + + public int viewportWidth() { + return viewportWidth; + } + + public int viewportHeight() { + return viewportHeight; + } + + public float uiScale() { + return uiScale; + } + + public float time() { + return time; + } + + public float pulseSpeed() { + return pulseSpeed; + } + + public float waveIndicatorHeight() { + return waveIndicatorHeight; + } + + public float waveIndicatorPadding() { + return waveIndicatorPadding; + } + + public boolean waveActive() { + return waveActive; + } + + public long enemiesPerWave() { + return enemiesPerWave; + } + + public long enemiesSpawnedThisWave() { + return enemiesSpawnedThisWave; + } + + public int currentWave() { + return currentWave; + } + + public long nowMs() { + return nowMs; + } + + public long waveStartTime() { + return waveStartTime; + } + + public long timeBetweenWaves() { + return timeBetweenWaves; + } + + public int squareHealth() { + return squareHealth; + } + + public int maxSquareHealth() { + return maxSquareHealth; + } + + public int money() { + return money; + } + + public int runCurrencyEarned() { + return runCurrencyEarned; + } + } + + public static final class ShopPanelFields { + private final float departmentButtonsY; + private final boolean showingAttackUpgrades; + private final boolean showingAbilities; + private final boolean shopExpanded; + private final float shopTransitionProgress; + private final Rectangle attackDepartmentButton; + private final Rectangle healthDepartmentButton; + private final Rectangle abilitiesDepartmentButton; + private final Rectangle shopToggleButton; + private final Rectangle topBar; + private final Rectangle waveBar; + private final Rectangle statStrip; + private final Rectangle shopSheet; + private final Rectangle shopHandle; + private final Rectangle abilityDock; + private final Rectangle dockLabel; + + public ShopPanelFields( + float departmentButtonsY, + boolean showingAttackUpgrades, + boolean showingAbilities, + boolean shopExpanded, + float shopTransitionProgress, + Rectangle attackDepartmentButton, + Rectangle healthDepartmentButton, + Rectangle abilitiesDepartmentButton, + Rectangle shopToggleButton, + Rectangle topBar, + Rectangle waveBar, + Rectangle statStrip, + Rectangle shopSheet, + Rectangle shopHandle, + Rectangle abilityDock, + Rectangle dockLabel) { + this.departmentButtonsY = departmentButtonsY; + this.showingAttackUpgrades = showingAttackUpgrades; + this.showingAbilities = showingAbilities; + this.shopExpanded = shopExpanded; + this.shopTransitionProgress = shopTransitionProgress; + this.attackDepartmentButton = attackDepartmentButton; + this.healthDepartmentButton = healthDepartmentButton; + this.abilitiesDepartmentButton = abilitiesDepartmentButton; + this.shopToggleButton = shopToggleButton; + this.topBar = topBar; + this.waveBar = waveBar; + this.statStrip = statStrip; + this.shopSheet = shopSheet; + this.shopHandle = shopHandle; + this.abilityDock = abilityDock; + this.dockLabel = dockLabel; + } + + public float departmentButtonsY() { + return departmentButtonsY; + } + + public boolean showingAttackUpgrades() { + return showingAttackUpgrades; + } + + public boolean showingAbilities() { + return showingAbilities; + } + + public boolean shopExpanded() { + return shopExpanded; + } + + public float shopTransitionProgress() { + return shopTransitionProgress; + } + + public Rectangle attackDepartmentButton() { + return attackDepartmentButton; + } + + public Rectangle healthDepartmentButton() { + return healthDepartmentButton; + } + + public Rectangle abilitiesDepartmentButton() { + return abilitiesDepartmentButton; + } + + public Rectangle shopToggleButton() { + return shopToggleButton; + } + + public Rectangle topBar() { + return topBar; + } + + public Rectangle waveBar() { + return waveBar; + } + + public Rectangle statStrip() { + return statStrip; + } + + public Rectangle shopSheet() { + return shopSheet; + } + + public Rectangle shopHandle() { + return shopHandle; + } + + public Rectangle abilityDock() { + return abilityDock; + } + + public Rectangle dockLabel() { + return dockLabel; + } + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/hud/GameScreenHudRenderContext.java b/core/src/main/java/ru/project/tower/screens/gamescreen/hud/GameScreenHudRenderContext.java new file mode 100644 index 0000000..2ef5788 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/hud/GameScreenHudRenderContext.java @@ -0,0 +1,22 @@ +package ru.project.tower.screens.gamescreen.hud; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import ru.project.tower.screens.gamescreen.assets.GameScreenFontAssets.HudFonts; +import ru.project.tower.screens.gamescreen.assets.GameScreenMaterialAssets; + +final class GameScreenHudRenderContext { + ShapeRenderer shapeRenderer; + SpriteBatch batch; + BitmapFont font; + HudFonts hudFonts; + GameScreenMaterialAssets materialAssets; + Color neonRed; + Color neonCyan; + Color neonBlue; + Color neonPink; + Color priceTextColor; + Color scratchColor; +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/hud/GameScreenHudRenderer.java b/core/src/main/java/ru/project/tower/screens/gamescreen/hud/GameScreenHudRenderer.java new file mode 100644 index 0000000..5134792 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/hud/GameScreenHudRenderer.java @@ -0,0 +1,1909 @@ +package ru.project.tower.screens.gamescreen.hud; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.GL20; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.GlyphLayout; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.glutils.HdpiUtils; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType; +import com.badlogic.gdx.math.MathUtils; +import com.badlogic.gdx.math.Rectangle; +import ru.project.tower.screens.gamescreen.assets.GameScreenFontAssets.HudFonts; +import ru.project.tower.screens.gamescreen.ui.NeonTextRenderer; +import ru.project.tower.screens.gamescreen.visual.GameScreenVisualTokens; +import ru.project.tower.support.CompactNumberFormatter; +import ru.project.tower.support.ScreenPalette; + +public final class GameScreenHudRenderer { + public interface Host { + public GameScreenHudModel hudModel(); + } + + private static final String ATTACK_DEPARTMENT_TEXT = "Атака"; + private static final String HEALTH_DEPARTMENT_TEXT = "Здоровье"; + private static final String ABILITIES_DEPARTMENT_TEXT = "Бонусы"; + private static final String WAVE_LABEL = "Волна: "; + private static final String HEALTH_LABEL = "Здоровье: "; + private static final String MONEY_LABEL = "Деньги: ₽"; + private static final String EMPTY_ABILITIES_MESSAGE = "Нет выбранных способностей"; + private static final String UPGRADE_ARROW_TEXT = "→"; + private static final GameScreenHudViewModel.HudButton[] EMPTY_BUTTONS = + new GameScreenHudViewModel.HudButton[0]; + private static final float REFERENCE_WIDTH = 405f; + private static final float REFERENCE_HEIGHT = 682f; + private static final float DOCK_COOLDOWN_SPRITE_OFFSET_X = -2f; + private static final float DOCK_COOLDOWN_SPRITE_OFFSET_Y = -2f; + private static final float DOCK_COOLDOWN_STROKE_WIDTH = 5f; + private static final float DOCK_COOLDOWN_ARC_SEGMENT_DEGREES = 6f; + private static final float STAT_ICON_OFFSET_X = 23f; + private static final float STAT_TEXT_OFFSET_X = 34f; + private static final float STAT_CRIT_ICON_OFFSET_X = 0f; + private static final float STAT_CRIT_ICON_OFFSET_Y = 0f; + private static final float STAT_ICON_SPRITE_SIZE = 16f; + private static final float SHOP_CARD_TITLE_PAD_X = 13f; + private static final float SHOP_CARD_VALUE_OFFSET_Y = 6f; + private static final float SHOP_CARD_CLIP_BLEED = 3f; + private static final float SHOP_CLOSED_TRANSLATE_RATIO = 1f; + private static final float WAVEBAR_COLOR_FILL_TRIM_TOP = 2f; + private static final float WAVEBAR_CYAN_FILL_SHARE = 0.58f; + private static final float TOPBAR_RUBLE_OFFSET_X = -5f; + private static final float TOPBAR_RUBLE_OFFSET_Y = -2f; + private static final float TOPBAR_RUBLE_SCALE = 0.82f; + private static final float TOPBAR_MONEY_SLOT_SHARE = 0.52f; + private static final float TOPBAR_COIN_ICON_RADIUS = 4.3f; + private static final float TOPBAR_COIN_ICON_GAP = 8f; + private static final float TOPBAR_COIN_TEXT_INSET_X = 14f; + private static final float TOPBAR_HEART_OFFSET_X = 8f; + private static final float TOPBAR_HEART_OFFSET_Y = -2f; + private static final float TOPBAR_HEART_GEOMETRY_SCALE = 0.62f; + private static final float TOPBAR_WAVE_GROUP_OFFSET_X = 6f; + + private final Host host; + private final NeonTextRenderer textRenderer = new NeonTextRenderer(); + private final GlyphLayout emptyAbilitiesLayout = new GlyphLayout(); + private final GlyphLayout rubleLayout = new GlyphLayout(); + private final StringBuilder waveText = new StringBuilder(16); + private final StringBuilder healthText = new StringBuilder(24); + private final StringBuilder moneyText = new StringBuilder(16); + private final StringBuilder runCoinText = new StringBuilder(16); + private final StringBuilder priceText = new StringBuilder(16); + private final StringBuilder cooldownText = new StringBuilder(10); + private final StringBuilder statText = new StringBuilder(16); + private final StringBuilder currentValue = new StringBuilder(16); + private final StringBuilder nextValue = new StringBuilder(16); + private final Rectangle hudHelpRect = new Rectangle(); + private final Rectangle scratchRect = new Rectangle(); + private final Rectangle shopCardClipRect = new Rectangle(); + + public GameScreenHudRenderer(Host host) { + this.host = host; + } + + public void renderHud() { + renderHudShapes(); + renderHudText(); + } + + private void renderHudShapes() { + GameScreenHudModel model = host.hudModel(); + GameScreenHudRenderContext context = model.renderContext(); + GameScreenHudViewModel view = model.viewModel(); + ShapeRenderer shapeRenderer = context.shapeRenderer; + float glow = 0.3f + 0.3f * (float) Math.sin(view.time * view.pulseSpeed); + float shopTranslateY = shopSheetTranslateY(view); + boolean shopVisible = shopAnimationVisible(view); + + Gdx.gl.glEnable(GL20.GL_BLEND); + shapeRenderer.begin(ShapeType.Filled); + drawPanelFill(shapeRenderer, view.topBar, 0.08f, 0.10f, 0.16f, 0.90f); + drawTopBarIconFills(model, shapeRenderer, view); + drawStatCardFills(shapeRenderer, view); + drawStatIconGlows(shapeRenderer, view); + drawWaveBarFill(model, shapeRenderer, view); + if (view.hudHelpVisible) { + drawHudHelpPanel(shapeRenderer, view); + } + if (shopVisible) { + translateShopGeometry(view, shopTranslateY); + drawPanelFill(shapeRenderer, view.shopSheet, 0.06f, 0.08f, 0.13f, 0.98f); + drawTabFills(shapeRenderer, view); + drawClippedShopButtonFills(model, shapeRenderer, view, glow); + translateShopGeometry(view, -shopTranslateY); + } + if (shopVisible) { + drawPanelFill( + shapeRenderer, + translatedShopHandleBounds(view, scratchRect), + 0.75f, + 0.78f, + 0.86f, + 0.28f); + } + if (dockChromeVisible(view)) { + drawPanelFill(shapeRenderer, view.abilityDock, 0.05f, 0.07f, 0.12f, 0.92f); + } + drawPanelFill( + shapeRenderer, + view.shopToggleButton, + GameScreenVisualTokens.Dock.TOGGLE_FILL_RED, + GameScreenVisualTokens.Dock.TOGGLE_FILL_GREEN, + GameScreenVisualTokens.Dock.TOGGLE_FILL_BLUE, + GameScreenVisualTokens.Dock.TOGGLE_FILL_ALPHA); + drawToggleIcon(shapeRenderer, view); + drawAbilityButtonFills(model, shapeRenderer, glow); + shapeRenderer.end(); + + shapeRenderer.begin(ShapeType.Line); + Gdx.gl.glLineWidth(1f); + drawPanelBorder(model, shapeRenderer, view.topBar, context.neonBlue, 0.24f); + drawPanelBorder(model, shapeRenderer, view.waveBar, context.neonCyan, 0.30f); + drawStatCardBorders(model, shapeRenderer, view, glow); + if (view.hudHelpVisible) { + drawPanelBorder( + model, shapeRenderer, hudHelpBounds(view), context.neonCyan, 0.42f + glow); + } + if (shopVisible) { + translateShopGeometry(view, shopTranslateY); + drawPanelBorder(model, shapeRenderer, view.shopSheet, context.neonBlue, 0.28f); + drawDepartmentTabBorders(model, shapeRenderer, view, glow); + drawClippedShopButtonBorders(model, shapeRenderer, view, glow); + translateShopGeometry(view, -shopTranslateY); + } + if (dockChromeVisible(view)) { + drawPanelBorder(model, shapeRenderer, view.abilityDock, context.neonBlue, 0.22f); + } + drawPanelBorder(model, shapeRenderer, view.shopToggleButton, context.neonCyan, 0.45f); + drawAbilityCooldownProgressArcs(model, shapeRenderer); + drawAbilityButtonBorders(model, shapeRenderer, glow); + shapeRenderer.end(); + Gdx.gl.glLineWidth(1f); + Gdx.gl.glDisable(GL20.GL_BLEND); + } + + private void renderHudText() { + GameScreenHudModel model = host.hudModel(); + GameScreenHudRenderContext context = model.renderContext(); + GameScreenHudViewModel view = model.viewModel(); + SpriteBatch batch = context.batch; + + batch.begin(); + drawStatIconSprites(model, batch, view); + drawTopBarText(model, batch, topBarFont(context), view); + drawStatStripText(model, batch, statFont(context), view); + if (view.hudHelpVisible) { + drawHudHelpText(model, batch, tabFont(context), view); + } + float shopTranslateY = shopSheetTranslateY(view); + if (shopAnimationVisible(view)) { + translateShopGeometry(view, shopTranslateY); + drawTabIconSprites(model, batch, view); + drawTabText( + batch, + tabFont(context), + view, + "Атака", + view.attackDepartmentButton, + view.showingAttackUpgrades); + drawTabText( + batch, + tabFont(context), + view, + "Защита", + view.healthDepartmentButton, + !view.showingAttackUpgrades && !view.showingAbilities); + drawTabText( + batch, + tabFont(context), + view, + "Бонусы", + view.abilitiesDepartmentButton, + view.showingAbilities); + drawClippedShopCardTexts(model, batch, view); + translateShopGeometry(view, -shopTranslateY); + } + drawDockText(model, batch, view); + batch.end(); + } + + static float shopAnimationProgress(GameScreenHudViewModel view) { + float progress = Math.max(0f, Math.min(1f, view.shopTransitionProgress)); + return progress * progress * (3f - 2f * progress); + } + + private boolean shopAnimationVisible(GameScreenHudViewModel view) { + return shopAnimationProgress(view) > 0f; + } + + private static float shopSheetTranslateY(GameScreenHudViewModel view) { + Rectangle sheet = view.shopSheet; + if (sheet == null) return 0f; + return sheet.height * SHOP_CLOSED_TRANSLATE_RATIO * (1f - shopAnimationProgress(view)); + } + + static Rectangle translatedShopHandleBounds(GameScreenHudViewModel view, Rectangle target) { + if (target == null) { + throw new IllegalArgumentException("Target rectangle is required"); + } + Rectangle handle = view.shopHandle; + if (handle == null) return target.set(0f, 0f, 0f, 0f); + return target.set( + handle.x, handle.y + shopSheetTranslateY(view), handle.width, handle.height); + } + + private boolean dockChromeVisible(GameScreenHudViewModel view) { + return view.shopExpanded || view.hasAnyAbilityButton; + } + + private void translateShopGeometry(GameScreenHudViewModel view, float offsetY) { + if (offsetY == 0f) return; + translateRect(view.shopSheet, offsetY); + translateRect(view.shopHandle, offsetY); + translateRect(view.attackDepartmentButton, offsetY); + translateRect(view.healthDepartmentButton, offsetY); + translateRect(view.abilitiesDepartmentButton, offsetY); + translateButtons(visibleUpgradeButtons(view), offsetY); + } + + private void translateButtons(GameScreenHudViewModel.HudButton[] buttons, float offsetY) { + for (GameScreenHudViewModel.HudButton button : buttons) { + translateRect(button.bounds, offsetY); + } + } + + private void translateRect(Rectangle rect, float offsetY) { + if (rect != null) { + rect.y += offsetY; + } + } + + private GameScreenHudViewModel.HudButton[] visibleUpgradeButtons(GameScreenHudViewModel view) { + if (view.showingAttackUpgrades) return view.attackButtons; + if (view.showingAbilities) return view.bonusButtons; + return view.healthButtons; + } + + private void drawPanelFill( + ShapeRenderer shapeRenderer, Rectangle rect, float r, float g, float b, float a) { + if (rect == null || rect.width <= 0f || rect.height <= 0f) return; + shapeRenderer.setColor(r, g, b, a); + shapeRenderer.rect(rect.x, rect.y, rect.width, rect.height); + } + + private void drawHudHelpPanel(ShapeRenderer shapeRenderer, GameScreenHudViewModel view) { + Rectangle help = hudHelpBounds(view); + drawPanelFill(shapeRenderer, help, 0.05f, 0.07f, 0.12f, 0.94f); + } + + private void drawStatCardFills(ShapeRenderer shapeRenderer, GameScreenHudViewModel view) { + Rectangle strip = view.statStrip; + if (strip == null) return; + float gap = 5f * visualScale(view); + float slotWidth = (strip.width - gap * 3f) / 4f; + for (int i = 0; i < 4; i++) { + shapeRenderer.setColor(0.05f, 0.07f, 0.12f, 0.78f); + shapeRenderer.rect(strip.x + i * (slotWidth + gap), strip.y, slotWidth, strip.height); + } + } + + private void drawTopBarIconFills( + GameScreenHudModel model, ShapeRenderer shapeRenderer, GameScreenHudViewModel view) { + Rectangle top = view.topBar; + if (top == null) return; + float scale = visualScale(view); + float y = top.y + top.height * 0.5f; + float leftX = top.x + 18f * scale + TOPBAR_WAVE_GROUP_OFFSET_X * scale; + shapeRenderer.setColor( + ScreenPalette.MUTED.r, ScreenPalette.MUTED.g, ScreenPalette.MUTED.b, 0.95f); + shapeRenderer.triangle(leftX, y + 6f * scale, leftX + 6f * scale, y, leftX, y - 6f * scale); + shapeRenderer.triangle(leftX, y + 6f * scale, leftX - 6f * scale, y, leftX, y - 6f * scale); + + float heartX = top.x + top.width * 0.5f - 38f * scale + TOPBAR_HEART_OFFSET_X * scale; + float heartY = y + TOPBAR_HEART_OFFSET_Y * scale; + shapeRenderer.setColor( + ScreenPalette.GREEN.r, ScreenPalette.GREEN.g, ScreenPalette.GREEN.b, 0.95f); + float heartScale = scale * TOPBAR_HEART_GEOMETRY_SCALE; + shapeRenderer.circle( + heartX - 2.4f * heartScale, heartY + 2f * heartScale, 2.6f * heartScale); + shapeRenderer.circle( + heartX + 2.4f * heartScale, heartY + 2f * heartScale, 2.6f * heartScale); + shapeRenderer.triangle( + heartX - 5.2f * heartScale, + heartY + 1f * heartScale, + heartX + 5.2f * heartScale, + heartY + 1f * heartScale, + heartX, + heartY - 6f * heartScale); + + runCoinText.setLength(0); + runCoinText.append(CompactNumberFormatter.format(view.runCurrencyEarned)); + scratchRect.set(runCoinRect(view)); + float coinTextX = runCoinTextX(model, runCoinText, scratchRect, 1.0f); + float coinX = coinTextX - TOPBAR_COIN_ICON_GAP * scale; + shapeRenderer.setColor( + ScreenPalette.GOLD.r, ScreenPalette.GOLD.g, ScreenPalette.GOLD.b, 0.95f); + shapeRenderer.circle(coinX, y, TOPBAR_COIN_ICON_RADIUS * scale); + shapeRenderer.setColor(1f, 1f, 1f, 0.32f); + shapeRenderer.circle(coinX - 1.3f * scale, y + 1.3f * scale, 1.2f * scale); + } + + private void drawStatIconGlows(ShapeRenderer shapeRenderer, GameScreenHudViewModel view) { + Rectangle strip = view.statStrip; + if (strip == null) return; + float scale = visualScale(view); + float gap = 5f * scale; + float slotWidth = (strip.width - gap * 3f) / 4f; + for (int i = 0; i < 4; i++) { + float x = strip.x + i * (slotWidth + gap) + STAT_ICON_OFFSET_X * scale; + float y = strip.y + strip.height * 0.5f; + if (i == 3) { + x += STAT_CRIT_ICON_OFFSET_X * scale; + y += STAT_CRIT_ICON_OFFSET_Y * scale; + } + drawStatIconGlow(shapeRenderer, i, x, y, scale); + } + } + + private void drawStatIconGlow( + ShapeRenderer shapeRenderer, int index, float centerX, float centerY, float scale) { + ScreenPalette color = + index == 1 + ? ScreenPalette.GREEN + : index == 3 ? ScreenPalette.GOLD : ScreenPalette.CYAN; + shapeRenderer.setColor(color.r, color.g, color.b, 0.11f); + shapeRenderer.circle(centerX, centerY, 9f * scale); + shapeRenderer.setColor(color.r, color.g, color.b, 0.08f); + shapeRenderer.circle(centerX, centerY, 6f * scale); + } + + private void drawStatIconSprites( + GameScreenHudModel model, SpriteBatch batch, GameScreenHudViewModel view) { + GameScreenHudRenderContext context = model.renderContext(); + if (context.materialAssets == null || view.statStrip == null) return; + float scale = visualScale(view); + float gap = 5f * scale; + float slotWidth = (view.statStrip.width - gap * 3f) / 4f; + for (int i = 0; i < 4; i++) { + float x = view.statStrip.x + i * (slotWidth + gap) + STAT_ICON_OFFSET_X * scale; + float y = view.statStrip.y + view.statStrip.height * 0.5f; + if (i == 3) { + x += STAT_CRIT_ICON_OFFSET_X * scale; + y += STAT_CRIT_ICON_OFFSET_Y * scale; + } + drawMaterialIcon( + batch, + statIconTexture(context, i), + statIconPalette(i), + STAT_ICON_SPRITE_SIZE * scale, + x, + y, + 0.95f); + } + batch.setColor(Color.WHITE); + } + + private Texture statIconTexture(GameScreenHudRenderContext context, int index) { + if (index == 0) return context.materialAssets.hudAttackIcon(); + if (index == 1) return context.materialAssets.hudRegenIcon(); + if (index == 2) return context.materialAssets.hudCooldownIcon(); + return context.materialAssets.hudCritIcon(); + } + + private ScreenPalette statIconPalette(int index) { + if (index == 1) return ScreenPalette.GREEN; + if (index == 3) return ScreenPalette.GOLD; + return ScreenPalette.CYAN; + } + + private void drawStatCardBorders( + GameScreenHudModel model, + ShapeRenderer shapeRenderer, + GameScreenHudViewModel view, + float glow) { + Rectangle strip = view.statStrip; + if (strip == null) return; + float gap = 5f * visualScale(view); + float slotWidth = (strip.width - gap * 3f) / 4f; + for (int i = 0; i < 4; i++) { + scratchRect.set(strip.x + i * (slotWidth + gap), strip.y, slotWidth, strip.height); + drawPanelBorder( + model, shapeRenderer, scratchRect, model.renderContext().neonBlue, 0.17f); + } + } + + private void drawTabFills(ShapeRenderer shapeRenderer, GameScreenHudViewModel view) { + drawTabFill(shapeRenderer, view.attackDepartmentButton, view.showingAttackUpgrades); + drawTabFill( + shapeRenderer, + view.healthDepartmentButton, + !view.showingAttackUpgrades && !view.showingAbilities); + drawTabFill(shapeRenderer, view.abilitiesDepartmentButton, view.showingAbilities); + } + + private void drawTabFill(ShapeRenderer shapeRenderer, Rectangle tab, boolean active) { + if (tab == null) return; + if (active) { + shapeRenderer.setColor( + GameScreenVisualTokens.Shop.ACTIVE_TAB_FILL_RED, + GameScreenVisualTokens.Shop.ACTIVE_TAB_FILL_GREEN, + GameScreenVisualTokens.Shop.ACTIVE_TAB_FILL_BLUE, + GameScreenVisualTokens.Shop.ACTIVE_TAB_FILL_ALPHA); + } else { + shapeRenderer.setColor(1f, 1f, 1f, 0.045f); + } + shapeRenderer.rect(tab.x, tab.y, tab.width, tab.height); + } + + private void drawTabIconSprites( + GameScreenHudModel model, SpriteBatch batch, GameScreenHudViewModel view) { + GameScreenHudRenderContext context = model.renderContext(); + if (context.materialAssets == null) return; + drawTabIconSprite( + batch, + context.materialAssets.hudAttackIcon(), + view.attackDepartmentButton, + view.showingAttackUpgrades, + view); + drawTabIconSprite( + batch, + context.materialAssets.hudShieldIcon(), + view.healthDepartmentButton, + !view.showingAttackUpgrades && !view.showingAbilities, + view); + drawTabIconSprite( + batch, + context.materialAssets.hudBonusIcon(), + view.abilitiesDepartmentButton, + view.showingAbilities, + view); + batch.setColor(Color.WHITE); + } + + private void drawTabIconSprite( + SpriteBatch batch, + Texture texture, + Rectangle tab, + boolean active, + GameScreenHudViewModel view) { + if (tab == null) return; + float scale = visualScale(view); + float centerX = tab.x + 31f * scale; + float centerY = tab.y + tab.height * 0.53f; + ScreenPalette palette = active ? ScreenPalette.CYAN : ScreenPalette.MUTED; + drawMaterialIcon( + batch, texture, palette, 17f * scale, centerX, centerY, active ? 0.96f : 0.72f); + } + + private void drawMaterialIcon( + SpriteBatch batch, + Texture texture, + ScreenPalette palette, + float size, + float centerX, + float centerY, + float alpha) { + if (texture == null) return; + batch.setColor(palette.r, palette.g, palette.b, alpha); + batch.draw(texture, centerX - size * 0.5f, centerY - size * 0.5f, size, size); + } + + private void drawToggleIcon(ShapeRenderer shapeRenderer, GameScreenHudViewModel view) { + Rectangle rect = view.shopToggleButton; + if (rect == null) return; + float scale = visualScale(view); + float centerX = rect.x + rect.width * 0.5f; + float centerY = rect.y + rect.height * 0.52f; + float half = 7f * scale; + float rise = 5f * scale; + shapeRenderer.setColor( + ScreenPalette.CYAN.r, ScreenPalette.CYAN.g, ScreenPalette.CYAN.b, 0.96f); + if (view.shopExpanded) { + shapeRenderer.rectLine( + centerX - half, centerY + rise * 0.45f, centerX, centerY - rise, 2.2f * scale); + shapeRenderer.rectLine( + centerX, centerY - rise, centerX + half, centerY + rise * 0.45f, 2.2f * scale); + } else { + shapeRenderer.rectLine( + centerX - half, centerY - rise * 0.45f, centerX, centerY + rise, 2.2f * scale); + shapeRenderer.rectLine( + centerX, centerY + rise, centerX + half, centerY - rise * 0.45f, 2.2f * scale); + } + } + + private Rectangle hudHelpBounds(GameScreenHudViewModel view) { + Rectangle strip = view.statStrip; + if (strip == null) return null; + return hudHelpRect.set( + strip.x, strip.y - 36f * view.uiScale, strip.width, 30f * view.uiScale); + } + + private void drawPanelBorder( + GameScreenHudModel model, + ShapeRenderer shapeRenderer, + Rectangle rect, + Color color, + float alpha) { + if (rect == null || rect.width <= 0f || rect.height <= 0f) return; + shapeRenderer.setColor(withAlpha(model.renderContext(), color, Math.min(1f, alpha))); + shapeRenderer.rect(rect.x, rect.y, rect.width, rect.height); + } + + private void drawWaveBarFill( + GameScreenHudModel model, ShapeRenderer shapeRenderer, GameScreenHudViewModel view) { + Rectangle bar = view.waveBar; + if (bar == null) return; + shapeRenderer.setColor(1f, 1f, 1f, 0.07f); + shapeRenderer.rect(bar.x, bar.y, bar.width, bar.height); + float progress = waveProgress(view); + float filledWidth = bar.width * progress; + float cyanWidth = filledWidth * WAVEBAR_CYAN_FILL_SHARE; + float visualScale = visualScale(view); + float fillY = bar.y; + float fillHeight = bar.height - WAVEBAR_COLOR_FILL_TRIM_TOP * visualScale; + shapeRenderer.setColor(model.renderContext().neonCyan); + shapeRenderer.rect(bar.x, fillY, cyanWidth, fillHeight); + shapeRenderer.setColor(model.renderContext().neonBlue); + shapeRenderer.rect(bar.x + cyanWidth, fillY, filledWidth - cyanWidth, fillHeight); + } + + private float waveProgress(GameScreenHudViewModel view) { + if (view.waveActive && view.enemiesPerWave > 0L) { + return Math.min( + 1f, Math.max(0f, (float) view.enemiesSpawnedThisWave / view.enemiesPerWave)); + } + if (!view.waveActive && view.currentWave > 0 && view.timeBetweenWaves > 0L) { + return Math.min( + 1f, + Math.max( + 0f, (float) (view.nowMs - view.waveStartTime) / view.timeBetweenWaves)); + } + return 0f; + } + + private void drawDepartmentTabBorders( + GameScreenHudModel model, + ShapeRenderer shapeRenderer, + GameScreenHudViewModel view, + float glow) { + drawPanelBorder( + model, + shapeRenderer, + view.attackDepartmentButton, + tabColor(model, view.showingAttackUpgrades), + tabAlpha(view.showingAttackUpgrades, glow)); + drawPanelBorder( + model, + shapeRenderer, + view.healthDepartmentButton, + tabColor(model, !view.showingAttackUpgrades && !view.showingAbilities), + tabAlpha(!view.showingAttackUpgrades && !view.showingAbilities, glow)); + drawPanelBorder( + model, + shapeRenderer, + view.abilitiesDepartmentButton, + tabColor(model, view.showingAbilities), + tabAlpha(view.showingAbilities, glow)); + } + + private Color tabColor(GameScreenHudModel model, boolean active) { + return active ? model.renderContext().neonCyan : Color.WHITE; + } + + private float tabAlpha(boolean active, float glow) { + return active ? 0.90f : 0.08f; + } + + private void drawTopBarText( + GameScreenHudModel model, + SpriteBatch batch, + BitmapFont font, + GameScreenHudViewModel view) { + Rectangle top = view.topBar; + if (top == null) return; + float scale = 1.0f; + float inset = 16f * visualScale(view); + float slotWidth = (top.width - inset * 2f) / 3f; + + waveText.setLength(0); + waveText.append("Волна ").append(view.currentWave); + scratchRect.set( + top.x + + inset + + 14f * visualScale(view) + + TOPBAR_WAVE_GROUP_OFFSET_X * visualScale(view), + top.y, + slotWidth, + top.height); + drawFittedLeft( + font, + batch, + waveText, + scratchRect, + scale, + ScreenPalette.TEXT.set(model.renderContext().scratchColor)); + + healthText.setLength(0); + healthText + .append(CompactNumberFormatter.format(view.squareHealth)) + .append('/') + .append(CompactNumberFormatter.format(view.maxSquareHealth)); + scratchRect.set( + top.x + inset + slotWidth + 8f * visualScale(view), top.y, slotWidth, top.height); + drawFittedCenter( + font, + batch, + healthText, + scratchRect, + scale, + ScreenPalette.TEXT.set(model.renderContext().scratchColor)); + + moneyText.setLength(0); + moneyText.append(CompactNumberFormatter.format(view.money)); + float moneySlotWidth = slotWidth * TOPBAR_MONEY_SLOT_SHARE; + scratchRect.set(top.x + inset + slotWidth * 2f, top.y, moneySlotWidth, top.height); + drawTopBarMoneyText(model, batch, font, moneyText, scratchRect, scale); + + runCoinText.setLength(0); + runCoinText.append(CompactNumberFormatter.format(view.runCurrencyEarned)); + scratchRect.set(runCoinRect(view)); + drawTopBarRunCoinText(model, batch, font, runCoinText, scratchRect, scale); + font.setColor(Color.WHITE); + } + + private void drawTopBarMoneyText( + GameScreenHudModel model, + SpriteBatch batch, + BitmapFont font, + CharSequence amount, + Rectangle rect, + float scale) { + if (rect == null) return; + float oldScale = setFontScale(font, scale); + rubleLayout.setText(font, "₽ "); + emptyAbilitiesLayout.setText(font, amount); + float x = rect.x + rect.width - rubleLayout.width - emptyAbilitiesLayout.width; + float y = rect.y + (rect.height + emptyAbilitiesLayout.height) / 2f; + float rubleX = x + TOPBAR_RUBLE_OFFSET_X * visualScale(model.viewModel()); + float rubleY = y + TOPBAR_RUBLE_OFFSET_Y * visualScale(model.viewModel()); + font.setColor(ScreenPalette.GOLD.set(model.renderContext().scratchColor)); + font.getData().setScale(scale * TOPBAR_RUBLE_SCALE); + font.draw(batch, "₽ ", rubleX, rubleY); + font.getData().setScale(scale); + font.setColor(ScreenPalette.TEXT.set(model.renderContext().scratchColor)); + font.draw(batch, amount, x + rubleLayout.width, y); + restoreFontScale(font, oldScale); + } + + private void drawTopBarRunCoinText( + GameScreenHudModel model, + SpriteBatch batch, + BitmapFont font, + CharSequence amount, + Rectangle rect, + float scale) { + if (rect == null) return; + float x = runCoinTextX(model, amount, rect, scale); + float oldScale = setFontScale(font, scale); + emptyAbilitiesLayout.setText(font, amount); + float y = rect.y + (rect.height + emptyAbilitiesLayout.height) / 2f; + font.setColor(ScreenPalette.GOLD.set(model.renderContext().scratchColor)); + font.draw(batch, amount, x, y); + restoreFontScale(font, oldScale); + } + + private Rectangle runCoinRect(GameScreenHudViewModel view) { + Rectangle top = view.topBar; + if (top == null) return scratchRect.set(0f, 0f, 0f, 0f); + float scale = visualScale(view); + float inset = 16f * scale; + float slotWidth = (top.width - inset * 2f) / 3f; + float moneySlotWidth = slotWidth * TOPBAR_MONEY_SLOT_SHARE; + return scratchRect.set( + top.x + inset + slotWidth * 2f + moneySlotWidth, + top.y, + slotWidth - moneySlotWidth, + top.height); + } + + private float runCoinTextX( + GameScreenHudModel model, CharSequence amount, Rectangle rect, float scale) { + if (rect == null) return 0f; + BitmapFont font = topBarFont(model.renderContext()); + float oldScale = setFontScale(font, scale); + emptyAbilitiesLayout.setText(font, amount); + float x = rect.x + rect.width - emptyAbilitiesLayout.width; + x = Math.max(x, rect.x + TOPBAR_COIN_TEXT_INSET_X * visualScale(model.viewModel())); + restoreFontScale(font, oldScale); + return x; + } + + private void drawStatStripText( + GameScreenHudModel model, + SpriteBatch batch, + BitmapFont font, + GameScreenHudViewModel view) { + Rectangle strip = view.statStrip; + if (strip == null) return; + float gap = 5f * visualScale(view); + float slotWidth = (strip.width - gap * 3f) / 4f; + drawStat( + batch, + font, + model, + CompactNumberFormatter.format(view.effectiveDamage), + strip.x, + strip.y, + strip.height, + slotWidth); + drawStat( + batch, + font, + model, + hudPerSecond(view.healthRegenRate), + strip.x + slotWidth + gap, + strip.y, + strip.height, + slotWidth); + drawStat( + batch, + font, + model, + hudSeconds(view.effectiveCooldownMs), + strip.x + (slotWidth + gap) * 2f, + strip.y, + strip.height, + slotWidth); + drawStat( + batch, + font, + model, + percentText(view.effectiveCritChance), + strip.x + (slotWidth + gap) * 3f, + strip.y, + strip.height, + slotWidth); + } + + private void drawStat( + SpriteBatch batch, + BitmapFont font, + GameScreenHudModel model, + String value, + float x, + float y, + float height, + float width) { + statText.setLength(0); + statText.append(value); + float iconSpace = STAT_TEXT_OFFSET_X * visualScale(model.viewModel()); + scratchRect.set(x + iconSpace, y, width - iconSpace - 2f, height); + drawFittedLeft( + font, + batch, + statText, + scratchRect, + 1.0f, + ScreenPalette.TEXT.set(model.renderContext().scratchColor)); + } + + private void drawHudHelpText( + GameScreenHudModel model, + SpriteBatch batch, + BitmapFont font, + GameScreenHudViewModel view) { + Rectangle help = hudHelpBounds(view); + if (help == null) return; + font.setColor(ScreenPalette.TEXT.set(model.renderContext().scratchColor)); + textRenderer.drawCenteredText( + font, batch, "Урон Регенерация Частота выстрела Шанс крита", help); + } + + private void drawTabText( + SpriteBatch batch, + BitmapFont font, + GameScreenHudViewModel view, + String text, + Rectangle rect, + boolean active) { + if (rect == null) return; + float iconSpace = 24f * visualScale(view); + scratchRect.set( + rect.x + iconSpace, + rect.y, + rect.width - iconSpace - 6f * visualScale(view), + rect.height); + Color textColor = + active + ? ScreenPalette.TEXT.set( + host.hudModel().renderContext().scratchColor, 0.96f) + : ScreenPalette.MUTED.set( + host.hudModel().renderContext().scratchColor, 0.82f); + if (active) { + drawFittedCenterEmphasis(font, batch, text, scratchRect, 1.0f, textColor); + } else { + drawFittedCenter(font, batch, text, scratchRect, 1.0f, textColor); + } + font.setColor(Color.WHITE); + } + + private void drawShopCardTexts( + GameScreenHudModel model, SpriteBatch batch, GameScreenHudViewModel view) { + GameScreenHudViewModel.HudButton[] buttons = visibleUpgradeButtons(view); + for (int i = 0; i < buttons.length; i++) { + GameScreenHudViewModel.HudButton button = buttons[i]; + if (button.bounds == null) continue; + fillCardValues(view, button, view.showingAttackUpgrades, view.showingAbilities, i); + drawCardText(model, batch, button, i, currentValue, nextValue); + } + } + + private void drawClippedShopCardTexts( + GameScreenHudModel model, SpriteBatch batch, GameScreenHudViewModel view) { + batch.flush(); + boolean clipped = beginShopCardClip(view); + drawShopCardTexts(model, batch, view); + batch.flush(); + if (clipped) { + endShopCardClip(); + } + } + + private boolean beginShopCardClip(GameScreenHudViewModel view) { + Rectangle clip = shopCardClipBounds(view); + if (clip == null || clip.width <= 0f || clip.height <= 0f) return false; + Gdx.gl.glEnable(GL20.GL_SCISSOR_TEST); + HdpiUtils.glScissor( + (int) clip.x, + (int) clip.y, + (int) Math.ceil(clip.width), + (int) Math.ceil(clip.height)); + return true; + } + + private void endShopCardClip() { + Gdx.gl.glDisable(GL20.GL_SCISSOR_TEST); + } + + private Rectangle shopCardClipBounds(GameScreenHudViewModel view) { + if (view.shopSheet == null) return null; + float scale = visualScale(view); + float top = + view.departmentButtonsY + - GameScreenVisualTokens.Layout.CARD_GAP * scale + + SHOP_CARD_CLIP_BLEED * scale; + float bottom = view.shopSheet.y - SHOP_CARD_CLIP_BLEED * scale; + return shopCardClipRect.set(view.shopSheet.x, bottom, view.shopSheet.width, top - bottom); + } + + private void fillCardValues( + GameScreenHudViewModel view, + GameScreenHudViewModel.HudButton button, + boolean attack, + boolean bonuses, + int index) { + currentValue.setLength(0); + nextValue.setLength(0); + if (button.currentValue != null && button.nextValue != null) { + currentValue.append(button.currentValue); + nextValue.append(button.nextValue); + } else if (bonuses) { + appendMultiplier(currentValue, view.effectiveCritMultiplier); + appendMultiplier(nextValue, view.effectiveCritMultiplier + button.statDelta); + } else if (attack) { + fillAttackCardValues(view, button, index); + } else { + fillHealthCardValues(view, index); + } + } + + private void fillAttackCardValues( + GameScreenHudViewModel view, GameScreenHudViewModel.HudButton button, int index) { + switch (index) { + case 0: + currentValue.append(CompactNumberFormatter.format(view.effectiveDamage)); + nextValue.append( + CompactNumberFormatter.format( + view.effectiveDamage + Math.round(button.statDelta))); + break; + case 1: + currentValue.append(CompactNumberFormatter.format(view.effectiveSpeed)); + nextValue.append( + CompactNumberFormatter.format(view.effectiveSpeed + button.statDelta)); + break; + case 2: + currentValue.append(hudSeconds(view.effectiveCooldownMs)); + nextValue.append( + hudSeconds(Math.max(100f, view.effectiveCooldownMs - button.statDelta))); + break; + case 3: + appendPercent(currentValue, view.effectiveCritChance); + appendPercent(nextValue, view.effectiveCritChance + button.statDelta); + break; + default: + appendMultiplier(currentValue, view.effectiveCritMultiplier); + appendMultiplier(nextValue, view.effectiveCritMultiplier + button.statDelta); + break; + } + } + + private String percentText(float fraction) { + return Math.round(fraction * 100f) + "%"; + } + + private void appendPercent(StringBuilder builder, float fraction) { + builder.append(Math.round(fraction * 100f)).append('%'); + } + + private void appendMultiplier(StringBuilder builder, float value) { + int tenths = Math.round(value * 10f); + builder.append(tenths / 10).append('.').append(Math.abs(tenths % 10)).append('x'); + } + + private void fillHealthCardValues(GameScreenHudViewModel view, int index) { + if (index == 0) { + currentValue.append(CompactNumberFormatter.format(view.maxSquareHealth)); + nextValue.append(CompactNumberFormatter.format(view.maxSquareHealth + 20L)); + } else { + currentValue.append(hudPerSecond(view.healthRegenRate)); + nextValue.append(hudPerSecond(view.healthRegenRate + 1L)); + } + } + + private String hudSeconds(float milliseconds) { + return CompactNumberFormatter.seconds(milliseconds).replace('s', 'с'); + } + + private String hudPerSecond(long value) { + return CompactNumberFormatter.signedPerSecond(value).replace("/s", "/с"); + } + + private void drawCardText( + GameScreenHudModel model, + SpriteBatch batch, + GameScreenHudViewModel.HudButton button, + int index, + CharSequence oldValue, + CharSequence newValue) { + GameScreenHudRenderContext context = model.renderContext(); + GameScreenHudViewModel view = model.viewModel(); + Rectangle rect = button.bounds; + BitmapFont titleFont = cardTitleFont(context); + BitmapFont valueFont = cardValueFont(context); + BitmapFont arrowFont = cardArrowFont(context); + BitmapFont priceFont = priceFont(context); + float scale = visualScale(view); + float pad = 8f * scale; + float priceWidth = 48f * scale; + CharSequence title = displayCardTitle(button.label); + CharSequence current = oldValue; + CharSequence next = newValue; + boolean affordable = cardAffordable(view, button); + boolean showUpgradeArrow = !sameUpgradeValue(current, next); + float titlePadX = SHOP_CARD_TITLE_PAD_X * scale; + float valueOffsetY = SHOP_CARD_VALUE_OFFSET_Y * scale; + float valuePadY = 8f * scale; + + scratchRect.set( + rect.x + titlePadX, + rect.y + rect.height * 0.46f, + rect.width - titlePadX - pad - priceWidth, + rect.height * 0.48f); + drawFittedLeftEmphasis( + titleFont, + batch, + title, + scratchRect, + 1.0f, + affordable + ? ScreenPalette.TEXT.set(context.scratchColor) + : ScreenPalette.MUTED.set(context.scratchColor, 0.68f)); + + statText.setLength(0); + statText.append(current); + if (showUpgradeArrow) { + statText.append(' ').append(UPGRADE_ARROW_TEXT).append(' ').append(next); + } + float valueScale = + fittedScale(valueFont, statText, 1.0f, rect.width - priceWidth - titlePadX - pad); + float oldFontScale = setFontScale(valueFont, valueScale); + float oldArrowFontScale = setFontScale(arrowFont, valueScale); + emptyAbilitiesLayout.setText(valueFont, current); + float valuesY = rect.y + valuePadY + emptyAbilitiesLayout.height + valueOffsetY; + float valueX = rect.x + titlePadX; + valueFont.setColor( + ScreenPalette.MUTED.set(context.scratchColor, affordable ? 0.88f : 0.48f)); + valueFont.draw(batch, current, valueX, valuesY); + if (showUpgradeArrow) { + valueX += emptyAbilitiesLayout.width + 5f * scale; + emptyAbilitiesLayout.setText(arrowFont, UPGRADE_ARROW_TEXT); + arrowFont.setColor( + ScreenPalette.TEXT.set(context.scratchColor, affordable ? 0.52f : 0.36f)); + arrowFont.draw(batch, UPGRADE_ARROW_TEXT, valueX, valuesY); + valueX += emptyAbilitiesLayout.width + 5f * scale; + valueFont.setColor( + ScreenPalette.ORANGE.set(context.scratchColor, affordable ? 0.96f : 0.62f)); + valueFont.draw(batch, next, valueX, valuesY); + } + restoreFontScale(arrowFont, oldArrowFontScale); + restoreFontScale(valueFont, oldFontScale); + + priceText.setLength(0); + if (button.maxed) { + priceText.append("MAX"); + } else { + priceText.append('₽').append(CompactNumberFormatter.format(button.price)); + } + setPricePillBounds(scratchRect, rect, view); + drawFittedCenter( + priceFont, + batch, + priceText, + scratchRect, + 1.0f, + affordable + ? ScreenPalette.GOLD.set(context.scratchColor) + : ScreenPalette.RED.set(context.scratchColor)); + titleFont.setColor(Color.WHITE); + valueFont.setColor(Color.WHITE); + arrowFont.setColor(Color.WHITE); + priceFont.setColor(Color.WHITE); + } + + private boolean sameUpgradeValue(CharSequence current, CharSequence next) { + if (current == null || next == null) return current == next; + return current.toString().contentEquals(next); + } + + private CharSequence displayCardTitle(CharSequence rawLabel) { + String label = rawLabel == null ? "" : rawLabel.toString().toUpperCase(); + if (label.equals("УРОН")) return "Урон"; + if (label.equals("СКОР")) return "Скорость"; + if (label.equals("ЧАСТ")) return "Частота"; + if (label.equals("ШАНС")) return "Крит. шанс"; + if (label.startsWith("ЗДОР") || label.startsWith("ЗДР")) return "Здоровье"; + if (label.startsWith("РЕГ")) return "Реген"; + if (label.equals("КРИТ")) return "Крит"; + return rawLabel; + } + + private void setPricePillBounds(Rectangle target, Rectangle card, GameScreenHudViewModel view) { + float scale = visualScale(view); + float width = 44f * scale; + float height = 23f * scale; + target.set( + card.x + card.width - 9f * scale - width, + card.y + (card.height - height) / 2f, + width, + height); + } + + private void drawDockText( + GameScreenHudModel model, SpriteBatch batch, GameScreenHudViewModel view) { + GameScreenHudRenderContext context = model.renderContext(); + BitmapFont labelFont = dockLabelFont(context); + BitmapFont cooldownFont = dockCooldownFont(context); + if (dockChromeVisible(view) && view.dockLabel != null) { + scratchRect.set( + view.dockLabel.x + 4f * visualScale(view), + view.dockLabel.y, + view.dockLabel.width - 8f * visualScale(view), + view.dockLabel.height); + drawFittedLeft( + labelFont, + batch, + view.shopExpanded ? "Свернуть" : "Апгрейды", + scratchRect, + 1.0f, + ScreenPalette.MUTED.set(context.scratchColor)); + } + drawToggleGlyph(batch, labelFont, model, view); + for (GameScreenHudViewModel.AbilityButton button : view.abilityButtons) { + if (button.bounds == null) continue; + if (button.cooldownMs > 0L) { + setDockCooldownText(cooldownText, button.cooldownMs); + Rectangle cooldownBounds = dockCooldownVisualBounds(view, button.bounds); + drawFittedCenterEmphasis( + cooldownFont, + batch, + cooldownText, + cooldownBounds, + 1.0f, + ScreenPalette.CYAN.set(context.scratchColor)); + } + } + labelFont.setColor(Color.WHITE); + cooldownFont.setColor(Color.WHITE); + } + + private Rectangle dockCooldownVisualBounds(GameScreenHudViewModel view, Rectangle rect) { + float visualScale = visualScale(view); + return scratchRect.set( + rect.x + DOCK_COOLDOWN_SPRITE_OFFSET_X * visualScale, + rect.y + DOCK_COOLDOWN_SPRITE_OFFSET_Y * visualScale, + rect.width, + rect.height); + } + + private void drawToggleGlyph( + SpriteBatch batch, + BitmapFont font, + GameScreenHudModel model, + GameScreenHudViewModel view) { + + + } + + void renderWaveIndicator() { + GameScreenHudModel model = host.hudModel(); + GameScreenHudRenderContext context = model.renderContext(); + GameScreenHudViewModel view = model.viewModel(); + ShapeRenderer shapeRenderer = context.shapeRenderer; + float uiScale = view.uiScale; + + shapeRenderer.begin(ShapeType.Filled); + + float indicatorWidth = view.viewportWidth - view.waveIndicatorPadding * 2 * uiScale; + float indicatorHeight = view.waveIndicatorHeight * uiScale; + float indicatorX = view.waveIndicatorPadding * uiScale; + float indicatorY = waveIndicatorY(view); + + shapeRenderer.setColor(0f, 0f, 0f, 1f); + shapeRenderer.rect(indicatorX, indicatorY, indicatorWidth, indicatorHeight); + + if (view.waveActive && view.enemiesPerWave > 0) { + float progress = (float) view.enemiesSpawnedThisWave / view.enemiesPerWave; + shapeRenderer.setColor(context.neonRed); + shapeRenderer.rect(indicatorX, indicatorY, indicatorWidth * progress, indicatorHeight); + } else if (!view.waveActive && view.currentWave > 0) { + float timeProgress = (float) (view.nowMs - view.waveStartTime) / view.timeBetweenWaves; + timeProgress = Math.min(1, Math.max(0, timeProgress)); + + shapeRenderer.setColor(context.neonCyan); + shapeRenderer.rect( + indicatorX, indicatorY, indicatorWidth * timeProgress, indicatorHeight); + } + + shapeRenderer.end(); + shapeRenderer.begin(ShapeType.Line); + + float glowPulse = 0.5f + 0.5f * (float) Math.sin(view.time * view.pulseSpeed); + Gdx.gl.glLineWidth(2f); + + Color borderBase; + if (view.waveActive) { + borderBase = context.neonRed; + } else if (!view.waveActive && view.currentWave > 0) { + borderBase = context.neonCyan; + } else { + borderBase = context.neonBlue; + } + shapeRenderer.setColor(withAlpha(context, borderBase, 0.7f + 0.3f * glowPulse)); + shapeRenderer.rect(indicatorX, indicatorY, indicatorWidth, indicatorHeight); + + Gdx.gl.glLineWidth(1f); + shapeRenderer.end(); + } + + void renderDepartmentTabs() { + GameScreenHudModel model = host.hudModel(); + GameScreenHudViewModel view = model.viewModel(); + ShapeRenderer shapeRenderer = model.renderContext().shapeRenderer; + + shapeRenderer.begin(ShapeType.Filled); + + Rectangle attackButton = view.attackDepartmentButton; + Rectangle healthButton = view.healthDepartmentButton; + Rectangle abilitiesButton = view.abilitiesDepartmentButton; + + shapeRenderer.setColor(ScreenPalette.QUIET.set(model.renderContext().scratchColor, 0.42f)); + shapeRenderer.rect(attackButton.x, attackButton.y, attackButton.width, attackButton.height); + shapeRenderer.rect(healthButton.x, healthButton.y, healthButton.width, healthButton.height); + shapeRenderer.rect( + abilitiesButton.x, + abilitiesButton.y, + abilitiesButton.width, + abilitiesButton.height); + + if (view.showingAttackUpgrades) { + shapeRenderer.setColor( + ScreenPalette.CYAN.set(model.renderContext().scratchColor, 0.16f)); + shapeRenderer.rect( + attackButton.x, attackButton.y, attackButton.width, attackButton.height); + } else if (view.showingAbilities) { + shapeRenderer.setColor( + ScreenPalette.BLUE.set(model.renderContext().scratchColor, 0.18f)); + shapeRenderer.rect( + abilitiesButton.x, + abilitiesButton.y, + abilitiesButton.width, + abilitiesButton.height); + } else { + shapeRenderer.setColor( + ScreenPalette.RED.set(model.renderContext().scratchColor, 0.16f)); + shapeRenderer.rect( + healthButton.x, healthButton.y, healthButton.width, healthButton.height); + } + + shapeRenderer.setColor(ScreenPalette.MUTED.set(model.renderContext().scratchColor, 0.70f)); + shapeRenderer.end(); + } + + void renderUpgradeButtons() { + GameScreenHudModel model = host.hudModel(); + GameScreenHudViewModel view = model.viewModel(); + ShapeRenderer shapeRenderer = model.renderContext().shapeRenderer; + shapeRenderer.begin(ShapeType.Filled); + shapeRenderer.flush(); + Gdx.gl.glEnable(GL20.GL_SCISSOR_TEST); + HdpiUtils.glScissor(0, 0, view.viewportWidth, (int) view.departmentButtonsY); + drawUpgradeButtonFills(shapeRenderer); + shapeRenderer.flush(); + shapeRenderer.end(); + + shapeRenderer.begin(ShapeType.Line); + drawUpgradeButtonBorders(shapeRenderer); + shapeRenderer.flush(); + shapeRenderer.end(); + + Gdx.gl.glDisable(GL20.GL_SCISSOR_TEST); + } + + private void drawUpgradeButtonFills(ShapeRenderer shapeRenderer) { + GameScreenHudModel model = host.hudModel(); + GameScreenHudViewModel view = model.viewModel(); + float glow = 0.3f + 0.3f * (float) Math.sin(view.time * view.pulseSpeed); + + if (view.showingAttackUpgrades) { + drawButtonFills(model, shapeRenderer, view.attackButtons, glow); + } else if (view.showingAbilities) { + drawButtonFills(model, shapeRenderer, view.bonusButtons, glow); + } else { + drawButtonFills(model, shapeRenderer, view.healthButtons, glow); + } + } + + private void drawUpgradeButtonBorders(ShapeRenderer shapeRenderer) { + GameScreenHudModel model = host.hudModel(); + GameScreenHudViewModel view = model.viewModel(); + float glow = 0.3f + 0.3f * (float) Math.sin(view.time * view.pulseSpeed); + + if (view.showingAttackUpgrades) { + drawButtonBorders(model, shapeRenderer, view.attackButtons, glow); + } else if (view.showingAbilities) { + drawButtonBorders(model, shapeRenderer, view.bonusButtons, glow); + } else { + drawButtonBorders(model, shapeRenderer, view.healthButtons, glow); + } + } + + void renderUpgradeText() { + GameScreenHudModel model = host.hudModel(); + GameScreenHudRenderContext context = model.renderContext(); + GameScreenHudViewModel view = model.viewModel(); + BitmapFont font = context.font; + SpriteBatch batch = context.batch; + float uiScale = view.uiScale; + Rectangle attackButton = view.attackDepartmentButton; + Rectangle healthButton = view.healthDepartmentButton; + Rectangle abilitiesButton = view.abilitiesDepartmentButton; + + float indicatorY = waveIndicatorY(view); + + batch.begin(); + + waveText.setLength(0); + waveText.append(WAVE_LABEL).append(view.currentWave); + font.draw(batch, waveText, 10 * uiScale, indicatorY - 10 * uiScale); + + healthText.setLength(0); + healthText + .append(HEALTH_LABEL) + .append(view.squareHealth) + .append('/') + .append(view.maxSquareHealth); + font.draw(batch, healthText, 10 * uiScale, indicatorY - 40 * uiScale); + + moneyText.setLength(0); + moneyText.append(MONEY_LABEL).append(view.money); + font.draw(batch, moneyText, 10 * uiScale, indicatorY - 70 * uiScale); + + drawDepartmentText(batch, font, ATTACK_DEPARTMENT_TEXT, attackButton); + drawDepartmentText(batch, font, HEALTH_DEPARTMENT_TEXT, healthButton); + drawDepartmentText(batch, font, ABILITIES_DEPARTMENT_TEXT, abilitiesButton); + + batch.flush(); + Gdx.gl.glEnable(GL20.GL_SCISSOR_TEST); + HdpiUtils.glScissor(0, 0, view.viewportWidth, (int) view.departmentButtonsY); + + drawButtonTexts(model, batch); + + batch.flush(); + Gdx.gl.glDisable(GL20.GL_SCISSOR_TEST); + + batch.end(); + } + + private void drawButtonFills( + GameScreenHudModel model, + ShapeRenderer shapeRenderer, + GameScreenHudViewModel.HudButton[] buttons, + float glow) { + GameScreenHudViewModel view = model.viewModel(); + for (int i = 0; i < buttons.length; i++) { + GameScreenHudViewModel.HudButton button = buttons[i]; + if (button.bounds != null) { + drawUpgradeCardFill(model, shapeRenderer, button, cardAffordable(view, button)); + } + } + } + + private void drawClippedShopButtonFills( + GameScreenHudModel model, + ShapeRenderer shapeRenderer, + GameScreenHudViewModel view, + float glow) { + shapeRenderer.flush(); + boolean clipped = beginShopCardClip(view); + drawButtonFills(model, shapeRenderer, visibleUpgradeButtons(view), glow); + shapeRenderer.flush(); + if (clipped) { + endShopCardClip(); + } + } + + private void drawAbilityButtonFills( + GameScreenHudModel model, ShapeRenderer shapeRenderer, float glow) { + for (GameScreenHudViewModel.AbilityButton button : model.viewModel().abilityButtons) { + if (button.bounds != null) { + drawDockAbilityFill(model, shapeRenderer, button, glow); + } + } + } + + private void drawButtonBorders( + GameScreenHudModel model, + ShapeRenderer shapeRenderer, + GameScreenHudViewModel.HudButton[] buttons, + float glow) { + GameScreenHudViewModel view = model.viewModel(); + for (int i = 0; i < buttons.length; i++) { + GameScreenHudViewModel.HudButton button = buttons[i]; + if (button.bounds != null) { + drawUpgradeCardBorder( + model, shapeRenderer, button, cardAffordable(view, button), glow); + } + } + } + + private void drawClippedShopButtonBorders( + GameScreenHudModel model, + ShapeRenderer shapeRenderer, + GameScreenHudViewModel view, + float glow) { + shapeRenderer.flush(); + boolean clipped = beginShopCardClip(view); + drawButtonBorders(model, shapeRenderer, visibleUpgradeButtons(view), glow); + shapeRenderer.flush(); + if (clipped) { + endShopCardClip(); + } + } + + private boolean cardAffordable( + GameScreenHudViewModel view, GameScreenHudViewModel.HudButton button) { + return !button.maxed && button.price <= view.money; + } + + private void drawAbilityButtonBorders( + GameScreenHudModel model, ShapeRenderer shapeRenderer, float glow) { + for (GameScreenHudViewModel.AbilityButton button : model.viewModel().abilityButtons) { + if (button.bounds != null) { + drawDockAbilityBorder(model, shapeRenderer, button, glow); + } + } + } + + private void drawUpgradeCardFill( + GameScreenHudModel model, + ShapeRenderer shapeRenderer, + GameScreenHudViewModel.HudButton button, + boolean affordable) { + Rectangle rect = button.bounds; + if (rect == null) return; + GameScreenHudRenderContext context = model.renderContext(); + shapeRenderer.setColor(1f, 1f, 1f, affordable ? 0.06f : 0.037f); + shapeRenderer.rect(rect.x, rect.y, rect.width, rect.height); + if (affordable) { + shapeRenderer.setColor(0.133f, 0.851f, 1f, 0.08f); + shapeRenderer.rect(rect.x, rect.y, rect.width, rect.height); + } + setPricePillBounds(scratchRect, rect, model.viewModel()); + if (affordable) { + shapeRenderer.setColor( + ScreenPalette.GOLD.set(context.scratchColor, affordable ? 0.12f : 0f)); + } else { + shapeRenderer.setColor(ScreenPalette.RED.set(context.scratchColor, 0.10f)); + } + shapeRenderer.rect(scratchRect.x, scratchRect.y, scratchRect.width, scratchRect.height); + } + + private void drawUpgradeCardBorder( + GameScreenHudModel model, + ShapeRenderer shapeRenderer, + GameScreenHudViewModel.HudButton button, + boolean affordable, + float glow) { + Rectangle rect = button.bounds; + if (rect == null) return; + Color color = affordable ? model.renderContext().neonCyan : Color.WHITE; + float alpha = affordable ? 0.38f : 0.12f; + if (isButtonHovered(rect)) { + alpha = Math.min(1f, alpha + 0.22f); + } + drawPanelBorder(model, shapeRenderer, rect, color, alpha); + setPricePillBounds(scratchRect, rect, model.viewModel()); + drawPanelBorder( + model, + shapeRenderer, + scratchRect, + affordable ? model.renderContext().priceTextColor : model.renderContext().neonRed, + affordable ? 0.22f : 0.30f); + } + + private void drawDockAbilityFill( + GameScreenHudModel model, + ShapeRenderer shapeRenderer, + GameScreenHudViewModel.AbilityButton button, + float glow) { + Rectangle rect = button.bounds; + if (rect == null) return; + if (button.cooldownMs > 0L) { + rect = dockCooldownVisualBounds(model.viewModel(), rect); + } + shapeRenderer.setColor(1f, 1f, 1f, 0.07f); + shapeRenderer.rect(rect.x, rect.y, rect.width, rect.height); + if (button.cooldownMs > 0L) { + drawDockCooldownFill(model, shapeRenderer, button); + } else { + drawDockReadyIcon(model, shapeRenderer, button); + } + } + + private void drawDockCooldownFill( + GameScreenHudModel model, + ShapeRenderer shapeRenderer, + GameScreenHudViewModel.AbilityButton button) { + Rectangle rect = dockCooldownVisualBounds(model.viewModel(), button.bounds); + float scale = visualScale(model.viewModel()); + float centerX = rect.x + rect.width * 0.5f; + float centerY = rect.y + rect.height * 0.5f; + float radius = 20f * scale; + float sweepDegrees = dockCooldownSweepDegrees(button); + shapeRenderer.setColor(1f, 1f, 1f, 0.12f); + shapeRenderer.circle(centerX, centerY, radius); + shapeRenderer.setColor(0.05f, 0.067f, 0.11f, 0.96f); + shapeRenderer.circle(centerX, centerY, 11f * scale); + } + + private void drawAbilityCooldownProgressArcs( + GameScreenHudModel model, ShapeRenderer shapeRenderer) { + for (GameScreenHudViewModel.AbilityButton button : model.viewModel().abilityButtons) { + if (button.bounds != null && button.cooldownMs > 0L) { + drawDockCooldownProgressArc(model, shapeRenderer, button); + } + } + } + + private void drawDockCooldownProgressArc( + GameScreenHudModel model, + ShapeRenderer shapeRenderer, + GameScreenHudViewModel.AbilityButton button) { + Rectangle rect = dockCooldownVisualBounds(model.viewModel(), button.bounds); + float scale = visualScale(model.viewModel()); + float centerX = rect.x + rect.width * 0.5f; + float centerY = rect.y + rect.height * 0.5f; + float radius = 20f * scale; + float sweepDegrees = dockCooldownSweepDegrees(button); + if (sweepDegrees > 0f) { + shapeRenderer.flush(); + Gdx.gl.glLineWidth(DOCK_COOLDOWN_STROKE_WIDTH * scale); + shapeRenderer.setColor( + ScreenPalette.CYAN.r, ScreenPalette.CYAN.g, ScreenPalette.CYAN.b, 0.95f); + drawDockCooldownStrokeArc(shapeRenderer, centerX, centerY, radius, sweepDegrees); + shapeRenderer.flush(); + Gdx.gl.glLineWidth(1f); + } + } + + private void drawDockCooldownStrokeArc( + ShapeRenderer shapeRenderer, + float centerX, + float centerY, + float radius, + float sweepDegrees) { + float previousAngle = 90f; + float previousX = centerX + MathUtils.cosDeg(previousAngle) * radius; + float previousY = centerY + MathUtils.sinDeg(previousAngle) * radius; + float coveredDegrees = 0f; + while (coveredDegrees < sweepDegrees) { + float nextCoveredDegrees = + Math.min(coveredDegrees + DOCK_COOLDOWN_ARC_SEGMENT_DEGREES, sweepDegrees); + float angle = 90f - nextCoveredDegrees; + float x = centerX + MathUtils.cosDeg(angle) * radius; + float y = centerY + MathUtils.sinDeg(angle) * radius; + shapeRenderer.line(previousX, previousY, x, y); + previousX = x; + previousY = y; + coveredDegrees = nextCoveredDegrees; + } + } + + private float dockCooldownSweepDegrees(GameScreenHudViewModel.AbilityButton button) { + long totalCooldownMs = button.ability.baseCooldownMs(); + if (totalCooldownMs <= 0L) return 0f; + float remainingShare = clamp(button.cooldownMs / (float) totalCooldownMs, 0f, 1f); + return remainingShare * 360f; + } + + private void drawDockReadyIcon( + GameScreenHudModel model, + ShapeRenderer shapeRenderer, + GameScreenHudViewModel.AbilityButton button) { + Rectangle rect = button.bounds; + float scale = visualScale(model.viewModel()); + float centerX = rect.x + rect.width * 0.5f; + float centerY = rect.y + rect.height * 0.5f; + switch (button.ability) { + case FREEZE: + drawFreezeDockIcon(shapeRenderer, centerX, centerY, scale); + break; + case EXPLOSION: + drawExplosionDockIcon(shapeRenderer, centerX, centerY, scale); + break; + case SHIELD: + drawShieldDockIcon(shapeRenderer, centerX, centerY, scale, button.color); + break; + default: + drawGenericDockIcon(shapeRenderer, centerX, centerY, scale, button.color); + break; + } + } + + private void drawFreezeDockIcon( + ShapeRenderer shapeRenderer, float centerX, float centerY, float scale) { + shapeRenderer.setColor(0.01f, 0.014f, 0.023f, 0.90f); + shapeRenderer.rectLine( + centerX - 9f * scale, centerY, centerX + 9f * scale, centerY, 1.35f * scale); + shapeRenderer.rectLine( + centerX - 6.5f * scale, + centerY - 6.5f * scale, + centerX + 6.5f * scale, + centerY + 6.5f * scale, + 1.35f * scale); + shapeRenderer.rectLine( + centerX - 6.5f * scale, + centerY + 6.5f * scale, + centerX + 6.5f * scale, + centerY - 6.5f * scale, + 1.35f * scale); + } + + private void drawExplosionDockIcon( + ShapeRenderer shapeRenderer, float centerX, float centerY, float scale) { + shapeRenderer.setColor(0.01f, 0.014f, 0.023f, 0.96f); + shapeRenderer.circle(centerX, centerY, 5.5f * scale); + } + + private void drawShieldDockIcon( + ShapeRenderer shapeRenderer, float centerX, float centerY, float scale, Color color) { + shapeRenderer.setColor(color.r, color.g, color.b, 0.88f); + shapeRenderer.rect(centerX - 7f * scale, centerY + 1f * scale, 14f * scale, 6f * scale); + shapeRenderer.triangle( + centerX - 7f * scale, + centerY + 1f * scale, + centerX + 7f * scale, + centerY + 1f * scale, + centerX, + centerY - 10f * scale); + } + + private void drawGenericDockIcon( + ShapeRenderer shapeRenderer, float centerX, float centerY, float scale, Color color) { + shapeRenderer.setColor(color.r, color.g, color.b, 0.86f); + shapeRenderer.circle(centerX, centerY, 8f * scale); + } + + private void drawDockAbilityBorder( + GameScreenHudModel model, + ShapeRenderer shapeRenderer, + GameScreenHudViewModel.AbilityButton button, + float glow) { + Rectangle rect = button.bounds; + if (rect == null) return; + if (button.cooldownMs > 0L) { + rect = dockCooldownVisualBounds(model.viewModel(), rect); + } + Color color = button.cooldownMs > 0L ? model.renderContext().neonCyan : button.color; + float alpha = button.cooldownMs > 0L ? 0.48f : 0.28f + glow * 0.14f; + drawPanelBorder(model, shapeRenderer, rect, color, alpha); + if (button.cooldownMs <= 0L) { + float inset = 4f * visualScale(model.viewModel()); + scratchRect.set( + rect.x + inset, + rect.y + inset, + rect.width - inset * 2f, + rect.height - inset * 2f); + drawPanelBorder(model, shapeRenderer, scratchRect, Color.WHITE, 0.10f); + } + } + + private void drawButtonTexts(GameScreenHudModel model, SpriteBatch batch) { + GameScreenHudViewModel view = model.viewModel(); + if (view.showingAttackUpgrades) { + for (GameScreenHudViewModel.HudButton button : view.attackButtons) { + if (button.bounds != null) { + drawButtonText(model, batch, button.label, button.price, button.bounds); + } + } + } else if (view.showingAbilities) { + for (GameScreenHudViewModel.HudButton button : view.bonusButtons) { + if (button.bounds != null) { + drawButtonText(model, batch, button.label, button.price, button.bounds); + } + } + } else { + for (GameScreenHudViewModel.HudButton button : view.healthButtons) { + if (button.bounds != null) { + drawButtonText(model, batch, button.label, button.price, button.bounds); + } + } + } + } + + private void drawDepartmentText( + SpriteBatch batch, BitmapFont font, String text, Rectangle button) { + textRenderer.drawCenteredText(font, batch, text, button); + } + + private void drawButtonText( + GameScreenHudModel model, + SpriteBatch batch, + CharSequence mainText, + int price, + Rectangle button) { + priceText.setLength(0); + priceText.append(" (").append(price).append("₽)"); + + GameScreenHudRenderContext context = model.renderContext(); + textRenderer.drawPricedButtonText( + context.font, batch, mainText, priceText, button, context.priceTextColor); + } + + private void drawEmptyAbilitiesPlaceholder(GameScreenHudModel model, SpriteBatch batch) { + GameScreenHudViewModel view = model.viewModel(); + BitmapFont font = model.renderContext().font; + emptyAbilitiesLayout.setText(font, EMPTY_ABILITIES_MESSAGE); + float x = (view.viewportWidth - emptyAbilitiesLayout.width) / 2f; + float y = view.departmentButtonsY / 2f + emptyAbilitiesLayout.height / 2f; + font.setColor(0.7f, 0.7f, 0.7f, 1f); + font.draw(batch, EMPTY_ABILITIES_MESSAGE, x, y); + font.setColor(1f, 1f, 1f, 1f); + } + + private void drawNeonButtonText( + GameScreenHudModel model, + SpriteBatch batch, + CharSequence mainText, + CharSequence cooldownText, + Rectangle button) { + GameScreenHudRenderContext context = model.renderContext(); + GameScreenHudViewModel view = model.viewModel(); + float glow = 0.8f + 0.2f * (float) Math.sin(view.time * view.pulseSpeed); + textRenderer.drawNeonButtonText( + context.font, + batch, + mainText, + cooldownText, + button, + ScreenPalette.TEXT_COOLDOWN.set(context.scratchColor, glow)); + } + + private boolean isButtonHovered(Rectangle button) { + float mouseX = Gdx.input.getX(); + float mouseY = Gdx.graphics.getHeight() - Gdx.input.getY(); + return button.contains(mouseX, mouseY); + } + + private Color withAlpha(GameScreenHudRenderContext context, Color base, float alpha) { + context.scratchColor.set(base); + context.scratchColor.a = alpha; + return context.scratchColor; + } + + private float visualScale(GameScreenHudViewModel view) { + float widthScale = view.viewportWidth / REFERENCE_WIDTH; + float heightScale = view.viewportHeight / REFERENCE_HEIGHT; + return clamp(Math.min(widthScale, heightScale), 0.72f, 1.35f); + } + + private float clamp(float value, float min, float max) { + return Math.max(min, Math.min(max, value)); + } + + private float setFontScale(BitmapFont font, float scale) { + float oldScale = font.getData().scaleX; + font.getData().setScale(scale); + return oldScale; + } + + private void restoreFontScale(BitmapFont font, float oldScale) { + font.getData().setScale(oldScale); + } + + private BitmapFont topBarFont(GameScreenHudRenderContext context) { + HudFonts fonts = context.hudFonts; + return fonts == null ? context.font : fonts.topBar(); + } + + private BitmapFont statFont(GameScreenHudRenderContext context) { + HudFonts fonts = context.hudFonts; + return fonts == null ? context.font : fonts.stat(); + } + + private BitmapFont tabFont(GameScreenHudRenderContext context) { + HudFonts fonts = context.hudFonts; + return fonts == null ? context.font : fonts.tab(); + } + + private BitmapFont cardTitleFont(GameScreenHudRenderContext context) { + HudFonts fonts = context.hudFonts; + return fonts == null ? context.font : fonts.cardTitle(); + } + + private BitmapFont cardValueFont(GameScreenHudRenderContext context) { + HudFonts fonts = context.hudFonts; + return fonts == null ? context.font : fonts.cardValue(); + } + + private BitmapFont cardArrowFont(GameScreenHudRenderContext context) { + HudFonts fonts = context.hudFonts; + return fonts == null ? context.font : fonts.cardArrow(); + } + + private BitmapFont priceFont(GameScreenHudRenderContext context) { + HudFonts fonts = context.hudFonts; + return fonts == null ? context.font : fonts.price(); + } + + private BitmapFont dockLabelFont(GameScreenHudRenderContext context) { + HudFonts fonts = context.hudFonts; + return fonts == null ? context.font : fonts.dockLabel(); + } + + private BitmapFont dockCooldownFont(GameScreenHudRenderContext context) { + HudFonts fonts = context.hudFonts; + return fonts == null ? context.font : fonts.dockCooldown(); + } + + private float fittedScale(BitmapFont font, CharSequence text, float baseScale, float maxWidth) { + float oldScale = setFontScale(font, baseScale); + emptyAbilitiesLayout.setText(font, text); + float scale = baseScale; + if (emptyAbilitiesLayout.width > maxWidth && emptyAbilitiesLayout.width > 0f) { + scale *= maxWidth / emptyAbilitiesLayout.width; + font.getData().setScale(scale); + emptyAbilitiesLayout.setText(font, text); + } + restoreFontScale(font, oldScale); + return scale; + } + + private void drawFittedLeft( + BitmapFont font, + SpriteBatch batch, + CharSequence text, + Rectangle rect, + float baseScale, + Color color) { + if (rect == null) return; + float oldScale = setFontScale(font, fittedScale(font, text, baseScale, rect.width)); + emptyAbilitiesLayout.setText(font, text); + font.setColor(color); + float y = rect.y + (rect.height + emptyAbilitiesLayout.height) / 2f; + font.draw(batch, text, rect.x, y); + restoreFontScale(font, oldScale); + } + + private void drawFittedCenter( + BitmapFont font, + SpriteBatch batch, + CharSequence text, + Rectangle rect, + float baseScale, + Color color) { + if (rect == null) return; + float oldScale = setFontScale(font, fittedScale(font, text, baseScale, rect.width)); + emptyAbilitiesLayout.setText(font, text); + font.setColor(color); + float x = rect.x + (rect.width - emptyAbilitiesLayout.width) / 2f; + float y = rect.y + (rect.height + emptyAbilitiesLayout.height) / 2f; + font.draw(batch, text, x, y); + restoreFontScale(font, oldScale); + } + + private void drawFittedLeftEmphasis( + BitmapFont font, + SpriteBatch batch, + CharSequence text, + Rectangle rect, + float baseScale, + Color color) { + if (rect == null) return; + float oldScale = setFontScale(font, fittedScale(font, text, baseScale, rect.width)); + emptyAbilitiesLayout.setText(font, text); + font.setColor(color); + float y = rect.y + (rect.height + emptyAbilitiesLayout.height) / 2f; + font.draw(batch, text, rect.x, y); + font.draw(batch, text, rect.x + 0.45f * font.getData().scaleX, y); + restoreFontScale(font, oldScale); + } + + private void drawFittedCenterEmphasis( + BitmapFont font, + SpriteBatch batch, + CharSequence text, + Rectangle rect, + float baseScale, + Color color) { + if (rect == null) return; + float oldScale = setFontScale(font, fittedScale(font, text, baseScale, rect.width)); + emptyAbilitiesLayout.setText(font, text); + font.setColor(color); + float x = rect.x + (rect.width - emptyAbilitiesLayout.width) / 2f; + float y = rect.y + (rect.height + emptyAbilitiesLayout.height) / 2f; + font.draw(batch, text, x, y); + font.draw(batch, text, x + 0.45f * font.getData().scaleX, y); + restoreFontScale(font, oldScale); + } + + private void drawFittedRight( + BitmapFont font, + SpriteBatch batch, + CharSequence text, + Rectangle rect, + float baseScale, + Color color) { + if (rect == null) return; + float oldScale = setFontScale(font, fittedScale(font, text, baseScale, rect.width)); + emptyAbilitiesLayout.setText(font, text); + font.setColor(color); + float x = rect.x + rect.width - emptyAbilitiesLayout.width; + float y = rect.y + (rect.height + emptyAbilitiesLayout.height) / 2f; + font.draw(batch, text, x, y); + restoreFontScale(font, oldScale); + } + + private void setCooldownText(StringBuilder builder, long cooldown) { + builder.setLength(0); + if (cooldown <= 0) return; + + long tenths = Math.round(cooldown / 100f); + builder.append('(').append(tenths / 10).append('.').append(tenths % 10).append(" с)"); + } + + private void setDockCooldownText(StringBuilder builder, long cooldown) { + builder.setLength(0); + if (cooldown <= 0) return; + + long tenths = Math.round(cooldown / 100f); + builder.append(tenths / 10).append('.').append(tenths % 10); + } + + private float waveIndicatorY(GameScreenHudViewModel view) { + float indicatorHeight = view.waveIndicatorHeight * view.uiScale; + return view.viewportHeight - view.waveIndicatorPadding * view.uiScale - indicatorHeight; + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/hud/GameScreenHudViewModel.java b/core/src/main/java/ru/project/tower/screens/gamescreen/hud/GameScreenHudViewModel.java new file mode 100644 index 0000000..5a43201 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/hud/GameScreenHudViewModel.java @@ -0,0 +1,102 @@ +package ru.project.tower.screens.gamescreen.hud; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.math.Rectangle; +import ru.project.tower.abilities.AbilityKind; +import ru.project.tower.upgrades.shop.ShopUpgradeKind; + +final class GameScreenHudViewModel { + private static final AbilityKind[] ABILITY_KINDS = AbilityKind.values(); + + final HudButton[] attackButtons = createUpgradeButtons(10); + final HudButton[] healthButtons = createUpgradeButtons(10); + final HudButton[] bonusButtons = createUpgradeButtons(10); + final AbilityButton[] abilityButtons = new AbilityButton[ABILITY_KINDS.length]; + + int viewportWidth; + int viewportHeight; + float uiScale; + float time; + float pulseSpeed; + float waveIndicatorHeight; + float waveIndicatorPadding; + float departmentButtonsY; + boolean waveActive; + long enemiesPerWave; + long enemiesSpawnedThisWave; + int currentWave; + long nowMs; + long waveStartTime; + long timeBetweenWaves; + int squareHealth; + int maxSquareHealth; + int money; + int runCurrencyEarned; + int effectiveDamage; + float effectiveSpeed; + int healthRegenRate; + float effectiveCooldownMs; + float effectiveCritChance; + float effectiveCritMultiplier; + boolean showingAttackUpgrades; + boolean showingAbilities; + boolean shopExpanded; + float shopTransitionProgress; + Rectangle attackDepartmentButton; + Rectangle healthDepartmentButton; + Rectangle abilitiesDepartmentButton; + Rectangle shopToggleButton; + Rectangle topBar; + Rectangle waveBar; + Rectangle statStrip; + Rectangle shopSheet; + Rectangle shopHandle; + Rectangle abilityDock; + Rectangle dockLabel; + boolean hudHelpVisible; + boolean hasAnyAbilityButton; + + GameScreenHudViewModel() { + for (AbilityKind ability : ABILITY_KINDS) { + abilityButtons[ability.ordinal()] = new AbilityButton(ability); + } + } + + private static HudButton[] createUpgradeButtons(int count) { + HudButton[] buttons = new HudButton[count]; + for (int i = 0; i < buttons.length; i++) { + buttons[i] = new HudButton(); + } + return buttons; + } + + AbilityButton abilityButton(AbilityKind ability) { + return abilityButtons[ability.ordinal()]; + } + + static class HudButton { + Rectangle bounds; + Color color; + CharSequence label; + int price; + float statDelta; + CharSequence currentValue; + CharSequence nextValue; + CharSequence description; + CharSequence disabledReason; + ShopUpgradeKind kind; + String iconToken; + String colorToken; + boolean maxed; + } + + static final class AbilityButton extends HudButton { + final AbilityKind ability; + long cooldownMs; + + private AbilityButton(AbilityKind ability) { + this.ability = ability; + this.label = ability.hudLabel(); + } + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/input/GameScreenGestureProcessorFactory.java b/core/src/main/java/ru/project/tower/screens/gamescreen/input/GameScreenGestureProcessorFactory.java new file mode 100644 index 0000000..8a4d2b2 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/input/GameScreenGestureProcessorFactory.java @@ -0,0 +1,13 @@ +package ru.project.tower.screens.gamescreen.input; + +import com.badlogic.gdx.InputProcessor; +import com.badlogic.gdx.input.GestureDetector; +import com.badlogic.gdx.input.GestureDetector.GestureAdapter; + +public interface GameScreenGestureProcessorFactory { + InputProcessor create(GestureAdapter listener); + + static GameScreenGestureProcessorFactory libGdx() { + return listener -> new GestureDetector(20, 0.5f, 2, 0.15f, listener); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/input/GameScreenInputController.java b/core/src/main/java/ru/project/tower/screens/gamescreen/input/GameScreenInputController.java new file mode 100644 index 0000000..51d808a --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/input/GameScreenInputController.java @@ -0,0 +1,512 @@ +package ru.project.tower.screens.gamescreen.input; + +import com.badlogic.gdx.Input.Keys; +import com.badlogic.gdx.InputAdapter; +import com.badlogic.gdx.InputMultiplexer; +import com.badlogic.gdx.InputProcessor; +import com.badlogic.gdx.input.GestureDetector.GestureAdapter; +import com.badlogic.gdx.math.Rectangle; +import ru.project.tower.entities.circles.BonusBallData; +import ru.project.tower.screens.gamescreen.actions.GameScreenInputAction; +import ru.project.tower.support.GdxInputProcessorInstaller; +import ru.project.tower.support.GdxViewportSize; +import ru.project.tower.support.InputProcessorInstaller; +import ru.project.tower.support.ViewportSize; +import ru.project.tower.upgrades.shop.ShopUpgradeKind; + +public final class GameScreenInputController { + public interface Host { + GameScreenInputModel inputModel(); + + void perform(GameScreenInputAction action); + + void scrollShopUpgrades(float amount); + + void applyPick(int index); + + void rerollPick(); + + void buyShopUpgrade(ShopUpgradeKind kind); + + void collectBonusBall(int index); + } + + private final Host host; + private final ViewportSize viewportSize; + private final InputProcessorInstaller inputProcessorInstaller; + private final GameScreenGestureProcessorFactory gestureProcessorFactory; + private final Rectangle paddedHitBounds = new Rectangle(); + private static final float WHEEL_SCROLL_PIXELS = 42f; + private float pointerX = -1f; + private float pointerY = -1f; + private boolean pointerDown; + + public GameScreenInputController(Host host) { + this(host, new GdxViewportSize(), new GdxInputProcessorInstaller()); + } + + public GameScreenInputController( + Host host, ViewportSize viewportSize, InputProcessorInstaller inputProcessorInstaller) { + this( + host, + viewportSize, + inputProcessorInstaller, + GameScreenGestureProcessorFactory.libGdx()); + } + + public GameScreenInputController( + Host host, + ViewportSize viewportSize, + InputProcessorInstaller inputProcessorInstaller, + GameScreenGestureProcessorFactory gestureProcessorFactory) { + this.host = host; + this.viewportSize = viewportSize; + this.inputProcessorInstaller = inputProcessorInstaller; + this.gestureProcessorFactory = gestureProcessorFactory; + } + + public void install() { + InputProcessor gestureProcessor = createGestureProcessor(); + InputAdapter pointerTracker = createPointerTracker(); + installInputProcessors(pointerTracker, gestureProcessor); + } + + public void uninstall() { + inputProcessorInstaller.setInputProcessor(null); + pointerDown = false; + pointerX = -1f; + pointerY = -1f; + } + + private InputProcessor createGestureProcessor() { + return gestureProcessorFactory.create(createGestureListener()); + } + + private GestureAdapter createGestureListener() { + return new GestureAdapter() { + @Override + public boolean tap(float x, float y, int count, int button) { + return handleGestureTap(x, y); + } + + @Override + public boolean pan(float x, float y, float deltaX, float deltaY) { + return handleGesturePan(y, deltaY); + } + }; + } + + private boolean handleGestureTap(float x, float y) { + return handleTouch(x, viewportSize.getHeight() - y); + } + + private boolean handleGesturePan(float y, float deltaY) { + GameScreenInputModel model = host.inputModel(); + float touchY = viewportSize.getHeight() - y; + if (isShopScrollTouch(model, touchY) && deltaY != 0f) { + host.scrollShopUpgrades(-deltaY); + return true; + } + return false; + } + + private boolean handleWheelScroll(float amountY) { + GameScreenInputModel model = host.inputModel(); + if (isShopScrollTouch(model, pointerY) && amountY != 0f) { + host.scrollShopUpgrades(amountY * WHEEL_SCROLL_PIXELS * model.uiScale); + return true; + } + return false; + } + + private boolean isShopScrollTouch(GameScreenInputModel model, float touchY) { + return model.shopExpanded + && touchY >= 0f + && touchY < model.departmentButtonsY + 50f * model.uiScale; + } + + private InputAdapter createPointerTracker() { + return new InputAdapter() { + @Override + public boolean mouseMoved(int screenX, int screenY) { + updatePointer(screenX, screenY); + return false; + } + + @Override + public boolean keyDown(int keycode) { + return handleKeyDown(keycode); + } + + @Override + public boolean touchDown(int screenX, int screenY, int pointer, int button) { + updatePointer(screenX, screenY); + pointerDown = true; + return false; + } + + @Override + public boolean touchDragged(int screenX, int screenY, int pointer) { + updatePointer(screenX, screenY); + return false; + } + + @Override + public boolean touchUp(int screenX, int screenY, int pointer, int button) { + updatePointer(screenX, screenY); + pointerDown = false; + return false; + } + + @Override + public boolean scrolled(float amountX, float amountY) { + return handleWheelScroll(amountY); + } + }; + } + + private void installInputProcessors( + InputAdapter pointerTracker, InputProcessor gestureProcessor) { + InputMultiplexer multiplexer = new InputMultiplexer(); + multiplexer.addProcessor(pointerTracker); + multiplexer.addProcessor(gestureProcessor); + inputProcessorInstaller.setInputProcessor(multiplexer); + } + + public boolean isPointerOver(Rectangle button) { + return button != null && button.contains(pointerX, pointerY); + } + + public boolean isPointerPressed(Rectangle button) { + return pointerDown && isPointerOver(button); + } + + private void updatePointer(int screenX, int screenY) { + pointerX = screenX; + pointerY = viewportSize.getHeight() - screenY; + } + + void showAttackUpgrades() { + host.perform(GameScreenInputAction.SHOW_ATTACK_UPGRADES); + } + + void showHealthUpgrades() { + host.perform(GameScreenInputAction.SHOW_HEALTH_UPGRADES); + } + + void showAbilityButtons() { + host.perform(GameScreenInputAction.SHOW_ABILITY_BUTTONS); + } + + public boolean handleTouch(float touchX, float touchY) { + GameScreenInputModel model = host.inputModel(); + if (model.paused) { + handlePauseMenuInput(model, touchX, touchY); + return true; + } + if (handleUpgradePickTouch(model, touchX, touchY)) return true; + if (model.gameOver) { + handleRestartButton(model, touchX, touchY); + return true; + } + if (handleUpgradeButtons(model, touchX, touchY)) return true; + if (handleGameMenuButton(model, touchX, touchY)) return true; + return handleBonusBallClicks(model, touchX, touchY); + } + + public boolean handleKeyDown(int keycode) { + GameScreenInputModel model = host.inputModel(); + if (!model.upgradePickActive) return false; + if (!model.upgradePickInteractive) return true; + int pickIndex = upgradePickIndexForKey(keycode); + if (pickIndex >= 0) { + host.applyPick(pickIndex); + return true; + } + if (keycode == Keys.R) { + host.rerollPick(); + return true; + } + return false; + } + + private int upgradePickIndexForKey(int keycode) { + if (keycode == Keys.NUM_1 || keycode == Keys.NUMPAD_1) return 0; + if (keycode == Keys.NUM_2 || keycode == Keys.NUMPAD_2) return 1; + if (keycode == Keys.NUM_3 || keycode == Keys.NUMPAD_3) return 2; + return -1; + } + + private boolean handleUpgradePickTouch(GameScreenInputModel model, float touchX, float touchY) { + if (!model.upgradePickActive) return false; + if (!model.upgradePickInteractive) return true; + Rectangle rerollButton = model.upgradePickRerollButton(); + if (rerollButton != null && rerollButton.contains(touchX, touchY)) { + host.rerollPick(); + return true; + } + for (int i = 0; i < 3; i++) { + Rectangle button = model.upgradePickButton(i); + if (button != null && button.contains(touchX, touchY)) { + host.applyPick(i); + return true; + } + } + return true; + } + + private boolean handleUpgradeButtons(GameScreenInputModel model, float touchX, float touchY) { + float touchPadding = model.touchPadding; + + if (checkButtonClick( + model.shopToggleButton, + touchX, + touchY, + touchPadding, + GameScreenInputAction.TOGGLE_SHOP)) return true; + if (checkButtonClick( + model.statStrip, touchX, touchY, 0f, GameScreenInputAction.TOGGLE_HUD_HELP)) + return true; + if (handleAbilityActivationButtons(model, touchX, touchY, touchPadding)) return true; + if (!model.shopExpanded) return false; + if (handleDepartmentButtons(model, touchX, touchY, touchPadding)) return true; + if (handleScrollButtons(model, touchX, touchY)) return true; + if (handleDynamicShopUpgradeButtons(model, touchX, touchY, touchPadding)) return true; + + if (model.showingAttackUpgrades) { + return handleAttackUpgradeButtons(model, touchX, touchY, touchPadding); + } + if (!model.showingAbilities) { + return handleHealthUpgradeButtons(model, touchX, touchY, touchPadding); + } + return checkButtonClick( + model.critMultiplierUpgradeButton, + touchX, + touchY, + touchPadding, + GameScreenInputAction.UPGRADE_CRIT_MULTIPLIER); + } + + private boolean handleDepartmentButtons( + GameScreenInputModel model, float touchX, float touchY, float touchPadding) { + if (paddedContains(model.attackDepartmentButton, touchX, touchY, touchPadding)) { + showAttackUpgrades(); + return true; + } + + if (paddedContains(model.healthDepartmentButton, touchX, touchY, touchPadding)) { + showHealthUpgrades(); + return true; + } + + if (paddedContains(model.abilitiesDepartmentButton, touchX, touchY, touchPadding)) { + showAbilityButtons(); + return true; + } + return false; + } + + private boolean handleScrollButtons(GameScreenInputModel model, float touchX, float touchY) { + if (model.scrollUpButton != null && model.scrollUpButton.contains(touchX, touchY)) { + host.perform(GameScreenInputAction.SCROLL_UP); + return true; + } + + if (model.scrollDownButton != null && model.scrollDownButton.contains(touchX, touchY)) { + host.perform(GameScreenInputAction.SCROLL_DOWN); + return true; + } + return false; + } + + private boolean handleDynamicShopUpgradeButtons( + GameScreenInputModel model, float touchX, float touchY, float touchPadding) { + for (int i = 0; i < model.shopUpgradeButtons.length; i++) { + Rectangle button = model.shopUpgradeButtons[i]; + ShopUpgradeKind kind = model.shopUpgradeKinds[i]; + if (kind != null && paddedContains(button, touchX, touchY, touchPadding)) { + host.buyShopUpgrade(kind); + return true; + } + } + return false; + } + + private boolean handleAttackUpgradeButtons( + GameScreenInputModel model, float touchX, float touchY, float touchPadding) { + if (checkButtonClick( + model.damageUpgradeButton, + touchX, + touchY, + touchPadding, + GameScreenInputAction.UPGRADE_DAMAGE)) return true; + if (checkButtonClick( + model.speedUpgradeButton, + touchX, + touchY, + touchPadding, + GameScreenInputAction.UPGRADE_SPEED)) return true; + if (checkButtonClick( + model.cooldownUpgradeButton, + touchX, + touchY, + touchPadding, + GameScreenInputAction.UPGRADE_COOLDOWN)) return true; + if (checkButtonClick( + model.critChanceUpgradeButton, + touchX, + touchY, + touchPadding, + GameScreenInputAction.UPGRADE_CRIT_CHANCE)) return true; + if (checkButtonClick( + model.critMultiplierUpgradeButton, + touchX, + touchY, + touchPadding, + GameScreenInputAction.UPGRADE_CRIT_MULTIPLIER)) return true; + return false; + } + + private boolean handleHealthUpgradeButtons( + GameScreenInputModel model, float touchX, float touchY, float touchPadding) { + if (checkButtonClick( + model.healthUpgradeButton, + touchX, + touchY, + touchPadding, + GameScreenInputAction.UPGRADE_HEALTH)) return true; + if (checkButtonClick( + model.regenUpgradeButton, + touchX, + touchY, + touchPadding, + GameScreenInputAction.UPGRADE_REGEN)) return true; + return false; + } + + private boolean handleAbilityActivationButtons( + GameScreenInputModel model, float touchX, float touchY, float touchPadding) { + if (handleCombatAbilityButtons(model, touchX, touchY, touchPadding)) return true; + return handleMobilityAbilityButtons(model, touchX, touchY, touchPadding); + } + + private boolean handleCombatAbilityButtons( + GameScreenInputModel model, float touchX, float touchY, float touchPadding) { + if (checkButtonClick( + model.freezeAbilityButton, + touchX, + touchY, + touchPadding, + GameScreenInputAction.ACTIVATE_FREEZE)) return true; + if (checkButtonClick( + model.explosionAbilityButton, + touchX, + touchY, + touchPadding, + GameScreenInputAction.ACTIVATE_EXPLOSION)) return true; + if (checkButtonClick( + model.shieldAbilityButton, + touchX, + touchY, + touchPadding, + GameScreenInputAction.ACTIVATE_SHIELD)) return true; + if (checkButtonClick( + model.impulseAbilityButton, + touchX, + touchY, + touchPadding, + GameScreenInputAction.ACTIVATE_IMPULSE)) return true; + return false; + } + + private boolean handleMobilityAbilityButtons( + GameScreenInputModel model, float touchX, float touchY, float touchPadding) { + if (checkButtonClick( + model.dashAbilityButton, + touchX, + touchY, + touchPadding, + GameScreenInputAction.ACTIVATE_DASH)) return true; + if (checkButtonClick( + model.pullAbilityButton, + touchX, + touchY, + touchPadding, + GameScreenInputAction.ACTIVATE_PULL)) return true; + if (checkButtonClick( + model.turretAbilityButton, + touchX, + touchY, + touchPadding, + GameScreenInputAction.ACTIVATE_TURRET)) return true; + return false; + } + + private boolean handleGameMenuButton(GameScreenInputModel model, float touchX, float touchY) { + Rectangle gameMenuButton = model.gameMenuButton; + if (gameMenuButton != null && gameMenuButton.contains(touchX, touchY)) { + host.perform(GameScreenInputAction.REQUEST_PAUSE); + return true; + } + return false; + } + + private boolean handleRestartButton(GameScreenInputModel model, float touchX, float touchY) { + if (model.restartButton != null && model.restartButton.contains(touchX, touchY)) { + host.perform(GameScreenInputAction.RESTART_GAME); + return true; + } + + if (model.menuButton != null && model.menuButton.contains(touchX, touchY)) { + host.perform(GameScreenInputAction.RETURN_TO_MAIN_MENU); + return true; + } + return false; + } + + private boolean handlePauseMenuInput(GameScreenInputModel model, float touchX, float touchY) { + if (model.resumeButton != null && model.resumeButton.contains(touchX, touchY)) { + host.perform(GameScreenInputAction.RESUME_GAME_FROM_PAUSE); + return true; + } else if (model.exitButton != null && model.exitButton.contains(touchX, touchY)) { + host.perform(GameScreenInputAction.EXIT_PAUSE_TO_MENU); + return true; + } + return false; + } + + private boolean handleBonusBallClicks(GameScreenInputModel model, float touchX, float touchY) { + for (int i = model.bonusBalls.size - 1; i >= 0; i--) { + BonusBallData ball = model.bonusBalls.get(i); + if (ball.circle.contains(touchX, touchY)) { + host.collectBonusBall(i); + return true; + } + } + return false; + } + + boolean checkButtonClick( + Rectangle button, + float touchX, + float touchY, + float touchPadding, + GameScreenInputAction action) { + if (paddedContains(button, touchX, touchY, touchPadding)) { + host.perform(action); + return true; + } + return false; + } + + private boolean paddedContains(Rectangle button, float x, float y, float padding) { + return button != null + && paddedHitBounds + .set( + button.x - padding, + button.y - padding, + button.width + padding * 2, + button.height + padding * 2) + .contains(x, y); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/input/GameScreenInputHostAdapter.java b/core/src/main/java/ru/project/tower/screens/gamescreen/input/GameScreenInputHostAdapter.java new file mode 100644 index 0000000..916fdfa --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/input/GameScreenInputHostAdapter.java @@ -0,0 +1,64 @@ +package ru.project.tower.screens.gamescreen.input; + +import java.util.Objects; +import ru.project.tower.screens.gamescreen.actions.GameScreenInputAction; +import ru.project.tower.upgrades.shop.ShopUpgradeKind; + +public final class GameScreenInputHostAdapter implements GameScreenInputController.Host { + private final Port port; + + public GameScreenInputHostAdapter(Port port) { + this.port = Objects.requireNonNull(port, "port"); + } + + @Override + public GameScreenInputModel inputModel() { + return port.inputModel(); + } + + @Override + public void perform(GameScreenInputAction action) { + port.performInputAction(action); + } + + @Override + public void scrollShopUpgrades(float amount) { + port.scrollShopUpgrades(amount); + } + + @Override + public void applyPick(int index) { + port.applyPick(index); + } + + @Override + public void rerollPick() { + port.rerollPick(); + } + + @Override + public void buyShopUpgrade(ShopUpgradeKind kind) { + port.buyShopUpgrade(kind); + } + + @Override + public void collectBonusBall(int index) { + port.collectBonusBall(index); + } + + public interface Port { + GameScreenInputModel inputModel(); + + void performInputAction(GameScreenInputAction action); + + void scrollShopUpgrades(float amount); + + void applyPick(int index); + + void rerollPick(); + + void buyShopUpgrade(ShopUpgradeKind kind); + + void collectBonusBall(int index); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/input/GameScreenInputModel.java b/core/src/main/java/ru/project/tower/screens/gamescreen/input/GameScreenInputModel.java new file mode 100644 index 0000000..beb3137 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/input/GameScreenInputModel.java @@ -0,0 +1,420 @@ +package ru.project.tower.screens.gamescreen.input; + +import com.badlogic.gdx.math.Rectangle; +import com.badlogic.gdx.utils.Array; +import ru.project.tower.entities.circles.BonusBallData; +import ru.project.tower.upgrades.shop.ShopUpgradeKind; + +public final class GameScreenInputModel { + final Rectangle[] upgradePickButtons = new Rectangle[3]; + Rectangle upgradePickRerollButton; + + boolean upgradePickActive; + boolean upgradePickInteractive; + boolean paused; + boolean showingAttackUpgrades; + boolean showingAbilities; + boolean shopExpanded; + boolean gameOver; + int purchasedAbilityCount; + float touchPadding; + float departmentButtonsY; + float uiScale; + Rectangle attackDepartmentButton; + Rectangle healthDepartmentButton; + Rectangle abilitiesDepartmentButton; + Rectangle scrollUpButton; + Rectangle scrollDownButton; + Rectangle shopToggleButton; + Rectangle statStrip; + Rectangle damageUpgradeButton; + Rectangle speedUpgradeButton; + Rectangle cooldownUpgradeButton; + Rectangle critChanceUpgradeButton; + Rectangle critMultiplierUpgradeButton; + Rectangle healthUpgradeButton; + Rectangle regenUpgradeButton; + final Rectangle[] shopUpgradeButtons = new Rectangle[10]; + final ShopUpgradeKind[] shopUpgradeKinds = new ShopUpgradeKind[10]; + Rectangle freezeAbilityButton; + Rectangle explosionAbilityButton; + Rectangle shieldAbilityButton; + Rectangle impulseAbilityButton; + Rectangle dashAbilityButton; + Rectangle pullAbilityButton; + Rectangle turretAbilityButton; + Rectangle gameMenuButton; + Rectangle restartButton; + Rectangle menuButton; + Rectangle resumeButton; + Rectangle exitButton; + Array bonusBalls; + + public GameScreenInputModel() {} + + public void fillScreenFields(ScreenFields fields) { + this.upgradePickActive = fields.upgradePickActive(); + this.upgradePickInteractive = fields.upgradePickInteractive(); + this.paused = fields.paused(); + for (int i = 0; i < upgradePickButtons.length; i++) { + upgradePickButtons[i] = fields.upgradeButton(i); + } + this.upgradePickRerollButton = fields.upgradeRerollButton(); + this.gameOver = fields.gameOver(); + this.uiScale = fields.uiScale(); + this.gameMenuButton = fields.gameMenuButton(); + this.restartButton = fields.restartButton(); + this.menuButton = fields.menuButton(); + this.resumeButton = fields.resumeButton(); + this.exitButton = fields.exitButton(); + this.bonusBalls = fields.bonusBalls(); + } + + public void fillShopFields(ShopFields fields) { + this.showingAttackUpgrades = fields.showingAttackUpgrades(); + this.showingAbilities = fields.showingAbilities(); + this.shopExpanded = fields.shopExpanded(); + this.purchasedAbilityCount = fields.purchasedAbilityCount(); + this.touchPadding = fields.touchPadding(); + this.departmentButtonsY = fields.departmentButtonsY(); + this.attackDepartmentButton = fields.attackDepartmentButton(); + this.healthDepartmentButton = fields.healthDepartmentButton(); + this.abilitiesDepartmentButton = fields.abilitiesDepartmentButton(); + this.scrollUpButton = fields.scrollUpButton(); + this.scrollDownButton = fields.scrollDownButton(); + this.shopToggleButton = fields.shopToggleButton(); + this.statStrip = fields.statStrip(); + this.damageUpgradeButton = fields.damageUpgradeButton(); + this.speedUpgradeButton = fields.speedUpgradeButton(); + this.cooldownUpgradeButton = fields.cooldownUpgradeButton(); + this.critChanceUpgradeButton = fields.critChanceUpgradeButton(); + this.critMultiplierUpgradeButton = fields.critMultiplierUpgradeButton(); + this.healthUpgradeButton = fields.healthUpgradeButton(); + this.regenUpgradeButton = fields.regenUpgradeButton(); + for (int i = 0; i < shopUpgradeButtons.length; i++) { + this.shopUpgradeButtons[i] = fields.shopUpgradeButton(i); + this.shopUpgradeKinds[i] = fields.shopUpgradeKind(i); + } + this.freezeAbilityButton = fields.freezeAbilityButton(); + this.explosionAbilityButton = fields.explosionAbilityButton(); + this.shieldAbilityButton = fields.shieldAbilityButton(); + this.impulseAbilityButton = fields.impulseAbilityButton(); + this.dashAbilityButton = fields.dashAbilityButton(); + this.pullAbilityButton = fields.pullAbilityButton(); + this.turretAbilityButton = fields.turretAbilityButton(); + } + + Rectangle upgradePickButton(int index) { + return upgradePickButtons[index]; + } + + Rectangle upgradePickRerollButton() { + return upgradePickRerollButton; + } + + public static final class ScreenFields { + private final boolean upgradePickActive; + private final boolean upgradePickInteractive; + private final boolean paused; + private final Rectangle[] upgradeButtons; + private final Rectangle upgradeRerollButton; + private final boolean gameOver; + private final float uiScale; + private final Rectangle gameMenuButton; + private final Rectangle restartButton; + private final Rectangle menuButton; + private final Rectangle resumeButton; + private final Rectangle exitButton; + private final Array bonusBalls; + + public ScreenFields( + boolean upgradePickActive, + boolean upgradePickInteractive, + boolean paused, + Rectangle[] upgradeButtons, + Rectangle upgradeRerollButton, + boolean gameOver, + float uiScale, + Rectangle gameMenuButton, + Rectangle restartButton, + Rectangle menuButton, + Rectangle resumeButton, + Rectangle exitButton, + Array bonusBalls) { + this.upgradePickActive = upgradePickActive; + this.upgradePickInteractive = upgradePickInteractive; + this.paused = paused; + this.upgradeButtons = upgradeButtons; + this.upgradeRerollButton = upgradeRerollButton; + this.gameOver = gameOver; + this.uiScale = uiScale; + this.gameMenuButton = gameMenuButton; + this.restartButton = restartButton; + this.menuButton = menuButton; + this.resumeButton = resumeButton; + this.exitButton = exitButton; + this.bonusBalls = bonusBalls; + } + + public boolean upgradePickActive() { + return upgradePickActive; + } + + public boolean upgradePickInteractive() { + return upgradePickInteractive; + } + + public boolean paused() { + return paused; + } + + public Rectangle upgradeButton(int index) { + return upgradeButtons[index]; + } + + public Rectangle upgradeRerollButton() { + return upgradeRerollButton; + } + + public boolean gameOver() { + return gameOver; + } + + public float uiScale() { + return uiScale; + } + + public Rectangle gameMenuButton() { + return gameMenuButton; + } + + public Rectangle restartButton() { + return restartButton; + } + + public Rectangle menuButton() { + return menuButton; + } + + public Rectangle resumeButton() { + return resumeButton; + } + + public Rectangle exitButton() { + return exitButton; + } + + public Array bonusBalls() { + return bonusBalls; + } + } + + public static final class ShopFields { + private final boolean showingAttackUpgrades; + private final boolean showingAbilities; + private final boolean shopExpanded; + private final int purchasedAbilityCount; + private final float touchPadding; + private final float departmentButtonsY; + private final Rectangle attackDepartmentButton; + private final Rectangle healthDepartmentButton; + private final Rectangle abilitiesDepartmentButton; + private final Rectangle scrollUpButton; + private final Rectangle scrollDownButton; + private final Rectangle shopToggleButton; + private final Rectangle statStrip; + private final Rectangle damageUpgradeButton; + private final Rectangle speedUpgradeButton; + private final Rectangle cooldownUpgradeButton; + private final Rectangle critChanceUpgradeButton; + private final Rectangle critMultiplierUpgradeButton; + private final Rectangle healthUpgradeButton; + private final Rectangle regenUpgradeButton; + private final Rectangle[] shopUpgradeButtons; + private final ShopUpgradeKind[] shopUpgradeKinds; + private final Rectangle freezeAbilityButton; + private final Rectangle explosionAbilityButton; + private final Rectangle shieldAbilityButton; + private final Rectangle impulseAbilityButton; + private final Rectangle dashAbilityButton; + private final Rectangle pullAbilityButton; + private final Rectangle turretAbilityButton; + + public ShopFields( + boolean showingAttackUpgrades, + boolean showingAbilities, + boolean shopExpanded, + int purchasedAbilityCount, + float touchPadding, + float departmentButtonsY, + Rectangle attackDepartmentButton, + Rectangle healthDepartmentButton, + Rectangle abilitiesDepartmentButton, + Rectangle scrollUpButton, + Rectangle scrollDownButton, + Rectangle shopToggleButton, + Rectangle statStrip, + Rectangle damageUpgradeButton, + Rectangle speedUpgradeButton, + Rectangle cooldownUpgradeButton, + Rectangle critChanceUpgradeButton, + Rectangle critMultiplierUpgradeButton, + Rectangle healthUpgradeButton, + Rectangle regenUpgradeButton, + Rectangle[] shopUpgradeButtons, + ShopUpgradeKind[] shopUpgradeKinds, + Rectangle freezeAbilityButton, + Rectangle explosionAbilityButton, + Rectangle shieldAbilityButton, + Rectangle impulseAbilityButton, + Rectangle dashAbilityButton, + Rectangle pullAbilityButton, + Rectangle turretAbilityButton) { + this.showingAttackUpgrades = showingAttackUpgrades; + this.showingAbilities = showingAbilities; + this.shopExpanded = shopExpanded; + this.purchasedAbilityCount = purchasedAbilityCount; + this.touchPadding = touchPadding; + this.departmentButtonsY = departmentButtonsY; + this.attackDepartmentButton = attackDepartmentButton; + this.healthDepartmentButton = healthDepartmentButton; + this.abilitiesDepartmentButton = abilitiesDepartmentButton; + this.scrollUpButton = scrollUpButton; + this.scrollDownButton = scrollDownButton; + this.shopToggleButton = shopToggleButton; + this.statStrip = statStrip; + this.damageUpgradeButton = damageUpgradeButton; + this.speedUpgradeButton = speedUpgradeButton; + this.cooldownUpgradeButton = cooldownUpgradeButton; + this.critChanceUpgradeButton = critChanceUpgradeButton; + this.critMultiplierUpgradeButton = critMultiplierUpgradeButton; + this.healthUpgradeButton = healthUpgradeButton; + this.regenUpgradeButton = regenUpgradeButton; + this.shopUpgradeButtons = shopUpgradeButtons; + this.shopUpgradeKinds = shopUpgradeKinds; + this.freezeAbilityButton = freezeAbilityButton; + this.explosionAbilityButton = explosionAbilityButton; + this.shieldAbilityButton = shieldAbilityButton; + this.impulseAbilityButton = impulseAbilityButton; + this.dashAbilityButton = dashAbilityButton; + this.pullAbilityButton = pullAbilityButton; + this.turretAbilityButton = turretAbilityButton; + } + + public boolean showingAttackUpgrades() { + return showingAttackUpgrades; + } + + public boolean showingAbilities() { + return showingAbilities; + } + + public boolean shopExpanded() { + return shopExpanded; + } + + public int purchasedAbilityCount() { + return purchasedAbilityCount; + } + + public float touchPadding() { + return touchPadding; + } + + public float departmentButtonsY() { + return departmentButtonsY; + } + + public Rectangle attackDepartmentButton() { + return attackDepartmentButton; + } + + public Rectangle healthDepartmentButton() { + return healthDepartmentButton; + } + + public Rectangle abilitiesDepartmentButton() { + return abilitiesDepartmentButton; + } + + public Rectangle scrollUpButton() { + return scrollUpButton; + } + + public Rectangle scrollDownButton() { + return scrollDownButton; + } + + public Rectangle shopToggleButton() { + return shopToggleButton; + } + + public Rectangle statStrip() { + return statStrip; + } + + public Rectangle damageUpgradeButton() { + return damageUpgradeButton; + } + + public Rectangle speedUpgradeButton() { + return speedUpgradeButton; + } + + public Rectangle cooldownUpgradeButton() { + return cooldownUpgradeButton; + } + + public Rectangle critChanceUpgradeButton() { + return critChanceUpgradeButton; + } + + public Rectangle critMultiplierUpgradeButton() { + return critMultiplierUpgradeButton; + } + + public Rectangle healthUpgradeButton() { + return healthUpgradeButton; + } + + public Rectangle regenUpgradeButton() { + return regenUpgradeButton; + } + + public Rectangle shopUpgradeButton(int index) { + return shopUpgradeButtons[index]; + } + + public ShopUpgradeKind shopUpgradeKind(int index) { + return shopUpgradeKinds[index]; + } + + public Rectangle freezeAbilityButton() { + return freezeAbilityButton; + } + + public Rectangle explosionAbilityButton() { + return explosionAbilityButton; + } + + public Rectangle shieldAbilityButton() { + return shieldAbilityButton; + } + + public Rectangle impulseAbilityButton() { + return impulseAbilityButton; + } + + public Rectangle dashAbilityButton() { + return dashAbilityButton; + } + + public Rectangle pullAbilityButton() { + return pullAbilityButton; + } + + public Rectangle turretAbilityButton() { + return turretAbilityButton; + } + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/layout/GameScreenLayout.java b/core/src/main/java/ru/project/tower/screens/gamescreen/layout/GameScreenLayout.java new file mode 100644 index 0000000..41437bc --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/layout/GameScreenLayout.java @@ -0,0 +1,1069 @@ +package ru.project.tower.screens.gamescreen.layout; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import ru.project.tower.screens.gamescreen.visual.GameScreenVisualTokens; + +public final class GameScreenLayout { + public static final float MIN_TAPPABLE_TARGET = 48f; + + private static final float BASE_WIDTH = 1280f; + private static final float BASE_HEIGHT = 720f; + private static final float MIN_PADDING = 8f; + private static final float MAX_BUTTON_WIDTH = 150f; + private static final float REFERENCE_WIDTH = GameScreenVisualTokens.REFERENCE_WIDTH; + private static final float REFERENCE_HEIGHT = GameScreenVisualTokens.REFERENCE_HEIGHT; + private static final float MARGIN = GameScreenVisualTokens.Layout.MARGIN; + private static final float TOP_MARGIN = GameScreenVisualTokens.Layout.TOP_MARGIN; + private static final float MENU_RIGHT = GameScreenVisualTokens.Layout.MENU_RIGHT; + private static final float TOPBAR_HEIGHT = GameScreenVisualTokens.Hud.TOPBAR_HEIGHT; + private static final float WAVEBAR_HEIGHT = GameScreenVisualTokens.Hud.WAVEBAR_HEIGHT; + private static final float STAT_STRIP_HEIGHT = + GameScreenVisualTokens.Hud.STAT_STRIP_HEIGHT; + private static final float MENU_SIZE = GameScreenVisualTokens.Menu.SIZE; + private static final float DOCK_HEIGHT = GameScreenVisualTokens.Dock.HEIGHT; + private static final float DOCK_BUTTON = GameScreenVisualTokens.Dock.BUTTON_SIZE; + private static final float SHOP_HEIGHT = GameScreenVisualTokens.Shop.SHEET_HEIGHT; + private static final float SHOP_BOTTOM = GameScreenVisualTokens.Layout.SHOP_BOTTOM; + private static final float SHOP_PADDING_X = GameScreenVisualTokens.Layout.SHOP_PADDING_X; + private static final float HANDLE_WIDTH = GameScreenVisualTokens.Layout.HANDLE_WIDTH; + private static final float HANDLE_HEIGHT = GameScreenVisualTokens.Layout.HANDLE_HEIGHT; + private static final float TAB_HEIGHT = GameScreenVisualTokens.Shop.TAB_HEIGHT; + private static final float CARD_HEIGHT = GameScreenVisualTokens.Shop.CARD_HEIGHT; + private static final float CARD_GAP = GameScreenVisualTokens.Layout.CARD_GAP; + private static final int DOCK_ABILITY_COUNT = 3; + private static final int SHOP_CATEGORY_BUTTON_COUNT = 10; + private static final int SHOP_MIN_COLUMN_COUNT = 2; + private static final int SHOP_MAX_COLUMN_COUNT = 5; + private static final float SHOP_MAX_CARD_WIDTH = 420f; + + public enum Panel { + ATTACK, + HEALTH, + ABILITIES + } + + private final int viewportWidth; + private final int viewportHeight; + private final float uiScale; + private final float buttonPadding; + private final float buttonWidth; + private final float minButtonWidth; + private final float buttonHeight; + private final float rowAdvance; + private final float departmentButtonsY; + private final float visibleAreaHeight; + private final float minScrollOffset; + private final float maxScrollOffset; + private final float touchPadding; + private final Rect scissorBounds; + private final Rect attackDepartmentButton; + private final Rect healthDepartmentButton; + private final Rect abilitiesDepartmentButton; + private final Rect[] attackButtons; + private final Rect[] healthButtons; + private final Rect[] abilityButtons; + private final List contentButtons; + private final Rect scrollUpButton; + private final Rect scrollDownButton; + private final Rect topBar; + private final Rect waveBar; + private final Rect statStrip; + private final Rect menuButton; + private final Rect shopSheet; + private final Rect shopHandle; + private final Rect abilityDock; + private final Rect shopToggleButton; + private final Rect dockLabel; + private final Rect[] dockAbilityButtons; + + private GameScreenLayout( + int viewportWidth, + int viewportHeight, + float uiScale, + float buttonPadding, + float buttonWidth, + float minButtonWidth, + float buttonHeight, + float rowAdvance, + float departmentButtonsY, + float minScrollOffset, + float maxScrollOffset, + float touchPadding, + Rect scissorBounds, + Rect attackDepartmentButton, + Rect healthDepartmentButton, + Rect abilitiesDepartmentButton, + Rect[] attackButtons, + Rect[] healthButtons, + Rect[] abilityButtons, + List contentButtons, + Rect scrollUpButton, + Rect scrollDownButton, + Chrome chrome) { + this.viewportWidth = viewportWidth; + this.viewportHeight = viewportHeight; + this.uiScale = uiScale; + this.buttonPadding = buttonPadding; + this.buttonWidth = buttonWidth; + this.minButtonWidth = minButtonWidth; + this.buttonHeight = buttonHeight; + this.rowAdvance = rowAdvance; + this.departmentButtonsY = departmentButtonsY; + this.visibleAreaHeight = departmentButtonsY; + this.minScrollOffset = minScrollOffset; + this.maxScrollOffset = maxScrollOffset; + this.touchPadding = touchPadding; + this.scissorBounds = scissorBounds; + this.attackDepartmentButton = attackDepartmentButton; + this.healthDepartmentButton = healthDepartmentButton; + this.abilitiesDepartmentButton = abilitiesDepartmentButton; + this.attackButtons = attackButtons; + this.healthButtons = healthButtons; + this.abilityButtons = abilityButtons; + this.contentButtons = contentButtons; + this.scrollUpButton = scrollUpButton; + this.scrollDownButton = scrollDownButton; + this.topBar = chrome.topBar; + this.waveBar = chrome.waveBar; + this.statStrip = chrome.statStrip; + this.menuButton = chrome.menuButton; + this.shopSheet = chrome.shopSheet; + this.shopHandle = chrome.shopHandle; + this.abilityDock = chrome.abilityDock; + this.shopToggleButton = chrome.shopToggleButton; + this.dockLabel = chrome.dockLabel; + this.dockAbilityButtons = chrome.dockAbilityButtons; + } + + public static float uiScaleFor(int viewportWidth, int viewportHeight) { + float scaleX = viewportWidth / BASE_WIDTH; + float scaleY = viewportHeight / BASE_HEIGHT; + boolean portrait = viewportHeight > viewportWidth; + if (portrait) { + return clamp(scaleY * 1.2f, 1.0f, 2.5f); + } + return clamp(Math.min(scaleX, scaleY) * 1.2f, 0.8f, 1.8f); + } + + public static GameScreenLayout calculate( + int viewportWidth, + int viewportHeight, + float uiScale, + float requestedScrollOffset, + Panel panel, + int abilityCount) { + return calculate( + viewportWidth, + viewportHeight, + uiScale, + requestedScrollOffset, + panel, + abilityCount, + SafeAreaInsets.zero()); + } + + public static GameScreenLayout calculate( + int viewportWidth, + int viewportHeight, + float uiScale, + float requestedScrollOffset, + Panel panel, + int abilityCount, + SafeAreaInsets safeArea) { + validateCalculateInputs(viewportWidth, viewportHeight, panel, safeArea); + int safeWidth = viewportWidth - safeArea.left() - safeArea.right(); + int safeHeight = viewportHeight - safeArea.top() - safeArea.bottom(); + + Chrome chrome = createChrome(safeArea, safeWidth, safeHeight, uiScale); + LayoutMetrics metrics = + calculateMetrics( + safeWidth, + safeHeight, + uiScale, + requestedScrollOffset, + panel, + abilityCount, + chrome); + DepartmentButtons departmentButtons = + createDepartmentButtons( + safeArea.left(), + safeArea.bottom(), + safeWidth, + metrics.departmentButtonsY, + metrics); + PanelButtons panelButtons = + createPanelButtons( + safeArea.left(), + safeArea.bottom(), + safeWidth, + panel, + abilityCount, + metrics); + ScrollButtons scrollButtons = + createScrollButtons(safeArea.left(), safeArea.bottom(), safeWidth, metrics); + return createLayout( + viewportWidth, + viewportHeight, + uiScale, + safeArea, + safeWidth, + metrics, + departmentButtons, + panelButtons, + scrollButtons, + chrome); + } + + private static GameScreenLayout createLayout( + int viewportWidth, + int viewportHeight, + float uiScale, + SafeAreaInsets safeArea, + int safeWidth, + LayoutMetrics metrics, + DepartmentButtons departmentButtons, + PanelButtons panelButtons, + ScrollButtons scrollButtons, + Chrome chrome) { + return new GameScreenLayout( + viewportWidth, + viewportHeight, + uiScale, + metrics.padding, + metrics.buttonWidth, + metrics.minButtonWidth, + metrics.buttonHeight, + metrics.rowAdvance, + metrics.departmentButtonsY, + 0f, + metrics.maxScrollOffset, + metrics.touchPadding, + new Rect(safeArea.left(), safeArea.bottom(), safeWidth, metrics.departmentButtonsY), + departmentButtons.attackDepartment, + departmentButtons.healthDepartment, + departmentButtons.abilitiesDepartment, + panelButtons.attackButtons, + panelButtons.healthButtons, + panelButtons.abilityButtons, + panelButtons.contentButtons, + scrollButtons.scrollUp, + scrollButtons.scrollDown, + chrome); + } + + public static Rect[] upgradePickCards(int viewportWidth, int viewportHeight, float uiScale) { + validateViewport(viewportWidth, viewportHeight); + + float cardWidth = Math.min(360f * uiScale, viewportWidth * 0.72f); + float rerollHeight = rerollButtonHeight(uiScale); + float gap = Math.max(10f * uiScale, viewportHeight * 0.018f); + float cardHeight = + Math.min(150f * uiScale, (viewportHeight - rerollHeight - gap * 5f) / 3f); + cardHeight = Math.max(72f * uiScale, cardHeight); + float totalHeight = cardHeight * 3f + gap * 2f + rerollHeight + gap * 1.25f; + float titleReserve = 34f * uiScale; + float bottomY = Math.max(20f * uiScale, (viewportHeight - totalHeight) / 2f - titleReserve); + float startX = (viewportWidth - cardWidth) / 2f; + float firstCardY = bottomY + rerollHeight + gap * 1.25f + (cardHeight + gap) * 2f; + + Rect[] cards = new Rect[3]; + for (int i = 0; i < cards.length; i++) { + cards[i] = new Rect(startX, firstCardY - i * (cardHeight + gap), cardWidth, cardHeight); + } + return cards; + } + + public static Rect upgradePickRerollButton( + int viewportWidth, int viewportHeight, float uiScale) { + validateViewport(viewportWidth, viewportHeight); + + Rect[] cards = upgradePickCards(viewportWidth, viewportHeight, uiScale); + float height = rerollButtonHeight(uiScale); + float width = Math.min(cards[0].width(), 240f * uiScale); + float x = cards[0].x() + (cards[0].width() - width) / 2f; + float y = + Math.max( + 20f * uiScale, + cards[2].y() - height - Math.max(10f * uiScale, viewportHeight * 0.018f)); + return new Rect(x, y, width, height); + } + + public static float upgradePickRevealDelay(int cardIndex) { + return Math.max(0, cardIndex) * 0.08f; + } + + private static float rerollButtonHeight(float uiScale) { + return Math.max(42f * uiScale, 48f * uiScale); + } + + public static GameOverButtons gameOverButtons( + int viewportWidth, int viewportHeight, float uiScale) { + validateViewport(viewportWidth, viewportHeight); + + float buttonWidth = Math.max(150f * uiScale, viewportWidth * 0.3f); + float buttonHeight = Math.max(50f * uiScale, viewportHeight * 0.08f); + float x = (viewportWidth - buttonWidth) / 2f; + return new GameOverButtons( + new Rect(x, viewportHeight / 2f - 80f * uiScale, buttonWidth, buttonHeight), + new Rect(x, viewportHeight / 2f - 150f * uiScale, buttonWidth, buttonHeight)); + } + + public static PauseButtons pauseButtons(int viewportWidth, int viewportHeight, float uiScale) { + validateViewport(viewportWidth, viewportHeight); + + float width = 300f * uiScale; + float height = 60f * uiScale; + float spacing = 20f * uiScale; + float startY = viewportHeight / 2f + spacing / 2f; + float x = (viewportWidth - width) / 2f; + return new PauseButtons( + new Rect(x, startY, width, height), + new Rect(x, startY - height - spacing, width, height)); + } + + public int viewportWidth() { + return viewportWidth; + } + + public int viewportHeight() { + return viewportHeight; + } + + public float uiScale() { + return uiScale; + } + + public float buttonPadding() { + return buttonPadding; + } + + public float buttonWidth() { + return buttonWidth; + } + + public float minButtonWidth() { + return minButtonWidth; + } + + public float buttonHeight() { + return buttonHeight; + } + + public float rowAdvance() { + return rowAdvance; + } + + public float departmentButtonsY() { + return departmentButtonsY; + } + + public float visibleAreaHeight() { + return visibleAreaHeight; + } + + public float minScrollOffset() { + return minScrollOffset; + } + + public float maxScrollOffset() { + return maxScrollOffset; + } + + public float touchPadding() { + return touchPadding; + } + + public Rect scissorBounds() { + return scissorBounds; + } + + public Rect attackDepartmentButton() { + return attackDepartmentButton; + } + + public Rect healthDepartmentButton() { + return healthDepartmentButton; + } + + public Rect abilitiesDepartmentButton() { + return abilitiesDepartmentButton; + } + + public Rect attackButton(int index) { + return buttonAt(attackButtons, index); + } + + public Rect healthButton(int index) { + return buttonAt(healthButtons, index); + } + + public Rect abilityButton(int index) { + return buttonAt(abilityButtons, index); + } + + public Rect scrollUpButton() { + return scrollUpButton; + } + + public Rect scrollDownButton() { + return scrollDownButton; + } + + public Rect topBar() { + return topBar; + } + + public Rect waveBar() { + return waveBar; + } + + public Rect statStrip() { + return statStrip; + } + + public Rect menuButton() { + return menuButton; + } + + public Rect shopSheet() { + return shopSheet; + } + + public Rect shopHandle() { + return shopHandle; + } + + public Rect abilityDock() { + return abilityDock; + } + + public Rect shopToggleButton() { + return shopToggleButton; + } + + public Rect dockLabel() { + return dockLabel; + } + + public Rect dockAbilityButton(int index) { + return buttonAt(dockAbilityButtons, index); + } + + public List contentButtons() { + return contentButtons; + } + + private static Rect buttonAt(Rect[] buttons, int index) { + if (index < 0 || index >= buttons.length) return null; + return buttons[index]; + } + + private static void validateCalculateInputs( + int viewportWidth, int viewportHeight, Panel panel, SafeAreaInsets safeArea) { + if (viewportWidth <= 0 || viewportHeight <= 0) { + throw new IllegalArgumentException("Viewport must be positive"); + } + if (panel == null) { + throw new IllegalArgumentException("Panel is required"); + } + if (safeArea == null) { + throw new IllegalArgumentException("Safe area is required"); + } + if (safeArea.left() + safeArea.right() >= viewportWidth + || safeArea.top() + safeArea.bottom() >= viewportHeight) { + throw new IllegalArgumentException("Safe area must leave positive viewport space"); + } + } + + private static LayoutMetrics calculateMetrics( + int viewportWidth, + int viewportHeight, + float uiScale, + float requestedScrollOffset, + Panel panel, + int abilityCount, + Chrome chrome) { + float visualScale = visualScale(viewportWidth, viewportHeight); + float padding = buttonPadding(visualScale); + float buttonHeight = buttonHeight(visualScale); + float minButtonWidth = minButtonWidth(visualScale); + int columnCount = shopColumnCount(viewportWidth, visualScale, padding); + float buttonWidth = + buttonWidth(viewportWidth, visualScale, padding, minButtonWidth, columnCount); + float buttonStartX = buttonStartX(viewportWidth, padding, buttonWidth, columnCount); + float rowAdvance = buttonHeight + padding; + + float departmentPadding = departmentPadding(visualScale); + float departmentWidth = departmentWidth(viewportWidth, visualScale, departmentPadding); + float departmentStartX = departmentStartX(visualScale); + + int rowCount = rowCount(panel, abilityCount, columnCount); + float contentHeight = contentHeight(rowCount, buttonHeight, padding); + float departmentButtonsY = departmentButtonsY(chrome, visualScale); + float departmentHeight = departmentHeight(visualScale); + float cardContentTop = departmentButtonsY - CARD_GAP * visualScale; + float contentBottom = chrome.shopSheet.y(); + float visibleContentHeight = Math.max(0f, cardContentTop - contentBottom); + float maxScrollOffset = Math.max(0f, contentHeight - visibleContentHeight); + float scrollOffset = clamp(requestedScrollOffset, 0f, maxScrollOffset); + float touchPadding = touchPadding(buttonHeight, departmentHeight); + + return new LayoutMetrics( + padding, + buttonWidth, + minButtonWidth, + buttonHeight, + rowAdvance, + columnCount, + buttonStartX, + departmentPadding, + departmentWidth, + departmentStartX, + departmentButtonsY, + departmentHeight, + cardContentTop, + contentBottom, + maxScrollOffset, + scrollOffset, + touchPadding); + } + + private static float visualScale(int viewportWidth, int viewportHeight) { + float widthScale = viewportWidth / REFERENCE_WIDTH; + float heightScale = viewportHeight / REFERENCE_HEIGHT; + return clamp(Math.min(widthScale, heightScale), 0.72f, 1.35f); + } + + private static float buttonPadding(float visualScale) { + return CARD_GAP * visualScale; + } + + private static float buttonHeight(float visualScale) { + return CARD_HEIGHT * visualScale; + } + + private static float minButtonWidth(float visualScale) { + return Math.max(MIN_TAPPABLE_TARGET, 84f * visualScale); + } + + private static float buttonWidth( + int viewportWidth, + float visualScale, + float padding, + float minButtonWidth, + int columnCount) { + float availableWidth = viewportWidth - SHOP_PADDING_X * 2f * visualScale; + float gridGapWidth = padding * (columnCount - 1); + return Math.max( + minButtonWidth, + (availableWidth - gridGapWidth) / columnCount); + } + + private static int shopColumnCount(int viewportWidth, float visualScale, float padding) { + float availableWidth = viewportWidth - SHOP_PADDING_X * 2f * visualScale; + float maxCardWidth = SHOP_MAX_CARD_WIDTH * visualScale; + int columns = (int) Math.ceil((availableWidth + padding) / (maxCardWidth + padding)); + return (int) clamp(columns, SHOP_MIN_COLUMN_COUNT, SHOP_MAX_COLUMN_COUNT); + } + + private static float buttonStartX( + int viewportWidth, float padding, float buttonWidth, int columnCount) { + float contentWidth = buttonWidth * columnCount + padding * (columnCount - 1); + return Math.max(0f, (viewportWidth - contentWidth) / 2f); + } + + private static float departmentPadding(float visualScale) { + return 6f * visualScale; + } + + private static float departmentWidth( + int viewportWidth, float visualScale, float departmentPadding) { + float availableDepartmentWidth = + (viewportWidth - SHOP_PADDING_X * 2f * visualScale - departmentPadding * 2f) + / 3f; + return Math.max(MIN_TAPPABLE_TARGET, availableDepartmentWidth); + } + + private static float departmentStartX(float visualScale) { + return SHOP_PADDING_X * visualScale; + } + + private static float departmentButtonsY(Chrome chrome, float visualScale) { + return chrome.shopSheet.top() - 54f * visualScale; + } + + private static float departmentHeight(float visualScale) { + return TAB_HEIGHT * visualScale; + } + + private static float touchPadding(float buttonHeight, float departmentHeight) { + float shortestVisualTarget = Math.min(buttonHeight, departmentHeight); + return Math.max(0f, (MIN_TAPPABLE_TARGET - shortestVisualTarget) / 2f); + } + + private static DepartmentButtons createDepartmentButtons( + int originX, + int originY, + int safeWidth, + float departmentButtonsY, + LayoutMetrics metrics) { + Rect attackDepartment = + new Rect( + originX + metrics.departmentStartX, + originY + departmentButtonsY, + metrics.departmentWidth, + metrics.departmentHeight); + Rect healthDepartment = + new Rect( + originX + + metrics.departmentStartX + + metrics.departmentWidth + + metrics.departmentPadding, + originY + departmentButtonsY, + metrics.departmentWidth, + metrics.departmentHeight); + float abilitiesDepartmentX = + Math.min( + metrics.departmentStartX + + (metrics.departmentWidth + metrics.departmentPadding) * 2f, + safeWidth - metrics.departmentWidth); + Rect abilitiesDepartment = + new Rect( + originX + abilitiesDepartmentX, + originY + departmentButtonsY, + metrics.departmentWidth, + metrics.departmentHeight); + return new DepartmentButtons(attackDepartment, healthDepartment, abilitiesDepartment); + } + + private static PanelButtons createPanelButtons( + int originX, + int originY, + int safeWidth, + Panel panel, + int abilityCount, + LayoutMetrics metrics) { + Rect[] attackButtons = new Rect[SHOP_CATEGORY_BUTTON_COUNT]; + Rect[] healthButtons = new Rect[SHOP_CATEGORY_BUTTON_COUNT]; + Rect[] abilityButtons = new Rect[SHOP_CATEGORY_BUTTON_COUNT]; + + if (panel == Panel.ATTACK) { + fillButtonGrid( + attackButtons, originX, originY, safeWidth, metrics, metrics.cardContentTop); + } else if (panel == Panel.HEALTH) { + fillButtonGrid( + healthButtons, originX, originY, safeWidth, metrics, metrics.cardContentTop); + } else { + fillButtonGrid( + abilityButtons, originX, originY, safeWidth, metrics, metrics.cardContentTop); + } + + List contentButtons = + collectContentButtons(attackButtons, healthButtons, abilityButtons); + return new PanelButtons(attackButtons, healthButtons, abilityButtons, contentButtons); + } + + private static ScrollButtons createScrollButtons( + int originX, int originY, int safeWidth, LayoutMetrics metrics) { + Rect scrollUp = null; + Rect scrollDown = null; + if (metrics.maxScrollOffset > 0f) { + float scrollSize = MIN_TAPPABLE_TARGET; + float scrollX = originX + safeWidth - metrics.padding - scrollSize; + scrollUp = + new Rect( + scrollX, + originY + metrics.departmentButtonsY - scrollSize, + scrollSize, + scrollSize); + scrollDown = new Rect(scrollX, metrics.contentBottom, scrollSize, scrollSize); + } + return new ScrollButtons(scrollUp, scrollDown); + } + + private static Chrome createChrome( + SafeAreaInsets safeArea, int safeWidth, int safeHeight, float uiScale) { + float visualScale = visualScale(safeWidth, safeHeight); + float margin = MARGIN * visualScale; + float topMargin = TOP_MARGIN * visualScale; + float topbarHeight = TOPBAR_HEIGHT * visualScale; + float topbarX = safeArea.left() + margin; + float topbarY = safeArea.bottom() + safeHeight - topMargin - topbarHeight; + float topbarWidth = Math.max(MIN_TAPPABLE_TARGET, safeWidth - margin * 2f); + Rect topBar = new Rect(topbarX, topbarY, topbarWidth, topbarHeight); + + float wavebarHeight = Math.max(4f, WAVEBAR_HEIGHT * visualScale); + Rect waveBar = + new Rect( + topbarX, + topbarY - 5f * visualScale - wavebarHeight, + topbarWidth, + wavebarHeight); + + float menuSize = MENU_SIZE * visualScale; + float statY = waveBar.y() - 9f * visualScale - STAT_STRIP_HEIGHT * visualScale; + Rect menuButton = + new Rect( + safeArea.left() + safeWidth - MENU_RIGHT * visualScale - menuSize, + statY + STAT_STRIP_HEIGHT * visualScale - menuSize, + menuSize, + menuSize); + Rect statStrip = + new Rect( + topbarX, + statY, + Math.max(MIN_TAPPABLE_TARGET, menuButton.x() - topbarX - 8f * visualScale), + STAT_STRIP_HEIGHT * visualScale); + + float dockHeight = DOCK_HEIGHT * visualScale; + float dockY = safeArea.bottom() + margin; + Rect abilityDock = new Rect(topbarX, dockY, topbarWidth, dockHeight); + float dockPadding = 8f * visualScale; + float dockButton = DOCK_BUTTON * visualScale; + Rect shopToggle = + new Rect( + abilityDock.x() + dockPadding, + abilityDock.y() + (abilityDock.height() - dockButton) / 2f, + dockButton, + dockButton); + Rect[] dockAbilities = new Rect[DOCK_ABILITY_COUNT]; + float abilityX = abilityDock.right() - dockPadding - dockButton; + for (int i = dockAbilities.length - 1; i >= 0; i--) { + dockAbilities[i] = + new Rect( + abilityX, + abilityDock.y() + (abilityDock.height() - dockButton) / 2f, + dockButton, + dockButton); + abilityX -= dockButton + dockPadding; + } + Rect dockLabel = + new Rect( + shopToggle.right() + dockPadding, + abilityDock.y() + dockPadding, + Math.max(0f, abilityX - shopToggle.right()), + abilityDock.height() - dockPadding * 2f); + + float shopHeight = SHOP_HEIGHT * visualScale; + float shopY = Math.max(abilityDock.top() + 8f * visualScale, SHOP_BOTTOM * visualScale); + Rect shopSheet = + new Rect( + safeArea.left(), + safeArea.bottom() + shopY, + safeWidth, + Math.min( + shopHeight, + Math.max(0f, statStrip.y() - safeArea.bottom() - shopY))); + Rect shopHandle = + new Rect( + safeArea.left() + (safeWidth - HANDLE_WIDTH * visualScale) / 2f, + shopSheet.top() - 12f * visualScale, + HANDLE_WIDTH * visualScale, + HANDLE_HEIGHT * visualScale); + return new Chrome( + topBar, + waveBar, + statStrip, + menuButton, + shopSheet, + shopHandle, + abilityDock, + shopToggle, + dockLabel, + dockAbilities); + } + + private static void addAllVisible(List out, Rect[] buttons) { + for (Rect button : buttons) { + if (button != null) out.add(button); + } + } + + private static List collectContentButtons( + Rect[] attackButtons, Rect[] healthButtons, Rect[] abilityButtons) { + List buttons = new ArrayList<>(); + addAllVisible(buttons, attackButtons); + addAllVisible(buttons, healthButtons); + addAllVisible(buttons, abilityButtons); + return Collections.unmodifiableList(buttons); + } + + private static int rowCount(Panel panel, int abilityCount, int columnCount) { + return (int) Math.ceil((float) SHOP_CATEGORY_BUTTON_COUNT / columnCount); + } + + private static float contentHeight(int rowCount, float buttonHeight, float padding) { + if (rowCount <= 0) return 0f; + return rowCount * buttonHeight + (rowCount - 1) * padding; + } + + private static void fillButtonGrid( + Rect[] buttons, + int originX, + int originY, + int safeWidth, + LayoutMetrics metrics, + float contentTop) { + fillButtonGrid( + buttons, + originX, + originY, + safeWidth, + originY + contentTop, + metrics.contentBottom, + metrics.columnCount, + metrics.buttonStartX, + metrics.buttonWidth, + metrics.buttonHeight, + metrics.padding, + metrics.scrollOffset); + } + + private static void fillButtonGrid( + Rect[] buttons, + int originX, + int originY, + int safeWidth, + float contentTop, + float contentBottom, + int columnCount, + float buttonStartX, + float buttonWidth, + float buttonHeight, + float padding, + float scrollOffset) { + for (int i = 0; i < buttons.length; i++) { + int row = i / columnCount; + int col = i % columnCount; + float x = originX + buttonStartX + col * (buttonWidth + padding); + float y = contentTop - (row + 1) * buttonHeight - row * padding + scrollOffset; + Rect candidate = new Rect(x, y, buttonWidth, buttonHeight); + if (candidate.x >= originX + && candidate.top() > contentBottom + && candidate.right() <= originX + safeWidth + && candidate.y < contentTop) { + buttons[i] = candidate; + } + } + } + + private static float clamp(float value, float min, float max) { + return Math.max(min, Math.min(max, value)); + } + + private static void validateViewport(int viewportWidth, int viewportHeight) { + if (viewportWidth <= 0 || viewportHeight <= 0) { + throw new IllegalArgumentException("Viewport must be positive"); + } + } + + private static final class LayoutMetrics { + private final float padding; + private final float buttonWidth; + private final float minButtonWidth; + private final float buttonHeight; + private final float rowAdvance; + private final int columnCount; + private final float buttonStartX; + private final float departmentPadding; + private final float departmentWidth; + private final float departmentStartX; + private final float departmentButtonsY; + private final float departmentHeight; + private final float cardContentTop; + private final float contentBottom; + private final float maxScrollOffset; + private final float scrollOffset; + private final float touchPadding; + + private LayoutMetrics( + float padding, + float buttonWidth, + float minButtonWidth, + float buttonHeight, + float rowAdvance, + int columnCount, + float buttonStartX, + float departmentPadding, + float departmentWidth, + float departmentStartX, + float departmentButtonsY, + float departmentHeight, + float cardContentTop, + float contentBottom, + float maxScrollOffset, + float scrollOffset, + float touchPadding) { + this.padding = padding; + this.buttonWidth = buttonWidth; + this.minButtonWidth = minButtonWidth; + this.buttonHeight = buttonHeight; + this.rowAdvance = rowAdvance; + this.columnCount = columnCount; + this.buttonStartX = buttonStartX; + this.departmentPadding = departmentPadding; + this.departmentWidth = departmentWidth; + this.departmentStartX = departmentStartX; + this.departmentButtonsY = departmentButtonsY; + this.departmentHeight = departmentHeight; + this.cardContentTop = cardContentTop; + this.contentBottom = contentBottom; + this.maxScrollOffset = maxScrollOffset; + this.scrollOffset = scrollOffset; + this.touchPadding = touchPadding; + } + } + + private static final class DepartmentButtons { + private final Rect attackDepartment; + private final Rect healthDepartment; + private final Rect abilitiesDepartment; + + private DepartmentButtons( + Rect attackDepartment, Rect healthDepartment, Rect abilitiesDepartment) { + this.attackDepartment = attackDepartment; + this.healthDepartment = healthDepartment; + this.abilitiesDepartment = abilitiesDepartment; + } + } + + private static final class PanelButtons { + private final Rect[] attackButtons; + private final Rect[] healthButtons; + private final Rect[] abilityButtons; + private final List contentButtons; + + private PanelButtons( + Rect[] attackButtons, + Rect[] healthButtons, + Rect[] abilityButtons, + List contentButtons) { + this.attackButtons = attackButtons; + this.healthButtons = healthButtons; + this.abilityButtons = abilityButtons; + this.contentButtons = contentButtons; + } + } + + private static final class ScrollButtons { + private final Rect scrollUp; + private final Rect scrollDown; + + private ScrollButtons(Rect scrollUp, Rect scrollDown) { + this.scrollUp = scrollUp; + this.scrollDown = scrollDown; + } + } + + private static final class Chrome { + private final Rect topBar; + private final Rect waveBar; + private final Rect statStrip; + private final Rect menuButton; + private final Rect shopSheet; + private final Rect shopHandle; + private final Rect abilityDock; + private final Rect shopToggleButton; + private final Rect dockLabel; + private final Rect[] dockAbilityButtons; + + private Chrome( + Rect topBar, + Rect waveBar, + Rect statStrip, + Rect menuButton, + Rect shopSheet, + Rect shopHandle, + Rect abilityDock, + Rect shopToggleButton, + Rect dockLabel, + Rect[] dockAbilityButtons) { + this.topBar = topBar; + this.waveBar = waveBar; + this.statStrip = statStrip; + this.menuButton = menuButton; + this.shopSheet = shopSheet; + this.shopHandle = shopHandle; + this.abilityDock = abilityDock; + this.shopToggleButton = shopToggleButton; + this.dockLabel = dockLabel; + this.dockAbilityButtons = dockAbilityButtons; + } + } + + public static final class GameOverButtons { + private final Rect restartButton; + private final Rect menuButton; + + private GameOverButtons(Rect restartButton, Rect menuButton) { + this.restartButton = restartButton; + this.menuButton = menuButton; + } + + public Rect restartButton() { + return restartButton; + } + + public Rect menuButton() { + return menuButton; + } + } + + public static final class PauseButtons { + private final Rect resumeButton; + private final Rect exitButton; + + private PauseButtons(Rect resumeButton, Rect exitButton) { + this.resumeButton = resumeButton; + this.exitButton = exitButton; + } + + public Rect resumeButton() { + return resumeButton; + } + + public Rect exitButton() { + return exitButton; + } + } + + public static final class Rect { + private final float x; + private final float y; + private final float width; + private final float height; + + Rect(float x, float y, float width, float height) { + this.x = x; + this.y = y; + this.width = width; + this.height = height; + } + + public float x() { + return x; + } + + public float y() { + return y; + } + + public float width() { + return width; + } + + public float height() { + return height; + } + + public float right() { + return x + width; + } + + public float top() { + return y + height; + } + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/layout/GameScreenScaleMetrics.java b/core/src/main/java/ru/project/tower/screens/gamescreen/layout/GameScreenScaleMetrics.java new file mode 100644 index 0000000..f4563d3 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/layout/GameScreenScaleMetrics.java @@ -0,0 +1,87 @@ +package ru.project.tower.screens.gamescreen.layout; + +public final class GameScreenScaleMetrics { + private static final float BASE_WIDTH = 1280f; + private static final float BASE_HEIGHT = 720f; + private static final float STABLE_GAME_SCALE = 1f; + + private final float uiScale; + private final float gameScale; + private final float adaptedSquareSize; + private final float adaptedCircleRadius; + private final float adaptedBulletRadius; + private final int adaptedFontSize; + + private GameScreenScaleMetrics( + float uiScale, + float gameScale, + float adaptedSquareSize, + float adaptedCircleRadius, + float adaptedBulletRadius, + int adaptedFontSize) { + this.uiScale = uiScale; + this.gameScale = gameScale; + this.adaptedSquareSize = adaptedSquareSize; + this.adaptedCircleRadius = adaptedCircleRadius; + this.adaptedBulletRadius = adaptedBulletRadius; + this.adaptedFontSize = adaptedFontSize; + } + + public static GameScreenScaleMetrics calculate( + float viewportWidth, + float viewportHeight, + float squareSize, + float circleRadius, + float bulletRadius) { + float scaleX = viewportWidth / BASE_WIDTH; + float scaleY = viewportHeight / BASE_HEIGHT; + boolean isPortrait = viewportHeight > viewportWidth; + + float uiScale; + int adaptedFontSize; + if (isPortrait) { + uiScale = clamp(scaleY * 1.2f, 1.0f, 2.5f); + adaptedFontSize = (int) Math.min(38, Math.max(22, 26 * uiScale)); + } else { + float viewportScale = Math.min(scaleX, scaleY); + uiScale = clamp(viewportScale * 1.2f, 0.8f, 1.8f); + adaptedFontSize = (int) Math.min(32, Math.max(18, 24 * uiScale)); + } + + return new GameScreenScaleMetrics( + uiScale, + STABLE_GAME_SCALE, + squareSize, + circleRadius, + bulletRadius, + adaptedFontSize); + } + + private static float clamp(float value, float min, float max) { + return Math.min(Math.max(min, value), max); + } + + public float uiScale() { + return uiScale; + } + + public float gameScale() { + return gameScale; + } + + public float adaptedSquareSize() { + return adaptedSquareSize; + } + + public float adaptedCircleRadius() { + return adaptedCircleRadius; + } + + public float adaptedBulletRadius() { + return adaptedBulletRadius; + } + + public int adaptedFontSize() { + return adaptedFontSize; + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/layout/SafeAreaInsets.java b/core/src/main/java/ru/project/tower/screens/gamescreen/layout/SafeAreaInsets.java new file mode 100644 index 0000000..9ba15c3 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/layout/SafeAreaInsets.java @@ -0,0 +1,48 @@ +package ru.project.tower.screens.gamescreen.layout; + + +public final class SafeAreaInsets { + private static final SafeAreaInsets ZERO = new SafeAreaInsets(0, 0, 0, 0); + + private final int left; + private final int top; + private final int right; + private final int bottom; + + private SafeAreaInsets(int left, int top, int right, int bottom) { + this.left = left; + this.top = top; + this.right = right; + this.bottom = bottom; + } + + public static SafeAreaInsets zero() { + return ZERO; + } + + public static SafeAreaInsets of(int left, int top, int right, int bottom) { + if (left < 0 || top < 0 || right < 0 || bottom < 0) { + throw new IllegalArgumentException("Safe area insets must be non-negative"); + } + if (left == 0 && top == 0 && right == 0 && bottom == 0) { + return ZERO; + } + return new SafeAreaInsets(left, top, right, bottom); + } + + public int left() { + return left; + } + + public int top() { + return top; + } + + public int right() { + return right; + } + + public int bottom() { + return bottom; + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/layout/SafeAreaInsetsProvider.java b/core/src/main/java/ru/project/tower/screens/gamescreen/layout/SafeAreaInsetsProvider.java new file mode 100644 index 0000000..f543b44 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/layout/SafeAreaInsetsProvider.java @@ -0,0 +1,12 @@ +package ru.project.tower.screens.gamescreen.layout; + + +public interface SafeAreaInsetsProvider { + SafeAreaInsetsProvider NONE = () -> SafeAreaInsets.zero(); + + SafeAreaInsets current(); + + static SafeAreaInsetsProvider none() { + return NONE; + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/model/GameScreenGameOverOverlayModel.java b/core/src/main/java/ru/project/tower/screens/gamescreen/model/GameScreenGameOverOverlayModel.java new file mode 100644 index 0000000..3aacdb8 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/model/GameScreenGameOverOverlayModel.java @@ -0,0 +1,269 @@ +package ru.project.tower.screens.gamescreen.model; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.math.Rectangle; + +public final class GameScreenGameOverOverlayModel { + private ShapeRenderer shapeRenderer; + private SpriteBatch batch; + private BitmapFont font; + private BitmapFont titleFont; + private Rectangle restartButton; + private Rectangle menuButton; + private Color neonRed; + private Color neonBlue; + private Color neonCyan; + private Color neonPink; + private Color neonWhite; + private Color hoverColor; + private Color pressedColor; + private Color scratchColor; + private Color scratchColor2; + private float uiScale; + private float time; + private float pulseSpeed; + private float viewportWidth; + private float viewportHeight; + private int currentWave; + private int money; + private boolean restartHovered; + private boolean restartPressed; + private boolean menuHovered; + private boolean menuPressed; + + public GameScreenGameOverOverlayModel populate( + RenderContext renderContext, ViewState viewState) { + this.shapeRenderer = renderContext.shapeRenderer; + this.batch = renderContext.batch; + this.font = renderContext.font; + this.titleFont = renderContext.titleFont; + this.neonRed = renderContext.neonRed; + this.neonBlue = renderContext.neonBlue; + this.neonCyan = renderContext.neonCyan; + this.neonPink = renderContext.neonPink; + this.neonWhite = renderContext.neonWhite; + this.hoverColor = renderContext.hoverColor; + this.pressedColor = renderContext.pressedColor; + this.scratchColor = renderContext.scratchColor; + this.scratchColor2 = renderContext.scratchColor2; + this.restartButton = viewState.restartButton; + this.menuButton = viewState.menuButton; + this.uiScale = viewState.uiScale; + this.time = viewState.time; + this.pulseSpeed = viewState.pulseSpeed; + this.viewportWidth = viewState.viewportWidth; + this.viewportHeight = viewState.viewportHeight; + this.currentWave = viewState.currentWave; + this.money = viewState.money; + this.restartHovered = viewState.restartHovered; + this.restartPressed = viewState.restartPressed; + this.menuHovered = viewState.menuHovered; + this.menuPressed = viewState.menuPressed; + return this; + } + + public static final class RenderContext { + private final ShapeRenderer shapeRenderer; + private final SpriteBatch batch; + private final BitmapFont font; + private final BitmapFont titleFont; + private final Color neonRed; + private final Color neonBlue; + private final Color neonCyan; + private final Color neonPink; + private final Color neonWhite; + private final Color hoverColor; + private final Color pressedColor; + private final Color scratchColor; + private final Color scratchColor2; + + public RenderContext( + ShapeRenderer shapeRenderer, + SpriteBatch batch, + BitmapFont font, + BitmapFont titleFont, + Color neonRed, + Color neonBlue, + Color neonCyan, + Color neonPink, + Color neonWhite, + Color hoverColor, + Color pressedColor, + Color scratchColor, + Color scratchColor2) { + this.shapeRenderer = shapeRenderer; + this.batch = batch; + this.font = font; + this.titleFont = titleFont; + this.neonRed = neonRed; + this.neonBlue = neonBlue; + this.neonCyan = neonCyan; + this.neonPink = neonPink; + this.neonWhite = neonWhite; + this.hoverColor = hoverColor; + this.pressedColor = pressedColor; + this.scratchColor = scratchColor; + this.scratchColor2 = scratchColor2; + } + } + + public static final class ViewState { + private final Rectangle restartButton; + private final Rectangle menuButton; + private final float uiScale; + private final float time; + private final float pulseSpeed; + private final float viewportWidth; + private final float viewportHeight; + private final int currentWave; + private final int money; + private final boolean restartHovered; + private final boolean restartPressed; + private final boolean menuHovered; + private final boolean menuPressed; + + public ViewState( + Rectangle restartButton, + Rectangle menuButton, + float uiScale, + float time, + float pulseSpeed, + float viewportWidth, + float viewportHeight, + int currentWave, + int money, + boolean restartHovered, + boolean restartPressed, + boolean menuHovered, + boolean menuPressed) { + this.restartButton = restartButton; + this.menuButton = menuButton; + this.uiScale = uiScale; + this.time = time; + this.pulseSpeed = pulseSpeed; + this.viewportWidth = viewportWidth; + this.viewportHeight = viewportHeight; + this.currentWave = currentWave; + this.money = money; + this.restartHovered = restartHovered; + this.restartPressed = restartPressed; + this.menuHovered = menuHovered; + this.menuPressed = menuPressed; + } + } + + public ShapeRenderer getShapeRenderer() { + return shapeRenderer; + } + + public SpriteBatch getBatch() { + return batch; + } + + public BitmapFont getFont() { + return font; + } + + public BitmapFont getTitleFont() { + return titleFont; + } + + public Rectangle getRestartButton() { + return restartButton; + } + + public Rectangle getMenuButton() { + return menuButton; + } + + public Color getNeonRed() { + return neonRed; + } + + public Color getNeonBlue() { + return neonBlue; + } + + public Color getNeonCyan() { + return neonCyan; + } + + public Color getNeonPink() { + return neonPink; + } + + public Color getNeonWhite() { + return neonWhite; + } + + public Color getHoverColor() { + return hoverColor; + } + + public Color getPressedColor() { + return pressedColor; + } + + public Color getScratchColor() { + return scratchColor; + } + + public float getUiScale() { + return uiScale; + } + + public float getTime() { + return time; + } + + public float getPulseSpeed() { + return pulseSpeed; + } + + public float getViewportWidth() { + return viewportWidth; + } + + public float getViewportHeight() { + return viewportHeight; + } + + public int getCurrentWave() { + return currentWave; + } + + public int getMoney() { + return money; + } + + public boolean isRestartHovered() { + return restartHovered; + } + + public boolean isRestartPressed() { + return restartPressed; + } + + public boolean isMenuHovered() { + return menuHovered; + } + + public boolean isMenuPressed() { + return menuPressed; + } + + public Color withAlpha(Color base, float alpha) { + scratchColor.set(base); + scratchColor.a = alpha; + return scratchColor; + } + + public Color withAlpha2(Color base, float alpha) { + scratchColor2.set(base); + scratchColor2.a = alpha; + return scratchColor2; + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/model/GameScreenPauseOverlayModel.java b/core/src/main/java/ru/project/tower/screens/gamescreen/model/GameScreenPauseOverlayModel.java new file mode 100644 index 0000000..5e20638 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/model/GameScreenPauseOverlayModel.java @@ -0,0 +1,128 @@ +package ru.project.tower.screens.gamescreen.model; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.math.Rectangle; + +public final class GameScreenPauseOverlayModel { + public static final CharSequence RESUME_LABEL = "ПРОДОЛЖИТЬ"; + public static final CharSequence EXIT_LABEL = "В МЕНЮ"; + public static final Color OVERLAY_TINT = new Color(0f, 0f, 0f, 0.7f); + + private int viewportWidth; + private int viewportHeight; + private float uiScale; + private Rectangle resumeButton; + private Rectangle exitButton; + private Color resumeColor; + private Color exitColor; + private Color hoverColor; + private Color pressedColor; + private boolean resumeHovered; + private boolean resumePressed; + private boolean exitHovered; + private boolean exitPressed; + + public GameScreenPauseOverlayModel() {} + + public GameScreenPauseOverlayModel populate( + Color resumeColor, + Color exitColor, + Color hoverColor, + Color pressedColor, + boolean resumeHovered, + boolean resumePressed, + boolean exitHovered, + boolean exitPressed) { + this.resumeColor = resumeColor; + this.exitColor = exitColor; + this.hoverColor = hoverColor; + this.pressedColor = pressedColor; + this.resumeHovered = resumeHovered; + this.resumePressed = resumePressed; + this.exitHovered = exitHovered; + this.exitPressed = exitPressed; + return this; + } + + public GameScreenPauseOverlayModel positionButtons( + Rectangle resumeButton, + Rectangle exitButton, + int viewportWidth, + int viewportHeight, + float uiScale) { + validateViewport(viewportWidth, viewportHeight); + this.viewportWidth = viewportWidth; + this.viewportHeight = viewportHeight; + this.uiScale = uiScale; + + float width = 300f * uiScale; + float height = 60f * uiScale; + float spacing = 20f * uiScale; + float startY = viewportHeight / 2f + spacing / 2f; + float x = (viewportWidth - width) / 2f; + + resumeButton.set(x, startY, width, height); + exitButton.set(x, startY - height - spacing, width, height); + this.resumeButton = resumeButton; + this.exitButton = exitButton; + return this; + } + + public int getViewportWidth() { + return viewportWidth; + } + + public int getViewportHeight() { + return viewportHeight; + } + + public float getUiScale() { + return uiScale; + } + + public Rectangle getResumeButton() { + return resumeButton; + } + + public Rectangle getExitButton() { + return exitButton; + } + + public Color getResumeColor() { + return resumeColor; + } + + public Color getExitColor() { + return exitColor; + } + + public Color getHoverColor() { + return hoverColor; + } + + public Color getPressedColor() { + return pressedColor; + } + + public boolean isResumeHovered() { + return resumeHovered; + } + + public boolean isResumePressed() { + return resumePressed; + } + + public boolean isExitHovered() { + return exitHovered; + } + + public boolean isExitPressed() { + return exitPressed; + } + + private static void validateViewport(int viewportWidth, int viewportHeight) { + if (viewportWidth <= 0 || viewportHeight <= 0) { + throw new IllegalArgumentException("Viewport must be positive"); + } + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/render/GameScreenGameOverOverlayRenderer.java b/core/src/main/java/ru/project/tower/screens/gamescreen/render/GameScreenGameOverOverlayRenderer.java new file mode 100644 index 0000000..27ec534 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/render/GameScreenGameOverOverlayRenderer.java @@ -0,0 +1,208 @@ +package ru.project.tower.screens.gamescreen.render; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.GL20; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.GlyphLayout; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType; +import com.badlogic.gdx.math.Rectangle; +import ru.project.tower.screens.gamescreen.model.GameScreenGameOverOverlayModel; +import ru.project.tower.screens.gamescreen.ui.NeonButtonRenderer; +import ru.project.tower.screens.gamescreen.ui.NeonTextRenderer; + +public final class GameScreenGameOverOverlayRenderer { + private static final String TITLE = "ИГРА ОКОНЧЕНА"; + private static final String WAVE_LABEL = "Волна: "; + private static final String MONEY_LABEL = "Накоплено: ₽"; + private static final String COINS_LABEL = "Получено монет: "; + private static final String RESTART_LABEL = "ПЕРЕЗАПУСК"; + private static final String MENU_LABEL = "В МЕНЮ"; + + private final NeonTextRenderer textRenderer = new NeonTextRenderer(); + private final GlyphLayout titleLayout = new GlyphLayout(); + private final GlyphLayout waveLayout = new GlyphLayout(); + private final GlyphLayout moneyLayout = new GlyphLayout(); + private final GlyphLayout coinsLayout = new GlyphLayout(); + private final StringBuilder waveText = new StringBuilder(16); + private final StringBuilder moneyText = new StringBuilder(24); + private final StringBuilder coinsText = new StringBuilder(24); + + public void render(GameScreenGameOverOverlayModel model) { + float glow = 0.5f + 0.5f * (float) Math.sin(model.getTime() * model.getPulseSpeed()); + + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE); + renderButtons(model, glow); + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); + + model.getBatch().begin(); + float titleY = drawTitle(model, glow); + drawStats(model, glow, titleY); + drawButtonTexts(model); + model.getFont().getData().setScale(1.0f); + model.getBatch().end(); + } + + private void renderButtons(GameScreenGameOverOverlayModel model, float glow) { + ShapeRenderer shapeRenderer = model.getShapeRenderer(); + + shapeRenderer.begin(ShapeType.Filled); + renderButtonFill( + model, + model.getRestartButton(), + model.getNeonRed(), + model.isRestartHovered(), + model.isRestartPressed(), + glow); + renderButtonFill( + model, + model.getMenuButton(), + model.getNeonBlue(), + model.isMenuHovered(), + model.isMenuPressed(), + glow); + shapeRenderer.end(); + + shapeRenderer.begin(ShapeType.Line); + renderButtonBorder( + model, + model.getRestartButton(), + model.getNeonRed(), + model.isRestartHovered(), + model.isRestartPressed(), + glow); + renderButtonBorder( + model, + model.getMenuButton(), + model.getNeonBlue(), + model.isMenuHovered(), + model.isMenuPressed(), + glow); + shapeRenderer.end(); + } + + private void renderButtonFill( + GameScreenGameOverOverlayModel model, + Rectangle button, + Color defaultColor, + boolean hovered, + boolean pressed, + float glow) { + Color borderColor = + NeonButtonRenderer.borderColor( + defaultColor, + model.getHoverColor(), + model.getPressedColor(), + hovered, + pressed); + NeonButtonRenderer.drawFill( + model.getShapeRenderer(), + button, + borderColor, + model.getScratchColor(), + model.getUiScale(), + glow); + } + + private void renderButtonBorder( + GameScreenGameOverOverlayModel model, + Rectangle button, + Color defaultColor, + boolean hovered, + boolean pressed, + float glow) { + Color borderColor = + NeonButtonRenderer.borderColor( + defaultColor, + model.getHoverColor(), + model.getPressedColor(), + hovered, + pressed); + NeonButtonRenderer.drawBorder( + model.getShapeRenderer(), + button, + borderColor, + model.getScratchColor(), + glow, + hovered); + } + + private float drawTitle(GameScreenGameOverOverlayModel model, float glow) { + BitmapFont font = model.getTitleFont(); + SpriteBatch batch = model.getBatch(); + float maxTextWidth = model.getViewportWidth() * 0.8f; + float baseScale = model.getUiScale(); + + font.getData().setScale(baseScale); + titleLayout.setText(font, TITLE); + + if (titleLayout.width > maxTextWidth) { + baseScale *= maxTextWidth / titleLayout.width; + font.getData().setScale(baseScale); + titleLayout.setText(font, TITLE); + } + + float titleX = (model.getViewportWidth() - titleLayout.width) / 2f; + float titleY = model.getViewportHeight() * 0.7f; + + Color titleColor = model.withAlpha(model.getNeonRed(), 0.7f + 0.3f * glow); + font.setColor(model.withAlpha2(titleColor, 0.3f * glow)); + font.draw(batch, TITLE, titleX + 2f, titleY + 2f); + font.draw(batch, TITLE, titleX - 2f, titleY - 2f); + + font.setColor(titleColor); + font.draw(batch, TITLE, titleX, titleY); + font.getData().setScale(1.0f); + + return titleY; + } + + private void drawStats(GameScreenGameOverOverlayModel model, float glow, float titleY) { + BitmapFont font = model.getFont(); + SpriteBatch batch = model.getBatch(); + + font.setColor(model.withAlpha(model.getNeonCyan(), 0.7f + 0.3f * glow)); + + waveText.setLength(0); + waveText.append(WAVE_LABEL).append(model.getCurrentWave()); + moneyText.setLength(0); + moneyText.append(MONEY_LABEL).append(model.getMoney()); + coinsText.setLength(0); + coinsText.append(COINS_LABEL).append(model.getCurrentWave()); + + waveLayout.setText(font, waveText); + moneyLayout.setText(font, moneyText); + coinsLayout.setText(font, coinsText); + + float statsY = titleY - titleLayout.height - 20f * model.getUiScale(); + font.draw(batch, waveText, (model.getViewportWidth() - waveLayout.width) / 2f, statsY); + + statsY -= 30f * model.getUiScale(); + font.draw(batch, moneyText, (model.getViewportWidth() - moneyLayout.width) / 2f, statsY); + + font.setColor(model.getNeonPink()); + statsY -= 30f * model.getUiScale(); + font.draw(batch, coinsText, (model.getViewportWidth() - coinsLayout.width) / 2f, statsY); + } + + private void drawButtonTexts(GameScreenGameOverOverlayModel model) { + model.getFont().setColor(model.getNeonWhite()); + textRenderer.drawNeonButtonText( + model.getFont(), + model.getBatch(), + RESTART_LABEL, + "", + model.getRestartButton(), + model.getNeonPink()); + model.getFont().setColor(model.getNeonWhite()); + textRenderer.drawNeonButtonText( + model.getFont(), + model.getBatch(), + MENU_LABEL, + "", + model.getMenuButton(), + model.getNeonPink()); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/render/GameScreenMenuButtonRenderer.java b/core/src/main/java/ru/project/tower/screens/gamescreen/render/GameScreenMenuButtonRenderer.java new file mode 100644 index 0000000..e071c2b --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/render/GameScreenMenuButtonRenderer.java @@ -0,0 +1,130 @@ +package ru.project.tower.screens.gamescreen.render; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.math.Rectangle; +import ru.project.tower.screens.gamescreen.visual.GameScreenVisualTokens; + +public final class GameScreenMenuButtonRenderer { + private static final float MENU_VISUAL_OFFSET_Y = 0f; + private static final float MENU_STRIPE_RENDER_GAP = 11f; + private static final String MENU_CHROME_HEX = GameScreenVisualTokens.ColorTokens.CYAN; + + private final Rectangle visualButton = new Rectangle(); + + public void render( + ShapeRenderer shapeRenderer, + Rectangle button, + Color defaultColor, + Color hoverColor, + Color pressedColor, + Color stripeColor, + Color scratchColor, + float uiScale, + float glow, + boolean hovered, + boolean pressed) { + if (button == null) return; + float visualScale = button.width / GameScreenVisualTokens.Menu.SIZE; + visualButton.set( + button.x, + button.y + MENU_VISUAL_OFFSET_Y * visualScale, + button.width, + button.height); + + shapeRenderer.begin(ShapeRenderer.ShapeType.Filled); + shapeRenderer.setColor( + GameScreenVisualTokens.Menu.FILL_RED, + GameScreenVisualTokens.Menu.FILL_GREEN, + GameScreenVisualTokens.Menu.FILL_BLUE, + pressed + ? GameScreenVisualTokens.Menu.PRESSED_FILL_ALPHA + : GameScreenVisualTokens.Menu.FILL_ALPHA); + shapeRenderer.rect(visualButton.x, visualButton.y, visualButton.width, visualButton.height); + if (hovered) { + setCyanChrome(shapeRenderer, 0.08f + glow * 0.08f); + shapeRenderer.rect( + visualButton.x + 3f * visualScale, + visualButton.y + 3f * visualScale, + visualButton.width - 6f * visualScale, + visualButton.height - 6f * visualScale); + } + shapeRenderer.end(); + + shapeRenderer.begin(ShapeRenderer.ShapeType.Line); + shapeRenderer.setColor(1f, 1f, 1f, hovered ? 0.28f : 0.16f); + shapeRenderer.rect(visualButton.x, visualButton.y, visualButton.width, visualButton.height); + setCyanChrome(shapeRenderer, hovered ? 0.32f : 0.18f); + shapeRenderer.rect( + visualButton.x + visualScale, + visualButton.y + visualScale, + visualButton.width - 2f * visualScale, + visualButton.height - 2f * visualScale); + shapeRenderer.end(); + + shapeRenderer.begin(ShapeRenderer.ShapeType.Filled); + drawHamburgerGlow(shapeRenderer, visualButton, visualScale); + drawHamburgerStripes(shapeRenderer, visualButton, stripeColor, visualScale); + shapeRenderer.end(); + } + + private void drawHamburgerGlow(ShapeRenderer shapeRenderer, Rectangle button, float uiScale) { + float stripeWidth = GameScreenVisualTokens.Menu.STRIPE_WIDTH * uiScale; + float stripeHeight = GameScreenVisualTokens.Menu.STRIPE_HEIGHT * uiScale; + float spacing = MENU_STRIPE_RENDER_GAP * uiScale; + float x = button.x + (button.width - stripeWidth) / 2f; + float y = button.y + (button.height - stripeHeight * 3f - spacing * 2f) / 2f; + + drawHamburgerSoftGlow(shapeRenderer, x, y, stripeWidth, stripeHeight, spacing, uiScale); + shapeRenderer.setColor(1f, 1f, 1f, 0.18f); + for (int i = 0; i < 3; i++) { + shapeRenderer.rect(x, y + i * (stripeHeight + spacing), stripeWidth, stripeHeight); + } + } + + private void drawHamburgerSoftGlow( + ShapeRenderer shapeRenderer, + float x, + float y, + float stripeWidth, + float stripeHeight, + float spacing, + float uiScale) { + for (int i = 0; i < 3; i++) { + float stripeY = y + i * (stripeHeight + spacing); + shapeRenderer.setColor(1f, 1f, 1f, 0.045f); + shapeRenderer.rect( + x - 4f * uiScale, + stripeY - 3f * uiScale, + stripeWidth + 8f * uiScale, + stripeHeight + 6f * uiScale); + shapeRenderer.setColor(1f, 1f, 1f, 0.022f); + shapeRenderer.rect( + x - 8f * uiScale, + stripeY - 6f * uiScale, + stripeWidth + 16f * uiScale, + stripeHeight + 12f * uiScale); + } + } + + private void drawHamburgerStripes( + ShapeRenderer shapeRenderer, Rectangle button, Color stripeColor, float uiScale) { + float stripeWidth = GameScreenVisualTokens.Menu.STRIPE_WIDTH * uiScale; + float stripeHeight = GameScreenVisualTokens.Menu.STRIPE_HEIGHT * uiScale; + float spacing = MENU_STRIPE_RENDER_GAP * uiScale; + float x = button.x + (button.width - stripeWidth) / 2f; + float y = button.y + (button.height - stripeHeight * 3f - spacing * 2f) / 2f; + + shapeRenderer.setColor(stripeColor); + for (int i = 0; i < 3; i++) { + shapeRenderer.rect(x, y + i * (stripeHeight + spacing), stripeWidth, stripeHeight); + } + } + + private void setCyanChrome(ShapeRenderer shapeRenderer, float alpha) { + if (!"#22d9ff".equals(MENU_CHROME_HEX)) { + throw new IllegalStateException("Menu chrome must stay on the cyan token"); + } + shapeRenderer.setColor(34f / 255f, 217f / 255f, 1f, alpha); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/render/GameScreenPauseOverlayRenderer.java b/core/src/main/java/ru/project/tower/screens/gamescreen/render/GameScreenPauseOverlayRenderer.java new file mode 100644 index 0000000..9f6f1c5 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/render/GameScreenPauseOverlayRenderer.java @@ -0,0 +1,243 @@ +package ru.project.tower.screens.gamescreen.render; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.GL20; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.glutils.ShaderProgram; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType; +import com.badlogic.gdx.math.Rectangle; +import com.badlogic.gdx.utils.Disposable; +import ru.project.tower.screens.gamescreen.model.GameScreenPauseOverlayModel; +import ru.project.tower.screens.gamescreen.ui.NeonButtonRenderer; +import ru.project.tower.screens.gamescreen.ui.NeonTextRenderer; + +public final class GameScreenPauseOverlayRenderer implements Disposable { + private static final float BLUR_RADIUS = 2.0f; + private static final float BUTTON_GLOW = 1.0f; + private static final CharSequence EMPTY_SECONDARY_TEXT = ""; + + static { + ShaderProgram.pedantic = false; + } + + private static final String VERTEX_SHADER = + "attribute vec4 " + + ShaderProgram.POSITION_ATTRIBUTE + + ";\n" + + "attribute vec4 " + + ShaderProgram.COLOR_ATTRIBUTE + + ";\n" + + "attribute vec2 " + + ShaderProgram.TEXCOORD_ATTRIBUTE + + "0;\n" + + "uniform mat4 u_projTrans;\n" + + "varying vec4 v_color;\n" + + "varying vec2 v_texCoords;\n" + + "\n" + + "void main() {\n" + + " v_color = " + + ShaderProgram.COLOR_ATTRIBUTE + + ";\n" + + " v_texCoords = " + + ShaderProgram.TEXCOORD_ATTRIBUTE + + "0;\n" + + " gl_Position = u_projTrans * " + + ShaderProgram.POSITION_ATTRIBUTE + + ";\n" + + "}\n"; + + private static final String FRAGMENT_SHADER = + "#ifdef GL_ES\n" + + "precision mediump float;\n" + + "#endif\n" + + "varying vec4 v_color;\n" + + "varying vec2 v_texCoords;\n" + + "uniform sampler2D u_texture;\n" + + "uniform float resolution;\n" + + "uniform float radius;\n" + + "uniform vec2 dir;\n" + + "\n" + + "void main() {\n" + + " vec4 sum = vec4(0.0);\n" + + " vec2 tc = v_texCoords;\n" + + " float blur = radius/resolution;\n" + + " float hstep = dir.x;\n" + + " float vstep = dir.y;\n" + + " sum += texture2D(u_texture, vec2(tc.x - 4.0*blur*hstep, tc.y -" + + " 4.0*blur*vstep)) * 0.0162162162;\n" + + " sum += texture2D(u_texture, vec2(tc.x - 3.0*blur*hstep, tc.y -" + + " 3.0*blur*vstep)) * 0.0540540541;\n" + + " sum += texture2D(u_texture, vec2(tc.x - 2.0*blur*hstep, tc.y -" + + " 2.0*blur*vstep)) * 0.1216216216;\n" + + " sum += texture2D(u_texture, vec2(tc.x - 1.0*blur*hstep, tc.y -" + + " 1.0*blur*vstep)) * 0.1945945946;\n" + + " sum += texture2D(u_texture, vec2(tc.x, tc.y)) * 0.2270270270;\n" + + " sum += texture2D(u_texture, vec2(tc.x + 1.0*blur*hstep, tc.y +" + + " 1.0*blur*vstep)) * 0.1945945946;\n" + + " sum += texture2D(u_texture, vec2(tc.x + 2.0*blur*hstep, tc.y +" + + " 2.0*blur*vstep)) * 0.1216216216;\n" + + " sum += texture2D(u_texture, vec2(tc.x + 3.0*blur*hstep, tc.y +" + + " 3.0*blur*vstep)) * 0.0540540541;\n" + + " sum += texture2D(u_texture, vec2(tc.x + 4.0*blur*hstep, tc.y +" + + " 4.0*blur*vstep)) * 0.0162162162;\n" + + " gl_FragColor = v_color * vec4(sum.rgb, 1.0);\n" + + "}"; + + private final SpriteBatch batch; + private final ShapeRenderer shapeRenderer; + private final BitmapFont font; + private final PauseScreenshotSource pauseScreenshotOwner; + private final Color scratchColor; + private final NeonTextRenderer textRenderer = new NeonTextRenderer(); + + private ShaderProgram blurShader; + + public GameScreenPauseOverlayRenderer( + SpriteBatch batch, + ShapeRenderer shapeRenderer, + BitmapFont font, + PauseScreenshotSource pauseScreenshotOwner, + Color scratchColor) { + this.batch = batch; + this.shapeRenderer = shapeRenderer; + this.font = font; + this.pauseScreenshotOwner = pauseScreenshotOwner; + this.scratchColor = scratchColor; + } + + public void initShader() { + blurShader = new ShaderProgram(VERTEX_SHADER, FRAGMENT_SHADER); + if (!blurShader.isCompiled()) { + Gdx.app.error( + "GameScreenPauseOverlayRenderer", + "Shader compilation failed: " + blurShader.getLog()); + } + } + + public void render(GameScreenPauseOverlayModel model) { + if (model == null) return; + + renderBlurredScreenshot(model); + renderOverlayAndButtonFills(model); + renderButtonBorders(model); + renderButtonText(model); + } + + @Override + public void dispose() { + if (blurShader != null) { + blurShader.dispose(); + blurShader = null; + } + } + + private void renderBlurredScreenshot(GameScreenPauseOverlayModel model) { + if (!pauseScreenshotOwner.hasScreenshot()) return; + + if (blurShader == null) { + initShader(); + } + + batch.setShader(blurShader); + blurShader.bind(); + blurShader.setUniformf("resolution", model.getViewportWidth()); + blurShader.setUniformf("radius", BLUR_RADIUS); + blurShader.setUniformf("dir", 1f, 0f); + + batch.begin(); + pauseScreenshotOwner.draw(batch, 0, 0, model.getViewportWidth(), model.getViewportHeight()); + batch.end(); + batch.setShader(null); + } + + private void renderOverlayAndButtonFills(GameScreenPauseOverlayModel model) { + Gdx.gl.glEnable(GL20.GL_BLEND); + shapeRenderer.begin(ShapeType.Filled); + shapeRenderer.setColor(GameScreenPauseOverlayModel.OVERLAY_TINT); + shapeRenderer.rect(0, 0, model.getViewportWidth(), model.getViewportHeight()); + drawButtonFill( + model, + model.getResumeButton(), + model.getResumeColor(), + model.isResumeHovered(), + model.isResumePressed()); + drawButtonFill( + model, + model.getExitButton(), + model.getExitColor(), + model.isExitHovered(), + model.isExitPressed()); + shapeRenderer.end(); + } + + private void renderButtonBorders(GameScreenPauseOverlayModel model) { + shapeRenderer.begin(ShapeType.Line); + drawButtonBorder( + model, + model.getResumeButton(), + model.getResumeColor(), + model.isResumeHovered(), + model.isResumePressed()); + drawButtonBorder( + model, + model.getExitButton(), + model.getExitColor(), + model.isExitHovered(), + model.isExitPressed()); + shapeRenderer.end(); + } + + private void renderButtonText(GameScreenPauseOverlayModel model) { + batch.begin(); + textRenderer.drawNeonButtonText( + font, + batch, + GameScreenPauseOverlayModel.RESUME_LABEL, + EMPTY_SECONDARY_TEXT, + model.getResumeButton(), + Color.WHITE); + textRenderer.drawNeonButtonText( + font, + batch, + GameScreenPauseOverlayModel.EXIT_LABEL, + EMPTY_SECONDARY_TEXT, + model.getExitButton(), + Color.WHITE); + batch.end(); + } + + private void drawButtonFill( + GameScreenPauseOverlayModel model, + Rectangle button, + Color color, + boolean hovered, + boolean pressed) { + Color borderColor = + NeonButtonRenderer.borderColor( + color, model.getHoverColor(), model.getPressedColor(), hovered, pressed); + NeonButtonRenderer.drawFill( + shapeRenderer, button, borderColor, scratchColor, model.getUiScale(), BUTTON_GLOW); + } + + private void drawButtonBorder( + GameScreenPauseOverlayModel model, + Rectangle button, + Color color, + boolean hovered, + boolean pressed) { + Color borderColor = + NeonButtonRenderer.borderColor( + color, model.getHoverColor(), model.getPressedColor(), hovered, pressed); + NeonButtonRenderer.drawBorder( + shapeRenderer, button, borderColor, scratchColor, BUTTON_GLOW, hovered); + } + + public interface PauseScreenshotSource { + boolean hasScreenshot(); + + void draw(SpriteBatch batch, float x, float y, float width, float height); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/render/GameScreenRenderModelAssembler.java b/core/src/main/java/ru/project/tower/screens/gamescreen/render/GameScreenRenderModelAssembler.java new file mode 100644 index 0000000..fab3843 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/render/GameScreenRenderModelAssembler.java @@ -0,0 +1,295 @@ +package ru.project.tower.screens.gamescreen.render; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.math.Rectangle; +import com.badlogic.gdx.utils.Array; +import ru.project.tower.abilities.AbilitySystem; +import ru.project.tower.entities.bullets.BulletData; +import ru.project.tower.entities.circles.BaseCircleData; +import ru.project.tower.entities.circles.BonusBallData; +import ru.project.tower.entities.particles.FloatingText; +import ru.project.tower.entities.particles.NeonParticle; +import ru.project.tower.screens.gamescreen.assets.GameScreenFontAssets.HudFonts; +import ru.project.tower.screens.gamescreen.assets.GameScreenMaterialAssets; +import ru.project.tower.screens.gamescreen.gameobjects.GameScreenGameObjectModel; +import ru.project.tower.screens.gamescreen.hud.GameScreenHudModel; +import ru.project.tower.screens.gamescreen.model.GameScreenGameOverOverlayModel; +import ru.project.tower.screens.gamescreen.model.GameScreenPauseOverlayModel; +import ru.project.tower.screens.gamescreen.vfx.GameScreenVfxModel; + +public final class GameScreenRenderModelAssembler { + private final GameScreenGameObjectModel gameObjectModel; + private final GameScreenHudModel hudModel; + private final GameScreenVfxModel vfxModel; + private final GameScreenPauseOverlayModel pauseOverlayModel; + private final GameScreenGameOverOverlayModel gameOverOverlayModel; + + public GameScreenRenderModelAssembler( + GameScreenGameObjectModel gameObjectModel, + GameScreenHudModel hudModel, + GameScreenVfxModel vfxModel, + GameScreenPauseOverlayModel pauseOverlayModel, + GameScreenGameOverOverlayModel gameOverOverlayModel) { + this.gameObjectModel = gameObjectModel; + this.hudModel = hudModel; + this.vfxModel = vfxModel; + this.pauseOverlayModel = pauseOverlayModel; + this.gameOverOverlayModel = gameOverOverlayModel; + } + + public GameScreenGameObjectModel gameObjectModel() { + return gameObjectModel; + } + + public GameScreenHudModel hudModel() { + return hudModel; + } + + public GameScreenVfxModel vfxModel() { + return vfxModel; + } + + public GameScreenPauseOverlayModel pauseOverlayModel( + Rectangle resumeButton, + Rectangle exitButton, + int viewportWidth, + int viewportHeight, + float uiScale, + Color neonGreen, + Color neonRed, + Color neonCyan, + Color neonPink, + boolean pointerOverResume, + boolean pointerPressedResume, + boolean pointerOverExit, + boolean pointerPressedExit) { + pauseOverlayModel.positionButtons( + resumeButton, exitButton, viewportWidth, viewportHeight, uiScale); + return pauseOverlayModel.populate( + neonGreen, + neonRed, + neonCyan, + neonPink, + pointerOverResume, + pointerPressedResume, + pointerOverExit, + pointerPressedExit); + } + + public void populateLiveModels( + ShapeRenderer shapeRenderer, + SpriteBatch batch, + BitmapFont font, + BitmapFont floatingTextFont, + HudFonts hudFonts, + GameScreenMaterialAssets materialAssets, + Rectangle square, + Array circles, + Array bonusBalls, + Array bullets, + Array bulletParticles, + Array floatingTexts, + AbilitySystem abilitySystem, + long nowMs, + float time, + float pulseSpeed, + float uiScale, + float gameScale, + float adaptedSquareSize, + float shootingRange, + boolean reviewVisuals, + int currentStrongCircleHealth, + int currentBasicCircleHealth, + int viewportWidth, + int viewportHeight, + boolean waveActive, + long enemiesPerWave, + long enemiesSpawnedThisWave, + int currentWave, + long waveStartTime, + long timeBetweenWaves, + int squareHealth, + int maxSquareHealth, + int money, + int runCurrencyEarned, + int effectiveDamage, + float effectiveSpeed, + int healthRegenRate, + float effectiveCooldownMs, + float effectiveCritChance, + float effectiveCritMultiplier, + float waveIndicatorHeight, + float waveIndicatorPadding, + Color shadowWeaverColor, + Color glacialWardenColor, + Color basicCircleColor, + Color fastCircleColor, + Color splitterCircleColor, + Color spawnerCircleColor, + Color neonRed, + Color neonBlue, + Color neonCyan, + Color neonGreen, + Color neonYellow, + Color neonPink, + Color neonPurple, + Color priceTextColor, + Color bossProjectileColor, + Color scratchColor, + Color scratchColor3, + Color scratchColor4, + Color scratchColor5) { + gameObjectModel.populateRenderContext( + shapeRenderer, + batch, + materialAssets, + scratchColor, + scratchColor3, + scratchColor4, + scratchColor5); + gameObjectModel.populateView( + square, + circles, + bonusBalls, + bullets, + abilitySystem, + nowMs, + time, + pulseSpeed, + uiScale, + gameScale, + shootingRange, + reviewVisuals, + currentStrongCircleHealth, + currentBasicCircleHealth, + shadowWeaverColor, + glacialWardenColor, + basicCircleColor, + fastCircleColor, + splitterCircleColor, + spawnerCircleColor, + neonBlue, + neonCyan, + neonGreen, + neonYellow, + bossProjectileColor); + + hudModel.populateRenderContext( + shapeRenderer, + batch, + font, + hudFonts, + materialAssets, + neonRed, + neonCyan, + neonBlue, + neonPink, + priceTextColor, + scratchColor); + hudModel.populateWaveAndStats( + viewportWidth, + viewportHeight, + uiScale, + time, + pulseSpeed, + waveIndicatorHeight, + waveIndicatorPadding, + waveActive, + enemiesPerWave, + enemiesSpawnedThisWave, + currentWave, + nowMs, + waveStartTime, + timeBetweenWaves, + squareHealth, + maxSquareHealth, + money, + runCurrencyEarned); + hudModel.populateCombatStats( + effectiveDamage, + effectiveSpeed, + healthRegenRate, + effectiveCooldownMs, + effectiveCritChance, + effectiveCritMultiplier); + + vfxModel.populateRenderContext( + shapeRenderer, batch, font, materialAssets, floatingTextFont, scratchColor); + vfxModel.populateView( + bulletParticles, + floatingTexts, + abilitySystem, + square, + adaptedSquareSize, + viewportWidth, + viewportHeight, + time, + nowMs, + pulseSpeed, + uiScale, + neonBlue, + neonCyan, + neonGreen, + neonYellow, + neonRed, + neonPurple); + } + + public GameScreenGameOverOverlayModel gameOverOverlayModel( + ShapeRenderer shapeRenderer, + SpriteBatch batch, + BitmapFont font, + BitmapFont gameOverTitleFont, + Rectangle restartButton, + Rectangle menuButton, + float uiScale, + float time, + float pulseSpeed, + int viewportWidth, + int viewportHeight, + int currentWave, + int money, + boolean pointerOverRestart, + boolean pointerPressedRestart, + boolean pointerOverMenu, + boolean pointerPressedMenu, + Color neonRed, + Color neonBlue, + Color neonCyan, + Color neonPink, + Color scratchColor, + Color scratchColor2) { + return gameOverOverlayModel.populate( + new GameScreenGameOverOverlayModel.RenderContext( + shapeRenderer, + batch, + font, + gameOverTitleFont, + neonRed, + neonBlue, + neonCyan, + neonPink, + Color.WHITE, + neonCyan, + neonPink, + scratchColor, + scratchColor2), + new GameScreenGameOverOverlayModel.ViewState( + restartButton, + menuButton, + uiScale, + time, + pulseSpeed, + viewportWidth, + viewportHeight, + currentWave, + money, + pointerOverRestart, + pointerPressedRestart, + pointerOverMenu, + pointerPressedMenu)); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/render/GameScreenUpgradePickOverlay.java b/core/src/main/java/ru/project/tower/screens/gamescreen/render/GameScreenUpgradePickOverlay.java new file mode 100644 index 0000000..e154ea5 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/render/GameScreenUpgradePickOverlay.java @@ -0,0 +1,261 @@ +package ru.project.tower.screens.gamescreen.render; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.GlyphLayout; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.math.Rectangle; +import ru.project.tower.screens.gamescreen.layout.GameScreenLayout; +import ru.project.tower.upgrades.UpgradeSystem; + +public final class GameScreenUpgradePickOverlay { + private static final float REVEAL_CARD_DURATION_SECONDS = 0.28f; + private static final float REVEAL_STAGGER_SECONDS = 0.08f; + private static final float REROLL_DURATION_SECONDS = 0.34f; + private static final float REVEAL_OFFSET_Y = 96f; + private static final float REROLL_OFFSET_Y = 112f; + + private final GameScreenUpgradePickOverlayRenderer renderer; + private final Rectangle[] buttons = {new Rectangle(), new Rectangle(), new Rectangle()}; + private final Rectangle rerollButton = new Rectangle(); + private final GlyphLayout titleLayout = new GlyphLayout(); + private final GlyphLayout optionLayout = new GlyphLayout(); + private final GlyphLayout rerollLayout = new GlyphLayout(); + private AnimationPhase animationPhase = AnimationPhase.IDLE; + private float animationElapsed = 0f; + private UpgradeSystem.OfferCardView[] outgoingOffer = new UpgradeSystem.OfferCardView[0]; + private UpgradeSystem.OfferCardView[] incomingOffer = new UpgradeSystem.OfferCardView[0]; + + public GameScreenUpgradePickOverlay(Color cyan, Color green, Color purple) { + renderer = new GameScreenUpgradePickOverlayRenderer(cyan, green, purple); + } + + public void rebuild(int viewportWidth, int viewportHeight, float uiScale) { + GameScreenLayout.Rect[] cards = + GameScreenLayout.upgradePickCards(viewportWidth, viewportHeight, uiScale); + for (int i = 0; i < buttons.length; i++) { + setRect(buttons[i], cards[i]); + } + setRect( + rerollButton, + GameScreenLayout.upgradePickRerollButton(viewportWidth, viewportHeight, uiScale)); + } + + public void render( + ShapeRenderer shapeRenderer, + SpriteBatch batch, + BitmapFont upgradePickFont, + UpgradeSystem.OfferCardView[] pickOptions, + int rerollsRemaining, + int rerollCost, + float uiScale, + String title) { + CardVisual[] cardVisuals = cardVisuals(pickOptions); + renderer.render( + shapeRenderer, + batch, + upgradePickFont, + titleLayout, + optionLayout, + rerollLayout, + cardVisuals, + rerollButton, + rerollsRemaining, + rerollCost, + uiScale, + title); + } + + public void startReveal(UpgradeSystem.OfferCardView[] offer) { + incomingOffer = copyOffer(offer); + outgoingOffer = new UpgradeSystem.OfferCardView[0]; + animationPhase = AnimationPhase.REVEAL; + animationElapsed = 0f; + } + + public void startReroll( + UpgradeSystem.OfferCardView[] previousOffer, UpgradeSystem.OfferCardView[] nextOffer) { + outgoingOffer = copyOffer(previousOffer); + incomingOffer = copyOffer(nextOffer); + animationPhase = AnimationPhase.REROLL; + animationElapsed = 0f; + } + + public void update(float delta) { + if (animationPhase == AnimationPhase.IDLE) return; + animationElapsed += Math.max(0f, delta); + if (animationElapsed >= animationDuration()) { + animationPhase = AnimationPhase.IDLE; + animationElapsed = animationDuration(); + outgoingOffer = new UpgradeSystem.OfferCardView[0]; + } + } + + public boolean canAcceptSelection() { + return animationPhase == AnimationPhase.IDLE; + } + + CardVisual[] cardVisuals(UpgradeSystem.OfferCardView[] currentOffer) { + UpgradeSystem.OfferCardView[] current = offerForVisuals(currentOffer); + if (animationPhase == AnimationPhase.REROLL && outgoingOffer.length > 0) { + CardVisual[] visuals = new CardVisual[outgoingOffer.length + incomingOffer.length]; + float progress = easedProgress(animationElapsed / REROLL_DURATION_SECONDS); + for (int i = 0; i < outgoingOffer.length; i++) { + visuals[i] = + visualFor( + outgoingOffer[i], + i, + -REROLL_OFFSET_Y * progress, + 1f - progress * 0.55f, + 1f - progress * 0.04f, + true); + } + for (int i = 0; i < incomingOffer.length; i++) { + visuals[outgoingOffer.length + i] = + visualFor( + incomingOffer[i], + i, + REROLL_OFFSET_Y * (1f - progress), + progress, + 0.96f + progress * 0.04f, + false); + } + return visuals; + } + + CardVisual[] visuals = new CardVisual[current.length]; + for (int i = 0; i < current.length; i++) { + float progress = 1f; + if (animationPhase == AnimationPhase.REVEAL) { + progress = + easedProgress( + (animationElapsed - i * REVEAL_STAGGER_SECONDS) + / REVEAL_CARD_DURATION_SECONDS); + } + visuals[i] = + visualFor( + current[i], + i, + REVEAL_OFFSET_Y * (1f - progress), + progress, + 0.96f + progress * 0.04f, + false); + } + return visuals; + } + + public Rectangle[] buttons() { + return buttons; + } + + public Rectangle rerollButton() { + return rerollButton; + } + + private CardVisual visualFor( + UpgradeSystem.OfferCardView view, + int slot, + float offsetY, + float alpha, + float scale, + boolean exiting) { + Rectangle base = buttons[Math.min(slot, buttons.length - 1)]; + return new CardVisual(view, slot, base, offsetY, clamp(alpha), scale, exiting); + } + + private UpgradeSystem.OfferCardView[] offerForVisuals( + UpgradeSystem.OfferCardView[] currentOffer) { + if (animationPhase != AnimationPhase.IDLE && incomingOffer.length > 0) return incomingOffer; + return currentOffer == null ? new UpgradeSystem.OfferCardView[0] : currentOffer; + } + + private float animationDuration() { + if (animationPhase == AnimationPhase.REVEAL) { + return REVEAL_CARD_DURATION_SECONDS + REVEAL_STAGGER_SECONDS * (buttons.length - 1); + } + if (animationPhase == AnimationPhase.REROLL) return REROLL_DURATION_SECONDS; + return 0f; + } + + private static UpgradeSystem.OfferCardView[] copyOffer(UpgradeSystem.OfferCardView[] offer) { + if (offer == null || offer.length == 0) return new UpgradeSystem.OfferCardView[0]; + UpgradeSystem.OfferCardView[] copy = new UpgradeSystem.OfferCardView[offer.length]; + System.arraycopy(offer, 0, copy, 0, offer.length); + return copy; + } + + private static float easedProgress(float progress) { + float clamped = clamp(progress); + return clamped * clamped * (3f - 2f * clamped); + } + + private static float clamp(float value) { + return Math.max(0f, Math.min(1f, value)); + } + + private static void setRect(Rectangle rect, GameScreenLayout.Rect layoutRect) { + rect.set(layoutRect.x(), layoutRect.y(), layoutRect.width(), layoutRect.height()); + } + + private enum AnimationPhase { + IDLE, + REVEAL, + REROLL + } + + static final class CardVisual { + private final UpgradeSystem.OfferCardView view; + private final int slot; + private final Rectangle baseBounds; + private final float offsetY; + private final float alpha; + private final float scale; + private final boolean exiting; + + private CardVisual( + UpgradeSystem.OfferCardView view, + int slot, + Rectangle baseBounds, + float offsetY, + float alpha, + float scale, + boolean exiting) { + this.view = view; + this.slot = slot; + this.baseBounds = baseBounds; + this.offsetY = offsetY; + this.alpha = alpha; + this.scale = scale; + this.exiting = exiting; + } + + UpgradeSystem.OfferCardView view() { + return view; + } + + int slot() { + return slot; + } + + Rectangle baseBounds() { + return baseBounds; + } + + float offsetY() { + return offsetY; + } + + float alpha() { + return alpha; + } + + float scale() { + return scale; + } + + boolean exiting() { + return exiting; + } + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/render/GameScreenUpgradePickOverlayRenderer.java b/core/src/main/java/ru/project/tower/screens/gamescreen/render/GameScreenUpgradePickOverlayRenderer.java new file mode 100644 index 0000000..285987d --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/render/GameScreenUpgradePickOverlayRenderer.java @@ -0,0 +1,365 @@ +package ru.project.tower.screens.gamescreen.render; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.GL20; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.GlyphLayout; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType; +import com.badlogic.gdx.math.Rectangle; +import com.badlogic.gdx.utils.Align; +import ru.project.tower.support.ScreenPalette; +import ru.project.tower.upgrades.UpgradeSystem; + +public final class GameScreenUpgradePickOverlayRenderer { + private static final float UPGRADE_PICK_FONT_SCALE = 1.5f; + + private final Color cyan; + private final Color green; + private final Color purple; + private final Rectangle visualBoundsScratch = new Rectangle(); + + public GameScreenUpgradePickOverlayRenderer(Color cyan, Color green, Color purple) { + this.cyan = cyan; + this.green = green; + this.purple = purple; + } + + static String displayRarity(String rarity) { + if ("uncommon".equals(rarity)) return "редк."; + if ("rare".equals(rarity)) return "особ."; + return "обычн."; + } + + static String displayFamily(String family) { + if ("attack".equals(family) || "damage".equals(family)) return "атака"; + if ("speed".equals(family)) return "темп"; + if ("control".equals(family)) return "замедл."; + if ("shield".equals(family) || "defense".equals(family)) return "защита"; + if ("utility".equals(family)) return "польза"; + if ("ability".equals(family)) return "умения"; + if ("risk".equals(family)) return "риск"; + return "сборка"; + } + + static String displayTags(String[] tags) { + if (tags == null || tags.length == 0) return "-"; + StringBuilder line = new StringBuilder(displayTag(tags[0])); + for (int i = 1; i < tags.length; i++) { + line.append('/').append(displayTag(tags[i])); + } + return line.toString(); + } + + static String rerollText(int rerollCost, int rerollsRemaining) { + return rerollsRemaining > 0 + ? "Переброс " + rerollCost + " (" + rerollsRemaining + ")" + : "Переброс недоступен"; + } + + private static String displayTag(String tag) { + if ("pure".equals(tag)) return "точно"; + if ("damage".equals(tag)) return "урон"; + if ("crit".equals(tag)) return "крит"; + if ("burst".equals(tag)) return "всплеск"; + if ("boss".equals(tag)) return "босс"; + if ("single-target".equals(tag)) return "цель"; + if ("execute".equals(tag)) return "казнь"; + if ("aoe".equals(tag)) return "радиус"; + if ("control".equals(tag)) return "замедл."; + if ("slow".equals(tag)) return "замедл."; + if ("pull".equals(tag)) return "притяж."; + if ("shield".equals(tag)) return "щит"; + if ("regen".equals(tag)) return "восст."; + if ("sustain".equals(tag)) return "стойкость"; + if ("armor".equals(tag)) return "броня"; + if ("health".equals(tag)) return "здоровье"; + if ("tempo".equals(tag)) return "темп"; + if ("cadence".equals(tag)) return "частота"; + if ("money".equals(tag)) return "монеты"; + if ("shop".equals(tag)) return "магазин"; + if ("reroll".equals(tag)) return "переброс"; + if ("choice".equals(tag)) return "выбор"; + if ("bonus".equals(tag)) return "бонус"; + if ("pickup".equals(tag)) return "сбор"; + if ("turret".equals(tag)) return "турель"; + if ("explosion".equals(tag)) return "взрыв"; + if ("cooldown".equals(tag)) return "пауза"; + if ("risk".equals(tag)) return "риск"; + if ("pierce".equals(tag)) return "пробой"; + if ("swarm".equals(tag)) return "толпа"; + if ("ability".equals(tag)) return "умение"; + return "эффект"; + } + + public void render( + ShapeRenderer shapeRenderer, + SpriteBatch batch, + BitmapFont font, + GlyphLayout titleLayout, + GlyphLayout optionLayout, + GlyphLayout rerollLayout, + GameScreenUpgradePickOverlay.CardVisual[] cardVisuals, + Rectangle rerollButton, + int rerollsRemaining, + int rerollCost, + float uiScale, + String title) { + Gdx.gl.glEnable(GL20.GL_BLEND); + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); + renderFilledPanelPass(shapeRenderer, cardVisuals, rerollButton, uiScale); + renderButtonBorderPass(shapeRenderer, cardVisuals, rerollButton, rerollsRemaining); + + batch.begin(); + drawTitle(batch, font, titleLayout, cardVisuals, uiScale, title); + drawOptions(batch, font, optionLayout, cardVisuals, uiScale); + drawRerollButton( + batch, font, rerollLayout, rerollButton, rerollsRemaining, rerollCost, uiScale); + font.getData().setScale(1.0f); + batch.end(); + } + + private void renderFilledPanelPass( + ShapeRenderer shapeRenderer, + GameScreenUpgradePickOverlay.CardVisual[] cardVisuals, + Rectangle rerollButton, + float uiScale) { + shapeRenderer.begin(ShapeType.Filled); + shapeRenderer.setColor(0.01f, 0.014f, 0.023f, 0.72f); + shapeRenderer.rect(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); + + for (GameScreenUpgradePickOverlay.CardVisual visual : cardVisuals) { + Rectangle r = visualBounds(visual); + if (r == null) continue; + Color t = tint(visual.slot()); + float alpha = visual.alpha(); + shapeRenderer.setColor( + ScreenPalette.PANEL_SOLID.r, + ScreenPalette.PANEL_SOLID.g, + ScreenPalette.PANEL_SOLID.b, + 0.92f * alpha); + shapeRenderer.rect(r.x, r.y, r.width, r.height); + shapeRenderer.setColor(1f, 1f, 1f, 0.035f * alpha); + shapeRenderer.rect(r.x, r.y + r.height * 0.54f, r.width, r.height * 0.46f); + shapeRenderer.setColor(t.r, t.g, t.b, 0.34f * alpha); + shapeRenderer.rect(r.x, r.y, Math.max(3f, 3f * uiScale), r.height); + shapeRenderer.setColor(t.r, t.g, t.b, 0.10f * alpha); + shapeRenderer.rect(r.x + 3f * uiScale, r.y, r.width - 3f * uiScale, r.height); + } + if (rerollButton != null) { + shapeRenderer.setColor( + ScreenPalette.PANEL.r, + ScreenPalette.PANEL.g, + ScreenPalette.PANEL.b, + 0.92f); + shapeRenderer.rect( + rerollButton.x, rerollButton.y, rerollButton.width, rerollButton.height); + shapeRenderer.setColor( + ScreenPalette.CYAN.r, + ScreenPalette.CYAN.g, + ScreenPalette.CYAN.b, + 0.08f); + shapeRenderer.rect( + rerollButton.x, rerollButton.y, rerollButton.width, rerollButton.height); + } + shapeRenderer.end(); + } + + private void renderButtonBorderPass( + ShapeRenderer shapeRenderer, + GameScreenUpgradePickOverlay.CardVisual[] cardVisuals, + Rectangle rerollButton, + int rerollsRemaining) { + shapeRenderer.begin(ShapeType.Line); + for (GameScreenUpgradePickOverlay.CardVisual visual : cardVisuals) { + Rectangle r = visualBounds(visual); + if (r == null) continue; + Color t = tint(visual.slot()); + float alpha = visual.exiting() ? visual.alpha() * 0.50f : visual.alpha(); + shapeRenderer.setColor(t.r, t.g, t.b, 0.46f * alpha); + shapeRenderer.rect(r.x, r.y, r.width, r.height); + shapeRenderer.setColor(1f, 1f, 1f, 0.07f * alpha); + shapeRenderer.rect(r.x + 1f, r.y + 1f, r.width - 2f, r.height - 2f); + } + if (rerollButton != null) { + Color t = rerollsRemaining > 0 ? cyan : Color.DARK_GRAY; + shapeRenderer.setColor(t.r, t.g, t.b, rerollsRemaining > 0 ? 0.74f : 0.36f); + shapeRenderer.rect( + rerollButton.x, rerollButton.y, rerollButton.width, rerollButton.height); + } + shapeRenderer.end(); + } + + private void drawTitle( + SpriteBatch batch, + BitmapFont font, + GlyphLayout titleLayout, + GameScreenUpgradePickOverlay.CardVisual[] cardVisuals, + float uiScale, + String title) { + if (cardVisuals.length == 0) return; + font.setColor(ScreenPalette.TEXT.r, ScreenPalette.TEXT.g, ScreenPalette.TEXT.b, 1f); + float titleScale = 0.84f * uiScale; + font.getData().setScale(fontScale(titleScale)); + titleLayout.setText(font, title); + float maxTitleWidth = Gdx.graphics.getWidth() - 16f * uiScale; + if (titleLayout.width > maxTitleWidth) { + titleScale = Math.max(0.78f * uiScale, titleScale * maxTitleWidth / titleLayout.width); + font.getData().setScale(fontScale(titleScale)); + titleLayout.setText(font, title); + } + font.draw( + batch, + title, + (Gdx.graphics.getWidth() - titleLayout.width) / 2f, + Math.min( + Gdx.graphics.getHeight() - 24f * uiScale, + cardVisuals[0].baseBounds().y + + cardVisuals[0].baseBounds().height + + 38f * uiScale)); + font.getData().setScale(fontScale(uiScale)); + } + + private void drawOptions( + SpriteBatch batch, + BitmapFont font, + GlyphLayout optionLayout, + GameScreenUpgradePickOverlay.CardVisual[] cardVisuals, + float uiScale) { + for (GameScreenUpgradePickOverlay.CardVisual visual : cardVisuals) { + Rectangle r = visualBounds(visual); + UpgradeSystem.OfferCardView view = visual.view(); + if (r == null || view == null) continue; + String label = view.kind().label; + drawCenteredLine( + batch, + font, + optionLayout, + label, + 1f, + 1f, + 1f, + visual.alpha(), + r, + r.y + r.height * 0.72f, + 0.96f * uiScale); + drawCenteredLine( + batch, + font, + optionLayout, + view.effectText(), + 0.94f, + 0.88f, + 0.62f, + visual.alpha(), + r, + r.y + r.height * 0.52f, + 0.78f * uiScale); + String metadata = + displayRarity(view.rarity()) + + " | " + + displayFamily(view.family()) + + " " + + view.stacks() + + "/" + + view.maxStacks(); + drawCenteredLine( + batch, + font, + optionLayout, + metadata, + 0.74f, + 0.76f, + 0.84f, + visual.alpha(), + r, + r.y + r.height * 0.34f, + 0.72f * uiScale); + drawCenteredLine( + batch, + font, + optionLayout, + displayTags(view.tags()), + 0.66f, + 0.69f, + 0.78f, + visual.alpha(), + r, + r.y + r.height * 0.20f, + 0.66f * uiScale); + } + font.getData().setScale(fontScale(uiScale)); + } + + private void drawRerollButton( + SpriteBatch batch, + BitmapFont font, + GlyphLayout rerollLayout, + Rectangle rerollButton, + int rerollsRemaining, + int rerollCost, + float uiScale) { + if (rerollButton == null) return; + String text = rerollText(rerollCost, rerollsRemaining); + font.setColor(rerollsRemaining > 0 ? Color.WHITE : Color.LIGHT_GRAY); + font.getData().setScale(fontScale(0.86f * uiScale)); + rerollLayout.setText( + font, text, font.getColor(), rerollButton.width - 18f, Align.center, true); + font.draw( + batch, + rerollLayout, + rerollButton.x + 9f, + rerollButton.y + (rerollButton.height + rerollLayout.height) / 2f); + font.getData().setScale(fontScale(uiScale)); + } + + private void drawCenteredLine( + SpriteBatch batch, + BitmapFont font, + GlyphLayout layout, + String text, + float colorR, + float colorG, + float colorB, + float alpha, + Rectangle bounds, + float baselineY, + float scale) { + font.setColor(colorR, colorG, colorB, alpha); + float adjustedScale = scale; + font.getData().setScale(fontScale(adjustedScale)); + layout.setText(font, text); + float maxWidth = bounds.width - 16f; + if (layout.width > maxWidth) { + adjustedScale = Math.max(scale * 0.62f, adjustedScale * maxWidth / layout.width); + font.getData().setScale(fontScale(adjustedScale)); + layout.setText(font, text); + } + font.draw(batch, text, bounds.x + (bounds.width - layout.width) / 2f, baselineY); + } + + private static float fontScale(float scale) { + return scale / UPGRADE_PICK_FONT_SCALE; + } + + private Color tint(int index) { + if (index == 0) return cyan; + if (index == 1) return green; + return purple; + } + + private Rectangle visualBounds(GameScreenUpgradePickOverlay.CardVisual visual) { + Rectangle base = visual.baseBounds(); + if (base == null) return null; + float scale = visual.scale(); + float width = base.width * scale; + float height = base.height * scale; + return visualBoundsScratch.set( + base.x + (base.width - width) / 2f, + base.y + visual.offsetY() + (base.height - height) / 2f, + width, + height); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/render/PauseScreenshotOwner.java b/core/src/main/java/ru/project/tower/screens/gamescreen/render/PauseScreenshotOwner.java new file mode 100644 index 0000000..0b89b51 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/render/PauseScreenshotOwner.java @@ -0,0 +1,35 @@ +package ru.project.tower.screens.gamescreen.render; + +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.g2d.TextureRegion; +import com.badlogic.gdx.utils.ScreenUtils; + +public final class PauseScreenshotOwner + implements GameScreenPauseOverlayRenderer.PauseScreenshotSource { + private TextureRegion screenshotRegion; + + public void capture(int x, int y, int width, int height) { + disposeAndClear(); + TextureRegion frame = ScreenUtils.getFrameBufferTexture(x, y, width, height); + screenshotRegion = new TextureRegion(frame); + } + + @Override + public boolean hasScreenshot() { + return screenshotRegion != null; + } + + @Override + public void draw(SpriteBatch batch, float x, float y, float width, float height) { + if (screenshotRegion != null) { + batch.draw(screenshotRegion, x, y, width, height); + } + } + + public void disposeAndClear() { + if (screenshotRegion != null && screenshotRegion.getTexture() != null) { + screenshotRegion.getTexture().dispose(); + } + screenshotRegion = null; + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/run/GameScreenRunFrameEvents.java b/core/src/main/java/ru/project/tower/screens/gamescreen/run/GameScreenRunFrameEvents.java new file mode 100644 index 0000000..5213b46 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/run/GameScreenRunFrameEvents.java @@ -0,0 +1,55 @@ +package ru.project.tower.screens.gamescreen.run; + +import java.util.Objects; +import ru.project.tower.run.RunFrameEvents; + +public final class GameScreenRunFrameEvents implements RunFrameEvents { + private final Host host; + + public GameScreenRunFrameEvents(Host host) { + this.host = Objects.requireNonNull(host, "host"); + } + + @Override + public void regeneratePlayer(long nowMs) { + host.regeneratePlayer(nowMs); + } + + @Override + public void autoShootIfReady(long nowMs) { + if (nowMs - host.lastShotTime() > host.effectiveShotCooldown()) { + host.shootAtNearestCircle(nowMs); + } + } + + @Override + public boolean damagePlayerIfVulnerable(int damage, long cooldownMs) { + return host.damagePlayerIfVulnerable(damage, cooldownMs); + } + + @Override + public boolean isPlayerDead() { + return host.playerHealth() <= 0; + } + + @Override + public void gameOver() { + host.gameOver(); + } + + public interface Host { + void regeneratePlayer(long nowMs); + + long lastShotTime(); + + float effectiveShotCooldown(); + + void shootAtNearestCircle(long nowMs); + + boolean damagePlayerIfVulnerable(int damage, long cooldownMs); + + int playerHealth(); + + void gameOver(); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/run/GameScreenRunFrameHostAdapter.java b/core/src/main/java/ru/project/tower/screens/gamescreen/run/GameScreenRunFrameHostAdapter.java new file mode 100644 index 0000000..6465c08 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/run/GameScreenRunFrameHostAdapter.java @@ -0,0 +1,62 @@ +package ru.project.tower.screens.gamescreen.run; + +import java.util.Objects; + +public final class GameScreenRunFrameHostAdapter implements GameScreenRunFrameEvents.Host { + private final Port port; + + public GameScreenRunFrameHostAdapter(Port port) { + this.port = Objects.requireNonNull(port, "port"); + } + + @Override + public void regeneratePlayer(long nowMs) { + port.regeneratePlayer(nowMs); + } + + @Override + public long lastShotTime() { + return port.lastShotTime(); + } + + @Override + public float effectiveShotCooldown() { + return port.effectiveShotCooldown(); + } + + @Override + public void shootAtNearestCircle(long nowMs) { + port.shootAtNearestCircle(nowMs); + } + + @Override + public boolean damagePlayerIfVulnerable(int damage, long cooldownMs) { + return port.damagePlayerIfVulnerable(damage, cooldownMs); + } + + @Override + public int playerHealth() { + return port.playerHealth(); + } + + @Override + public void gameOver() { + port.gameOver(); + } + + public interface Port { + void regeneratePlayer(long nowMs); + + long lastShotTime(); + + float effectiveShotCooldown(); + + void shootAtNearestCircle(long nowMs); + + boolean damagePlayerIfVulnerable(int damage, long cooldownMs); + + int playerHealth(); + + void gameOver(); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/run/GameScreenRunSnapshotHost.java b/core/src/main/java/ru/project/tower/screens/gamescreen/run/GameScreenRunSnapshotHost.java new file mode 100644 index 0000000..eb80d86 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/run/GameScreenRunSnapshotHost.java @@ -0,0 +1,96 @@ +package ru.project.tower.screens.gamescreen.run; + +import com.badlogic.gdx.utils.Array; +import java.util.Objects; +import ru.project.tower.GameState; +import ru.project.tower.abilities.AbilityKind; +import ru.project.tower.entities.bullets.BulletSystem; +import ru.project.tower.player.PlayerCombatState; +import ru.project.tower.run.RunRngStreams; +import ru.project.tower.run.RunSnapshotCoordinator; +import ru.project.tower.upgrades.shop.ShopUpgradeSystem; +import ru.project.tower.waves.WaveController; +import ru.project.tower.waves.WaveTuning; + +public final class GameScreenRunSnapshotHost implements RunSnapshotCoordinator.Host { + private final Host host; + private final GameState gameState; + private final Array selectedAbilities; + private final Array spawnedBosses; + private final PlayerCombatState playerCombatState; + private final BulletSystem bulletSystem; + private final ShopUpgradeSystem shopUpgradeSystem; + private final WaveController waveController; + + public GameScreenRunSnapshotHost( + Host host, + GameState gameState, + Array selectedAbilities, + Array spawnedBosses, + PlayerCombatState playerCombatState, + BulletSystem bulletSystem, + ShopUpgradeSystem shopUpgradeSystem, + WaveController waveController) { + this.host = Objects.requireNonNull(host, "host"); + this.gameState = Objects.requireNonNull(gameState, "gameState"); + this.selectedAbilities = Objects.requireNonNull(selectedAbilities, "selectedAbilities"); + this.spawnedBosses = Objects.requireNonNull(spawnedBosses, "spawnedBosses"); + this.playerCombatState = Objects.requireNonNull(playerCombatState, "playerCombatState"); + this.bulletSystem = Objects.requireNonNull(bulletSystem, "bulletSystem"); + this.shopUpgradeSystem = Objects.requireNonNull(shopUpgradeSystem, "shopUpgradeSystem"); + this.waveController = Objects.requireNonNull(waveController, "waveController"); + } + + @Override + public GameState gameState() { + return gameState; + } + + @Override + public Array selectedAbilities() { + return selectedAbilities; + } + + @Override + public Array spawnedBosses() { + return spawnedBosses; + } + + @Override + public PlayerCombatState playerCombatState() { + return playerCombatState; + } + + @Override + public BulletSystem bulletSystem() { + return bulletSystem; + } + + @Override + public ShopUpgradeSystem shopUpgradeSystem() { + return shopUpgradeSystem; + } + + @Override + public WaveController waveController() { + return waveController; + } + + @Override + public void applyWaveTuning(WaveTuning tuning) { + host.applyWaveTuning(tuning); + } + + @Override + public RunRngStreams rngStreams() { + return host.rngStreams(); + } + + public interface Host { + void applyWaveTuning(WaveTuning tuning); + + default RunRngStreams rngStreams() { + return null; + } + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/run/GameScreenRunSnapshotHostAdapter.java b/core/src/main/java/ru/project/tower/screens/gamescreen/run/GameScreenRunSnapshotHostAdapter.java new file mode 100644 index 0000000..8ea2799 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/run/GameScreenRunSnapshotHostAdapter.java @@ -0,0 +1,31 @@ +package ru.project.tower.screens.gamescreen.run; + +import java.util.Objects; +import ru.project.tower.run.RunRngStreams; +import ru.project.tower.waves.WaveTuning; + +public final class GameScreenRunSnapshotHostAdapter implements GameScreenRunSnapshotHost.Host { + private final Port port; + + public GameScreenRunSnapshotHostAdapter(Port port) { + this.port = Objects.requireNonNull(port, "port"); + } + + @Override + public void applyWaveTuning(WaveTuning tuning) { + port.applyWaveTuning(tuning); + } + + @Override + public RunRngStreams rngStreams() { + return port.rngStreams(); + } + + public interface Port { + void applyWaveTuning(WaveTuning tuning); + + default RunRngStreams rngStreams() { + return null; + } + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/shop/GameScreenShopController.java b/core/src/main/java/ru/project/tower/screens/gamescreen/shop/GameScreenShopController.java new file mode 100644 index 0000000..0657016 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/shop/GameScreenShopController.java @@ -0,0 +1,122 @@ +package ru.project.tower.screens.gamescreen.shop; + +import com.badlogic.gdx.utils.Array; +import ru.project.tower.abilities.AbilityKind; +import ru.project.tower.abilities.AbilitySystem; +import ru.project.tower.abilities.PlayerAbilities; +import ru.project.tower.screens.gamescreen.actions.GameScreenActionRouter; +import ru.project.tower.screens.gamescreen.hud.GameScreenHudModel; +import ru.project.tower.screens.gamescreen.input.GameScreenInputModel; +import ru.project.tower.screens.gamescreen.layout.SafeAreaInsets; +import ru.project.tower.upgrades.shop.ShopUpgradeKind; +import ru.project.tower.upgrades.shop.ShopUpgradeSystem; + +public final class GameScreenShopController { + private final ShopUpgradeSystem shopUpgradeSystem; + private final GameScreenShopPanelState panelState = new GameScreenShopPanelState(); + + public GameScreenShopController(ShopUpgradeSystem shopUpgradeSystem) { + this.shopUpgradeSystem = shopUpgradeSystem; + } + + public void reset() { + shopUpgradeSystem.reset(); + } + + public void rebuild( + int viewportWidth, + int viewportHeight, + float uiScale, + Array selectedAbilities, + PlayerAbilities playerAbilities, + SafeAreaInsets safeArea) { + panelState.rebuild( + viewportWidth, + viewportHeight, + uiScale, + selectedAbilities, + playerAbilities, + safeArea); + } + + public void showPanel(GameScreenActionRouter.UpgradePanel panel) { + panelState.showPanel(panel); + } + + public void toggleShop() { + panelState.toggleShop(); + } + + public void updateTransition(float delta) { + panelState.updateTransition(delta); + } + + public void setShopOpenImmediately(boolean open) { + panelState.setShopOpenImmediately(open); + } + + public void setShopTransitionProgressForReview(float progress) { + panelState.setShopTransitionProgressForReview(progress); + } + + public void scroll(int direction) { + panelState.scroll(direction); + } + + public void scrollBy(float amount) { + panelState.scrollBy(amount); + } + + public void setDeterministicReviewPricing(boolean enabled) { + panelState.setDeterministicReviewPricing(enabled); + } + + public void buyUpgrade(GameScreenActionRouter.Upgrade upgrade) { + switch (upgrade) { + case DAMAGE: + buyUpgrade(ShopUpgradeKind.DAMAGE); + break; + case SPEED: + buyUpgrade(ShopUpgradeKind.SPEED); + break; + case COOLDOWN: + buyUpgrade(ShopUpgradeKind.COOLDOWN); + break; + case CRIT_CHANCE: + buyUpgrade(ShopUpgradeKind.CRIT_CHANCE); + break; + case CRIT_MULTIPLIER: + buyUpgrade(ShopUpgradeKind.CRIT_MULTIPLIER); + break; + case HEALTH: + buyUpgrade(ShopUpgradeKind.HEALTH); + break; + case REGEN: + buyUpgrade(ShopUpgradeKind.REGEN); + break; + } + } + + public void buyUpgrade(ShopUpgradeKind kind) { + shopUpgradeSystem.tryBuy(kind); + } + + public void fillInputModelShopFields( + GameScreenInputModel inputModel, PlayerAbilities playerAbilities) { + panelState.fillInputModelShopFields(inputModel, playerAbilities); + } + + public void fillHudPanelFields( + GameScreenHudModel hudModel, AbilitySystem abilitySystem, long nowMs) { + fillHudPanelFields(hudModel, null, abilitySystem, nowMs); + } + + public void fillHudPanelFields( + GameScreenHudModel hudModel, + ShopUpgradePreviewValues previewValues, + AbilitySystem abilitySystem, + long nowMs) { + panelState.fillHudPanelFields( + hudModel, shopUpgradeSystem, previewValues, abilitySystem, nowMs); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/shop/GameScreenShopPanelState.java b/core/src/main/java/ru/project/tower/screens/gamescreen/shop/GameScreenShopPanelState.java new file mode 100644 index 0000000..91751a8 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/shop/GameScreenShopPanelState.java @@ -0,0 +1,721 @@ +package ru.project.tower.screens.gamescreen.shop; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.math.Rectangle; +import com.badlogic.gdx.utils.Array; +import ru.project.tower.abilities.AbilityKind; +import ru.project.tower.abilities.AbilitySystem; +import ru.project.tower.abilities.PlayerAbilities; +import ru.project.tower.balance.EndlessBalanceSpec; +import ru.project.tower.screens.gamescreen.actions.GameScreenActionRouter; +import ru.project.tower.screens.gamescreen.hud.GameScreenHudModel; +import ru.project.tower.screens.gamescreen.input.GameScreenInputModel; +import ru.project.tower.screens.gamescreen.layout.GameScreenLayout; +import ru.project.tower.screens.gamescreen.layout.SafeAreaInsets; +import ru.project.tower.support.ScreenPalette; +import ru.project.tower.upgrades.shop.ShopUpgradeCategory; +import ru.project.tower.upgrades.shop.ShopUpgradeDefinition; +import ru.project.tower.upgrades.shop.ShopUpgradeKind; +import ru.project.tower.upgrades.shop.ShopUpgradeRegistry; +import ru.project.tower.upgrades.shop.ShopUpgradeSystem; + +public final class GameScreenShopPanelState { + private static final float SHOP_TRANSITION_DURATION_SECONDS = 0.22f; + private static final Color UPGRADE_DAMAGE = ScreenPalette.UPGRADE_DAMAGE.create(); + private static final Color UPGRADE_SPEED = ScreenPalette.UPGRADE_SPEED.create(); + private static final Color UPGRADE_COOLDOWN = ScreenPalette.UPGRADE_COOLDOWN.create(); + private static final Color UPGRADE_CRIT_CHANCE = ScreenPalette.UPGRADE_CRIT_CHANCE.create(); + private static final Color UPGRADE_CRIT_MULTIPLIER = + ScreenPalette.UPGRADE_CRIT_MULTIPLIER.create(); + private static final Color UPGRADE_HEALTH = ScreenPalette.UPGRADE_HEALTH.create(); + private static final Color UPGRADE_REGEN = ScreenPalette.UPGRADE_REGEN.create(); + private static final Color ABILITY_FREEZE = ScreenPalette.ABILITY_FREEZE.create(); + private static final Color ABILITY_EXPLOSION = ScreenPalette.ABILITY_EXPLOSION.create(); + private static final Color ABILITY_SHIELD = ScreenPalette.ABILITY_SHIELD.create(); + private static final Color ABILITY_IMPULSE = ScreenPalette.ABILITY_IMPULSE.create(); + private static final Color ABILITY_DASH = ScreenPalette.ABILITY_DASH.create(); + private static final Color ABILITY_PULL = ScreenPalette.ABILITY_PULL.create(); + private static final Color ABILITY_TURRET = ScreenPalette.ABILITY_TURRET.create(); + private static final int SHOP_CATEGORY_BUTTON_COUNT = 10; + + private Rectangle healthUpgradeButton; + private Rectangle damageUpgradeButton; + private Rectangle speedUpgradeButton; + private Rectangle cooldownUpgradeButton; + private Rectangle regenUpgradeButton; + private Rectangle critChanceUpgradeButton; + private Rectangle critMultiplierUpgradeButton; + private Rectangle attackDepartmentButton; + private Rectangle healthDepartmentButton; + private Rectangle abilitiesDepartmentButton; + private Rectangle scrollUpButton; + private Rectangle scrollDownButton; + private Rectangle shopToggleButton; + private Rectangle topBar; + private Rectangle waveBar; + private Rectangle statStrip; + private Rectangle shopSheet; + private Rectangle shopHandle; + private Rectangle abilityDock; + private Rectangle dockLabel; + private Rectangle freezeAbilityButton; + private Rectangle explosionAbilityButton; + private Rectangle shieldAbilityButton; + private Rectangle impulseAbilityButton; + private Rectangle dashAbilityButton; + private Rectangle pullAbilityButton; + private Rectangle turretAbilityButton; + private final Rectangle healthUpgradeButtonBounds = new Rectangle(); + private final Rectangle damageUpgradeButtonBounds = new Rectangle(); + private final Rectangle speedUpgradeButtonBounds = new Rectangle(); + private final Rectangle cooldownUpgradeButtonBounds = new Rectangle(); + private final Rectangle regenUpgradeButtonBounds = new Rectangle(); + private final Rectangle critChanceUpgradeButtonBounds = new Rectangle(); + private final Rectangle critMultiplierUpgradeButtonBounds = new Rectangle(); + private final Rectangle attackDepartmentButtonBounds = new Rectangle(); + private final Rectangle healthDepartmentButtonBounds = new Rectangle(); + private final Rectangle abilitiesDepartmentButtonBounds = new Rectangle(); + private final Rectangle scrollUpButtonBounds = new Rectangle(); + private final Rectangle scrollDownButtonBounds = new Rectangle(); + private final Rectangle shopToggleButtonBounds = new Rectangle(); + private final Rectangle topBarBounds = new Rectangle(); + private final Rectangle waveBarBounds = new Rectangle(); + private final Rectangle statStripBounds = new Rectangle(); + private final Rectangle shopSheetBounds = new Rectangle(); + private final Rectangle shopHandleBounds = new Rectangle(); + private final Rectangle abilityDockBounds = new Rectangle(); + private final Rectangle dockLabelBounds = new Rectangle(); + private final Rectangle freezeAbilityButtonBounds = new Rectangle(); + private final Rectangle explosionAbilityButtonBounds = new Rectangle(); + private final Rectangle shieldAbilityButtonBounds = new Rectangle(); + private final Rectangle impulseAbilityButtonBounds = new Rectangle(); + private final Rectangle dashAbilityButtonBounds = new Rectangle(); + private final Rectangle pullAbilityButtonBounds = new Rectangle(); + private final Rectangle turretAbilityButtonBounds = new Rectangle(); + private final Rectangle[] visibleShopUpgradeButtonBounds = + createRectangles(SHOP_CATEGORY_BUTTON_COUNT); + private final Rectangle[] visibleShopUpgradeButtons = new Rectangle[SHOP_CATEGORY_BUTTON_COUNT]; + private final ShopUpgradeKind[] visibleShopUpgradeKinds = + new ShopUpgradeKind[SHOP_CATEGORY_BUTTON_COUNT]; + + private boolean showAttackUpgrades = true; + private boolean showAbilities = false; + private boolean shopExpanded = false; + private float shopTransitionProgress = 0f; + private float scrollOffset = 0f; + private float maxScrollOffset = 0f; + private float minScrollOffset = 0f; + private float buttonHeight = 0f; + private float departmentButtonsY = 0f; + private float touchPadding = 0f; + private boolean deterministicReviewPricing = false; + + public GameScreenShopPanelState() {} + + public void rebuild( + int viewportWidth, + int viewportHeight, + float uiScale, + Array selectedAbilities, + PlayerAbilities playerAbilities) { + rebuild( + viewportWidth, + viewportHeight, + uiScale, + selectedAbilities, + playerAbilities, + SafeAreaInsets.zero()); + } + + public void rebuild( + int viewportWidth, + int viewportHeight, + float uiScale, + Array selectedAbilities, + PlayerAbilities playerAbilities, + SafeAreaInsets safeArea) { + int abilityButtonCount = selectedAbilityButtonCount(selectedAbilities, playerAbilities); + GameScreenLayout layout = + calculateLayout( + viewportWidth, viewportHeight, uiScale, abilityButtonCount, safeArea); + + applyLayoutMetrics(layout); + rebuildVisiblePanelButtons(layout, selectedAbilities, playerAbilities); + rebuildOwnedAbilityDockButtons(layout, selectedAbilities, playerAbilities); + } + + private GameScreenLayout calculateLayout( + int viewportWidth, + int viewportHeight, + float uiScale, + int abilityButtonCount, + SafeAreaInsets safeArea) { + return GameScreenLayout.calculate( + viewportWidth, + viewportHeight, + uiScale, + scrollOffset, + visiblePanel(), + abilityButtonCount, + safeArea); + } + + private GameScreenLayout.Panel visiblePanel() { + if (showAttackUpgrades) return GameScreenLayout.Panel.ATTACK; + if (showAbilities) return GameScreenLayout.Panel.ABILITIES; + return GameScreenLayout.Panel.HEALTH; + } + + private ShopUpgradeCategory visibleShopCategory() { + if (showAttackUpgrades) return ShopUpgradeCategory.ATTACK; + if (showAbilities) return ShopUpgradeCategory.BONUS; + return ShopUpgradeCategory.DEFENSE; + } + + private void applyLayoutMetrics(GameScreenLayout layout) { + buttonHeight = layout.rowAdvance(); + departmentButtonsY = layout.departmentButtonsY(); + minScrollOffset = layout.minScrollOffset(); + maxScrollOffset = layout.maxScrollOffset(); + scrollOffset = Math.min(Math.max(scrollOffset, minScrollOffset), maxScrollOffset); + touchPadding = layout.touchPadding(); + + attackDepartmentButton = + setRect(attackDepartmentButtonBounds, layout.attackDepartmentButton()); + healthDepartmentButton = + setRect(healthDepartmentButtonBounds, layout.healthDepartmentButton()); + abilitiesDepartmentButton = + setRect(abilitiesDepartmentButtonBounds, layout.abilitiesDepartmentButton()); + scrollUpButton = setRect(scrollUpButtonBounds, layout.scrollUpButton()); + scrollDownButton = setRect(scrollDownButtonBounds, layout.scrollDownButton()); + shopToggleButton = setRect(shopToggleButtonBounds, layout.shopToggleButton()); + topBar = setRect(topBarBounds, layout.topBar()); + waveBar = setRect(waveBarBounds, layout.waveBar()); + statStrip = setRect(statStripBounds, layout.statStrip()); + shopSheet = setRect(shopSheetBounds, layout.shopSheet()); + shopHandle = setRect(shopHandleBounds, layout.shopHandle()); + abilityDock = setRect(abilityDockBounds, layout.abilityDock()); + dockLabel = setRect(dockLabelBounds, layout.dockLabel()); + } + + private void rebuildVisiblePanelButtons( + GameScreenLayout layout, + Array selectedAbilities, + PlayerAbilities playerAbilities) { + rebuildShopUpgradeButtons(layout, visibleShopCategory()); + clearAbilityRectangles(); + } + + public void showPanel(GameScreenActionRouter.UpgradePanel panel) { + showAttackUpgrades = panel == GameScreenActionRouter.UpgradePanel.ATTACK; + showAbilities = panel == GameScreenActionRouter.UpgradePanel.ABILITIES; + shopExpanded = true; + scrollOffset = 0f; + } + + public void toggleShop() { + shopExpanded = !shopExpanded; + if (!shopExpanded) { + scrollOffset = 0f; + } + } + + public boolean shopExpanded() { + return shopExpanded; + } + + public void updateTransition(float delta) { + float step = Math.max(0f, delta) / SHOP_TRANSITION_DURATION_SECONDS; + if (shopExpanded) { + shopTransitionProgress = Math.min(1f, shopTransitionProgress + step); + } else { + shopTransitionProgress = Math.max(0f, shopTransitionProgress - step); + } + } + + public void setShopOpenImmediately(boolean open) { + shopExpanded = open; + shopTransitionProgress = open ? 1f : 0f; + if (!open) { + scrollOffset = 0f; + } + } + + public void setShopTransitionProgressForReview(float progress) { + shopExpanded = progress > 0f; + shopTransitionProgress = Math.max(0f, Math.min(1f, progress)); + } + + public float shopTransitionProgress() { + return shopTransitionProgress; + } + + public void scroll(int direction) { + scrollBy(direction * buttonHeight); + } + + public void scrollBy(float amount) { + scrollOffset = + Math.min(maxScrollOffset, Math.max(minScrollOffset, scrollOffset + amount)); + } + + public float scrollOffset() { + return scrollOffset; + } + + public float maxScrollOffset() { + return maxScrollOffset; + } + + public void setDeterministicReviewPricing(boolean enabled) { + deterministicReviewPricing = enabled; + } + + public void fillInputModelShopFields( + GameScreenInputModel inputModel, PlayerAbilities playerAbilities) { + inputModel.fillShopFields( + new GameScreenInputModel.ShopFields( + showAttackUpgrades, + showAbilities, + shopExpanded, + playerAbilities.purchasedAbilityCount(), + touchPadding, + departmentButtonsY, + shopExpanded ? attackDepartmentButton : null, + shopExpanded ? healthDepartmentButton : null, + shopExpanded ? abilitiesDepartmentButton : null, + shopExpanded ? scrollUpButton : null, + shopExpanded ? scrollDownButton : null, + shopToggleButton, + statStrip, + shopExpanded ? damageUpgradeButton : null, + shopExpanded ? speedUpgradeButton : null, + shopExpanded ? cooldownUpgradeButton : null, + shopExpanded ? critChanceUpgradeButton : null, + shopExpanded ? critMultiplierUpgradeButton : null, + shopExpanded ? healthUpgradeButton : null, + shopExpanded ? regenUpgradeButton : null, + visibleShopUpgradeButtons(), + visibleShopUpgradeKinds(), + freezeAbilityButton, + explosionAbilityButton, + shieldAbilityButton, + impulseAbilityButton, + dashAbilityButton, + pullAbilityButton, + turretAbilityButton)); + } + + private Rectangle[] visibleShopUpgradeButtons() { + Rectangle[] buttons = new Rectangle[SHOP_CATEGORY_BUTTON_COUNT]; + if (!shopExpanded) return buttons; + System.arraycopy(visibleShopUpgradeButtons, 0, buttons, 0, buttons.length); + return buttons; + } + + private ShopUpgradeKind[] visibleShopUpgradeKinds() { + ShopUpgradeKind[] kinds = new ShopUpgradeKind[SHOP_CATEGORY_BUTTON_COUNT]; + if (!shopExpanded) return kinds; + System.arraycopy(visibleShopUpgradeKinds, 0, kinds, 0, kinds.length); + return kinds; + } + + public void fillHudPanelFields( + GameScreenHudModel hudModel, + ShopUpgradeSystem shopUpgradeSystem, + AbilitySystem abilitySystem, + long now) { + fillHudPanelFields(hudModel, shopUpgradeSystem, null, abilitySystem, now); + } + + public void fillHudPanelFields( + GameScreenHudModel hudModel, + ShopUpgradeSystem shopUpgradeSystem, + ShopUpgradePreviewValues previewValues, + AbilitySystem abilitySystem, + long now) { + fillShopPanelHeader(hudModel); + ShopUpgradePreviewValues effectivePreview = + previewValues == null ? fallbackPreviewValues(shopUpgradeSystem) : previewValues; + fillAttackButtons(hudModel, shopUpgradeSystem, effectivePreview); + fillHealthButtons(hudModel, shopUpgradeSystem, effectivePreview); + fillBonusButtons(hudModel, shopUpgradeSystem, effectivePreview); + fillAbilityButtons(hudModel, abilitySystem, now); + } + + private void fillShopPanelHeader(GameScreenHudModel hudModel) { + hudModel.fillShopPanelFields( + new GameScreenHudModel.ShopPanelFields( + departmentButtonsY, + showAttackUpgrades, + showAbilities, + shopExpanded, + shopTransitionProgress, + attackDepartmentButton, + healthDepartmentButton, + abilitiesDepartmentButton, + shopToggleButton, + topBar, + waveBar, + statStrip, + shopSheet, + shopHandle, + abilityDock, + dockLabel)); + } + + private void fillAttackButtons( + GameScreenHudModel hudModel, + ShopUpgradeSystem shopUpgradeSystem, + ShopUpgradePreviewValues previewValues) { + ShopUpgradePreviewValues.PreviewRow[] rows = + previewValues.rows(ShopUpgradeCategory.ATTACK, shopUpgradeSystem); + for (int i = 0; i < rows.length; i++) { + ShopUpgradePreviewValues.PreviewRow row = rows[i]; + if (deterministicReviewPricing) { + row = row.withPrice(attackPrice(shopUpgradeSystem, row.kind())); + } + hudModel.setAttackButton( + i, visibleBoundsFor(ShopUpgradeCategory.ATTACK, i), colorFor(row.kind()), row); + } + } + + private CharSequence currentValue( + ShopUpgradePreviewValues previewValues, ShopUpgradeKind kind) { + return previewValues == null ? null : previewValues.currentValue(kind); + } + + private CharSequence nextValue(ShopUpgradePreviewValues previewValues, ShopUpgradeKind kind) { + return previewValues == null ? null : previewValues.nextValue(kind); + } + + private ShopUpgradePreviewValues fallbackPreviewValues(ShopUpgradeSystem shopUpgradeSystem) { + return ShopUpgradePreviewValues.fromEffectiveStats( + shopUpgradeSystem, 0, 0f, 0f, 0f, 1f, 100, 0, 1f, 1f, 1f); + } + + private float damageDelta(ShopUpgradeSystem shopUpgradeSystem) { + int level = shopUpgradeSystem.level(ShopUpgradeKind.DAMAGE); + return EndlessBalanceSpec.shopDamageBonusAtLevel(nextShopLevel(level)) + - EndlessBalanceSpec.shopDamageBonusAtLevel(level); + } + + private float speedDelta(ShopUpgradeSystem shopUpgradeSystem) { + int level = shopUpgradeSystem.level(ShopUpgradeKind.SPEED); + return EndlessBalanceSpec.shopSpeedBonusAtLevel(nextShopLevel(level)) + - EndlessBalanceSpec.shopSpeedBonusAtLevel(level); + } + + private float cooldownDelta(ShopUpgradeSystem shopUpgradeSystem) { + int level = shopUpgradeSystem.level(ShopUpgradeKind.COOLDOWN); + return EndlessBalanceSpec.shopCooldownReductionAtLevel(nextShopLevel(level)) + - EndlessBalanceSpec.shopCooldownReductionAtLevel(level); + } + + private float critChanceDelta(ShopUpgradeSystem shopUpgradeSystem) { + int level = shopUpgradeSystem.level(ShopUpgradeKind.CRIT_CHANCE); + return EndlessBalanceSpec.shopCritChanceBonusAtLevel(nextShopLevel(level)) + - EndlessBalanceSpec.shopCritChanceBonusAtLevel(level); + } + + private float critMultiplierDelta(ShopUpgradeSystem shopUpgradeSystem) { + int level = shopUpgradeSystem.level(ShopUpgradeKind.CRIT_MULTIPLIER); + return EndlessBalanceSpec.shopCritMultiplierBonusAtLevel(nextShopLevel(level)) + - EndlessBalanceSpec.shopCritMultiplierBonusAtLevel(level); + } + + private int nextShopLevel(int level) { + return Math.min(EndlessBalanceSpec.SHOP_MAX_LEVEL, level + 1); + } + + private int attackPrice(ShopUpgradeSystem shopUpgradeSystem, ShopUpgradeKind kind) { + if (!deterministicReviewPricing) { + return shopUpgradeSystem.cost(kind); + } + switch (kind) { + case DAMAGE: + return 12; + case SPEED: + return 10; + case COOLDOWN: + return 4; + case CRIT_CHANCE: + return 15; + default: + return shopUpgradeSystem.cost(kind); + } + } + + private void fillHealthButtons( + GameScreenHudModel hudModel, + ShopUpgradeSystem shopUpgradeSystem, + ShopUpgradePreviewValues previewValues) { + ShopUpgradePreviewValues.PreviewRow[] rows = + previewValues.rows(ShopUpgradeCategory.DEFENSE, shopUpgradeSystem); + for (int i = 0; i < rows.length; i++) { + hudModel.setHealthButton( + i, + visibleBoundsFor(ShopUpgradeCategory.DEFENSE, i), + colorFor(rows[i].kind()), + rows[i]); + } + } + + private void fillBonusButtons( + GameScreenHudModel hudModel, + ShopUpgradeSystem shopUpgradeSystem, + ShopUpgradePreviewValues previewValues) { + ShopUpgradePreviewValues.PreviewRow[] rows = + previewValues.rows(ShopUpgradeCategory.BONUS, shopUpgradeSystem); + for (int i = 0; i < rows.length; i++) { + hudModel.setBonusButton( + i, + visibleBoundsFor(ShopUpgradeCategory.BONUS, i), + colorFor(rows[i].kind()), + rows[i]); + } + } + + private void fillAbilityButtons( + GameScreenHudModel hudModel, AbilitySystem abilitySystem, long now) { + hudModel.clearAbilityButtons(); + hudModel.setAbilityButton( + AbilityKind.FREEZE, + freezeAbilityButton, + ABILITY_FREEZE, + remainingCooldownMs(abilitySystem, AbilityKind.FREEZE, now)); + hudModel.setAbilityButton( + AbilityKind.EXPLOSION, + explosionAbilityButton, + ABILITY_EXPLOSION, + remainingCooldownMs(abilitySystem, AbilityKind.EXPLOSION, now)); + hudModel.setAbilityButton( + AbilityKind.SHIELD, + shieldAbilityButton, + ABILITY_SHIELD, + remainingCooldownMs(abilitySystem, AbilityKind.SHIELD, now)); + hudModel.setAbilityButton( + AbilityKind.IMPULSE, + impulseAbilityButton, + ABILITY_IMPULSE, + remainingCooldownMs(abilitySystem, AbilityKind.IMPULSE, now)); + hudModel.setAbilityButton( + AbilityKind.DASH, + dashAbilityButton, + ABILITY_DASH, + remainingCooldownMs(abilitySystem, AbilityKind.DASH, now)); + hudModel.setAbilityButton( + AbilityKind.PULL, + pullAbilityButton, + ABILITY_PULL, + remainingCooldownMs(abilitySystem, AbilityKind.PULL, now)); + hudModel.setAbilityButton( + AbilityKind.TURRET, + turretAbilityButton, + ABILITY_TURRET, + remainingCooldownMs(abilitySystem, AbilityKind.TURRET, now)); + } + + private Rectangle visibleBoundsFor(ShopUpgradeCategory category, int index) { + return visibleShopCategory() == category ? visibleShopUpgradeButtons[index] : null; + } + + private Color colorFor(ShopUpgradeKind kind) { + switch (kind) { + case DAMAGE: + case EXECUTE_DAMAGE: + case BOSS_DAMAGE: + case CONTROL_DAMAGE: + return UPGRADE_DAMAGE; + case SPEED: + case PIERCE: + case SPLASH_DAMAGE: + return UPGRADE_SPEED; + case COOLDOWN: + return UPGRADE_COOLDOWN; + case CRIT_CHANCE: + return UPGRADE_CRIT_CHANCE; + case CRIT_MULTIPLIER: + return UPGRADE_CRIT_MULTIPLIER; + case HEALTH: + case CONTACT_ARMOR: + case PROJECTILE_ARMOR: + case SHIELD_CAPACITY: + case SHIELD_RECHARGE: + case EMERGENCY_BARRIER: + case SAFE_MOBILITY: + case SLOW_AURA: + return UPGRADE_HEALTH; + case REGEN: + case WAVE_RECOVERY: + return UPGRADE_REGEN; + case PICKUP_RADIUS: + case BONUS_DURATION: + case BONUS_POWER: + case BONUS_STABILITY: + case BONUS_PITY: + case BONUS_FILTER: + case COIN_INCOME: + case SHOP_DISCOUNT: + case CARD_REROLL: + case SYNERGY_CATALYST: + return UPGRADE_CRIT_MULTIPLIER; + default: + return UPGRADE_DAMAGE; + } + } + + private GameScreenLayout.Rect layoutButton( + GameScreenLayout layout, ShopUpgradeCategory category, int index) { + if (category == ShopUpgradeCategory.ATTACK) return layout.attackButton(index); + if (category == ShopUpgradeCategory.DEFENSE) return layout.healthButton(index); + return layout.abilityButton(index); + } + + private void assignLegacyUpgradeButton(ShopUpgradeKind kind, Rectangle bounds) { + switch (kind) { + case DAMAGE: + damageUpgradeButton = bounds; + break; + case SPEED: + speedUpgradeButton = bounds; + break; + case COOLDOWN: + cooldownUpgradeButton = bounds; + break; + case CRIT_CHANCE: + critChanceUpgradeButton = bounds; + break; + case CRIT_MULTIPLIER: + critMultiplierUpgradeButton = bounds; + break; + case HEALTH: + healthUpgradeButton = bounds; + break; + case REGEN: + regenUpgradeButton = bounds; + break; + default: + break; + } + } + + private void rebuildShopUpgradeButtons(GameScreenLayout layout, ShopUpgradeCategory category) { + clearUpgradeRectangles(); + clearVisibleShopUpgradeButtons(); + ShopUpgradeDefinition[] definitions = ShopUpgradeRegistry.byCategory(category); + for (int i = 0; i < definitions.length; i++) { + GameScreenLayout.Rect layoutRect = layoutButton(layout, category, i); + Rectangle bounds = setRect(visibleShopUpgradeButtonBounds[i], layoutRect); + visibleShopUpgradeButtons[i] = bounds; + visibleShopUpgradeKinds[i] = definitions[i].kind(); + assignLegacyUpgradeButton(definitions[i].kind(), bounds); + } + } + + private void clearUpgradeRectangles() { + healthUpgradeButton = null; + regenUpgradeButton = null; + damageUpgradeButton = null; + speedUpgradeButton = null; + cooldownUpgradeButton = null; + critChanceUpgradeButton = null; + critMultiplierUpgradeButton = null; + } + + private void clearVisibleShopUpgradeButtons() { + for (int i = 0; i < visibleShopUpgradeButtons.length; i++) { + visibleShopUpgradeButtons[i] = null; + visibleShopUpgradeKinds[i] = null; + } + } + + private void rebuildOwnedAbilityDockButtons( + GameScreenLayout layout, + Array selectedAbilities, + PlayerAbilities playerAbilities) { + clearAbilityRectangles(); + if (selectedAbilities == null) return; + + int abilityIndex = 0; + for (AbilityKind ability : selectedAbilities) { + if (!playerAbilities.hasAbility(ability)) continue; + if (abilityIndex >= 3) break; + + assignAbilityButton(ability, layout.dockAbilityButton(abilityIndex)); + abilityIndex++; + } + } + + private void assignAbilityButton(AbilityKind ability, GameScreenLayout.Rect abilityButton) { + switch (ability) { + case FREEZE: + freezeAbilityButton = setRect(freezeAbilityButtonBounds, abilityButton); + break; + case EXPLOSION: + explosionAbilityButton = setRect(explosionAbilityButtonBounds, abilityButton); + break; + case SHIELD: + shieldAbilityButton = setRect(shieldAbilityButtonBounds, abilityButton); + break; + case IMPULSE: + impulseAbilityButton = setRect(impulseAbilityButtonBounds, abilityButton); + break; + case DASH: + dashAbilityButton = setRect(dashAbilityButtonBounds, abilityButton); + break; + case PULL: + pullAbilityButton = setRect(pullAbilityButtonBounds, abilityButton); + break; + case TURRET: + turretAbilityButton = setRect(turretAbilityButtonBounds, abilityButton); + break; + default: + break; + } + } + + private void clearAbilityRectangles() { + freezeAbilityButton = null; + explosionAbilityButton = null; + shieldAbilityButton = null; + impulseAbilityButton = null; + dashAbilityButton = null; + pullAbilityButton = null; + turretAbilityButton = null; + } + + private int selectedAbilityButtonCount( + Array selectedAbilities, PlayerAbilities playerAbilities) { + if (selectedAbilities == null) return 0; + + int count = 0; + for (AbilityKind ability : selectedAbilities) { + if (playerAbilities.hasAbility(ability)) { + count++; + } + } + return count; + } + + private long remainingCooldownMs(AbilitySystem abilitySystem, AbilityKind ability, long now) { + if (deterministicReviewPricing) { + return ability == AbilityKind.SHIELD ? 3_200L : 0L; + } + return abilitySystem == null ? 0L : abilitySystem.remainingCooldownMs(ability, now); + } + + private Rectangle setRect(Rectangle rect, GameScreenLayout.Rect layoutRect) { + if (layoutRect == null) return null; + rect.set(layoutRect.x(), layoutRect.y(), layoutRect.width(), layoutRect.height()); + return rect; + } + + private static Rectangle[] createRectangles(int count) { + Rectangle[] rectangles = new Rectangle[count]; + for (int i = 0; i < rectangles.length; i++) { + rectangles[i] = new Rectangle(); + } + return rectangles; + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/shop/GameScreenShopUpgradeHost.java b/core/src/main/java/ru/project/tower/screens/gamescreen/shop/GameScreenShopUpgradeHost.java new file mode 100644 index 0000000..e5748c5 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/shop/GameScreenShopUpgradeHost.java @@ -0,0 +1,63 @@ +package ru.project.tower.screens.gamescreen.shop; + +import java.util.Objects; +import ru.project.tower.upgrades.shop.ShopUpgradeHost; + +public final class GameScreenShopUpgradeHost implements ShopUpgradeHost { + private final Host host; + + public GameScreenShopUpgradeHost(Host host) { + this.host = Objects.requireNonNull(host, "host"); + } + + @Override + public boolean spendMoney(int amount) { + return host.spendMoney(amount); + } + + @Override + public void addMaxHealth(int amount) { + host.addMaxHealth(amount); + } + + @Override + public void healToFull() { + host.healToFull(); + } + + @Override + public void addBaseDamage(int amount) { + host.addBaseDamage(amount); + } + + @Override + public void addBaseSpeed(float amount) { + host.addBaseSpeed(amount); + } + + @Override + public void reduceShotCooldown(float amount, float minimum) { + host.reduceShotCooldown(amount, minimum); + } + + @Override + public void addHealthRegen(int amount) { + host.addHealthRegen(amount); + } + + public interface Host { + boolean spendMoney(int amount); + + void addMaxHealth(int amount); + + void healToFull(); + + void addBaseDamage(int amount); + + void addBaseSpeed(float amount); + + void reduceShotCooldown(float amount, float minimum); + + void addHealthRegen(int amount); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/shop/GameScreenShopUpgradeHostAdapter.java b/core/src/main/java/ru/project/tower/screens/gamescreen/shop/GameScreenShopUpgradeHostAdapter.java new file mode 100644 index 0000000..c9467ad --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/shop/GameScreenShopUpgradeHostAdapter.java @@ -0,0 +1,62 @@ +package ru.project.tower.screens.gamescreen.shop; + +import java.util.Objects; + +public final class GameScreenShopUpgradeHostAdapter implements GameScreenShopUpgradeHost.Host { + private final Port port; + + public GameScreenShopUpgradeHostAdapter(Port port) { + this.port = Objects.requireNonNull(port, "port"); + } + + @Override + public boolean spendMoney(int amount) { + return port.spendMoney(amount); + } + + @Override + public void addMaxHealth(int amount) { + port.addMaxHealth(amount); + } + + @Override + public void healToFull() { + port.healToFull(); + } + + @Override + public void addBaseDamage(int amount) { + port.addBaseDamage(amount); + } + + @Override + public void addBaseSpeed(float amount) { + port.addBaseSpeed(amount); + } + + @Override + public void reduceShotCooldown(float amount, float minimum) { + port.reduceShotCooldown(amount, minimum); + } + + @Override + public void addHealthRegen(int amount) { + port.addHealthRegen(amount); + } + + public interface Port { + boolean spendMoney(int amount); + + void addMaxHealth(int amount); + + void healToFull(); + + void addBaseDamage(int amount); + + void addBaseSpeed(float amount); + + void reduceShotCooldown(float amount, float minimum); + + void addHealthRegen(int amount); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/shop/ShopUpgradePreviewValues.java b/core/src/main/java/ru/project/tower/screens/gamescreen/shop/ShopUpgradePreviewValues.java new file mode 100644 index 0000000..3da0980 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/shop/ShopUpgradePreviewValues.java @@ -0,0 +1,312 @@ +package ru.project.tower.screens.gamescreen.shop; + +import java.util.Locale; +import ru.project.tower.balance.EndlessBalanceSpec; +import ru.project.tower.player.PlayerCombatState; +import ru.project.tower.support.CompactNumberFormatter; +import ru.project.tower.upgrades.shop.ShopUpgradeCategory; +import ru.project.tower.upgrades.shop.ShopUpgradeDefinition; +import ru.project.tower.upgrades.shop.ShopUpgradeKind; +import ru.project.tower.upgrades.shop.ShopUpgradeRegistry; +import ru.project.tower.upgrades.shop.ShopUpgradeSystem; + +public final class ShopUpgradePreviewValues { + private static final ShopUpgradeKind[] KINDS = ShopUpgradeKind.values(); + private static final int HEALTH_GAIN = 20; + + private final String[] currentValues = new String[KINDS.length]; + private final String[] nextValues = new String[KINDS.length]; + + private ShopUpgradePreviewValues() {} + + public static ShopUpgradePreviewValues fromEffectiveStats( + ShopUpgradeSystem shopUpgradeSystem, + float effectiveDamage, + float effectiveSpeed, + float effectiveCooldownMs, + float effectiveCritChance, + float effectiveCritMultiplier, + int maxHealth, + int healthRegenRate, + float damageDeltaScale, + float speedDeltaScale, + float cooldownDeltaScale) { + ShopUpgradePreviewValues values = new ShopUpgradePreviewValues(); + values.fill( + shopUpgradeSystem, + effectiveDamage, + effectiveSpeed, + effectiveCooldownMs, + effectiveCritChance, + effectiveCritMultiplier, + maxHealth, + healthRegenRate, + damageDeltaScale, + speedDeltaScale, + cooldownDeltaScale); + return values; + } + + public String currentValue(ShopUpgradeKind kind) { + return currentValues[index(kind)]; + } + + public String nextValue(ShopUpgradeKind kind) { + return nextValues[index(kind)]; + } + + public PreviewRow[] rows(ShopUpgradeCategory category, ShopUpgradeSystem shopUpgradeSystem) { + ShopUpgradeDefinition[] definitions = ShopUpgradeRegistry.byCategory(category); + PreviewRow[] rows = new PreviewRow[definitions.length]; + for (int i = 0; i < definitions.length; i++) { + ShopUpgradeDefinition definition = definitions[i]; + ShopUpgradeKind kind = definition.kind(); + int level = shopUpgradeSystem.level(kind); + rows[i] = + new PreviewRow( + kind, + definition.gameName(), + definition.shortDescription(), + definition.iconToken(), + definition.colorToken(), + currentValue(kind), + nextValue(kind), + shopUpgradeSystem.cost(kind), + level >= definition.maxLevel()); + } + return rows; + } + + private void fill( + ShopUpgradeSystem shopUpgradeSystem, + float effectiveDamage, + float effectiveSpeed, + float effectiveCooldownMs, + float effectiveCritChance, + float effectiveCritMultiplier, + int maxHealth, + int healthRegenRate, + float damageDeltaScale, + float speedDeltaScale, + float cooldownDeltaScale) { + for (ShopUpgradeKind kind : KINDS) { + int level = shopUpgradeSystem.level(kind); + set(kind, "ур. " + level, "ур. " + nextShopLevel(level)); + } + set( + ShopUpgradeKind.DAMAGE, + number(effectiveDamage), + number(effectiveDamage + damageDelta(shopUpgradeSystem) * damageDeltaScale)); + set( + ShopUpgradeKind.SPEED, + number(effectiveSpeed), + number(effectiveSpeed + speedDelta(shopUpgradeSystem) * speedDeltaScale)); + set( + ShopUpgradeKind.COOLDOWN, + seconds(effectiveCooldownMs), + seconds( + Math.max( + PlayerCombatState.MIN_SHOT_COOLDOWN_MS, + effectiveCooldownMs + - cooldownDelta(shopUpgradeSystem) * cooldownDeltaScale))); + set( + ShopUpgradeKind.CRIT_CHANCE, + percent(effectiveCritChance), + percent( + Math.min( + EndlessBalanceSpec.CRIT_CHANCE_CAP, + effectiveCritChance + critChanceDelta(shopUpgradeSystem)))); + set( + ShopUpgradeKind.CRIT_MULTIPLIER, + multiplier(effectiveCritMultiplier), + multiplier(effectiveCritMultiplier + critMultiplierDelta(shopUpgradeSystem))); + set(ShopUpgradeKind.HEALTH, number(maxHealth), number(maxHealth + HEALTH_GAIN)); + set( + ShopUpgradeKind.REGEN, + perSecond(healthRegenRate), + perSecond(healthRegenRate + regenDelta(shopUpgradeSystem))); + } + + private void set(ShopUpgradeKind kind, String currentValue, String nextValue) { + currentValues[index(kind)] = currentValue; + nextValues[index(kind)] = nextValue; + } + + private static int damageDelta(ShopUpgradeSystem shopUpgradeSystem) { + int level = shopUpgradeSystem.level(ShopUpgradeKind.DAMAGE); + return EndlessBalanceSpec.shopDamageBonusAtLevel(nextShopLevel(level)) + - EndlessBalanceSpec.shopDamageBonusAtLevel(level); + } + + private static float speedDelta(ShopUpgradeSystem shopUpgradeSystem) { + int level = shopUpgradeSystem.level(ShopUpgradeKind.SPEED); + return EndlessBalanceSpec.shopSpeedBonusAtLevel(nextShopLevel(level)) + - EndlessBalanceSpec.shopSpeedBonusAtLevel(level); + } + + private static float cooldownDelta(ShopUpgradeSystem shopUpgradeSystem) { + int level = shopUpgradeSystem.level(ShopUpgradeKind.COOLDOWN); + return EndlessBalanceSpec.shopCooldownReductionAtLevel(nextShopLevel(level)) + - EndlessBalanceSpec.shopCooldownReductionAtLevel(level); + } + + private static int regenDelta(ShopUpgradeSystem shopUpgradeSystem) { + int level = shopUpgradeSystem.level(ShopUpgradeKind.REGEN); + return EndlessBalanceSpec.shopRegenBonusAtLevel(nextShopLevel(level)) + - EndlessBalanceSpec.shopRegenBonusAtLevel(level); + } + + private static float critChanceDelta(ShopUpgradeSystem shopUpgradeSystem) { + int level = shopUpgradeSystem.level(ShopUpgradeKind.CRIT_CHANCE); + return EndlessBalanceSpec.shopCritChanceBonusAtLevel(nextShopLevel(level)) + - EndlessBalanceSpec.shopCritChanceBonusAtLevel(level); + } + + private static float critMultiplierDelta(ShopUpgradeSystem shopUpgradeSystem) { + int level = shopUpgradeSystem.level(ShopUpgradeKind.CRIT_MULTIPLIER); + return EndlessBalanceSpec.shopCritMultiplierBonusAtLevel(nextShopLevel(level)) + - EndlessBalanceSpec.shopCritMultiplierBonusAtLevel(level); + } + + private static int nextShopLevel(int level) { + return Math.min(EndlessBalanceSpec.SHOP_MAX_LEVEL, level + 1); + } + + private static String number(long value) { + return CompactNumberFormatter.format(value); + } + + private static String number(float value) { + float abs = Math.abs(value); + if (abs >= 1_000f) { + return CompactNumberFormatter.format(value); + } + if (Math.abs(value - Math.round(value)) < 0.005f) { + return Long.toString(Math.round(value)); + } + String text = String.format(Locale.ROOT, "%.2f", value); + while (text.endsWith("0")) { + text = text.substring(0, text.length() - 1); + } + if (text.endsWith(".")) { + text = text.substring(0, text.length() - 1); + } + return text; + } + + private static String seconds(float milliseconds) { + return CompactNumberFormatter.seconds(milliseconds).replace('s', 'с'); + } + + private static String percent(float fraction) { + return Math.round(fraction * 100f) + "%"; + } + + private static String multiplier(float value) { + int tenths = Math.round(value * 10f); + return (tenths / 10) + "." + Math.abs(tenths % 10) + "×"; + } + + private static String perSecond(long value) { + if (value <= 0L) { + return "0"; + } + return "+" + number(value); + } + + private static int index(ShopUpgradeKind kind) { + return kind.ordinal(); + } + + public static final class PreviewRow { + private final ShopUpgradeKind kind; + private final String gameName; + private final String description; + private final String iconToken; + private final String colorToken; + private final String currentValue; + private final String nextValue; + private final int price; + private final boolean maxed; + + private PreviewRow( + ShopUpgradeKind kind, + String gameName, + String description, + String iconToken, + String colorToken, + String currentValue, + String nextValue, + int price, + boolean maxed) { + this.kind = kind; + this.gameName = gameName; + this.description = description; + this.iconToken = iconToken; + this.colorToken = colorToken; + this.currentValue = currentValue; + this.nextValue = nextValue; + this.price = price; + this.maxed = maxed; + } + + public ShopUpgradeKind kind() { + return kind; + } + + public String gameName() { + return gameName; + } + + public String description() { + return description; + } + + public String iconToken() { + return iconToken; + } + + public String colorToken() { + return colorToken; + } + + public String currentValue() { + return currentValue; + } + + public String nextValue() { + return nextValue; + } + + public int price() { + return price; + } + + PreviewRow withPrice(int price) { + return new PreviewRow( + kind, + gameName, + description, + iconToken, + colorToken, + currentValue, + nextValue, + price, + maxed); + } + + public boolean maxed() { + return maxed; + } + + public String disabledReason(int availableMoney) { + if (maxed) { + return "Максимум"; + } + if (availableMoney < price) { + return "Не хватает " + number(price - availableMoney) + "₽"; + } + return null; + } + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/special/GameScreenBossEffectsHost.java b/core/src/main/java/ru/project/tower/screens/gamescreen/special/GameScreenBossEffectsHost.java new file mode 100644 index 0000000..6b4ff83 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/special/GameScreenBossEffectsHost.java @@ -0,0 +1,20 @@ +package ru.project.tower.screens.gamescreen.special; + +import com.badlogic.gdx.graphics.Color; +import java.util.Objects; +import ru.project.tower.screens.gamescreen.vfx.GameScreenParticleEffects; +import ru.project.tower.support.BossEffectsHost; + +public final class GameScreenBossEffectsHost implements BossEffectsHost { + private final GameScreenParticleEffects particleEffects; + + public GameScreenBossEffectsHost(GameScreenParticleEffects particleEffects) { + this.particleEffects = Objects.requireNonNull(particleEffects, "particleEffects"); + } + + @Override + public void createBossParticles( + float x, float y, float radius, Color color, float scale, int count) { + particleEffects.createBossParticles(x, y, radius, color, scale, count); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/special/GameScreenSpecialCircleHost.java b/core/src/main/java/ru/project/tower/screens/gamescreen/special/GameScreenSpecialCircleHost.java new file mode 100644 index 0000000..dab2524 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/special/GameScreenSpecialCircleHost.java @@ -0,0 +1,57 @@ +package ru.project.tower.screens.gamescreen.special; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.math.Circle; +import com.badlogic.gdx.math.Rectangle; +import java.util.Objects; +import ru.project.tower.entities.circles.bosses.SwarmQueenData; +import ru.project.tower.screens.gamescreen.vfx.GameScreenParticleEffects; +import ru.project.tower.systems.CollisionSystem; +import ru.project.tower.systems.SpecialCircleSystem; + +public final class GameScreenSpecialCircleHost implements SpecialCircleSystem.Host { + private final Host host; + private final GameScreenParticleEffects particleEffects; + + public GameScreenSpecialCircleHost(Host host, GameScreenParticleEffects particleEffects) { + this.host = Objects.requireNonNull(host, "host"); + this.particleEffects = Objects.requireNonNull(particleEffects, "particleEffects"); + } + + @Override + public void spawnQueenMinion(SwarmQueenData queen) { + host.spawnQueenMinion(queen); + } + + @Override + public void createBossParticles( + float x, float y, float radius, Color color, float spread, int count) { + particleEffects.createBossParticles(x, y, radius, color, spread, count); + } + + @Override + public void createExplosion(float x, float y, Color color) { + particleEffects.createExplosion(x, y, color); + } + + @Override + public void createExplosion(float x, float y, float[] color) { + particleEffects.createExplosion(x, y, color); + } + + @Override + public boolean isCircleIntersectingSquare(Circle circle, Rectangle square) { + return CollisionSystem.circleIntersectsSquare(circle, square); + } + + @Override + public boolean damagePlayerIfVulnerable(int damage, long damageCooldownMs) { + return host.damagePlayerIfVulnerable(damage, damageCooldownMs); + } + + public interface Host { + void spawnQueenMinion(SwarmQueenData queen); + + boolean damagePlayerIfVulnerable(int damage, long damageCooldownMs); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/special/GameScreenSpecialCircleHostAdapter.java b/core/src/main/java/ru/project/tower/screens/gamescreen/special/GameScreenSpecialCircleHostAdapter.java new file mode 100644 index 0000000..3216e99 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/special/GameScreenSpecialCircleHostAdapter.java @@ -0,0 +1,28 @@ +package ru.project.tower.screens.gamescreen.special; + +import java.util.Objects; +import ru.project.tower.entities.circles.bosses.SwarmQueenData; + +public final class GameScreenSpecialCircleHostAdapter implements GameScreenSpecialCircleHost.Host { + private final Port port; + + public GameScreenSpecialCircleHostAdapter(Port port) { + this.port = Objects.requireNonNull(port, "port"); + } + + @Override + public void spawnQueenMinion(SwarmQueenData queen) { + port.spawnQueenMinion(queen); + } + + @Override + public boolean damagePlayerIfVulnerable(int damage, long damageCooldownMs) { + return port.damagePlayerIfVulnerable(damage, damageCooldownMs); + } + + public interface Port { + void spawnQueenMinion(SwarmQueenData queen); + + boolean damagePlayerIfVulnerable(int damage, long damageCooldownMs); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/ui/NeonButtonRenderer.java b/core/src/main/java/ru/project/tower/screens/gamescreen/ui/NeonButtonRenderer.java new file mode 100644 index 0000000..93ed37c --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/ui/NeonButtonRenderer.java @@ -0,0 +1,75 @@ +package ru.project.tower.screens.gamescreen.ui; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.math.Rectangle; + +public final class NeonButtonRenderer { + private NeonButtonRenderer() {} + + public static void drawFill( + ShapeRenderer shapeRenderer, + Rectangle button, + Color borderColor, + Color scratchColor, + float uiScale, + float glow) { + if (button == null) return; + + shapeRenderer.setColor(0f, 0f, 0f, 0.9f); + shapeRenderer.rect(button.x, button.y, button.width, button.height); + + if (glow > 0.3f) { + shapeRenderer.setColor(withAlpha(scratchColor, borderColor, 0.15f * glow)); + + float glowSize = 4f * uiScale * glow; + shapeRenderer.rect( + button.x - glowSize, + button.y - glowSize, + button.width + glowSize * 2, + button.height + glowSize * 2); + } + } + + public static void drawBorder( + ShapeRenderer shapeRenderer, + Rectangle button, + Color borderColor, + Color scratchColor, + float glow, + boolean hovered) { + if (button == null) return; + + shapeRenderer.setColor(withAlpha(scratchColor, borderColor, 0.8f + 0.2f * glow)); + + int borderThickness = borderThickness(hovered); + for (int i = 0; i < borderThickness; i++) { + shapeRenderer.rect( + button.x + i, button.y + i, button.width - i * 2, button.height - i * 2); + } + } + + public static Color borderColor( + Color defaultColor, + Color hoverColor, + Color pressedColor, + boolean hovered, + boolean pressed) { + if (pressed) { + return pressedColor; + } else if (hovered) { + return hoverColor; + } + return defaultColor; + } + + public static int borderThickness(boolean hovered) { + return hovered ? 3 : 2; + } + + public static Color withAlpha(Color scratchColor, Color base, float alpha) { + scratchColor.set(base); + scratchColor.a = alpha; + return scratchColor; + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/ui/NeonTextRenderer.java b/core/src/main/java/ru/project/tower/screens/gamescreen/ui/NeonTextRenderer.java new file mode 100644 index 0000000..32cd1d1 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/ui/NeonTextRenderer.java @@ -0,0 +1,112 @@ +package ru.project.tower.screens.gamescreen.ui; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.GlyphLayout; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.math.Rectangle; + +public final class NeonTextRenderer { + private final GlyphLayout mainLayout = new GlyphLayout(); + private final GlyphLayout secondaryLayout = new GlyphLayout(); + + public void drawPricedButtonText( + BitmapFont font, + SpriteBatch batch, + CharSequence mainText, + CharSequence priceText, + Rectangle button, + Color priceTextColor) { + mainLayout.setText(font, mainText); + secondaryLayout.setText(font, priceText); + + float totalWidth = mainLayout.width + secondaryLayout.width; + float maxWidth = button.width * 0.9f; + float scale = 1.0f; + if (totalWidth > maxWidth) { + scale = maxWidth / totalWidth; + } + + font.getData().setScale(scale); + + mainLayout.setText(font, mainText); + secondaryLayout.setText(font, priceText); + totalWidth = mainLayout.width + secondaryLayout.width; + + float textX = button.x + (button.width - totalWidth) / 2; + float textY = button.y + (button.height + mainLayout.height) / 2; + + font.setColor(1f, 1f, 1f, 1f); + font.draw(batch, mainText, textX, textY); + + font.setColor(priceTextColor); + font.draw(batch, priceText, textX + mainLayout.width, textY); + + font.getData().setScale(1.0f); + font.setColor(1f, 1f, 1f, 1f); + } + + public void drawNeonButtonText( + BitmapFont font, + SpriteBatch batch, + CharSequence mainText, + CharSequence secondaryText, + Rectangle button, + Color secondaryColor) { + mainLayout.setText(font, mainText); + secondaryLayout.setText(font, secondaryText); + + float totalWidth = mainLayout.width; + if (secondaryText.length() > 0) { + totalWidth += secondaryLayout.width; + } + float maxWidth = button.width * 0.9f; + + float scale = 1.0f; + if (totalWidth > maxWidth) { + scale = maxWidth / totalWidth; + } + + font.getData().setScale(scale); + + mainLayout.setText(font, mainText); + secondaryLayout.setText(font, secondaryText); + totalWidth = mainLayout.width; + if (secondaryText.length() > 0) { + totalWidth += secondaryLayout.width; + } + + float textX = button.x + (button.width - totalWidth) / 2; + float textY = button.y + (button.height + mainLayout.height) / 2; + + font.setColor(Color.WHITE); + font.draw(batch, mainText, textX, textY); + + if (secondaryText.length() > 0) { + font.setColor(secondaryColor); + font.draw(batch, secondaryText, textX + mainLayout.width, textY); + } + + font.getData().setScale(1.0f); + } + + public void drawCenteredText( + BitmapFont font, SpriteBatch batch, CharSequence text, Rectangle button) { + mainLayout.setText(font, text); + + float maxButtonWidth = button.width * 0.9f; + if (mainLayout.width > maxButtonWidth) { + float scale = maxButtonWidth / mainLayout.width; + font.getData().setScale(scale); + mainLayout.setText(font, text); + } + + font.draw( + batch, + text, + button.x + (button.width - mainLayout.width) / 2, + button.y + (button.height + mainLayout.height) / 2); + + font.getData().setScale(1.0f); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/upgrades/GameScreenUpgradeHost.java b/core/src/main/java/ru/project/tower/screens/gamescreen/upgrades/GameScreenUpgradeHost.java new file mode 100644 index 0000000..6a4b6dc --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/upgrades/GameScreenUpgradeHost.java @@ -0,0 +1,74 @@ +package ru.project.tower.screens.gamescreen.upgrades; + +import com.badlogic.gdx.graphics.Color; +import java.util.Objects; +import ru.project.tower.entities.bullets.BulletSystem; +import ru.project.tower.player.PlayerCombatState; +import ru.project.tower.upgrades.UpgradeHost; + +public final class GameScreenUpgradeHost implements UpgradeHost { + private final Host host; + private final BulletSystem bulletSystem; + private final PlayerCombatState playerCombatState; + + public GameScreenUpgradeHost( + Host host, BulletSystem bulletSystem, PlayerCombatState playerCombatState) { + this.host = Objects.requireNonNull(host, "host"); + this.bulletSystem = Objects.requireNonNull(bulletSystem, "bulletSystem"); + this.playerCombatState = Objects.requireNonNull(playerCombatState, "playerCombatState"); + } + + @Override + public void addRunDamagePercentBonus(int percent) { + int bonus = Math.max(1, bulletSystem.getBaseDamage() * percent / 100); + bulletSystem.addRunDamageBonus(bonus); + } + + @Override + public void addRunPierceBonus(int bonus) { + bulletSystem.addRunPierceBonus(bonus); + } + + @Override + public void addRunAoeBonus(float radiusBonus) { + bulletSystem.addRunAoeBonus(radiusBonus); + } + + @Override + public void addMaxHealth(int amount) { + playerCombatState.setMaxHealth(playerCombatState.getMaxHealth() + amount); + } + + @Override + public void healToFull() { + playerCombatState.setHealth(playerCombatState.getMaxHealth()); + } + + @Override + public void addHealthRegen(int perSecond) { + playerCombatState.setHealthRegenRate(playerCombatState.getHealthRegenRate() + perSecond); + } + + @Override + public void addFloatingText(float x, float y, String text, Color color) { + host.addFloatingText(x, y, text, color); + } + + @Override + public float getPlayerCenterX() { + return host.playerCenterX(); + } + + @Override + public float getPlayerCenterY() { + return host.playerCenterY(); + } + + public interface Host { + void addFloatingText(float x, float y, String text, Color color); + + float playerCenterX(); + + float playerCenterY(); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/upgrades/GameScreenUpgradeHostAdapter.java b/core/src/main/java/ru/project/tower/screens/gamescreen/upgrades/GameScreenUpgradeHostAdapter.java new file mode 100644 index 0000000..942e2ea --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/upgrades/GameScreenUpgradeHostAdapter.java @@ -0,0 +1,35 @@ +package ru.project.tower.screens.gamescreen.upgrades; + +import com.badlogic.gdx.graphics.Color; +import java.util.Objects; + +public final class GameScreenUpgradeHostAdapter implements GameScreenUpgradeHost.Host { + private final Port port; + + public GameScreenUpgradeHostAdapter(Port port) { + this.port = Objects.requireNonNull(port, "port"); + } + + @Override + public void addFloatingText(float x, float y, String text, Color color) { + port.addUpgradeFloatingText(x, y, text, color); + } + + @Override + public float playerCenterX() { + return port.playerCenterX(); + } + + @Override + public float playerCenterY() { + return port.playerCenterY(); + } + + public interface Port { + void addUpgradeFloatingText(float x, float y, String text, Color color); + + float playerCenterX(); + + float playerCenterY(); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/vfx/GameScreenBackgroundRenderer.java b/core/src/main/java/ru/project/tower/screens/gamescreen/vfx/GameScreenBackgroundRenderer.java new file mode 100644 index 0000000..275e255 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/vfx/GameScreenBackgroundRenderer.java @@ -0,0 +1,106 @@ +package ru.project.tower.screens.gamescreen.vfx; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.GL20; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType; +import com.badlogic.gdx.utils.Array; +import ru.project.tower.entities.particles.NeonParticle; +import ru.project.tower.screens.gamescreen.visual.GameScreenVisualTokens; + +public final class GameScreenBackgroundRenderer { + public void render( + ShapeRenderer shapeRenderer, + Array backgroundParticles, + float width, + float height, + float time, + float uiScale, + Color gridColor, + Color scratchColor) { + renderNeonGrid(shapeRenderer, width, height, time, uiScale, gridColor, scratchColor); + renderBackgroundParticles(shapeRenderer, backgroundParticles); + } + + private void renderNeonGrid( + ShapeRenderer shapeRenderer, + float width, + float height, + float time, + float uiScale, + Color gridColor, + Color scratchColor) { + Gdx.gl.glEnable(GL20.GL_BLEND); + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); + shapeRenderer.begin(ShapeType.Line); + + float minorSpacing = GameScreenVisualTokens.Grid.MINOR_SPACING * uiScale; + float strongSpacing = GameScreenVisualTokens.Grid.STRONG_SPACING * uiScale; + float minorOffset = gridDriftOffset(minorSpacing, time, uiScale); + float strongOffset = gridDriftOffset(strongSpacing, time, uiScale); + + drawGridLines( + shapeRenderer, + width, + height, + minorSpacing, + minorOffset, + scratchColor.set( + GameScreenVisualTokens.Grid.MINOR_RED, + GameScreenVisualTokens.Grid.MINOR_GREEN, + GameScreenVisualTokens.Grid.MINOR_BLUE, + GameScreenVisualTokens.Grid.MINOR_ALPHA)); + drawGridLines( + shapeRenderer, + width, + height, + strongSpacing, + strongOffset, + scratchColor.set( + GameScreenVisualTokens.Grid.STRONG_RED, + GameScreenVisualTokens.Grid.STRONG_GREEN, + GameScreenVisualTokens.Grid.STRONG_BLUE, + GameScreenVisualTokens.Grid.STRONG_ALPHA)); + + shapeRenderer.end(); + } + + private float gridDriftOffset(float spacing, float time, float uiScale) { + float baseOffset = GameScreenVisualTokens.Grid.OFFSET * uiScale; + float drift = time * GameScreenVisualTokens.Grid.DRIFT_SPEED * uiScale; + float offset = (baseOffset + drift) % spacing; + return offset < 0f ? offset + spacing : offset; + } + + private void drawGridLines( + ShapeRenderer shapeRenderer, + float width, + float height, + float spacing, + float offset, + Color color) { + shapeRenderer.setColor(color); + for (float y = offset - spacing; y < height; y += spacing) { + shapeRenderer.line(0f, y, width, y); + } + for (float x = offset - spacing; x < width; x += spacing) { + shapeRenderer.line(x, 0f, x, height); + } + } + + private void renderBackgroundParticles( + ShapeRenderer shapeRenderer, Array backgroundParticles) { + Gdx.gl.glEnable(GL20.GL_BLEND); + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE); + + shapeRenderer.begin(ShapeType.Filled); + for (NeonParticle particle : backgroundParticles) { + shapeRenderer.setColor(particle.color); + shapeRenderer.circle(particle.position.x, particle.position.y, particle.size); + } + shapeRenderer.end(); + + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/vfx/GameScreenFloatingTextLayout.java b/core/src/main/java/ru/project/tower/screens/gamescreen/vfx/GameScreenFloatingTextLayout.java new file mode 100644 index 0000000..a75b3c3 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/vfx/GameScreenFloatingTextLayout.java @@ -0,0 +1,117 @@ +package ru.project.tower.screens.gamescreen.vfx; + +final class GameScreenFloatingTextLayout { + private GameScreenFloatingTextLayout() {} + + static float fittedScale( + float rawWidth, + float rawHeight, + float viewportWidth, + float viewportHeight, + float safeInset) { + return fittedScale( + rawWidth, + rawHeight, + viewportWidth, + viewportHeight, + safeInset, + safeInset, + safeInset, + safeInset); + } + + static float fittedScale( + float rawWidth, + float rawHeight, + float viewportWidth, + float viewportHeight, + float leftInset, + float rightInset, + float bottomInset, + float topInset) { + float maxWidth = Math.max(1f, viewportWidth - leftInset - rightInset); + float maxHeight = Math.max(1f, viewportHeight - bottomInset - topInset); + float widthScale = rawWidth <= 0f ? 1f : maxWidth / rawWidth; + float heightScale = rawHeight <= 0f ? 1f : maxHeight / rawHeight; + return Math.min(1f, Math.min(widthScale, heightScale)); + } + + static Bounds bounds( + float centerX, + float baselineY, + float width, + float height, + float safeInset, + float viewportWidth, + float viewportHeight) { + return bounds( + centerX, + baselineY, + width, + height, + safeInset, + safeInset, + safeInset, + safeInset, + viewportWidth, + viewportHeight); + } + + static Bounds bounds( + float centerX, + float baselineY, + float width, + float height, + float leftInset, + float rightInset, + float bottomInset, + float topInset, + float viewportWidth, + float viewportHeight) { + float left = + clamp( + centerX - width / 2f, + leftInset, + Math.max(leftInset, viewportWidth - width - rightInset)); + float bottom = + clamp( + baselineY - height, + bottomInset, + Math.max(bottomInset, viewportHeight - height - topInset)); + return new Bounds(left, bottom, left + width, bottom + height); + } + + private static float clamp(float value, float min, float max) { + return Math.max(min, Math.min(max, value)); + } + + static final class Bounds { + private final float left; + private final float bottom; + private final float right; + private final float top; + + private Bounds(float left, float bottom, float right, float top) { + this.left = left; + this.bottom = bottom; + this.right = right; + this.top = top; + } + + float left() { + return left; + } + + float bottom() { + return bottom; + } + + float right() { + return right; + } + + float top() { + return top; + } + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/vfx/GameScreenFloatingTextSystem.java b/core/src/main/java/ru/project/tower/screens/gamescreen/vfx/GameScreenFloatingTextSystem.java new file mode 100644 index 0000000..89f9964 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/vfx/GameScreenFloatingTextSystem.java @@ -0,0 +1,43 @@ +package ru.project.tower.screens.gamescreen.vfx; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.utils.Array; +import com.badlogic.gdx.utils.Pools; +import ru.project.tower.entities.particles.FloatingText; + +public final class GameScreenFloatingTextSystem { + private final Array items = new Array<>(); + + public void spawn(float x, float y, String text, Color color) { + FloatingText floatingText = Pools.obtain(FloatingText.class); + floatingText.configure(x, y, text, color); + items.add(floatingText); + } + + public void spawn( + float x, + float y, + String text, + Color color, + float maxLifetime, + float initialScale, + float riseSpeed) { + FloatingText floatingText = Pools.obtain(FloatingText.class); + floatingText.configure(x, y, text, color, maxLifetime, initialScale, riseSpeed); + items.add(floatingText); + } + + public void update(float delta) { + for (int i = items.size - 1; i >= 0; i--) { + FloatingText text = items.get(i); + text.update(delta); + if (!text.isAlive()) { + Pools.free(items.removeIndex(i)); + } + } + } + + public Array items() { + return items; + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/vfx/GameScreenImpactEffects.java b/core/src/main/java/ru/project/tower/screens/gamescreen/vfx/GameScreenImpactEffects.java new file mode 100644 index 0000000..e48fca7 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/vfx/GameScreenImpactEffects.java @@ -0,0 +1,82 @@ +package ru.project.tower.screens.gamescreen.vfx; + +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.math.MathUtils; +import com.badlogic.gdx.math.Matrix4; + +public final class GameScreenImpactEffects { + private float shakeIntensity = 0f; + private float hitstopTimer = 0f; + private Matrix4 originalShapeProjection; + private Matrix4 originalBatchProjection; + private final Matrix4 shakeMatrix = new Matrix4(); + + public void applyDamageShake(int damage) { + shakeIntensity = Math.max(shakeIntensity, Math.min(15f, damage * 1.5f)); + } + + public void applyCritHitstop() { + hitstopTimer = Math.max(hitstopTimer, 0.05f); + shakeIntensity = Math.max(shakeIntensity, 4f); + } + + public void applyBossKillShake() { + shakeIntensity = Math.max(shakeIntensity, 25f); + hitstopTimer = Math.max(hitstopTimer, 0.08f); + } + + public void applyKillShake() { + shakeIntensity = Math.max(shakeIntensity, 2f); + } + + public void applyShake(float intensity, float hitstopSeconds) { + shakeIntensity = Math.max(shakeIntensity, intensity); + hitstopTimer = Math.max(hitstopTimer, hitstopSeconds); + } + + public void captureBaseProjection(ShapeRenderer shapeRenderer, SpriteBatch batch) { + if (shapeRenderer != null) { + originalShapeProjection = new Matrix4(shapeRenderer.getProjectionMatrix()); + } + if (batch != null) { + originalBatchProjection = new Matrix4(batch.getProjectionMatrix()); + } + } + + public void resetProjection(ShapeRenderer shapeRenderer, SpriteBatch batch) { + if (originalShapeProjection != null && shapeRenderer != null) { + shapeRenderer.setProjectionMatrix(originalShapeProjection); + } + if (originalBatchProjection != null && batch != null) { + batch.setProjectionMatrix(originalBatchProjection); + } + } + + public float applyFrameEffects(float delta, ShapeRenderer shapeRenderer, SpriteBatch batch) { + float rawDelta = delta; + if (hitstopTimer > 0f) { + hitstopTimer -= rawDelta; + delta *= 0.15f; + } + + if (shakeIntensity > 0.01f) { + float shakeX = MathUtils.random(-shakeIntensity, shakeIntensity); + float shakeY = MathUtils.random(-shakeIntensity, shakeIntensity); + shakeIntensity = Math.max(0f, shakeIntensity - 60f * rawDelta); + if (originalShapeProjection != null + && originalBatchProjection != null + && shapeRenderer != null + && batch != null) { + shakeMatrix.set(originalShapeProjection).translate(shakeX, shakeY, 0f); + shapeRenderer.setProjectionMatrix(shakeMatrix); + shakeMatrix.set(originalBatchProjection).translate(shakeX, shakeY, 0f); + batch.setProjectionMatrix(shakeMatrix); + } + } else { + shakeIntensity = 0f; + } + + return delta; + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/vfx/GameScreenParticleEffects.java b/core/src/main/java/ru/project/tower/screens/gamescreen/vfx/GameScreenParticleEffects.java new file mode 100644 index 0000000..8ce239b --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/vfx/GameScreenParticleEffects.java @@ -0,0 +1,179 @@ +package ru.project.tower.screens.gamescreen.vfx; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.math.MathUtils; +import com.badlogic.gdx.utils.Array; +import com.badlogic.gdx.utils.Pools; +import ru.project.tower.entities.bullets.BulletData; +import ru.project.tower.entities.particles.NeonParticle; + +public final class GameScreenParticleEffects { + static final int MAX_BULLET_TRAIL_PARTICLES = 180; + private static final int MAX_BULLET_TRAIL_SPAWNS_PER_UPDATE = 24; + private static final float NORMAL_BULLET_TRAIL_PARTICLES_PER_SECOND = 18f; + private static final float CRIT_BULLET_TRAIL_PARTICLES_PER_SECOND = 36f; + private static final float SPAWN_BUDGET_EPSILON = 0.0001f; + + private final Array bulletParticles = new Array<>(); + private final Array backgroundParticles = new Array<>(); + private final Color scratchColor = new Color(); + + public void initBackgroundParticles(float width, float height, float uiScale, Color[] colors) { + clearParticles(backgroundParticles); + int particleCount = (int) (30 * uiScale); + for (int i = 0; i < particleCount; i++) { + float x = MathUtils.random(0f, width); + float y = MathUtils.random(0f, height); + + Color color = scratchColor; + if (colors.length > 0) { + color.set(colors[MathUtils.random(colors.length - 1)]); + } + color.a = 0.3f; + + NeonParticle particle = Pools.obtain(NeonParticle.class); + particle.configure(x, y, color); + particle.maxLifetime = MathUtils.random(5f, 10f); + particle.lifetime = particle.maxLifetime; + particle.velocity.scl(0.2f); + particle.size *= 2f; + + backgroundParticles.add(particle); + } + } + + public void update(float delta, float width, float height) { + for (int i = backgroundParticles.size - 1; i >= 0; i--) { + NeonParticle particle = backgroundParticles.get(i); + particle.update(delta); + + if (particle.lifetime <= 0f) { + particle.position.x = MathUtils.random(0f, width); + particle.position.y = MathUtils.random(0f, height); + particle.lifetime = particle.maxLifetime; + particle.color.a = 1f; + } + } + + for (int i = bulletParticles.size - 1; i >= 0; i--) { + NeonParticle particle = bulletParticles.get(i); + particle.update(delta); + + if (particle.lifetime <= 0f) { + Pools.free(bulletParticles.removeIndex(i)); + } + } + } + + public void emitBulletTrails( + float delta, + Array bullets, + Color playerBulletColor, + Color critBulletColor, + Color enemyBulletColor) { + if (delta <= 0f + || bullets.size == 0 + || bulletParticles.size >= MAX_BULLET_TRAIL_PARTICLES) { + return; + } + + int remainingThisUpdate = MAX_BULLET_TRAIL_SPAWNS_PER_UPDATE; + for (BulletData bullet : bullets) { + if (remainingThisUpdate == 0 || bulletParticles.size >= MAX_BULLET_TRAIL_PARTICLES) { + break; + } + + float rate = + bullet.isCrit() + ? CRIT_BULLET_TRAIL_PARTICLES_PER_SECOND + : NORMAL_BULLET_TRAIL_PARTICLES_PER_SECOND; + bullet.trailParticleSpawnBudget += delta * rate; + int spawnCount = (int) (bullet.trailParticleSpawnBudget + SPAWN_BUDGET_EPSILON); + if (spawnCount <= 0) { + continue; + } + + int capacity = MAX_BULLET_TRAIL_PARTICLES - bulletParticles.size; + spawnCount = Math.min(spawnCount, Math.min(remainingThisUpdate, capacity)); + bullet.trailParticleSpawnBudget -= spawnCount; + remainingThisUpdate -= spawnCount; + + Color color = playerBulletColor; + if (bullet.isEnemyBullet()) { + color = enemyBulletColor; + } else if (bullet.isCrit()) { + color = critBulletColor; + } + for (int i = 0; i < spawnCount; i++) { + spawnBulletParticle(bullet.getX(), bullet.getY(), color); + } + } + } + + public void spawnBulletParticle(float x, float y, Color color) { + NeonParticle particle = Pools.obtain(NeonParticle.class); + particle.configure(x, y, color); + bulletParticles.add(particle); + } + + public void createExplosion(float x, float y, Color color) { + createExplosion(x, y, color, 20); + } + + public void createExplosion(float x, float y, Color color, int particleCount) { + int resolvedParticleCount = particleCount > 0 ? particleCount : 20; + for (int i = 0; i < resolvedParticleCount; i++) { + NeonParticle particle = Pools.obtain(NeonParticle.class); + particle.configure(x, y, color); + float angle = MathUtils.random(0f, 360f); + float speed = MathUtils.random(25f, 50f); + particle.velocity.set(MathUtils.cosDeg(angle) * speed, MathUtils.sinDeg(angle) * speed); + + particle.maxLifetime = MathUtils.random(0.1f, 0.3f); + particle.lifetime = particle.maxLifetime; + particle.size = MathUtils.random(2f, 4f); + + bulletParticles.add(particle); + } + } + + public void createExplosion(float x, float y, float[] color) { + createExplosion(x, y, scratchColor.set(color[0], color[1], color[2], color[3])); + } + + public void createBossParticles( + float x, float y, float radius, Color color, float spread, int count) { + for (int i = 0; i < count; i++) { + float angle = MathUtils.random(360f); + float distance = MathUtils.random(radius * 0.5f, radius * spread); + float particleX = x + distance * MathUtils.cosDeg(angle); + float particleY = y + distance * MathUtils.sinDeg(angle); + + float size = MathUtils.random(2f, 5f); + float lifetime = MathUtils.random(0.5f, 1.5f); + + NeonParticle particle = Pools.obtain(NeonParticle.class); + particle.configure(particleX, particleY, color); + particle.velocity.set(MathUtils.random(-50f, 50f), MathUtils.random(-50f, 50f)); + particle.size = size; + particle.maxLifetime = lifetime; + particle.lifetime = lifetime; + + bulletParticles.add(particle); + } + } + + public Array bulletParticles() { + return bulletParticles; + } + + public Array backgroundParticles() { + return backgroundParticles; + } + + private void clearParticles(Array particles) { + while (particles.size > 0) { + Pools.free(particles.removeIndex(particles.size - 1)); + } + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/vfx/GameScreenVfxModel.java b/core/src/main/java/ru/project/tower/screens/gamescreen/vfx/GameScreenVfxModel.java new file mode 100644 index 0000000..6ff59e7 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/vfx/GameScreenVfxModel.java @@ -0,0 +1,318 @@ +package ru.project.tower.screens.gamescreen.vfx; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.math.Rectangle; +import com.badlogic.gdx.utils.Array; +import ru.project.tower.abilities.AbilitySystem; +import ru.project.tower.entities.particles.FloatingText; +import ru.project.tower.entities.particles.NeonParticle; +import ru.project.tower.screens.gamescreen.assets.GameScreenMaterialAssets; + +public final class GameScreenVfxModel { + private final GameScreenVfxRenderContext renderContext = new GameScreenVfxRenderContext(); + private final GameScreenVfxViewModel viewModel = new GameScreenVfxViewModel(); + + public GameScreenVfxModel() {} + + GameScreenVfxRenderContext renderContext() { + return renderContext; + } + + GameScreenVfxViewModel viewModel() { + return viewModel; + } + + public void populateRenderContext(RenderContextData data) { + populateRenderContext( + data.shapeRenderer(), + data.batch(), + data.font(), + data.materialAssets(), + data.floatingTextFont(), + data.scratchColor()); + } + + public void populateRenderContext( + ShapeRenderer shapeRenderer, + SpriteBatch batch, + BitmapFont font, + GameScreenMaterialAssets materialAssets, + BitmapFont floatingTextFont, + Color scratchColor) { + renderContext.shapeRenderer = shapeRenderer; + renderContext.batch = batch; + renderContext.font = font; + renderContext.materialAssets = materialAssets; + renderContext.floatingTextFont = floatingTextFont; + renderContext.scratchColor = scratchColor; + } + + public void populateView(ViewState state) { + populateView( + state.bulletParticles(), + state.floatingTexts(), + state.abilitySystem(), + state.square(), + state.adaptedSquareSize(), + state.viewportWidth(), + state.viewportHeight(), + state.time(), + state.nowMs(), + state.pulseSpeed(), + state.uiScale(), + state.neonBlue(), + state.neonCyan(), + state.neonGreen(), + state.neonYellow(), + state.neonRed(), + state.neonPurple()); + } + + public void populateView( + Array bulletParticles, + Array floatingTexts, + AbilitySystem abilitySystem, + Rectangle square, + float adaptedSquareSize, + int viewportWidth, + int viewportHeight, + float time, + long nowMs, + float pulseSpeed, + float uiScale, + Color neonBlue, + Color neonCyan, + Color neonGreen, + Color neonYellow, + Color neonRed, + Color neonPurple) { + viewModel.bulletParticles = bulletParticles; + viewModel.floatingTexts = floatingTexts; + viewModel.abilitySystem = abilitySystem; + viewModel.square = square; + viewModel.adaptedSquareSize = adaptedSquareSize; + viewModel.viewportWidth = viewportWidth; + viewModel.viewportHeight = viewportHeight; + viewModel.time = time; + viewModel.nowMs = nowMs; + viewModel.pulseSpeed = pulseSpeed; + viewModel.uiScale = uiScale; + viewModel.neonBlue = neonBlue; + viewModel.neonCyan = neonCyan; + viewModel.neonGreen = neonGreen; + viewModel.neonYellow = neonYellow; + viewModel.neonRed = neonRed; + viewModel.neonPurple = neonPurple; + } + + public static final class RenderContextData { + private final ShapeRenderer shapeRenderer; + private final SpriteBatch batch; + private final BitmapFont font; + private final GameScreenMaterialAssets materialAssets; + private final BitmapFont floatingTextFont; + private final Color scratchColor; + + public RenderContextData( + ShapeRenderer shapeRenderer, + SpriteBatch batch, + BitmapFont font, + GameScreenMaterialAssets materialAssets, + BitmapFont floatingTextFont, + Color scratchColor) { + this.shapeRenderer = shapeRenderer; + this.batch = batch; + this.font = font; + this.materialAssets = materialAssets; + this.floatingTextFont = floatingTextFont; + this.scratchColor = scratchColor; + } + + public ShapeRenderer shapeRenderer() { + return shapeRenderer; + } + + public SpriteBatch batch() { + return batch; + } + + public BitmapFont font() { + return font; + } + + public GameScreenMaterialAssets materialAssets() { + return materialAssets; + } + + public BitmapFont floatingTextFont() { + return floatingTextFont; + } + + public Color scratchColor() { + return scratchColor; + } + } + + public static final class ViewState { + private final Array bulletParticles; + private final Array floatingTexts; + private final AbilitySystem abilitySystem; + private final Rectangle square; + private final float adaptedSquareSize; + private final int viewportWidth; + private final int viewportHeight; + private final float time; + private final long nowMs; + private final float pulseSpeed; + private final float uiScale; + private final Color neonBlue; + private final Color neonCyan; + private final Color neonGreen; + private final Color neonYellow; + private final Color neonRed; + private final Color neonPurple; + + public ViewState( + Array bulletParticles, + Array floatingTexts, + AbilitySystem abilitySystem, + Rectangle square, + float adaptedSquareSize, + int viewportWidth, + int viewportHeight, + float time, + long nowMs, + float pulseSpeed, + float uiScale, + Color neonBlue, + Color neonCyan, + Color neonGreen, + Color neonYellow, + Color neonRed, + Color neonPurple) { + this.bulletParticles = bulletParticles; + this.floatingTexts = floatingTexts; + this.abilitySystem = abilitySystem; + this.square = square; + this.adaptedSquareSize = adaptedSquareSize; + this.viewportWidth = viewportWidth; + this.viewportHeight = viewportHeight; + this.time = time; + this.nowMs = nowMs; + this.pulseSpeed = pulseSpeed; + this.uiScale = uiScale; + this.neonBlue = neonBlue; + this.neonCyan = neonCyan; + this.neonGreen = neonGreen; + this.neonYellow = neonYellow; + this.neonRed = neonRed; + this.neonPurple = neonPurple; + } + + public Array bulletParticles() { + return bulletParticles; + } + + public Array floatingTexts() { + return floatingTexts; + } + + public AbilitySystem abilitySystem() { + return abilitySystem; + } + + public Rectangle square() { + return square; + } + + public float adaptedSquareSize() { + return adaptedSquareSize; + } + + public int viewportWidth() { + return viewportWidth; + } + + public int viewportHeight() { + return viewportHeight; + } + + public float time() { + return time; + } + + public long nowMs() { + return nowMs; + } + + public float pulseSpeed() { + return pulseSpeed; + } + + public float uiScale() { + return uiScale; + } + + public Color neonBlue() { + return neonBlue; + } + + public Color neonCyan() { + return neonCyan; + } + + public Color neonGreen() { + return neonGreen; + } + + public Color neonYellow() { + return neonYellow; + } + + public Color neonRed() { + return neonRed; + } + + public Color neonPurple() { + return neonPurple; + } + } +} + +final class GameScreenVfxRenderContext { + ShapeRenderer shapeRenderer; + SpriteBatch batch; + BitmapFont font; + GameScreenMaterialAssets materialAssets; + BitmapFont floatingTextFont; + Color scratchColor; + + Color withAlpha(Color base, float alpha) { + scratchColor.set(base); + scratchColor.a = alpha; + return scratchColor; + } +} + +final class GameScreenVfxViewModel { + Array bulletParticles; + Array floatingTexts; + AbilitySystem abilitySystem; + Rectangle square; + float adaptedSquareSize; + int viewportWidth; + int viewportHeight; + float time; + long nowMs; + float pulseSpeed; + float uiScale; + Color neonBlue; + Color neonCyan; + Color neonGreen; + Color neonYellow; + Color neonRed; + Color neonPurple; +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/vfx/GameScreenVfxRenderer.java b/core/src/main/java/ru/project/tower/screens/gamescreen/vfx/GameScreenVfxRenderer.java new file mode 100644 index 0000000..f8b4c30 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/vfx/GameScreenVfxRenderer.java @@ -0,0 +1,667 @@ +package ru.project.tower.screens.gamescreen.vfx; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.GL20; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.GlyphLayout; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType; +import com.badlogic.gdx.math.MathUtils; +import ru.project.tower.abilities.AbilityEffect; +import ru.project.tower.abilities.AbilitySystem; +import ru.project.tower.abilities.Turret; +import ru.project.tower.entities.particles.FloatingText; +import ru.project.tower.entities.particles.NeonParticle; + +public final class GameScreenVfxRenderer { + private static final float FLOATING_TEXT_SAFE_INSET = 8f; + private static final float FLOATING_TEXT_TOP_SAFE_INSET = 112f; + private static final float FLOATING_TEXT_BOTTOM_SAFE_INSET = 76f; + private static final float FLOATING_TEXT_FONT_SCALE = 1.5f; + private static final float FREEZE_VISUAL_RADIUS_SCALE = 1.34f; + private static final float EXPLOSION_VISUAL_RADIUS_SCALE = 1.24f; + private static final float EXPLOSION_VISUAL_MIN_PROGRESS = 0.42f; + + public interface Host { + GameScreenVfxModel vfxModel(); + } + + private final Host host; + private final GlyphLayout floatingTextLayout = new GlyphLayout(); + + public GameScreenVfxRenderer(Host host) { + this.host = host; + } + + public void renderVfx() { + renderTurrets(); + renderAbilityEffects(); + renderParticles(); + renderFloatingTexts(); + } + + private GameScreenVfxModel model() { + return host.vfxModel(); + } + + void renderTurrets() { + GameScreenVfxModel model = model(); + GameScreenVfxRenderContext context = model.renderContext(); + GameScreenVfxViewModel view = model.viewModel(); + ShapeRenderer shapeRenderer = context.shapeRenderer; + if (view.abilitySystem.getActiveTurrets().size == 0) return; + if (renderTurretMaterials(context, view)) return; + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE); + shapeRenderer.begin(ShapeType.Filled); + float pulse = 0.5f + 0.5f * (float) Math.sin(view.time * view.pulseSpeed * 2f); + long now = view.nowMs; + for (Turret turret : view.abilitySystem.getActiveTurrets()) { + float lifeFrac = 1f - (now - turret.spawnedAt) / (float) AbilitySystem.TURRET_LIFETIME; + lifeFrac = Math.max(0f, Math.min(1f, lifeFrac)); + float core = 8f * view.uiScale; + for (int i = 3; i >= 1; i--) { + float alpha = 0.25f * pulse * (4 - i) / 3f * lifeFrac; + shapeRenderer.setColor(view.neonGreen.r, view.neonGreen.g, view.neonGreen.b, alpha); + shapeRenderer.circle(turret.x, turret.y, core + 4f * i * view.uiScale); + } + shapeRenderer.setColor(view.neonGreen.r, view.neonGreen.g, view.neonGreen.b, lifeFrac); + shapeRenderer.circle(turret.x, turret.y, core); + } + shapeRenderer.end(); + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); + } + + private boolean renderTurretMaterials(GameScreenVfxRenderContext context, GameScreenVfxViewModel view) { + if (context.batch == null + || context.materialAssets == null + || context.materialAssets.abilityTurretCore() == null + || context.materialAssets.radialGlow() == null) { + return false; + } + SpriteBatch batch = context.batch; + Texture glow = context.materialAssets.radialGlow(); + Texture coreTexture = context.materialAssets.abilityTurretCore(); + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE); + batch.begin(); + long now = view.nowMs; + for (Turret turret : view.abilitySystem.getActiveTurrets()) { + float lifeFrac = 1f - (now - turret.spawnedAt) / (float) AbilitySystem.TURRET_LIFETIME; + lifeFrac = Math.max(0f, Math.min(1f, lifeFrac)); + float pulse = 0.84f + 0.16f * (float) Math.sin(view.time * view.pulseSpeed * 2.4f); + float glowSize = 34f * view.uiScale * pulse; + batch.setColor(view.neonGreen.r, view.neonGreen.g, view.neonGreen.b, 0.28f * lifeFrac); + batch.draw(glow, turret.x - glowSize / 2f, turret.y - glowSize / 2f, glowSize, glowSize); + float coreSize = 18f * view.uiScale; + batch.setColor(view.neonGreen.r, view.neonGreen.g, view.neonGreen.b, lifeFrac); + batch.draw( + coreTexture, + turret.x - coreSize / 2f, + turret.y - coreSize / 2f, + coreSize, + coreSize); + } + batch.setColor(Color.WHITE); + batch.end(); + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); + return true; + } + + void renderAbilityEffects() { + GameScreenVfxModel model = model(); + GameScreenVfxRenderContext context = model.renderContext(); + GameScreenVfxViewModel view = model.viewModel(); + ShapeRenderer shapeRenderer = context.shapeRenderer; + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE); + + shapeRenderer.begin(ShapeType.Filled); + for (AbilityEffect effect : view.abilitySystem.getActiveEffects()) { + if (effect.type.equals("freeze")) { + renderFreezeEffect(effect); + } else if (effect.type.equals("explosion")) { + renderExplosionEffect(effect); + } else if (effect.type.equals("shield")) { + renderShieldEffect(effect); + } else if (effect.type.equals("impulse")) { + renderImpulseEffect(effect); + } + } + shapeRenderer.end(); + + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); + } + + void renderParticles() { + GameScreenVfxModel model = model(); + GameScreenVfxRenderContext context = model.renderContext(); + GameScreenVfxViewModel view = model.viewModel(); + ShapeRenderer shapeRenderer = context.shapeRenderer; + + Gdx.gl.glEnable(GL20.GL_BLEND); + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE); + + shapeRenderer.begin(ShapeType.Filled); + for (NeonParticle particle : view.bulletParticles) { + shapeRenderer.setColor(particle.color); + shapeRenderer.circle(particle.position.x, particle.position.y, particle.size); + } + shapeRenderer.end(); + + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); + } + + void renderFloatingTexts() { + GameScreenVfxModel model = model(); + GameScreenVfxRenderContext context = model.renderContext(); + GameScreenVfxViewModel view = model.viewModel(); + SpriteBatch batch = context.batch; + BitmapFont font = context.floatingTextFont; + float uiScale = view.uiScale; + + batch.begin(); + for (FloatingText text : view.floatingTexts) { + font.setColor(text.color); + float fontScale = text.scale * uiScale / FLOATING_TEXT_FONT_SCALE; + font.getData().setScale(fontScale); + floatingTextLayout.setText(font, text.text); + float safeInset = FLOATING_TEXT_SAFE_INSET * uiScale; + float topSafeInset = FLOATING_TEXT_TOP_SAFE_INSET * uiScale; + float bottomSafeInset = FLOATING_TEXT_BOTTOM_SAFE_INSET * uiScale; + float fitScale = + GameScreenFloatingTextLayout.fittedScale( + floatingTextLayout.width, + floatingTextLayout.height, + view.viewportWidth, + view.viewportHeight, + safeInset, + safeInset, + bottomSafeInset, + topSafeInset); + if (fitScale < 1f) { + font.getData().setScale(fontScale * fitScale); + floatingTextLayout.setText(font, text.text); + } + GameScreenFloatingTextLayout.Bounds bounds = + GameScreenFloatingTextLayout.bounds( + text.position.x, + text.position.y + floatingTextLayout.height, + floatingTextLayout.width, + floatingTextLayout.height, + safeInset, + safeInset, + bottomSafeInset, + topSafeInset, + view.viewportWidth, + view.viewportHeight); + font.draw(batch, text.text, bounds.left(), bounds.top()); + } + font.getData().setScale(1.0f); + font.setColor(Color.WHITE); + batch.end(); + } + + private void renderFreezeEffect(AbilityEffect effect) { + GameScreenVfxModel model = model(); + GameScreenVfxRenderContext context = model.renderContext(); + GameScreenVfxViewModel view = model.viewModel(); + ShapeRenderer shapeRenderer = context.shapeRenderer; + float percentage = effect.getRemainingPercentage(); + float freezeProgress = 1f - percentage; + float baseRadius = effect.radius * FREEZE_VISUAL_RADIUS_SCALE * (0.34f + freezeProgress * 0.34f); + float pulseAmount = 0.3f * (float) Math.sin(view.time * 7f); + + renderAbilityShockwaveSprite( + context, + shapeRenderer, + view.neonCyan, + effect.x, + effect.y, + baseRadius * 2.4f, + percentage * 0.36f); + renderFreezeRings(effect, context, view, shapeRenderer, percentage, baseRadius, pulseAmount); + renderFreezeFragments( + effect, context, view, shapeRenderer, percentage, baseRadius, pulseAmount); + shapeRenderer.setColor( + context.withAlpha(view.neonCyan, percentage * (0.22f + pulseAmount * 0.06f))); + shapeRenderer.circle(effect.x, effect.y, baseRadius * 0.10f * (1 + pulseAmount * 0.3f)); + } + + private void renderFreezeRings( + AbilityEffect effect, + GameScreenVfxRenderContext context, + GameScreenVfxViewModel view, + ShapeRenderer shapeRenderer, + float percentage, + float baseRadius, + float pulseAmount) { + int ringCount = 3; + shapeRenderer.end(); + shapeRenderer.begin(ShapeType.Line); + for (int i = 0; i < ringCount; i++) { + float ringRadius = baseRadius * (0.72f + i * 0.16f + pulseAmount * 0.025f); + shapeRenderer.setColor(context.withAlpha(view.neonCyan, percentage * (0.30f - i * 0.055f))); + shapeRenderer.circle(effect.x, effect.y, ringRadius, 96); + } + shapeRenderer.end(); + shapeRenderer.begin(ShapeType.Filled); + } + + private void renderFreezeFragments( + AbilityEffect effect, + GameScreenVfxRenderContext context, + GameScreenVfxViewModel view, + ShapeRenderer shapeRenderer, + float percentage, + float baseRadius, + float pulseAmount) { + int fragmentCount = 9; + float edgeRadius = baseRadius * 0.94f; + shapeRenderer.setColor(context.withAlpha(view.neonCyan, percentage * 0.54f)); + for (int i = 0; i < fragmentCount; i++) { + float angle = i * MathUtils.PI2 / fragmentCount + view.time * 0.13f; + float tangent = angle + MathUtils.PI / 2f; + float length = baseRadius * (0.18f + (i % 3) * 0.035f); + float midX = effect.x + MathUtils.cos(angle) * edgeRadius; + float midY = effect.y + MathUtils.sin(angle) * edgeRadius; + float halfDx = MathUtils.cos(tangent) * length * 0.5f; + float halfDy = MathUtils.sin(tangent) * length * 0.5f; + shapeRenderer.rectLine( + midX - halfDx, + midY - halfDy, + midX + halfDx, + midY + halfDy, + 1.6f * view.uiScale * (1f + pulseAmount * 0.2f)); + } + } + + private void renderExplosionEffect(AbilityEffect effect) { + GameScreenVfxModel model = model(); + GameScreenVfxRenderContext context = model.renderContext(); + GameScreenVfxViewModel view = model.viewModel(); + ShapeRenderer shapeRenderer = context.shapeRenderer; + float percentage = effect.getRemainingPercentage(); + float explosionProgress = 1 - percentage; + float pulse = 0.2f * (float) Math.sin(view.time * 15f); + float explosionRadius = + effect.radius + * EXPLOSION_VISUAL_RADIUS_SCALE + * Math.max(EXPLOSION_VISUAL_MIN_PROGRESS, explosionProgress); + + renderAbilityShockwaveSprite( + context, + shapeRenderer, + view.neonYellow, + effect.x, + effect.y, + explosionRadius * 2.15f, + percentage * 0.70f); + renderExplosionWaves( + effect, context, view, shapeRenderer, percentage, explosionRadius, pulse); + renderExplosionFragments( + effect, + context, + view, + shapeRenderer, + percentage, + explosionProgress, + explosionRadius, + pulse); + renderExplosionCore( + effect, context, view, shapeRenderer, percentage, explosionRadius, pulse); + } + + private void renderExplosionWaves( + AbilityEffect effect, + GameScreenVfxRenderContext context, + GameScreenVfxViewModel view, + ShapeRenderer shapeRenderer, + float percentage, + float explosionRadius, + float pulse) { + final float cR = view.neonYellow.r, cG = view.neonYellow.g, cB = view.neonYellow.b; + final float oR = view.neonRed.r, oG = view.neonRed.g, oB = view.neonRed.b; + + shapeRenderer.end(); + shapeRenderer.begin(ShapeType.Line); + for (int i = 0; i < 8; i++) { + float waveProgress = (float) i / 7; + float waveRadius = explosionRadius * (0.3f + waveProgress * 0.7f); + + context.scratchColor.set( + cR * (1 - waveProgress) + oR * waveProgress, + cG * (1 - waveProgress) + oG * waveProgress, + cB * (1 - waveProgress) + oB * waveProgress, + percentage * (0.30f - waveProgress * 0.13f + pulse * 0.2f * (1 - waveProgress))); + shapeRenderer.setColor(context.scratchColor); + shapeRenderer.circle(effect.x, effect.y, waveRadius, 96); + } + shapeRenderer.end(); + shapeRenderer.begin(ShapeType.Filled); + } + + private void renderExplosionFragments( + AbilityEffect effect, + GameScreenVfxRenderContext context, + GameScreenVfxViewModel view, + ShapeRenderer shapeRenderer, + float percentage, + float explosionProgress, + float explosionRadius, + float pulse) { + final float cR = view.neonYellow.r, cG = view.neonYellow.g, cB = view.neonYellow.b; + final float oR = view.neonRed.r, oG = view.neonRed.g, oB = view.neonRed.b; + int fragmentCount = 10; + float edgeRadius = explosionRadius * (0.74f + pulse * 0.08f); + context.scratchColor.set( + cR * 0.3f + oR * 0.7f, + cG * 0.3f + oG * 0.7f, + cB * 0.3f + oB * 0.7f, + percentage * 0.48f); + shapeRenderer.setColor(context.scratchColor); + for (int i = 0; i < fragmentCount; i++) { + float angle = i * MathUtils.PI2 / fragmentCount + view.time * 0.55f; + float tangent = angle + MathUtils.PI / 2f; + float length = explosionRadius * (0.12f + (i % 4) * 0.025f); + float midX = effect.x + MathUtils.cos(angle) * edgeRadius; + float midY = effect.y + MathUtils.sin(angle) * edgeRadius; + float halfDx = MathUtils.cos(tangent) * length * 0.5f; + float halfDy = MathUtils.sin(tangent) * length * 0.5f; + shapeRenderer.rectLine( + midX - halfDx, + midY - halfDy, + midX + halfDx, + midY + halfDy, + 2.0f * view.uiScale * (1 - explosionProgress * 0.35f)); + } + } + + private void renderExplosionCore( + AbilityEffect effect, + GameScreenVfxRenderContext context, + GameScreenVfxViewModel view, + ShapeRenderer shapeRenderer, + float percentage, + float explosionRadius, + float pulse) { + shapeRenderer.setColor( + context.withAlpha(view.neonYellow, percentage * (0.9f + pulse * 0.1f))); + shapeRenderer.circle(effect.x, effect.y, explosionRadius * 0.2f * (1 + pulse)); + } + + private void renderShieldEffect(AbilityEffect effect) { + GameScreenVfxModel model = model(); + GameScreenVfxRenderContext context = model.renderContext(); + GameScreenVfxViewModel view = model.viewModel(); + ShapeRenderer shapeRenderer = context.shapeRenderer; + float percentage = effect.getRemainingPercentage(); + float pulse = 0.3f * (float) Math.sin(view.time * 8f); + float slowPulse = 0.2f * (float) Math.sin(view.time * 3f); + float shieldRadius = view.adaptedSquareSize * 1.5f * (1 + pulse * 0.1f); + float centerX = view.square.x + view.square.width / 2f; + float centerY = view.square.y + view.square.height / 2f; + + renderShieldMaterialShell( + context, + view, + shapeRenderer, + percentage, + pulse, + slowPulse, + shieldRadius, + centerX, + centerY); + renderShieldSegments(context, view, shapeRenderer, percentage, pulse, shieldRadius, centerX, centerY); + } + + private void renderShieldMaterialShell( + GameScreenVfxRenderContext context, + GameScreenVfxViewModel view, + ShapeRenderer shapeRenderer, + float percentage, + float pulse, + float slowPulse, + float shieldRadius, + float centerX, + float centerY) { + if (context.batch == null + || context.materialAssets == null + || context.materialAssets.abilityShieldShell() == null) { + shapeRenderer.setColor(context.withAlpha(view.neonCyan, percentage * 0.16f)); + shapeRenderer.circle(centerX, centerY, shieldRadius, 96); + return; + } + shapeRenderer.end(); + SpriteBatch batch = context.batch; + float shellSize = shieldRadius * 2.16f; + batch.begin(); + batch.setColor( + view.neonCyan.r, + view.neonCyan.g, + Math.min(1f, view.neonCyan.b + slowPulse * 0.25f), + percentage * (0.46f + pulse * 0.08f)); + batch.draw( + context.materialAssets.abilityShieldShell(), + centerX - shellSize / 2f, + centerY - shellSize / 2f, + shellSize, + shellSize); + batch.setColor(view.neonBlue.r, view.neonBlue.g, view.neonBlue.b, percentage * 0.16f); + float innerSize = shieldRadius * 1.50f; + batch.draw( + context.materialAssets.abilityShieldShell(), + centerX - innerSize / 2f, + centerY - innerSize / 2f, + innerSize, + innerSize); + batch.setColor(Color.WHITE); + batch.end(); + shapeRenderer.begin(ShapeType.Filled); + } + + private void renderShieldSegments( + GameScreenVfxRenderContext context, + GameScreenVfxViewModel view, + ShapeRenderer shapeRenderer, + float percentage, + float pulse, + float shieldRadius, + float centerX, + float centerY) { + int segmentCount = 5; + context.scratchColor.set( + view.neonCyan.r, + view.neonCyan.g, + view.neonCyan.b, + percentage * (0.34f + pulse * 0.16f)); + shapeRenderer.setColor(context.scratchColor); + for (int i = 0; i < segmentCount; i++) { + float angle = i * MathUtils.PI2 / segmentCount + view.time * 0.38f; + float tangent = angle + MathUtils.PI / 2f; + float radius = shieldRadius * (0.97f + i * 0.004f); + float segmentLength = shieldRadius * 0.32f; + float midX = centerX + MathUtils.cos(angle) * radius; + float midY = centerY + MathUtils.sin(angle) * radius; + float halfDx = MathUtils.cos(tangent) * segmentLength * 0.5f; + float halfDy = MathUtils.sin(tangent) * segmentLength * 0.5f; + shapeRenderer.rectLine( + midX - halfDx, + midY - halfDy, + midX + halfDx, + midY + halfDy, + 1.9f * view.uiScale); + } + } + + private void renderImpulseEffect(AbilityEffect effect) { + GameScreenVfxModel model = model(); + GameScreenVfxRenderContext context = model.renderContext(); + GameScreenVfxViewModel view = model.viewModel(); + ShapeRenderer shapeRenderer = context.shapeRenderer; + float percentage = effect.getRemainingPercentage(); + float impulseProgress = 1 - percentage; + float impulseRadius = effect.radius * impulseProgress; + float ringThickness = effect.radius * 0.15f * (1 - impulseProgress * 0.7f); + float pulse = 0.2f * (float) Math.sin(view.time * 12f); + + renderAbilityShockwaveSprite( + context, + shapeRenderer, + view.neonPurple, + effect.x, + effect.y, + impulseRadius * 2.0f, + percentage * 0.38f); + renderImpulseRing( + effect, + context, + view, + shapeRenderer, + percentage, + impulseRadius, + ringThickness, + pulse); + renderImpulseSparks( + effect, + context, + view, + shapeRenderer, + percentage, + impulseProgress, + impulseRadius, + ringThickness); + renderImpulseLines( + effect, + context, + view, + shapeRenderer, + percentage, + impulseProgress, + impulseRadius, + pulse); + renderImpulseCore( + effect, context, view, shapeRenderer, percentage, impulseProgress, impulseRadius); + } + + private void renderImpulseRing( + AbilityEffect effect, + GameScreenVfxRenderContext context, + GameScreenVfxViewModel view, + ShapeRenderer shapeRenderer, + float percentage, + float impulseRadius, + float ringThickness, + float pulse) { + shapeRenderer.end(); + shapeRenderer.begin(ShapeType.Line); + shapeRenderer.setColor( + context.withAlpha(view.neonPurple, percentage * (0.44f + pulse * 0.18f))); + shapeRenderer.circle(effect.x, effect.y, impulseRadius, 64); + shapeRenderer.circle(effect.x, effect.y, Math.max(0f, impulseRadius - ringThickness), 64); + shapeRenderer.end(); + shapeRenderer.begin(ShapeType.Filled); + } + + private void renderImpulseSparks( + AbilityEffect effect, + GameScreenVfxRenderContext context, + GameScreenVfxViewModel view, + ShapeRenderer shapeRenderer, + float percentage, + float impulseProgress, + float impulseRadius, + float ringThickness) { + int sparkCount = 20; + for (int i = 0; i < sparkCount; i++) { + if (MathUtils.randomBoolean(0.5f)) { + float angle = MathUtils.random() * MathUtils.PI2; + float sparkRadius = + MathUtils.random( + impulseRadius - ringThickness * 0.5f, + impulseRadius + ringThickness * 0.5f); + float sparkSize = + MathUtils.random(1.5f, 3.5f) * view.uiScale * (1 - impulseProgress * 0.5f); + + shapeRenderer.setColor( + context.withAlpha( + view.neonPurple, percentage * MathUtils.random(0.5f, 1.0f))); + shapeRenderer.circle( + effect.x + MathUtils.cos(angle) * sparkRadius, + effect.y + MathUtils.sin(angle) * sparkRadius, + sparkSize); + } + } + } + + private void renderImpulseLines( + AbilityEffect effect, + GameScreenVfxRenderContext context, + GameScreenVfxViewModel view, + ShapeRenderer shapeRenderer, + float percentage, + float impulseProgress, + float impulseRadius, + float pulse) { + int lineCount = 8; + for (int i = 0; i < lineCount; i++) { + float angle = i * MathUtils.PI / (lineCount / 2f) + view.time * 1.5f; + float lineLength = impulseRadius * 0.6f * (0.7f + pulse * 0.3f); + + shapeRenderer.setColor( + context.withAlpha( + view.neonPurple, percentage * 0.3f * (1 - impulseProgress * 0.5f))); + shapeRenderer.rectLine( + effect.x, + effect.y, + effect.x + MathUtils.cos(angle) * lineLength, + effect.y + MathUtils.sin(angle) * lineLength, + 1.5f * view.uiScale * (1 - impulseProgress * 0.5f)); + } + } + + private void renderImpulseCore( + AbilityEffect effect, + GameScreenVfxRenderContext context, + GameScreenVfxViewModel view, + ShapeRenderer shapeRenderer, + float percentage, + float impulseProgress, + float impulseRadius) { + shapeRenderer.setColor( + context.withAlpha( + view.neonPurple, percentage * 0.5f * (1 - impulseProgress * 0.7f))); + shapeRenderer.circle( + effect.x, effect.y, impulseRadius * 0.15f * (1 - impulseProgress * 0.5f)); + } + + private void renderAbilityShockwaveSprite( + GameScreenVfxRenderContext context, + ShapeRenderer shapeRenderer, + Color color, + float centerX, + float centerY, + float size, + float alpha) { + if (size <= 0f + || alpha <= 0f + || context.batch == null + || context.materialAssets == null + || context.materialAssets.abilityShockwave() == null) { + return; + } + shapeRenderer.end(); + SpriteBatch batch = context.batch; + batch.begin(); + batch.setColor(color.r, color.g, color.b, alpha); + batch.draw( + context.materialAssets.abilityShockwave(), + centerX - size / 2f, + centerY - size / 2f, + size, + size); + batch.setColor(Color.WHITE); + batch.end(); + shapeRenderer.begin(ShapeType.Filled); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/visual/GameScreenVisualTokens.java b/core/src/main/java/ru/project/tower/screens/gamescreen/visual/GameScreenVisualTokens.java new file mode 100644 index 0000000..8450ad3 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/visual/GameScreenVisualTokens.java @@ -0,0 +1,110 @@ +package ru.project.tower.screens.gamescreen.visual; + +public final class GameScreenVisualTokens { + public static final float REFERENCE_WIDTH = 405f; + public static final float REFERENCE_HEIGHT = 682f; + + private GameScreenVisualTokens() {} + + public static final class ColorTokens { + public static final String TEXT = "#f7f9ff"; + public static final String CYAN = "#22d9ff"; + public static final String BLUE = "#5366ff"; + public static final String GOLD = "#ffcf4a"; + public static final String GREEN = "#63e68d"; + + private ColorTokens() {} + } + + public static final class Grid { + public static final float MINOR_SPACING = 80f; + public static final float STRONG_SPACING = 240f; + public static final float OFFSET = 20f; + public static final float DRIFT_SPEED = 8f; + public static final float MINOR_RED = 57f / 255f; + public static final float MINOR_GREEN = 91f / 255f; + public static final float MINOR_BLUE = 1f; + public static final float MINOR_ALPHA = 0.22f; + public static final float STRONG_RED = 76f / 255f; + public static final float STRONG_GREEN = 118f / 255f; + public static final float STRONG_BLUE = 1f; + public static final float STRONG_ALPHA = 0.30f; + + private Grid() {} + } + + public static final class Hud { + public static final float TOPBAR_HEIGHT = 46f; + public static final float WAVEBAR_HEIGHT = 6f; + public static final float STAT_STRIP_HEIGHT = 30f; + public static final float STAT_STRIP_GAP = 5f; + + private Hud() {} + } + + public static final class Layout { + public static final float MARGIN = 12f; + public static final float TOP_MARGIN = 10f; + public static final float MENU_RIGHT = 14f; + public static final float SHOP_BOTTOM = 84f; + public static final float SHOP_PADDING_X = 10f; + public static final float HANDLE_WIDTH = 42f; + public static final float HANDLE_HEIGHT = 4f; + public static final float CARD_GAP = 8f; + + private Layout() {} + } + + public static final class Menu { + public static final float SIZE = 42f; + public static final float STRIPE_WIDTH = 18f; + public static final float STRIPE_HEIGHT = 2f; + public static final float STRIPE_GAP = 2f; + public static final float FILL_RED = 12f / 255f; + public static final float FILL_GREEN = 15f / 255f; + public static final float FILL_BLUE = 25f / 255f; + public static final float FILL_ALPHA = 0.82f; + public static final float PRESSED_FILL_ALPHA = 0.96f; + + private Menu() {} + } + + public static final class Shop { + public static final float SHEET_HEIGHT = 196f; + public static final float TAB_HEIGHT = 34f; + public static final float CARD_HEIGHT = 58f; + public static final float PRICE_HEIGHT = 23f; + public static final float ACTIVE_TAB_FILL_RED = 34f / 255f; + public static final float ACTIVE_TAB_FILL_GREEN = 217f / 255f; + public static final float ACTIVE_TAB_FILL_BLUE = 1f; + public static final float ACTIVE_TAB_FILL_ALPHA = 0.16f; + + private Shop() {} + } + + public static final class Dock { + public static final float HEIGHT = 64f; + public static final float BUTTON_SIZE = 48f; + public static final float COOLDOWN_INNER_STOP = 0.52f; + public static final float TOGGLE_FILL_RED = 34f / 255f; + public static final float TOGGLE_FILL_GREEN = 217f / 255f; + public static final float TOGGLE_FILL_BLUE = 1f; + public static final float TOGGLE_FILL_ALPHA = 0.16f; + + private Dock() {} + } + + public static final class Type { + public static final int TOPBAR_SIZE = 16; + public static final int STAT_SIZE = 12; + public static final int TAB_SIZE = 14; + public static final int CARD_TITLE_SIZE = 14; + public static final int CARD_VALUE_SIZE = 17; + public static final int CARD_ARROW_SIZE = 15; + public static final int PRICE_SIZE = 13; + public static final int DOCK_LABEL_SIZE = 13; + public static final int DOCK_COOLDOWN_SIZE = 15; + + private Type() {} + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/waves/GameScreenWaveClearRewardHandler.java b/core/src/main/java/ru/project/tower/screens/gamescreen/waves/GameScreenWaveClearRewardHandler.java new file mode 100644 index 0000000..e3c2362 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/waves/GameScreenWaveClearRewardHandler.java @@ -0,0 +1,101 @@ +package ru.project.tower.screens.gamescreen.waves; + +import com.badlogic.gdx.math.MathUtils; +import java.util.Objects; +import ru.project.tower.run.GameplayColor; +import ru.project.tower.run.GameplayEventSink; +import ru.project.tower.run.GameplayEvents; +import ru.project.tower.support.RandomSource; +import ru.project.tower.waves.WaveController; + +public final class GameScreenWaveClearRewardHandler { + private static final int EXPLOSION_COUNT = 30; + private static final float MIN_EXPLOSION_DISTANCE = 20f; + private static final float MAX_EXPLOSION_DISTANCE = 60f; + private static final float HORIZONTAL_SAFE_INSET = 48f; + private static final float WAVE_CLEAR_TOP_INSET = 72f; + private static final float CURRENCY_TOP_INSET = 42f; + private static final float WAVE_CLEAR_MIN_Y = 112f; + private static final float CURRENCY_MIN_Y = 144f; + + private final Host host; + private final GameplayEventSink events; + private final RandomSource random; + + public GameScreenWaveClearRewardHandler( + Host host, GameplayEventSink events, RandomSource random) { + this.host = Objects.requireNonNull(host, "host"); + this.events = Objects.requireNonNull(events, "events"); + this.random = Objects.requireNonNull(random, "random"); + } + + public void handle(WaveController.WaveClearReward reward) { + Objects.requireNonNull(reward, "reward"); + + host.addMoney(reward.moneyBonus); + host.addCurrency(reward.currencyReward); + + float cx = safeTextX(host.playerCenterX()); + float cy = host.playerCenterY(); + events.emit( + GameplayEvents.floatingText( + cx, + safeTextY(cy + 50f, WAVE_CLEAR_MIN_Y, WAVE_CLEAR_TOP_INSET), + "Волна " + reward.clearedWave + " очищена! +" + reward.moneyBonus, + GameplayColor.NEON_GREEN, + 4.0f, + 1.5f, + 0f)); + events.emit( + GameplayEvents.floatingText( + cx, + safeTextY(cy + 80f, CURRENCY_MIN_Y, CURRENCY_TOP_INSET), + "+" + reward.currencyReward + " монет", + GameplayColor.NEON_YELLOW, + 3.5f, + 1.2f, + 0f)); + events.emit(GameplayEvents.shake(6f, 0f)); + + for (int i = 0; i < EXPLOSION_COUNT; i++) { + float angle = random.angle(); + float dist = random.range(MIN_EXPLOSION_DISTANCE, MAX_EXPLOSION_DISTANCE); + events.emit( + GameplayEvents.explosion( + cx + MathUtils.cos(angle) * dist, + cy + MathUtils.sin(angle) * dist, + GameplayColor.NEON_GREEN, + EXPLOSION_COUNT)); + } + } + + private float safeTextX(float desiredX) { + float width = host.viewportWidth(); + if (width <= HORIZONTAL_SAFE_INSET * 2f) { + return Math.max(0f, width * 0.5f); + } + return MathUtils.clamp(desiredX, HORIZONTAL_SAFE_INSET, width - HORIZONTAL_SAFE_INSET); + } + + private float safeTextY(float desiredY, float minY, float topInset) { + float height = host.viewportHeight(); + if (height <= minY + topInset) { + return Math.max(0f, height * 0.5f); + } + return MathUtils.clamp(desiredY, minY, height - topInset); + } + + public interface Host { + void addMoney(int amount); + + void addCurrency(int amount); + + float playerCenterX(); + + float playerCenterY(); + + float viewportWidth(); + + float viewportHeight(); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/waves/GameScreenWaveClearRewardHostAdapter.java b/core/src/main/java/ru/project/tower/screens/gamescreen/waves/GameScreenWaveClearRewardHostAdapter.java new file mode 100644 index 0000000..0afe9d0 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/waves/GameScreenWaveClearRewardHostAdapter.java @@ -0,0 +1,56 @@ +package ru.project.tower.screens.gamescreen.waves; + +import java.util.Objects; + +public final class GameScreenWaveClearRewardHostAdapter + implements GameScreenWaveClearRewardHandler.Host { + private final Port port; + + public GameScreenWaveClearRewardHostAdapter(Port port) { + this.port = Objects.requireNonNull(port, "port"); + } + + @Override + public void addMoney(int amount) { + port.addMoney(amount); + } + + @Override + public void addCurrency(int amount) { + port.addCurrency(amount); + } + + @Override + public float playerCenterX() { + return port.playerCenterX(); + } + + @Override + public float playerCenterY() { + return port.playerCenterY(); + } + + @Override + public float viewportWidth() { + return port.viewportWidth(); + } + + @Override + public float viewportHeight() { + return port.viewportHeight(); + } + + public interface Port { + void addMoney(int amount); + + void addCurrency(int amount); + + float playerCenterX(); + + float playerCenterY(); + + float viewportWidth(); + + float viewportHeight(); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/waves/GameScreenWaveRunEvents.java b/core/src/main/java/ru/project/tower/screens/gamescreen/waves/GameScreenWaveRunEvents.java new file mode 100644 index 0000000..7c6eed0 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/waves/GameScreenWaveRunEvents.java @@ -0,0 +1,91 @@ +package ru.project.tower.screens.gamescreen.waves; + +import java.util.Objects; +import ru.project.tower.DebugLog; +import ru.project.tower.waves.WaveController; +import ru.project.tower.waves.WaveRunEvents; +import ru.project.tower.waves.WaveTuning; + +public final class GameScreenWaveRunEvents implements WaveRunEvents { + private final Host host; + + public GameScreenWaveRunEvents(Host host) { + this.host = Objects.requireNonNull(host, "host"); + } + + @Override + public void waveStarted(int wave) {} + + @Override + public void waveTuning(WaveTuning tuning) { + logWaveTuning(tuning); + + host.applyWaveTuning(tuning); + } + + private void logWaveTuning(WaveTuning tuning) { + if (DebugLog.DEBUG) { + DebugLog.log( + "WaveSystem", + "Starting Wave " + + tuning.currentWave() + + " [Count: " + + tuning.enemiesPerWave() + + ", HP: " + + tuning.basicCircleHealth() + + ", DMG: " + + tuning.circleDamage() + + ", SpeedX: " + + tuning.enemySpeedMultiplier() + + "]"); + } + } + + @Override + public void spawnWaveCircle() { + host.spawnWaveCircle(); + } + + @Override + public void spawnRandomBoss() { + host.spawnRandomBoss(); + } + + @Override + public void waveCleared(WaveController.WaveClearReward reward) { + host.handleWaveCleared(reward); + } + + @Override + public void triggerUpgradePick() { + host.triggerUpgradePick(); + } + + @Override + public void waveClearFinished(WaveController.WaveClearReward reward) { + host.endWave(); + logWaveClearFinished(reward); + } + + private void logWaveClearFinished(WaveController.WaveClearReward reward) { + if (DebugLog.DEBUG) { + DebugLog.log( + "WaveSystem", + "Wave " + reward.clearedWave + " cleared! Bonus: " + reward.moneyBonus); + } + } + + public interface Host { + void applyWaveTuning(WaveTuning tuning); + + void spawnWaveCircle(); + + void spawnRandomBoss(); + + void handleWaveCleared(WaveController.WaveClearReward reward); + + void triggerUpgradePick(); + + void endWave(); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/gamescreen/waves/GameScreenWaveRunHostAdapter.java b/core/src/main/java/ru/project/tower/screens/gamescreen/waves/GameScreenWaveRunHostAdapter.java new file mode 100644 index 0000000..fda4816 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/gamescreen/waves/GameScreenWaveRunHostAdapter.java @@ -0,0 +1,57 @@ +package ru.project.tower.screens.gamescreen.waves; + +import java.util.Objects; +import ru.project.tower.waves.WaveController; +import ru.project.tower.waves.WaveTuning; + +public final class GameScreenWaveRunHostAdapter implements GameScreenWaveRunEvents.Host { + private final Port port; + + public GameScreenWaveRunHostAdapter(Port port) { + this.port = Objects.requireNonNull(port, "port"); + } + + @Override + public void applyWaveTuning(WaveTuning tuning) { + port.applyWaveTuning(tuning); + } + + @Override + public void spawnWaveCircle() { + port.spawnWaveCircle(); + } + + @Override + public void spawnRandomBoss() { + port.spawnRandomBoss(); + } + + @Override + public void handleWaveCleared(WaveController.WaveClearReward reward) { + port.handleWaveCleared(reward); + } + + @Override + public void triggerUpgradePick() { + port.triggerUpgradePick(); + } + + @Override + public void endWave() { + port.endWave(); + } + + public interface Port { + void applyWaveTuning(WaveTuning tuning); + + void spawnWaveCircle(); + + void spawnRandomBoss(); + + void handleWaveCleared(WaveController.WaveClearReward reward); + + void triggerUpgradePick(); + + void endWave(); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/main/MainScreenScaleMetrics.java b/core/src/main/java/ru/project/tower/screens/main/MainScreenScaleMetrics.java new file mode 100644 index 0000000..bc6070f --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/main/MainScreenScaleMetrics.java @@ -0,0 +1,46 @@ +package ru.project.tower.screens.main; + +public final class MainScreenScaleMetrics { + private static final float BASE_WIDTH = 1280f; + private static final float BASE_HEIGHT = 720f; + + private final float uiScale; + private final int adaptedFontSize; + private final boolean portrait; + + private MainScreenScaleMetrics(float uiScale, int adaptedFontSize, boolean portrait) { + this.uiScale = uiScale; + this.adaptedFontSize = adaptedFontSize; + this.portrait = portrait; + } + + public static MainScreenScaleMetrics calculate(float viewportWidth, float viewportHeight) { + boolean isPortrait = viewportHeight > viewportWidth; + float scaleX = viewportWidth / BASE_WIDTH; + float scaleY = viewportHeight / BASE_HEIGHT; + + if (isPortrait) { + float uiScale = clamp(scaleY * 1.2f, 1.0f, 2.2f); + return new MainScreenScaleMetrics(uiScale, (int) clamp(28 * uiScale, 24, 42), true); + } + + float uiScale = clamp(Math.min(scaleX, scaleY) * 1.2f, 0.8f, 1.8f); + return new MainScreenScaleMetrics(uiScale, (int) clamp(24 * uiScale, 20, 36), false); + } + + public float uiScale() { + return uiScale; + } + + public int adaptedFontSize() { + return adaptedFontSize; + } + + public boolean isPortrait() { + return portrait; + } + + private static float clamp(float value, float min, float max) { + return Math.min(max, Math.max(min, value)); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/talenttree/TalentTreeScaleMetrics.java b/core/src/main/java/ru/project/tower/screens/talenttree/TalentTreeScaleMetrics.java new file mode 100644 index 0000000..18918e5 --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/talenttree/TalentTreeScaleMetrics.java @@ -0,0 +1,40 @@ +package ru.project.tower.screens.talenttree; + +public final class TalentTreeScaleMetrics { + private static final float BASE_WIDTH = 1280f; + private static final float BASE_HEIGHT = 720f; + + private final float uiScale; + private final int adaptedFontSize; + + private TalentTreeScaleMetrics(float uiScale, int adaptedFontSize) { + this.uiScale = uiScale; + this.adaptedFontSize = adaptedFontSize; + } + + public static TalentTreeScaleMetrics calculate(float viewportWidth, float viewportHeight) { + boolean isPortrait = viewportHeight > viewportWidth; + float scaleX = viewportWidth / BASE_WIDTH; + float scaleY = viewportHeight / BASE_HEIGHT; + + if (isPortrait) { + float uiScale = clamp(scaleY, 1.0f, 1.8f); + return new TalentTreeScaleMetrics(uiScale, (int) clamp(22 * uiScale, 20, 32)); + } + + float uiScale = clamp(Math.min(scaleX, scaleY), 0.7f, 1.5f); + return new TalentTreeScaleMetrics(uiScale, (int) clamp(20 * uiScale, 18, 28)); + } + + public float uiScale() { + return uiScale; + } + + public int adaptedFontSize() { + return adaptedFontSize; + } + + private static float clamp(float value, float min, float max) { + return Math.min(max, Math.max(min, value)); + } +} diff --git a/core/src/main/java/ru/project/tower/screens/talenttree/TalentTreeScreenDependencies.java b/core/src/main/java/ru/project/tower/screens/talenttree/TalentTreeScreenDependencies.java new file mode 100644 index 0000000..099231f --- /dev/null +++ b/core/src/main/java/ru/project/tower/screens/talenttree/TalentTreeScreenDependencies.java @@ -0,0 +1,30 @@ +package ru.project.tower.screens.talenttree; + +import java.util.Objects; +import ru.project.tower.GameContext; +import ru.project.tower.player.PlayerStats; +import ru.project.tower.talents.TalentTree; + + +public final class TalentTreeScreenDependencies { + private final TalentTree talentTree; + private final PlayerStats playerStats; + + public TalentTreeScreenDependencies(TalentTree talentTree, PlayerStats playerStats) { + this.talentTree = Objects.requireNonNull(talentTree, "talentTree"); + this.playerStats = Objects.requireNonNull(playerStats, "playerStats"); + } + + public static TalentTreeScreenDependencies from(GameContext ctx) { + Objects.requireNonNull(ctx, "ctx"); + return new TalentTreeScreenDependencies(ctx.talentTree, ctx.playerStats); + } + + public TalentTree talentTree() { + return talentTree; + } + + public PlayerStats playerStats() { + return playerStats; + } +} diff --git a/core/src/main/java/ru/project/tower/support/BossEffectsHost.java b/core/src/main/java/ru/project/tower/support/BossEffectsHost.java new file mode 100644 index 0000000..611a6d7 --- /dev/null +++ b/core/src/main/java/ru/project/tower/support/BossEffectsHost.java @@ -0,0 +1,7 @@ +package ru.project.tower.support; + +import com.badlogic.gdx.graphics.Color; + +public interface BossEffectsHost { + void createBossParticles(float x, float y, float radius, Color color, float scale, int count); +} diff --git a/core/src/main/java/ru/project/tower/support/CompactNumberFormatter.java b/core/src/main/java/ru/project/tower/support/CompactNumberFormatter.java new file mode 100644 index 0000000..7f1ce4f --- /dev/null +++ b/core/src/main/java/ru/project/tower/support/CompactNumberFormatter.java @@ -0,0 +1,54 @@ +package ru.project.tower.support; + +import java.util.Locale; + +public final class CompactNumberFormatter { + private CompactNumberFormatter() {} + + public static String format(long value) { + if (value == Long.MIN_VALUE) { + return "-9.2E"; + } + long abs = Math.abs(value); + if (abs < 1_000L) { + return Long.toString(value); + } + if (abs < 1_000_000L) { + return suffix(value, 1_000f, "K"); + } + if (abs < 1_000_000_000L) { + return suffix(value, 1_000_000f, "M"); + } + if (abs < 1_000_000_000_000L) { + return suffix(value, 1_000_000_000f, "B"); + } + return suffix(value, 1_000_000_000_000f, "T"); + } + + public static String format(float value) { + return format(Math.round(value)); + } + + public static String seconds(float milliseconds) { + return String.format(Locale.ROOT, "%.2fs", milliseconds / 1000f); + } + + public static String signedPerSecond(long value) { + if (value <= 0L) { + return "0/s"; + } + return "+" + format(value) + "/s"; + } + + private static String suffix(long value, float unit, String suffix) { + float scaled = value / unit; + float absScaled = Math.abs(scaled); + if (absScaled >= 999.5f) { + return String.format(Locale.ROOT, "%.1f%s", Math.copySign(999.9f, scaled), suffix); + } + if (absScaled >= 100f || Math.abs(scaled - Math.round(scaled)) < 0.05f) { + return String.format(Locale.ROOT, "%.0f%s", scaled, suffix); + } + return String.format(Locale.ROOT, "%.1f%s", scaled, suffix); + } +} diff --git a/core/src/main/java/ru/project/tower/support/GameAssetService.java b/core/src/main/java/ru/project/tower/support/GameAssetService.java new file mode 100644 index 0000000..6fea22c --- /dev/null +++ b/core/src/main/java/ru/project/tower/support/GameAssetService.java @@ -0,0 +1,8 @@ +package ru.project.tower.support; + +import com.badlogic.gdx.audio.Sound; +import com.badlogic.gdx.utils.Disposable; + +public interface GameAssetService extends Disposable { + Sound loadOptionalSound(String path, long minBytes, String logName, String logTag); +} diff --git a/core/src/main/java/ru/project/tower/support/GameClock.java b/core/src/main/java/ru/project/tower/support/GameClock.java new file mode 100644 index 0000000..a4cafbb --- /dev/null +++ b/core/src/main/java/ru/project/tower/support/GameClock.java @@ -0,0 +1,15 @@ +package ru.project.tower.support; + +import com.badlogic.gdx.utils.TimeUtils; + +public interface GameClock { + GameClock SYSTEM = + new GameClock() { + @Override + public long nowMs() { + return TimeUtils.millis(); + } + }; + + long nowMs(); +} diff --git a/core/src/main/java/ru/project/tower/support/GameplaySoundAssets.java b/core/src/main/java/ru/project/tower/support/GameplaySoundAssets.java new file mode 100644 index 0000000..a17eb2d --- /dev/null +++ b/core/src/main/java/ru/project/tower/support/GameplaySoundAssets.java @@ -0,0 +1,52 @@ +package ru.project.tower.support; + +import com.badlogic.gdx.audio.Sound; +import com.badlogic.gdx.utils.Disposable; +import java.util.Objects; +import ru.project.tower.DebugLog; +import ru.project.tower.run.GameplaySound; + +public final class GameplaySoundAssets implements Disposable { + private static final long MIN_SOUND_BYTES = 200L; + + private final GameAssetService assetService; + private final String logTag; + private Sound shotSound; + private Sound popSound; + + public GameplaySoundAssets(GameAssetService assetService, String logTag) { + this.assetService = Objects.requireNonNull(assetService, "assetService"); + this.logTag = logTag; + } + + public void load() { + shotSound = assetService.loadOptionalSound("shot.wav", MIN_SOUND_BYTES, "shot", logTag); + popSound = assetService.loadOptionalSound("pop.wav", MIN_SOUND_BYTES, "pop", logTag); + if (shotSound == null && popSound == null) { + DebugLog.log(logTag, "Sound files not found. Game will run without sound effects."); + } + } + + public void play(GameplaySound sound, float volume, float pitch, float pan) { + switch (sound) { + case SHOT: + if (shotSound != null) { + shotSound.play(volume, pitch, pan); + } + break; + case POP: + if (popSound != null) { + popSound.play(volume, pitch, pan); + } + break; + default: + throw new IllegalArgumentException("Unsupported gameplay sound: " + sound); + } + } + + @Override + public void dispose() { + shotSound = null; + popSound = null; + } +} diff --git a/core/src/main/java/ru/project/tower/support/GdxInputProcessorInstaller.java b/core/src/main/java/ru/project/tower/support/GdxInputProcessorInstaller.java new file mode 100644 index 0000000..a70c314 --- /dev/null +++ b/core/src/main/java/ru/project/tower/support/GdxInputProcessorInstaller.java @@ -0,0 +1,11 @@ +package ru.project.tower.support; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.InputProcessor; + +public final class GdxInputProcessorInstaller implements InputProcessorInstaller { + @Override + public void setInputProcessor(InputProcessor inputProcessor) { + Gdx.input.setInputProcessor(inputProcessor); + } +} diff --git a/core/src/main/java/ru/project/tower/support/GdxViewportSize.java b/core/src/main/java/ru/project/tower/support/GdxViewportSize.java new file mode 100644 index 0000000..ef1fb6f --- /dev/null +++ b/core/src/main/java/ru/project/tower/support/GdxViewportSize.java @@ -0,0 +1,15 @@ +package ru.project.tower.support; + +import com.badlogic.gdx.Gdx; + +public final class GdxViewportSize implements ViewportSize { + @Override + public int getWidth() { + return Gdx.graphics.getWidth(); + } + + @Override + public int getHeight() { + return Gdx.graphics.getHeight(); + } +} diff --git a/core/src/main/java/ru/project/tower/support/InputProcessorInstaller.java b/core/src/main/java/ru/project/tower/support/InputProcessorInstaller.java new file mode 100644 index 0000000..e298916 --- /dev/null +++ b/core/src/main/java/ru/project/tower/support/InputProcessorInstaller.java @@ -0,0 +1,7 @@ +package ru.project.tower.support; + +import com.badlogic.gdx.InputProcessor; + +public interface InputProcessorInstaller { + void setInputProcessor(InputProcessor inputProcessor); +} diff --git a/core/src/main/java/ru/project/tower/support/LibGdxAssetService.java b/core/src/main/java/ru/project/tower/support/LibGdxAssetService.java new file mode 100644 index 0000000..0633126 --- /dev/null +++ b/core/src/main/java/ru/project/tower/support/LibGdxAssetService.java @@ -0,0 +1,77 @@ +package ru.project.tower.support; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.assets.AssetManager; +import com.badlogic.gdx.audio.Sound; +import com.badlogic.gdx.files.FileHandle; +import ru.project.tower.DebugLog; + +public final class LibGdxAssetService implements GameAssetService { + private final AssetManager assetManager; + private boolean disposed; + + public LibGdxAssetService() { + this(new AssetManager()); + } + + LibGdxAssetService(AssetManager assetManager) { + this.assetManager = assetManager; + } + + @Override + public Sound loadOptionalSound(String path, long minBytes, String logName, String logTag) { + ensureOpen(); + + FileHandle file = Gdx.files.internal(path); + if (!file.exists()) { + return null; + } + + long length = file.length(); + if (length < minBytes) { + logSmallSound(path, length, logTag); + return null; + } + + try { + if (!assetManager.isLoaded(path, Sound.class)) { + assetManager.load(path, Sound.class); + assetManager.finishLoadingAsset(path); + } + Sound sound = assetManager.get(path, Sound.class); + logLoadedSound(logName, logTag); + return sound; + } catch (RuntimeException e) { + Gdx.app.error(logTag, path + " failed to decode, skipping", e); + if (assetManager.isLoaded(path)) { + assetManager.unload(path); + } + return null; + } + } + + @Override + public void dispose() { + if (disposed) return; + disposed = true; + assetManager.dispose(); + } + + private void ensureOpen() { + if (disposed) { + throw new IllegalStateException("GameAssetService has been disposed"); + } + } + + private void logLoadedSound(String logName, String logTag) { + if (DebugLog.DEBUG) { + DebugLog.log(logTag, "Loaded " + logName + " sound"); + } + } + + private void logSmallSound(String fileName, long length, String logTag) { + if (DebugLog.DEBUG) { + DebugLog.log(logTag, fileName + " too small (" + length + " bytes), skipping"); + } + } +} diff --git a/core/src/main/java/ru/project/tower/support/MathUtilsRandomSource.java b/core/src/main/java/ru/project/tower/support/MathUtilsRandomSource.java new file mode 100644 index 0000000..0061a76 --- /dev/null +++ b/core/src/main/java/ru/project/tower/support/MathUtilsRandomSource.java @@ -0,0 +1,25 @@ +package ru.project.tower.support; + +import com.badlogic.gdx.math.MathUtils; + +public final class MathUtilsRandomSource implements RandomSource { + @Override + public float nextFloat() { + return MathUtils.random(); + } + + @Override + public int nextIntInclusive(int max) { + return MathUtils.random(max); + } + + @Override + public float range(float min, float max) { + return MathUtils.random(min, max); + } + + @Override + public float angle() { + return MathUtils.random(MathUtils.PI2); + } +} diff --git a/core/src/main/java/ru/project/tower/support/PausableGameClock.java b/core/src/main/java/ru/project/tower/support/PausableGameClock.java new file mode 100644 index 0000000..46df469 --- /dev/null +++ b/core/src/main/java/ru/project/tower/support/PausableGameClock.java @@ -0,0 +1,42 @@ +package ru.project.tower.support; + +import java.util.Objects; + +public final class PausableGameClock implements GameClock { + private final GameClock wallClock; + private long totalPausedMs; + private long pauseStartedAtWallMs; + private boolean paused; + + public PausableGameClock(GameClock wallClock) { + this.wallClock = Objects.requireNonNull(wallClock, "wallClock"); + } + + @Override + public long nowMs() { + long wallNow = paused ? pauseStartedAtWallMs : wallClock.nowMs(); + return wallNow - totalPausedMs; + } + + public void pause() { + if (paused) { + return; + } + paused = true; + pauseStartedAtWallMs = wallClock.nowMs(); + } + + public void resume() { + if (!paused) { + return; + } + totalPausedMs += wallClock.nowMs() - pauseStartedAtWallMs; + paused = false; + } + + public void resetToWallNow() { + totalPausedMs = 0L; + pauseStartedAtWallMs = 0L; + paused = false; + } +} diff --git a/core/src/main/java/ru/project/tower/support/RandomSource.java b/core/src/main/java/ru/project/tower/support/RandomSource.java new file mode 100644 index 0000000..6d8a0d1 --- /dev/null +++ b/core/src/main/java/ru/project/tower/support/RandomSource.java @@ -0,0 +1,11 @@ +package ru.project.tower.support; + +public interface RandomSource { + float nextFloat(); + + int nextIntInclusive(int max); + + float range(float min, float max); + + float angle(); +} diff --git a/core/src/main/java/ru/project/tower/support/RangeChecks.java b/core/src/main/java/ru/project/tower/support/RangeChecks.java new file mode 100644 index 0000000..7d3c2bf --- /dev/null +++ b/core/src/main/java/ru/project/tower/support/RangeChecks.java @@ -0,0 +1,25 @@ +package ru.project.tower.support; + +public final class RangeChecks { + private RangeChecks() {} + + public static float distanceSquared(float x1, float y1, float x2, float y2) { + float dx = x1 - x2; + float dy = y1 - y2; + return dx * dx + dy * dy; + } + + public static float radiusSquared(float radius) { + return radius * radius; + } + + public static boolean withinRadiusInclusive( + float x1, float y1, float x2, float y2, float radius) { + return distanceSquared(x1, y1, x2, y2) <= radiusSquared(radius); + } + + public static boolean withinRadiusExclusive( + float x1, float y1, float x2, float y2, float radius) { + return distanceSquared(x1, y1, x2, y2) < radiusSquared(radius); + } +} diff --git a/core/src/main/java/ru/project/tower/support/RobotoFontFactory.java b/core/src/main/java/ru/project/tower/support/RobotoFontFactory.java new file mode 100644 index 0000000..4bae918 --- /dev/null +++ b/core/src/main/java/ru/project/tower/support/RobotoFontFactory.java @@ -0,0 +1,161 @@ +package ru.project.tower.support; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Texture.TextureFilter; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator; +import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator.Hinting; + + +public final class RobotoFontFactory { + public static final String FONT_CHARACTERS = + "абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ" + + "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789][_!$%#@|\\/?-+=()*&.;:,{}\"´`'<>" + + "₽◆♥→"; + public static final String FONT_CHARACTERS_WITH_DEFAULTS = + FreeTypeFontGenerator.DEFAULT_CHARS + + "абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; + + private static final String UI_PATH = "ui.ttf"; + private static final String ROBOTO_PATH = "roboto.ttf"; + + private RobotoFontFactory() {} + + public static boolean exists() { + return Gdx.files.internal(fontPath()).exists(); + } + + public static BitmapFont generate(FontSpec spec) { + return generateFromPath(fontPath(), spec); + } + + public static BitmapFont generateUi(FontSpec spec) { + return generateFromPath(UI_PATH, spec); + } + + private static BitmapFont generateFromPath(String path, FontSpec spec) { + FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal(path)); + try { + return generator.generateFont(spec.toParameter()); + } finally { + generator.dispose(); + } + } + + private static String fontPath() { + return Gdx.files.internal(ROBOTO_PATH).exists() ? ROBOTO_PATH : UI_PATH; + } + + public static BitmapFont fallback() { + return new BitmapFont(); + } + + public static BitmapFont fallback(float scale) { + BitmapFont font = fallback(); + font.getData().setScale(scale); + return font; + } + + public static FontSpec spec( + int size, + float borderWidth, + Color borderColor, + Color color, + int shadowOffsetX, + int shadowOffsetY, + Color shadowColor) { + return new FontSpec( + size, + borderWidth, + borderColor, + color, + shadowOffsetX, + shadowOffsetY, + shadowColor, + FONT_CHARACTERS); + } + + public static final class FontSpec { + private final int size; + private final float borderWidth; + private final Color borderColor; + private final Color color; + private final int shadowOffsetX; + private final int shadowOffsetY; + private final Color shadowColor; + private final String characters; + + public FontSpec( + int size, + float borderWidth, + Color borderColor, + Color color, + int shadowOffsetX, + int shadowOffsetY, + Color shadowColor, + String characters) { + this.size = size; + this.borderWidth = borderWidth; + this.borderColor = borderColor; + this.color = color; + this.shadowOffsetX = shadowOffsetX; + this.shadowOffsetY = shadowOffsetY; + this.shadowColor = shadowColor; + this.characters = characters; + } + + public FontSpec withSize(int size) { + return new FontSpec( + size, + borderWidth, + borderColor, + color, + shadowOffsetX, + shadowOffsetY, + shadowColor, + characters); + } + + public FontSpec withBorderWidth(float borderWidth) { + return new FontSpec( + size, + borderWidth, + borderColor, + color, + shadowOffsetX, + shadowOffsetY, + shadowColor, + characters); + } + + public FontSpec withCharacters(String characters) { + return new FontSpec( + size, + borderWidth, + borderColor, + color, + shadowOffsetX, + shadowOffsetY, + shadowColor, + characters); + } + + private FreeTypeFontGenerator.FreeTypeFontParameter toParameter() { + FreeTypeFontGenerator.FreeTypeFontParameter parameter = + new FreeTypeFontGenerator.FreeTypeFontParameter(); + parameter.size = size; + parameter.borderWidth = borderWidth; + parameter.borderColor = borderColor; + parameter.color = color; + parameter.shadowOffsetX = shadowOffsetX; + parameter.shadowOffsetY = shadowOffsetY; + parameter.shadowColor = shadowColor; + parameter.characters = characters; + parameter.minFilter = TextureFilter.Linear; + parameter.magFilter = TextureFilter.Linear; + parameter.hinting = Hinting.Slight; + return parameter; + } + } +} diff --git a/core/src/main/java/ru/project/tower/support/ScreenAssets.java b/core/src/main/java/ru/project/tower/support/ScreenAssets.java new file mode 100644 index 0000000..08ed28d --- /dev/null +++ b/core/src/main/java/ru/project/tower/support/ScreenAssets.java @@ -0,0 +1,98 @@ +package ru.project.tower.support; + +import com.badlogic.gdx.graphics.Pixmap; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.NinePatch; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.badlogic.gdx.graphics.g2d.TextureRegion; +import com.badlogic.gdx.graphics.glutils.PixmapTextureData; +import com.badlogic.gdx.scenes.scene2d.ui.Skin; +import com.badlogic.gdx.scenes.scene2d.utils.NinePatchDrawable; +import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable; +import com.badlogic.gdx.utils.Disposable; +import java.util.ArrayList; +import java.util.List; + + + + + + + + + + + +public final class ScreenAssets implements Disposable { + private final Skin skin = new Skin(); + private final List ownedTextures = new ArrayList<>(); + private TextureAtlas atlas; + private boolean disposed; + + public Skin skin() { + ensureOpen(); + return skin; + } + + public BitmapFont font(String name, BitmapFont font) { + ensureOpen(); + skin.add(name, font); + return font; + } + + public TextureAtlas setAtlas(TextureAtlas atlas) { + ensureOpen(); + if (this.atlas != null) { + throw new IllegalStateException("ScreenAssets already owns an atlas"); + } + this.atlas = atlas; + return atlas; + } + + public TextureRegionDrawable own(Texture texture) { + ensureOpen(); + ownedTextures.add(texture); + return new TextureRegionDrawable(new TextureRegion(texture)); + } + + public TextureRegionDrawable own(Pixmap pixmap) { + ensureOpen(); + Texture texture = textureFromPixmap(pixmap); + ownedTextures.add(texture); + return new TextureRegionDrawable(new TextureRegion(texture)); + } + + public NinePatchDrawable ownNinePatch(Pixmap pixmap, int split) { + ensureOpen(); + Texture texture = textureFromPixmap(pixmap); + ownedTextures.add(texture); + return new NinePatchDrawable(new NinePatch(texture, split, split, split, split)); + } + + private static Texture textureFromPixmap(Pixmap pixmap) { + return new Texture(new PixmapTextureData(pixmap, null, false, true)); + } + + @Override + public void dispose() { + if (disposed) return; + disposed = true; + + skin.dispose(); + if (atlas != null) { + atlas.dispose(); + atlas = null; + } + for (Texture texture : ownedTextures) { + texture.dispose(); + } + ownedTextures.clear(); + } + + private void ensureOpen() { + if (disposed) { + throw new IllegalStateException("ScreenAssets has been disposed"); + } + } +} diff --git a/core/src/main/java/ru/project/tower/support/ScreenPalette.java b/core/src/main/java/ru/project/tower/support/ScreenPalette.java new file mode 100644 index 0000000..4f7cc89 --- /dev/null +++ b/core/src/main/java/ru/project/tower/support/ScreenPalette.java @@ -0,0 +1,106 @@ +package ru.project.tower.support; + +import com.badlogic.gdx.graphics.Color; + + + + +public enum ScreenPalette { + NEON_RED(1f, 0.2f, 0.2f, 1f), + NEON_GREEN(0.2f, 1f, 0.2f, 1f), + NEON_BLUE(0.2f, 0.6f, 1f, 1f), + NEON_DEEP_BLUE(0.2f, 0.2f, 1f, 1f), + NEON_YELLOW(1f, 1f, 0.2f, 1f), + NEON_CYAN(0f, 0.9f, 0.9f, 1f), + NEON_BRIGHT_CYAN(0.2f, 1f, 1f, 1f), + NEON_PINK(1f, 0.2f, 0.6f, 1f), + NEON_BRIGHT_PINK(1f, 0.2f, 1f, 1f), + NEON_PURPLE(0.5f, 0f, 1f, 1f), + NEON_LIGHT_PURPLE(0.6f, 0.2f, 1f, 1f), + SELECTION_RED(1f, 0.1f, 0.2f, 1f), + SELECTION_GREEN(0.1f, 1f, 0.2f, 1f), + BACKGROUND(0.05f, 0.05f, 0.1f, 1f), + TALENT_BACKGROUND(0.02f, 0.02f, 0.05f, 1f), + FONT_SHADOW(0f, 0f, 0f, 0.5f), + LOCKED_GRAY(0.3f, 0.3f, 0.3f, 0.5f), + PURCHASED_GREEN(0.2f, 1f, 0.3f, 1f), + DISABLED_RED(0.3f, 0.1f, 0.1f, 0.8f), + DISABLED_GREEN(0.1f, 0.3f, 0.1f, 0.8f), + DISABLED_DARK_GREEN(0.1f, 0.2f, 0.1f, 0.8f), + DISABLED_YELLOW(0.3f, 0.3f, 0.1f, 0.8f), + DISABLED_PINK(0.3f, 0.1f, 0.2f, 0.8f), + INACTIVE_ATTACK(0.3f, 0.1f, 0.1f, 0.7f), + INACTIVE_HEALTH(0.1f, 0.3f, 0.1f, 0.7f), + INACTIVE_ABILITIES(0.2f, 0.1f, 0.3f, 0.7f), + UPGRADE_DAMAGE(0.9f, 0.5f, 0.1f, 1f), + UPGRADE_SPEED(0.1f, 0.6f, 0.9f, 1f), + UPGRADE_COOLDOWN(0.9f, 0.8f, 0.1f, 1f), + UPGRADE_CRIT_CHANCE(1f, 0.2f, 0.8f, 1f), + UPGRADE_CRIT_MULTIPLIER(0.8f, 0.2f, 1f, 1f), + ABILITY_FREEZE(0.2f, 0.7f, 1f, 1f), + ABILITY_EXPLOSION(1f, 0.5f, 0.1f, 1f), + ABILITY_SHIELD(0.4f, 1f, 0.4f, 1f), + ABILITY_IMPULSE(0.9f, 0.4f, 0.9f, 1f), + ABILITY_DASH(0.3f, 0.9f, 1f, 1f), + ABILITY_PULL(0.6f, 0.3f, 1f, 1f), + ABILITY_TURRET(0.2f, 1f, 0.4f, 1f), + UPGRADE_HEALTH(0.7f, 0.2f, 0.2f, 1f), + UPGRADE_REGEN(0.3f, 0.8f, 0.3f, 1f), + ENABLED_REGEN(0.4f, 0.8f, 0.4f, 1f), + BUTTON_DISABLED(0.3f, 0.3f, 0.3f, 1f), + TEXT_PRICE(1f, 1f, 0.5f, 1f), + TEXT_COOLDOWN(1f, 0.5f, 0.5f, 1f), + SHADOW_WEAVER(0.8f, 0.2f, 0.8f, 1f), + GLACIAL_WARDEN(0.7f, 0.8f, 1f, 1f), + VOLATILE_REACTOR(1f, 0.5f, 0.2f, 1f), + BASIC_CIRCLE(1f, 0.5f, 0.5f, 1f), + FAST_CIRCLE(1f, 1f, 0f, 1f), + SPLITTER_CIRCLE(0.3f, 1f, 0.3f, 1f), + SPAWNER_CIRCLE(1f, 0.3f, 1f, 1f), + SCREEN(0.035f, 0.043f, 0.071f, 1f), + FIELD(0.043f, 0.059f, 0.106f, 1f), + PANEL(0.059f, 0.078f, 0.129f, 0.9f), + PANEL_SOLID(0.067f, 0.09f, 0.153f, 1f), + LINE(0.52f, 0.61f, 1f, 0.28f), + TEXT(0.969f, 0.976f, 1f, 1f), + MUTED(0.667f, 0.702f, 0.784f, 1f), + QUIET(0.435f, 0.471f, 0.565f, 1f), + CYAN(0.133f, 0.851f, 1f, 1f), + BLUE(0.325f, 0.4f, 1f, 1f), + GOLD(1f, 0.812f, 0.29f, 1f), + GREEN(0.388f, 0.902f, 0.553f, 1f), + RED(1f, 0.38f, 0.478f, 1f), + ORANGE(1f, 0.624f, 0.18f, 1f), + PINK(1f, 0.31f, 0.847f, 1f), + BASIC_ENEMY(0.302f, 0.486f, 1f, 1f), + ARMORED_ENEMY(1f, 0.608f, 0.718f, 1f), + SUPPORT_ENEMY(0.145f, 0.875f, 0.71f, 1f); + + public final float r; + public final float g; + public final float b; + public final float a; + + ScreenPalette(float r, float g, float b, float a) { + this.r = r; + this.g = g; + this.b = b; + this.a = a; + } + + public Color set(Color target) { + return target.set(r, g, b, a); + } + + public Color set(Color target, float alpha) { + return target.set(r, g, b, alpha); + } + + public Color dim(Color target, float alpha) { + return target.set(r * 0.7f, g * 0.7f, b * 0.7f, alpha); + } + + public Color create() { + return new Color(r, g, b, a); + } +} diff --git a/core/src/main/java/ru/project/tower/support/SeededRandomSource.java b/core/src/main/java/ru/project/tower/support/SeededRandomSource.java new file mode 100644 index 0000000..176d4d4 --- /dev/null +++ b/core/src/main/java/ru/project/tower/support/SeededRandomSource.java @@ -0,0 +1,101 @@ +package ru.project.tower.support; + +import java.util.Objects; + + +public final class SeededRandomSource implements RandomSource { + private static final long MULTIPLIER = 6364136223846793005L; + private static final long INCREMENT = 1442695040888963407L; + private static final float FLOAT_UNIT = 0x1.0p-24f; + + private long state; + + public SeededRandomSource(long seed) { + this.state = mix(seed); + } + + private SeededRandomSource(long seed, long state) { + this.state = state == 0L ? mix(seed) : state; + } + + public static SeededRandomSource fromSnapshot(Snapshot snapshot) { + Snapshot source = Objects.requireNonNull(snapshot, "snapshot"); + return new SeededRandomSource(source.seed(), source.state()); + } + + public Snapshot snapshot(long seed) { + return new Snapshot(seed, state); + } + + public long state() { + return state; + } + + @Override + public float nextFloat() { + return ((nextLong() >>> 40) & 0xFFFFFFL) * FLOAT_UNIT; + } + + @Override + public int nextIntInclusive(int max) { + if (max < 0) { + throw new IllegalArgumentException("max must be >= 0: " + max); + } + if (max == Integer.MAX_VALUE) { + return (int) (nextLong() >>> 1); + } + return (int) (nextFloat() * (max + 1L)); + } + + @Override + public float range(float min, float max) { + if (min > max) { + throw new IllegalArgumentException("min must be <= max: " + min + " > " + max); + } + return min + (max - min) * nextFloat(); + } + + @Override + public float angle() { + return nextFloat() * (float) (Math.PI * 2.0); + } + + private long nextLong() { + state = state * MULTIPLIER + INCREMENT; + return mix(state); + } + + public static long forkSeed(long seed, String streamName) { + Objects.requireNonNull(streamName, "streamName"); + long hash = 1125899906842597L; + for (int i = 0; i < streamName.length(); i++) { + hash = 31L * hash + streamName.charAt(i); + } + return mix(seed ^ hash); + } + + private static long mix(long value) { + long z = value + 0x9E3779B97F4A7C15L; + z = (z ^ (z >>> 30)) * 0xBF58476D1CE4E5B9L; + z = (z ^ (z >>> 27)) * 0x94D049BB133111EBL; + return z ^ (z >>> 31); + } + + public static final class Snapshot { + private final long seed; + private final long state; + + public Snapshot(long seed, long state) { + this.seed = seed; + this.state = state; + } + + public long seed() { + return seed; + } + + public long state() { + return state; + } + } +} diff --git a/core/src/main/java/ru/project/tower/support/UiAtlasBuilder.java b/core/src/main/java/ru/project/tower/support/UiAtlasBuilder.java new file mode 100644 index 0000000..a9d63f7 --- /dev/null +++ b/core/src/main/java/ru/project/tower/support/UiAtlasBuilder.java @@ -0,0 +1,88 @@ +package ru.project.tower.support; + +import com.badlogic.gdx.graphics.Pixmap; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.PixmapPacker; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.badlogic.gdx.utils.Disposable; +import java.util.ArrayList; +import java.util.List; + + + + + + + + + + + + + + + + + + + + + + + + + +public final class UiAtlasBuilder implements Disposable, AutoCloseable { + private final PixmapPacker packer; + private final List packedPixmaps = new ArrayList<>(); + private boolean built; + private boolean disposed; + + public UiAtlasBuilder(int pageWidth, int pageHeight) { + + + this.packer = new PixmapPacker(pageWidth, pageHeight, Pixmap.Format.RGBA8888, 2, true); + } + + public void add(String regionName, Pixmap pixmap) { + ensureOpen(); + if (pixmap != null) { + packedPixmaps.add(pixmap); + } + packer.pack(regionName, pixmap); + } + + public TextureAtlas build() { + ensureOpen(); + built = true; + try { + return packer.generateTextureAtlas( + Texture.TextureFilter.Linear, Texture.TextureFilter.Linear, false); + } finally { + dispose(); + } + } + + @Override + public void dispose() { + if (disposed) return; + disposed = true; + packer.dispose(); + for (Pixmap pixmap : packedPixmaps) { + pixmap.dispose(); + } + packedPixmaps.clear(); + } + + @Override + public void close() { + dispose(); + } + + private void ensureOpen() { + if (disposed || built) { + throw new IllegalStateException( + "UiAtlasBuilder is single-use and has already been closed"); + } + } +} diff --git a/core/src/main/java/ru/project/tower/support/ViewportSize.java b/core/src/main/java/ru/project/tower/support/ViewportSize.java new file mode 100644 index 0000000..57307d9 --- /dev/null +++ b/core/src/main/java/ru/project/tower/support/ViewportSize.java @@ -0,0 +1,7 @@ +package ru.project.tower.support; + +public interface ViewportSize { + int getWidth(); + + int getHeight(); +} diff --git a/core/src/main/java/ru/project/tower/systems/BonusBallSystem.java b/core/src/main/java/ru/project/tower/systems/BonusBallSystem.java new file mode 100644 index 0000000..d147b50 --- /dev/null +++ b/core/src/main/java/ru/project/tower/systems/BonusBallSystem.java @@ -0,0 +1,252 @@ +package ru.project.tower.systems; + +import com.badlogic.gdx.utils.Array; +import com.badlogic.gdx.utils.Pools; +import ru.project.tower.balance.EndlessBalanceSpec; +import ru.project.tower.entities.circles.BonusBallData; + +public class BonusBallSystem { + private static final int BONUS_WAVES = 5; + private static final int MAX_ACTIVE_BONUSES = 8; + private static final int MAX_ACTIVE_PER_TYPE = 3; + private static final float OUT_OF_BOUNDS_MARGIN = 100f; + + private final Array bonusBalls; + private final Array activeBonuses = new Array<>(); + + public BonusBallSystem(Array bonusBalls) { + this.bonusBalls = bonusBalls; + } + + public CollectionEvent collect(int index) { + BonusBallData ball = bonusBalls.get(index); + BonusBallData.BonusType type = ball.getBonusType(); + float x = ball.getX(); + float y = ball.getY(); + CollectionEffect effect = apply(type); + + BonusBallData removed = bonusBalls.removeIndex(index); + Pools.free(removed); + + return new CollectionEvent(type, x, y, effect.text, effect); + } + + public CollectionEffect apply(BonusBallData.BonusType type) { + CollectionEffect effect = effectFor(type); + if (effect.active) { + addActiveBonus(type); + } + return effect; + } + + private void addActiveBonus(BonusBallData.BonusType type) { + if (activeStacks(type) >= MAX_ACTIVE_PER_TYPE) { + return; + } + if (activeBonuses.size >= MAX_ACTIVE_BONUSES) { + removeMostStackedBonusExcept(type); + } + activeBonuses.add(new ActiveBonus(type, BONUS_WAVES)); + } + + private void removeMostStackedBonusExcept(BonusBallData.BonusType protectedType) { + int bestIndex = -1; + int bestStacks = -1; + for (int i = 0; i < activeBonuses.size; i++) { + BonusBallData.BonusType type = activeBonuses.get(i).type; + if (type == protectedType) continue; + int stacks = activeStacks(type); + if (stacks > bestStacks) { + bestStacks = stacks; + bestIndex = i; + } + } + if (bestIndex < 0 && activeBonuses.size > 0) { + bestIndex = 0; + } + if (bestIndex >= 0) { + activeBonuses.removeIndex(bestIndex); + } + } + + public void endWave() { + for (int i = activeBonuses.size - 1; i >= 0; i--) { + ActiveBonus bonus = activeBonuses.get(i); + bonus.wavesLeft--; + if (bonus.wavesLeft <= 0) { + activeBonuses.removeIndex(i); + } + } + } + + public void update(float delta, float viewportWidth, float viewportHeight) { + for (int i = bonusBalls.size - 1; i >= 0; i--) { + BonusBallData ball = bonusBalls.get(i); + ball.update(delta); + + if (isOutOfBounds(ball, viewportWidth, viewportHeight)) { + Pools.free(bonusBalls.removeIndex(i)); + } + } + } + + public void clear() { + for (int i = bonusBalls.size - 1; i >= 0; i--) { + Pools.free(bonusBalls.get(i)); + } + bonusBalls.clear(); + activeBonuses.clear(); + } + + public float getCooldownMultiplier() { + int stacks = activeStacks(BonusBallData.BonusType.FIRE_RATE); + return EndlessBalanceSpec.activeBonusMultiplier(BonusBallData.BonusType.FIRE_RATE, stacks); + } + + public float getSpeedMultiplier() { + int stacks = activeStacks(BonusBallData.BonusType.BULLET_SPEED); + return EndlessBalanceSpec.activeBonusMultiplier( + BonusBallData.BonusType.BULLET_SPEED, stacks); + } + + public float getDamageMultiplier() { + int stacks = activeStacks(BonusBallData.BonusType.DAMAGE); + return EndlessBalanceSpec.activeBonusMultiplier(BonusBallData.BonusType.DAMAGE, stacks); + } + + public float getCritChanceBonus() { + return Math.min(0.18f, activeStacks(BonusBallData.BonusType.CRIT_WINDOW) * 0.06f); + } + + public float getPickupRadiusMultiplier() { + int stacks = activeStacks(BonusBallData.BonusType.PICKUP_MAGNET); + if (stacks <= 0) return 1f; + return Math.min(1.9f, 1.45f + (stacks - 1) * 0.18f); + } + + public int activeStacks(BonusBallData.BonusType type) { + int stacks = 0; + for (ActiveBonus bonus : activeBonuses) { + if (bonus.type == type) { + stacks++; + } + } + return stacks; + } + + public int getActiveBonusCount() { + return activeBonuses.size; + } + + private static boolean isOutOfBounds( + BonusBallData ball, float viewportWidth, float viewportHeight) { + return ball.getX() < -OUT_OF_BOUNDS_MARGIN + || ball.getX() > viewportWidth + OUT_OF_BOUNDS_MARGIN + || ball.getY() < -OUT_OF_BOUNDS_MARGIN + || ball.getY() > viewportHeight + OUT_OF_BOUNDS_MARGIN; + } + + public static String previewText(BonusBallData.BonusType type) { + return effectFor(type).text; + } + + private static CollectionEffect effectFor(BonusBallData.BonusType type) { + switch (type) { + case BULLET_SPEED: + return CollectionEffect.active("СКОРОСТЬ ПУЛЬ!"); + case DAMAGE: + return CollectionEffect.active("ДВОЙНОЙ УРОН!"); + case FIRE_RATE: + return CollectionEffect.active("СКОРОСТРЕЛЬНОСТЬ!"); + case CRIT_WINDOW: + return CollectionEffect.active("КРИТ-ОКНО!"); + case PICKUP_MAGNET: + return CollectionEffect.active("МАГНИТ ПОЛЯ!"); + case SHIELD_PULSE: + return new CollectionEffect("ИМПУЛЬС ЩИТА!", false, 0, 0, 1, 25); + case HEAL: + return new CollectionEffect("РЕМОНТ!", false, 20, 0, 0, 0); + case ABILITY_CHARGE: + return new CollectionEffect("ЗАРЯД СПОСОБНОСТИ!", false, 0, 0, 1, 0); + case COIN_BURST: + return new CollectionEffect("ВСПЛЕСК МОНЕТ!", false, 0, 6, 0, 0); + default: + throw new IllegalArgumentException("Unknown bonus type: " + type); + } + } + + private static final class ActiveBonus { + private final BonusBallData.BonusType type; + private int wavesLeft; + + private ActiveBonus(BonusBallData.BonusType type, int wavesLeft) { + this.type = type; + this.wavesLeft = wavesLeft; + } + } + + public static final class CollectionEvent { + public final BonusBallData.BonusType type; + public final float x; + public final float y; + public final String text; + public final CollectionEffect effect; + + private CollectionEvent( + BonusBallData.BonusType type, + float x, + float y, + String text, + CollectionEffect effect) { + this.type = type; + this.x = x; + this.y = y; + this.text = text; + this.effect = effect; + } + } + + public static final class CollectionEffect { + private final String text; + private final boolean active; + private final int healAmount; + private final int coinAmount; + private final int abilityCharge; + private final int shieldPulse; + + private CollectionEffect( + String text, + boolean active, + int healAmount, + int coinAmount, + int abilityCharge, + int shieldPulse) { + this.text = text; + this.active = active; + this.healAmount = healAmount; + this.coinAmount = coinAmount; + this.abilityCharge = abilityCharge; + this.shieldPulse = shieldPulse; + } + + private static CollectionEffect active(String text) { + return new CollectionEffect(text, true, 0, 0, 0, 0); + } + + public int healAmount() { + return healAmount; + } + + public int coinAmount() { + return coinAmount; + } + + public int abilityCharge() { + return abilityCharge; + } + + public int shieldPulse() { + return shieldPulse; + } + } +} diff --git a/core/src/main/java/ru/project/tower/systems/BossPlayerCombatModifiers.java b/core/src/main/java/ru/project/tower/systems/BossPlayerCombatModifiers.java new file mode 100644 index 0000000..62fcac0 --- /dev/null +++ b/core/src/main/java/ru/project/tower/systems/BossPlayerCombatModifiers.java @@ -0,0 +1,38 @@ +package ru.project.tower.systems; + +import com.badlogic.gdx.utils.Array; +import java.util.Objects; +import ru.project.tower.entities.circles.BaseCircleData; +import ru.project.tower.entities.circles.bosses.GlacialWardenData; + +public final class BossPlayerCombatModifiers { + private BossPlayerCombatModifiers() {} + + public static float attackSpeedMultiplier(Array circles) { + Objects.requireNonNull(circles, "circles"); + float multiplier = 1f; + for (BaseCircleData circle : circles) { + if (circle instanceof GlacialWardenData) { + multiplier = + Math.min( + multiplier, + ((GlacialWardenData) circle).getActiveAttackSpeedMultiplier()); + } + } + return multiplier; + } + + public static float projectileSpeedMultiplier(Array circles) { + Objects.requireNonNull(circles, "circles"); + float multiplier = 1f; + for (BaseCircleData circle : circles) { + if (circle instanceof GlacialWardenData) { + multiplier = + Math.min( + multiplier, + ((GlacialWardenData) circle).getActiveProjectileSpeedMultiplier()); + } + } + return multiplier; + } +} diff --git a/core/src/main/java/ru/project/tower/systems/BossProjectileFactory.java b/core/src/main/java/ru/project/tower/systems/BossProjectileFactory.java new file mode 100644 index 0000000..0819124 --- /dev/null +++ b/core/src/main/java/ru/project/tower/systems/BossProjectileFactory.java @@ -0,0 +1,151 @@ +package ru.project.tower.systems; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.math.MathUtils; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.utils.Pools; +import ru.project.tower.entities.bullets.BulletData; +import ru.project.tower.entities.bullets.BulletSystem; +import ru.project.tower.entities.circles.bosses.GlacialWardenData; +import ru.project.tower.entities.circles.bosses.IllusionMasterData; +import ru.project.tower.entities.circles.bosses.ShadowWeaverData; +import ru.project.tower.entities.circles.bosses.SwarmQueenData; +import ru.project.tower.entities.circles.bosses.VolatileReactorData; + +public final class BossProjectileFactory { + private static final Color SHADOW_WEAVER_PROJECTILE_COLOR = new Color(0.6f, 0.2f, 1f, 1f); + private static final Color VOLATILE_REACTOR_MISSILE_COLOR = new Color(1f, 1f, 0.2f, 1f); + private static final Color ILLUSION_REAL_PROJECTILE_COLOR = new Color(1f, 1f, 1f, 1f); + private static final Color ILLUSION_FAKE_PROJECTILE_COLOR = new Color(0.5f, 0.5f, 0.5f, 0.7f); + + public interface AngleSource { + float angle(); + } + + private BossProjectileFactory() {} + + public static void spawnQueenProjectiles(SwarmQueenData queen, BulletSystem bulletSystem) { + float angleStep = 360f / SwarmQueenData.getBulletsPerVolley(); + for (int i = 0; i < SwarmQueenData.getBulletsPerVolley(); i++) { + float angle = i * angleStep; + float speed = SwarmQueenData.getBulletSpeed(); + addEnemyBullet( + bulletSystem, + queen.getX(), + queen.getY(), + SwarmQueenData.getBulletRadius(), + MathUtils.cosDeg(angle) * speed, + MathUtils.sinDeg(angle) * speed, + SwarmQueenData.getBulletDamage(), + queen.getProjectileColor()); + } + queen.onProjectileAttackStart(); + } + + public static void spawnShadowWeaverProjectile( + ShadowWeaverData weaver, BulletSystem bulletSystem, float targetX, float targetY) { + float dx = targetX - weaver.getX(); + float dy = targetY - weaver.getY(); + float length = (float) Math.sqrt(dx * dx + dy * dy); + float vx = 0f; + float vy = 0f; + if (length > 0f) { + float speed = ShadowWeaverData.getProjectileSpeed(); + vx = dx / length * speed; + vy = dy / length * speed; + } + + addEnemyBullet( + bulletSystem, + weaver.getX(), + weaver.getY(), + ShadowWeaverData.getProjectileRadius(), + vx, + vy, + ShadowWeaverData.getProjectileDamage(), + SHADOW_WEAVER_PROJECTILE_COLOR); + weaver.markProjectileShot(); + weaver.createClones(); + } + + public static void spawnVolatileReactorMissiles( + VolatileReactorData reactor, BulletSystem bulletSystem, AngleSource angles) { + for (int j = 0; j < VolatileReactorData.getMissilesPerVolley(); j++) { + float angle = angles.angle(); + float speed = VolatileReactorData.getMissileSpeed(); + addEnemyBullet( + bulletSystem, + reactor.getX(), + reactor.getY(), + VolatileReactorData.getMissileRadius(), + MathUtils.cos(angle) * speed, + MathUtils.sin(angle) * speed, + VolatileReactorData.getMissileDamage(), + VOLATILE_REACTOR_MISSILE_COLOR); + } + reactor.markMissileShot(); + } + + public static void spawnGlacialWardenShards(GlacialWardenData warden, AngleSource angles) { + for (int j = 0; j < GlacialWardenData.getShardsPerVolley(); j++) { + float angle = angles.angle(); + Vector2 velocity = + new Vector2( + MathUtils.cos(angle) * GlacialWardenData.getShardSpeed(), + MathUtils.sin(angle) * GlacialWardenData.getShardSpeed()); + warden.addIceShard(warden.getX(), warden.getY(), velocity); + } + warden.markShardsShot(); + } + + public static void spawnIllusionMasterProjectiles( + IllusionMasterData master, + BulletSystem bulletSystem, + AngleSource angles, + float gameScale) { + for (int i = 0; i < IllusionMasterData.getRealProjectilesCount(); i++) { + spawnIllusionProjectile(master, bulletSystem, angles.angle(), false, gameScale); + } + + for (int i = 0; i < IllusionMasterData.getFakeProjectilesCount(); i++) { + spawnIllusionProjectile(master, bulletSystem, angles.angle(), true, gameScale); + } + } + + private static void spawnIllusionProjectile( + IllusionMasterData master, + BulletSystem bulletSystem, + float angle, + boolean isFake, + float gameScale) { + float radius = IllusionMasterData.getProjectileRadius() * gameScale; + float speed = IllusionMasterData.getProjectileSpeed() * gameScale; + int damage = isFake ? 1 : IllusionMasterData.getProjectileDamage(); + Color color = isFake ? ILLUSION_FAKE_PROJECTILE_COLOR : ILLUSION_REAL_PROJECTILE_COLOR; + + addEnemyBullet( + bulletSystem, + master.getX(), + master.getY(), + radius, + MathUtils.cos(angle) * speed, + MathUtils.sin(angle) * speed, + damage, + color); + } + + private static void addEnemyBullet( + BulletSystem bulletSystem, + float x, + float y, + float radius, + float vx, + float vy, + int damage, + Color color) { + BulletData bullet = Pools.obtain(BulletData.class); + bullet.configureAsEnemyBullet(x, y, radius, vx, vy, damage); + bullet.setColor(color); + bulletSystem.addEnemyBullet(bullet); + } +} diff --git a/core/src/main/java/ru/project/tower/systems/CircleSpatialGrid.java b/core/src/main/java/ru/project/tower/systems/CircleSpatialGrid.java new file mode 100644 index 0000000..db2a666 --- /dev/null +++ b/core/src/main/java/ru/project/tower/systems/CircleSpatialGrid.java @@ -0,0 +1,166 @@ +package ru.project.tower.systems; + +import com.badlogic.gdx.utils.Array; +import java.util.Arrays; +import ru.project.tower.entities.circles.BaseCircleData; + + + + + + + + +public final class CircleSpatialGrid { + private static final float CELL_SIZE = 96f; + + private int[] cellHead = new int[16]; + private int[] cellKeyX = new int[16]; + private int[] cellKeyY = new int[16]; + private int[] nextInCell = new int[16]; + private int[] candidates = new int[16]; + private int mask = 15; + private int itemCount; + private float maxRadius; + + public void build(Array circles) { + itemCount = circles.size; + ensureItemCapacity(itemCount); + ensureCellCapacity(Math.max(16, itemCount * 2)); + Arrays.fill(cellHead, -1); + maxRadius = 0f; + + for (int i = 0; i < itemCount; i++) { + BaseCircleData circleData = circles.get(i); + if (circleData.circle.radius > maxRadius) { + maxRadius = circleData.circle.radius; + } + + int cellX = toCell(circleData.circle.x); + int cellY = toCell(circleData.circle.y); + int slot = findOrCreateCell(cellX, cellY); + nextInCell[i] = cellHead[slot]; + cellHead[slot] = i; + } + } + + public int itemCount() { + return itemCount; + } + + public float maxRadius() { + return maxRadius; + } + + public int queryRect(float minX, float minY, float maxX, float maxY) { + int count = 0; + int minCellX = toCell(minX); + int maxCellX = toCell(maxX); + int minCellY = toCell(minY); + int maxCellY = toCell(maxY); + + for (int cellY = minCellY; cellY <= maxCellY; cellY++) { + for (int cellX = minCellX; cellX <= maxCellX; cellX++) { + int slot = findCell(cellX, cellY); + if (slot < 0) continue; + for (int itemIndex = cellHead[slot]; + itemIndex >= 0; + itemIndex = nextInCell[itemIndex]) { + candidates[count++] = itemIndex; + } + } + } + return count; + } + + public int queryRadius(float x, float y, float radius) { + return queryRect(x - radius, y - radius, x + radius, y + radius); + } + + public void sortCandidatesAscending(int count) { + for (int i = 1; i < count; i++) { + int value = candidates[i]; + int j = i - 1; + while (j >= 0 && candidates[j] > value) { + candidates[j + 1] = candidates[j]; + j--; + } + candidates[j + 1] = value; + } + } + + public void sortCandidatesDescending(int count) { + for (int i = 1; i < count; i++) { + int value = candidates[i]; + int j = i - 1; + while (j >= 0 && candidates[j] < value) { + candidates[j + 1] = candidates[j]; + j--; + } + candidates[j + 1] = value; + } + } + + public int candidateAt(int index) { + return candidates[index]; + } + + private void ensureItemCapacity(int required) { + if (nextInCell.length >= required) return; + int capacity = nextPowerOfTwo(required); + nextInCell = new int[capacity]; + candidates = new int[capacity]; + } + + private void ensureCellCapacity(int required) { + if (cellHead.length >= required) return; + int capacity = nextPowerOfTwo(required); + cellHead = new int[capacity]; + cellKeyX = new int[capacity]; + cellKeyY = new int[capacity]; + mask = capacity - 1; + } + + private int findOrCreateCell(int cellX, int cellY) { + int slot = hash(cellX, cellY) & mask; + while (cellHead[slot] != -1) { + if (cellKeyX[slot] == cellX && cellKeyY[slot] == cellY) { + return slot; + } + slot = (slot + 1) & mask; + } + cellKeyX[slot] = cellX; + cellKeyY[slot] = cellY; + return slot; + } + + private int findCell(int cellX, int cellY) { + int slot = hash(cellX, cellY) & mask; + while (cellHead[slot] != -1) { + if (cellKeyX[slot] == cellX && cellKeyY[slot] == cellY) { + return slot; + } + slot = (slot + 1) & mask; + } + return -1; + } + + private static int toCell(float value) { + return (int) Math.floor(value / CELL_SIZE); + } + + private static int hash(int cellX, int cellY) { + int h = cellX * 0x1f1f1f1f; + h ^= cellY * 0x5f356495; + h ^= h >>> 16; + return h; + } + + private static int nextPowerOfTwo(int value) { + int result = 1; + while (result < value) { + result <<= 1; + } + return result; + } +} diff --git a/core/src/main/java/ru/project/tower/systems/CircleSpatialIndex.java b/core/src/main/java/ru/project/tower/systems/CircleSpatialIndex.java new file mode 100644 index 0000000..5b0f9a7 --- /dev/null +++ b/core/src/main/java/ru/project/tower/systems/CircleSpatialIndex.java @@ -0,0 +1,35 @@ +package ru.project.tower.systems; + +import com.badlogic.gdx.utils.Array; +import ru.project.tower.entities.circles.BaseCircleData; + + + + +public final class CircleSpatialIndex { + private final CircleSpatialGrid grid = new CircleSpatialGrid(); + + public void build(Array enemies) { + grid.build(enemies); + } + + public float maxEnemyRadius() { + return grid.maxRadius(); + } + + public int queryRect(float minX, float minY, float maxX, float maxY) { + return grid.queryRect(minX, minY, maxX, maxY); + } + + public int queryRadius(float x, float y, float radius) { + return grid.queryRadius(x, y, radius); + } + + public void sortCandidatesAscending(int count) { + grid.sortCandidatesAscending(count); + } + + public int candidateAt(int index) { + return grid.candidateAt(index); + } +} diff --git a/core/src/main/java/ru/project/tower/systems/CollisionSystem.java b/core/src/main/java/ru/project/tower/systems/CollisionSystem.java new file mode 100644 index 0000000..9d1d23b --- /dev/null +++ b/core/src/main/java/ru/project/tower/systems/CollisionSystem.java @@ -0,0 +1,147 @@ +package ru.project.tower.systems; + +import com.badlogic.gdx.math.Circle; +import com.badlogic.gdx.math.MathUtils; +import com.badlogic.gdx.math.Rectangle; +import com.badlogic.gdx.utils.Array; +import ru.project.tower.entities.circles.BaseCircleData; + +public final class CollisionSystem { + private static final float PUSH_EPSILON = 0.1f; + private static final float CENTER_EPSILON_SQUARED = 0.0001f; + private static final CircleSpatialIndex SEPARATION_INDEX = new CircleSpatialIndex(); + private static int lastSeparationCandidateChecks; + + private CollisionSystem() {} + + public static boolean circleIntersectsSquare(Circle circle, Rectangle square) { + float closestX = MathUtils.clamp(circle.x, square.x, square.x + square.width); + float closestY = MathUtils.clamp(circle.y, square.y, square.y + square.height); + + float distanceX = circle.x - closestX; + float distanceY = circle.y - closestY; + float distanceSquared = distanceX * distanceX + distanceY * distanceY; + + return distanceSquared < circle.radius * circle.radius; + } + + public static boolean resolveCircleSquare(BaseCircleData circleData, Rectangle square) { + Circle circle = circleData.circle; + if (!circleIntersectsSquare(circle, square)) { + return false; + } + + float closestX = MathUtils.clamp(circle.x, square.x, square.x + square.width); + float closestY = MathUtils.clamp(circle.y, square.y, square.y + square.height); + + float distanceX = circle.x - closestX; + float distanceY = circle.y - closestY; + float distanceSquared = distanceX * distanceX + distanceY * distanceY; + + if (distanceSquared < CENTER_EPSILON_SQUARED) { + resolveCenterInsideSquare(circleData, square); + return true; + } + + float distance = (float) Math.sqrt(distanceSquared); + if (distance >= circle.radius) { + return false; + } + + float overlap = circle.radius - distance; + float normalX = distanceX / distance; + float normalY = distanceY / distance; + + circle.x += normalX * (overlap + PUSH_EPSILON); + circle.y += normalY * (overlap + PUSH_EPSILON); + circleData.velocity.scl(0.5f); + return true; + } + + public static void separateCircles(Array circles, int iterations) { + lastSeparationCandidateChecks = 0; + for (int iteration = 0; iteration < iterations; iteration++) { + SEPARATION_INDEX.build(circles); + separateCirclePairs(circles, SEPARATION_INDEX); + } + } + + static int lastSeparationCandidateChecksForTests() { + return lastSeparationCandidateChecks; + } + + private static void resolveCenterInsideSquare(BaseCircleData circleData, Rectangle square) { + Circle circle = circleData.circle; + float distToLeft = circle.x - square.x; + float distToRight = (square.x + square.width) - circle.x; + float distToBottom = circle.y - square.y; + float distToTop = (square.y + square.height) - circle.y; + + float minHorizontal = Math.min(Math.abs(distToLeft), Math.abs(distToRight)); + float minVertical = Math.min(Math.abs(distToBottom), Math.abs(distToTop)); + + if (minHorizontal < minVertical) { + if (Math.abs(distToLeft) < Math.abs(distToRight)) { + circle.x = square.x - circle.radius - PUSH_EPSILON; + } else { + circle.x = square.x + square.width + circle.radius + PUSH_EPSILON; + } + circleData.velocity.x = 0f; + return; + } + + if (Math.abs(distToBottom) < Math.abs(distToTop)) { + circle.y = square.y - circle.radius - PUSH_EPSILON; + } else { + circle.y = square.y + square.height + circle.radius + PUSH_EPSILON; + } + circleData.velocity.y = 0f; + } + + private static void separateCirclePairs( + Array circles, CircleSpatialIndex spatialIndex) { + for (int i = 0; i < circles.size; i++) { + BaseCircleData circleData = circles.get(i); + Circle circle = circleData.circle; + int candidateCount = + spatialIndex.queryRadius( + circle.x, circle.y, circle.radius + spatialIndex.maxEnemyRadius()); + spatialIndex.sortCandidatesAscending(candidateCount); + + for (int candidate = 0; candidate < candidateCount; candidate++) { + int j = spatialIndex.candidateAt(candidate); + if (j <= i) { + continue; + } + lastSeparationCandidateChecks++; + BaseCircleData otherCircleData = circles.get(j); + Circle otherCircle = otherCircleData.circle; + + float dx = otherCircle.x - circle.x; + float dy = otherCircle.y - circle.y; + float distanceSquared = dx * dx + dy * dy; + float radiusSum = circle.radius + otherCircle.radius; + + if (distanceSquared >= radiusSum * radiusSum) { + continue; + } + + if (distanceSquared > CENTER_EPSILON_SQUARED) { + float distance = (float) Math.sqrt(distanceSquared); + float overlap = (radiusSum - distance) * 0.5f; + float dirX = dx / distance; + float dirY = dy / distance; + + circle.x -= dirX * overlap; + circle.y -= dirY * overlap; + otherCircle.x += dirX * overlap; + otherCircle.y += dirY * overlap; + continue; + } + + circle.x -= circle.radius * 0.5f; + otherCircle.x += otherCircle.radius * 0.5f; + } + } + } +} diff --git a/core/src/main/java/ru/project/tower/systems/EnemyClassifier.java b/core/src/main/java/ru/project/tower/systems/EnemyClassifier.java new file mode 100644 index 0000000..69493b8 --- /dev/null +++ b/core/src/main/java/ru/project/tower/systems/EnemyClassifier.java @@ -0,0 +1,12 @@ +package ru.project.tower.systems; + +import ru.project.tower.content.BossContentRegistry; +import ru.project.tower.entities.circles.BaseCircleData; + +public final class EnemyClassifier { + private EnemyClassifier() {} + + public static boolean isBoss(BaseCircleData enemy) { + return BossContentRegistry.isBoss(enemy); + } +} diff --git a/core/src/main/java/ru/project/tower/systems/EnemyDeathHandler.java b/core/src/main/java/ru/project/tower/systems/EnemyDeathHandler.java new file mode 100644 index 0000000..4ff13d3 --- /dev/null +++ b/core/src/main/java/ru/project/tower/systems/EnemyDeathHandler.java @@ -0,0 +1,81 @@ +package ru.project.tower.systems; + +import com.badlogic.gdx.math.MathUtils; +import com.badlogic.gdx.utils.Array; +import com.badlogic.gdx.utils.Pools; +import java.util.Objects; +import ru.project.tower.entities.circles.BaseCircleData; +import ru.project.tower.entities.circles.SplitterCircleData; +import ru.project.tower.run.GameplayEventSink; +import ru.project.tower.run.GameplayEvents; +import ru.project.tower.support.RandomSource; +import ru.project.tower.waves.SpawnController; + +public final class EnemyDeathHandler { + public interface Effects { + void createExplosion(float x, float y, float[] color); + } + + private static final int SPLITTER_SHARD_COUNT = 3; + private static final int SPLITTER_SHARD_DAMAGE = 1; + + private final Array circles; + private final Effects effects; + private final GameplayEventSink gameplayEventSink; + private final RandomSource random; + + public EnemyDeathHandler( + Array circles, + Effects effects, + GameplayEventSink gameplayEventSink, + RandomSource random) { + this.circles = Objects.requireNonNull(circles, "circles"); + this.effects = Objects.requireNonNull(effects, "effects"); + this.gameplayEventSink = Objects.requireNonNull(gameplayEventSink, "gameplayEventSink"); + this.random = Objects.requireNonNull(random, "random"); + } + + public void handleEnemyKilled( + BaseCircleData enemy, float gameScale, float enemySpeedMultiplier) { + Objects.requireNonNull(enemy, "enemy"); + + effects.createExplosion(enemy.circle.x, enemy.circle.y, enemy.getColor()); + gameplayEventSink.emit( + GameplayEvents.enemyKilled( + enemy.getClass().getSimpleName(), + enemy.getX(), + enemy.getY(), + enemy.getReward(), + EnemyClassifier.isBoss(enemy))); + spawnSplitterShardsIfNeeded(enemy, gameScale, enemySpeedMultiplier); + circles.removeValue(enemy, true); + BaseCircleData.freeIfSpawnPooled(enemy); + } + + private void spawnSplitterShardsIfNeeded( + BaseCircleData enemy, float gameScale, float enemySpeedMultiplier) { + if (!(enemy instanceof SplitterCircleData) || ((SplitterCircleData) enemy).isShard) { + return; + } + + for (int i = 0; i < SPLITTER_SHARD_COUNT; i++) { + float angle = (i * 120 + random.range(-20f, 20f)) * MathUtils.degreesToRadians; + float dirX = MathUtils.cos(angle); + float dirY = MathUtils.sin(angle); + float adjustedSpeed = + SpawnController.SPLITTER_SHARD_SPEED * gameScale * enemySpeedMultiplier; + + SplitterCircleData shard = Pools.obtain(SplitterCircleData.class); + shard.configure( + enemy.circle.x, + enemy.circle.y, + SpawnController.FAST_CIRCLE_RADIUS * gameScale, + dirX * adjustedSpeed, + dirY * adjustedSpeed, + SpawnController.FAST_CIRCLE_HEALTH, + SPLITTER_SHARD_DAMAGE, + true); + circles.add(shard); + } + } +} diff --git a/core/src/main/java/ru/project/tower/systems/EnemySimulationSystem.java b/core/src/main/java/ru/project/tower/systems/EnemySimulationSystem.java new file mode 100644 index 0000000..d88497c --- /dev/null +++ b/core/src/main/java/ru/project/tower/systems/EnemySimulationSystem.java @@ -0,0 +1,68 @@ +package ru.project.tower.systems; + +import com.badlogic.gdx.math.Circle; +import com.badlogic.gdx.math.Rectangle; +import ru.project.tower.entities.circles.BaseCircleData; +import ru.project.tower.entities.circles.FastCircleData; +import ru.project.tower.entities.circles.SplitterCircleData; +import ru.project.tower.entities.circles.StrongCircleData; +import ru.project.tower.waves.SpawnController; + +public final class EnemySimulationSystem { + public static final float OUT_OF_BOUNDS_MARGIN = 800f; + public static final int DEFAULT_SEPARATION_ITERATIONS = 3; + + private EnemySimulationSystem() {} + + public static void steerTowardPlayer( + BaseCircleData circleData, Rectangle square, float gameScale) { + if (isBoss(circleData)) { + return; + } + + float squareCenterX = square.x + square.width / 2f; + float squareCenterY = square.y + square.height / 2f; + + float dirX = squareCenterX - circleData.getX(); + float dirY = squareCenterY - circleData.getY(); + + float length = (float) Math.sqrt(dirX * dirX + dirY * dirY); + if (length != 0f) { + dirX /= length; + dirY /= length; + } else { + dirX = 1f; + dirY = 0f; + } + + float adjustedSpeed = movementSpeed(circleData, gameScale); + circleData.velocity.set(dirX * adjustedSpeed, dirY * adjustedSpeed); + } + + public static boolean isBoss(BaseCircleData circleData) { + return EnemyClassifier.isBoss(circleData); + } + + public static boolean shouldRemoveOutOfBounds( + Circle circle, float viewportWidth, float viewportHeight) { + return circle.x < -OUT_OF_BOUNDS_MARGIN + || circle.x > viewportWidth + OUT_OF_BOUNDS_MARGIN + || circle.y < -OUT_OF_BOUNDS_MARGIN + || circle.y > viewportHeight + OUT_OF_BOUNDS_MARGIN; + } + + private static float movementSpeed(BaseCircleData circleData, float gameScale) { + if (circleData instanceof StrongCircleData) { + return SpawnController.STRONG_CIRCLE_SPEED * gameScale; + } + if (circleData instanceof FastCircleData) { + return SpawnController.FAST_CIRCLE_SPEED * gameScale; + } + if (circleData instanceof SplitterCircleData) { + return ((SplitterCircleData) circleData).isShard + ? SpawnController.SPLITTER_SHARD_SPEED * gameScale + : SpawnController.SPLITTER_CIRCLE_SPEED * gameScale; + } + return SpawnController.BASIC_CIRCLE_SPEED * gameScale; + } +} diff --git a/core/src/main/java/ru/project/tower/systems/PlayerShootingSystem.java b/core/src/main/java/ru/project/tower/systems/PlayerShootingSystem.java new file mode 100644 index 0000000..d636e7d --- /dev/null +++ b/core/src/main/java/ru/project/tower/systems/PlayerShootingSystem.java @@ -0,0 +1,193 @@ +package ru.project.tower.systems; + +import com.badlogic.gdx.math.Circle; +import com.badlogic.gdx.math.MathUtils; +import com.badlogic.gdx.math.Rectangle; +import com.badlogic.gdx.utils.Array; +import java.util.Objects; +import ru.project.tower.abilities.Turret; +import ru.project.tower.entities.bullets.BulletSystem; +import ru.project.tower.entities.circles.BaseCircleData; +import ru.project.tower.run.GameplayEventSink; +import ru.project.tower.run.GameplayEvents; +import ru.project.tower.run.GameplaySound; +import ru.project.tower.support.MathUtilsRandomSource; +import ru.project.tower.support.RandomSource; + +public class PlayerShootingSystem { + private final RandomSource random; + private final ShotOrigin shotOrigin = new ShotOrigin(); + + public PlayerShootingSystem() { + this(new MathUtilsRandomSource()); + } + + public PlayerShootingSystem(RandomSource random) { + this.random = Objects.requireNonNull(random, "random"); + } + + public boolean shootAtNearestCircle( + Array circles, + Rectangle square, + BulletSystem bulletSystem, + GameplayEventSink gameplayEventSink, + ShotConfig config) { + Objects.requireNonNull(circles, "circles"); + Objects.requireNonNull(square, "square"); + Objects.requireNonNull(bulletSystem, "bulletSystem"); + Objects.requireNonNull(gameplayEventSink, "gameplayEventSink"); + Objects.requireNonNull(config, "config"); + + BaseCircleData nearestCircleData = findNearestCircleInRange(circles, square, config); + if (nearestCircleData == null) { + return false; + } + + float squareCenterX = square.x + square.width / 2f; + float squareCenterY = square.y + square.height / 2f; + Circle nearestCircle = nearestCircleData.circle; + + gameplayEventSink.emit(GameplayEvents.sound(GameplaySound.SHOT, 0.5f, 1f, 0f)); + + float angle = + MathUtils.atan2(nearestCircle.y - squareCenterY, nearestCircle.x - squareCenterX); + calculateShotOrigin(shotOrigin, square, squareCenterX, squareCenterY, nearestCircle, angle); + + boolean isCrit = random.nextFloat() < config.critChance; + float critMult = isCrit ? config.critMultiplier : 1f; + bulletSystem.fireBullet( + shotOrigin.x, + shotOrigin.y, + angle, + config.bulletRadius, + config.gameScale, + config.speedMultiplier, + config.damageMultiplier, + isCrit, + critMult); + return true; + } + + public void shootTurretAtTarget( + Turret turret, + BaseCircleData target, + BulletSystem bulletSystem, + GameplayEventSink gameplayEventSink, + float bulletRadius, + float scaledGameScale) { + Objects.requireNonNull(turret, "turret"); + Objects.requireNonNull(target, "target"); + Objects.requireNonNull(bulletSystem, "bulletSystem"); + Objects.requireNonNull(gameplayEventSink, "gameplayEventSink"); + + float angle = MathUtils.atan2(target.circle.y - turret.y, target.circle.x - turret.x); + bulletSystem.fireTurretShot( + turret.x, turret.y, angle, bulletRadius, scaledGameScale, turret.damage); + gameplayEventSink.emit(GameplayEvents.sound(GameplaySound.SHOT, 0.25f, 1f, 0f)); + } + + private static BaseCircleData findNearestCircleInRange( + Array circles, Rectangle square, ShotConfig config) { + float squareCenterX = square.x + square.width / 2f; + float squareCenterY = square.y + square.height / 2f; + BaseCircleData nearestCircleData = null; + float nearestDistanceSquared = Float.MAX_VALUE; + float adjustedRange = config.shootingRange * config.gameScale; + float adjustedRangeSquared = adjustedRange * adjustedRange; + + for (BaseCircleData circleData : circles) { + Circle circle = circleData.circle; + float dx = circle.x - squareCenterX; + float dy = circle.y - squareCenterY; + float distanceSquared = dx * dx + dy * dy; + + if (distanceSquared < adjustedRangeSquared + && distanceSquared < nearestDistanceSquared) { + nearestCircleData = circleData; + nearestDistanceSquared = distanceSquared; + } + } + return nearestCircleData; + } + + private static void calculateShotOrigin( + ShotOrigin out, + Rectangle square, + float squareCenterX, + float squareCenterY, + Circle nearestCircle, + float angle) { + float cosTheta = MathUtils.cos(angle); + float sinTheta = MathUtils.sin(angle); + float absCos = Math.abs(cosTheta); + float absSin = Math.abs(sinTheta); + float hw = square.width / 2f; + float hh = square.height / 2f; + float startX; + float startY; + + if (absCos * hh >= absSin * hw) { + startX = squareCenterX + Math.signum(cosTheta) * hw; + if (absCos > 0.001f) { + startY = squareCenterY + hw * (sinTheta / absCos); + } else { + startY = squareCenterY + Math.signum(sinTheta) * hh; + } + } else { + startY = squareCenterY + Math.signum(sinTheta) * hh; + if (absSin > 0.001f) { + startX = squareCenterX + hh * (cosTheta / absSin); + } else { + startX = squareCenterX + Math.signum(cosTheta) * hw; + } + } + + float spawnDx = startX - squareCenterX; + float spawnDy = startY - squareCenterY; + float enemyDx = nearestCircle.x - squareCenterX; + float enemyDy = nearestCircle.y - squareCenterY; + float distToSpawnSquared = spawnDx * spawnDx + spawnDy * spawnDy; + float distToEnemySquared = enemyDx * enemyDx + enemyDy * enemyDy; + + if (distToEnemySquared < distToSpawnSquared) { + startX = squareCenterX; + startY = squareCenterY; + } + out.x = startX; + out.y = startY; + } + + public static final class ShotConfig { + public final float shootingRange; + public final float gameScale; + public final float bulletRadius; + public final float speedMultiplier; + public final float damageMultiplier; + public final float critChance; + public final float critMultiplier; + + public ShotConfig( + float shootingRange, + float gameScale, + float bulletRadius, + float speedMultiplier, + float damageMultiplier, + float critChance, + float critMultiplier) { + this.shootingRange = shootingRange; + this.gameScale = gameScale; + this.bulletRadius = bulletRadius; + this.speedMultiplier = speedMultiplier; + this.damageMultiplier = damageMultiplier; + this.critChance = critChance; + this.critMultiplier = critMultiplier; + } + } + + private static final class ShotOrigin { + private float x; + private float y; + + private ShotOrigin() {} + } +} diff --git a/core/src/main/java/ru/project/tower/systems/SpecialCircleBehaviors.java b/core/src/main/java/ru/project/tower/systems/SpecialCircleBehaviors.java new file mode 100644 index 0000000..1acaeda --- /dev/null +++ b/core/src/main/java/ru/project/tower/systems/SpecialCircleBehaviors.java @@ -0,0 +1,516 @@ +package ru.project.tower.systems; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.math.MathUtils; +import com.badlogic.gdx.math.Rectangle; +import com.badlogic.gdx.utils.Array; +import com.badlogic.gdx.utils.Pools; +import ru.project.tower.entities.bullets.BulletData; +import ru.project.tower.entities.bullets.BulletSystem; +import ru.project.tower.entities.circles.BaseCircleData; +import ru.project.tower.entities.circles.DasherCircleData; +import ru.project.tower.entities.circles.HealerCircleData; +import ru.project.tower.entities.circles.SniperCircleData; +import ru.project.tower.entities.circles.bosses.GlacialWardenData; +import ru.project.tower.entities.circles.bosses.IllusionMasterData; +import ru.project.tower.entities.circles.bosses.JuggernautData; +import ru.project.tower.entities.circles.bosses.ShadowWeaverData; +import ru.project.tower.entities.circles.bosses.SwarmQueenData; +import ru.project.tower.entities.circles.bosses.VolatileReactorData; +import ru.project.tower.support.RandomSource; +import ru.project.tower.support.RangeChecks; + +interface SpecialCircleBehavior { + boolean supports(BaseCircleData circle); + + void update(BaseCircleData circle, SpecialCircleUpdateContext context); + + default void beforeMove(BaseCircleData circle, float squareCenterX, float squareCenterY) {} + + default Class supportedType() { + return null; + } + + default boolean allowsIdleSteering(BaseCircleData circle) { + return true; + } +} + +final class SpecialCircleUpdateContext { + final Array circles; + final Rectangle square; + final BulletSystem bulletSystem; + final SpecialCircleSystem.Host host; + final float gameScale; + final RandomSource random; + final float squareCenterX; + final float squareCenterY; + + SpecialCircleUpdateContext( + Array circles, + Rectangle square, + BulletSystem bulletSystem, + SpecialCircleSystem.Host host, + float gameScale, + RandomSource random) { + this.circles = circles; + this.square = square; + this.bulletSystem = bulletSystem; + this.host = host; + this.gameScale = gameScale; + this.random = random; + this.squareCenterX = square.x + square.width / 2f; + this.squareCenterY = square.y + square.height / 2f; + } +} + +abstract class TypedSpecialCircleBehavior + implements SpecialCircleBehavior { + private final Class type; + + TypedSpecialCircleBehavior(Class type) { + this.type = type; + } + + @Override + public final Class supportedType() { + return type; + } + + @Override + public final boolean supports(BaseCircleData circle) { + return type.isInstance(circle); + } + + @Override + public final void update(BaseCircleData circle, SpecialCircleUpdateContext context) { + @SuppressWarnings("unchecked") + T typedCircle = (T) circle; + updateTyped(typedCircle, context); + } + + protected abstract void updateTyped(T circle, SpecialCircleUpdateContext context); +} + +final class SwarmQueenBehavior extends TypedSpecialCircleBehavior { + SwarmQueenBehavior() { + super(SwarmQueenData.class); + } + + @Override + protected void updateTyped(SwarmQueenData queen, SpecialCircleUpdateContext context) { + if (queen.shouldSpawnMinions()) { + context.host.spawnQueenMinion(queen); + queen.onMinionSpawn(); + } + if (queen.isReadyToFireProjectiles() && !queen.isCharging()) { + BossProjectileFactory.spawnQueenProjectiles(queen, context.bulletSystem); + } + } +} + +final class JuggernautBehavior extends TypedSpecialCircleBehavior { + private final Color neonRed; + private final Color neonBlue; + + JuggernautBehavior(Color neonRed, Color neonBlue) { + super(JuggernautData.class); + this.neonRed = neonRed; + this.neonBlue = neonBlue; + } + + @Override + protected void updateTyped(JuggernautData juggernaut, SpecialCircleUpdateContext context) { + juggernaut.update(); + + updateChargeStart(juggernaut, context); + emitChargeParticles(juggernaut, context); + updateShockwave(juggernaut, context); + updateChargeImpact(juggernaut, context); + } + + private void updateChargeStart(JuggernautData juggernaut, SpecialCircleUpdateContext context) { + if (juggernaut.shouldStartCharge()) { + juggernaut.setChargeDirection( + context.squareCenterX - juggernaut.getX(), + context.squareCenterY - juggernaut.getY()); + } + } + + private void emitChargeParticles( + JuggernautData juggernaut, SpecialCircleUpdateContext context) { + if (juggernaut.shouldExecuteCharge()) { + context.host.createBossParticles( + juggernaut.getX(), + juggernaut.getY(), + juggernaut.getRadius(), + neonRed, + 1.5f, + 10); + } + } + + private void updateShockwave(JuggernautData juggernaut, SpecialCircleUpdateContext context) { + if (juggernaut.shouldShockwave()) { + juggernaut.performShockwave(); + applyShockwaveToBullets(juggernaut, context); + context.host.createBossParticles( + juggernaut.getX(), + juggernaut.getY(), + juggernaut.getRadius(), + neonBlue, + 2.0f, + 20); + } + } + + private void applyShockwaveToBullets( + JuggernautData juggernaut, SpecialCircleUpdateContext context) { + for (BulletData bullet : context.bulletSystem.getBullets()) { + float dx = bullet.getX() - juggernaut.getX(); + float dy = bullet.getY() - juggernaut.getY(); + float distance = (float) Math.sqrt(dx * dx + dy * dy); + if (distance > 0f && distance < JuggernautData.getShockwaveRadius()) { + float force = + (1 - distance / JuggernautData.getShockwaveRadius()) + * JuggernautData.getShockwaveForce(); + bullet.velocity.add(dx / distance * force, dy / distance * force); + } + } + } + + private void updateChargeImpact(JuggernautData juggernaut, SpecialCircleUpdateContext context) { + if (juggernaut.isCharging() + && context.host.isCircleIntersectingSquare(juggernaut.circle, context.square)) { + juggernaut.endCharge(); + if (context.host.damagePlayerIfVulnerable(juggernaut.damage * 2, 500L)) { + context.host.createBossParticles( + context.squareCenterX, + context.squareCenterY, + context.square.width, + neonRed, + 1.5f, + 15); + } + } + } + + @Override + public boolean allowsIdleSteering(BaseCircleData circle) { + return !((JuggernautData) circle).isCharging(); + } +} + +final class ShadowWeaverBehavior extends TypedSpecialCircleBehavior { + private final Color neonPurple; + + ShadowWeaverBehavior(Color neonPurple) { + super(ShadowWeaverData.class); + this.neonPurple = neonPurple; + } + + @Override + protected void updateTyped(ShadowWeaverData weaver, SpecialCircleUpdateContext context) { + weaver.update(); + if (weaver.shouldBecomeInvisible()) { + context.host.createBossParticles( + weaver.getX(), weaver.getY(), weaver.getRadius(), neonPurple, 1.0f, 12); + } + + applyCloneContactDamage(weaver, context); + + if (weaver.shouldTeleport()) { + float angle = context.random.angle(); + float dist = context.random.range(100f, 300f); + weaver.startTeleport( + context.squareCenterX + MathUtils.cos(angle) * dist, + context.squareCenterY + MathUtils.sin(angle) * dist); + context.host.createBossParticles( + weaver.getX(), weaver.getY(), weaver.getRadius(), neonPurple, 1.2f, 10); + } + + if (weaver.shouldShoot()) { + BossProjectileFactory.spawnShadowWeaverProjectile( + weaver, context.bulletSystem, context.squareCenterX, context.squareCenterY); + } + } + + private void applyCloneContactDamage(ShadowWeaverData weaver, SpecialCircleUpdateContext context) { + Array clones = weaver.getClones(); + for (int i = clones.size - 1; i >= 0; i--) { + ShadowWeaverData.ShadowCloneData clone = clones.get(i); + if (RangeChecks.withinRadiusExclusive( + clone.getX(), + clone.getY(), + context.squareCenterX, + context.squareCenterY, + clone.getRadius())) { + context.host.damagePlayerIfVulnerable( + ShadowWeaverData.getCloneDamage(), + ShadowWeaverData.getCloneDamageCooldownMs()); + return; + } + } + } +} + +final class VolatileReactorBehavior extends TypedSpecialCircleBehavior { + private final Color neonYellow; + + VolatileReactorBehavior(Color neonYellow) { + super(VolatileReactorData.class); + this.neonYellow = neonYellow; + } + + @Override + protected void updateTyped(VolatileReactorData reactor, SpecialCircleUpdateContext context) { + reactor.update(); + + if (reactor.shouldCreateFireZone()) { + reactor.createFireZone(); + } + + boolean explodedThisFrame = false; + if (reactor.shouldExplode()) { + explodedThisFrame = true; + reactor.startExplosion(); + if (RangeChecks.withinRadiusExclusive( + reactor.getX(), + reactor.getY(), + context.squareCenterX, + context.squareCenterY, + VolatileReactorData.getExplosionRadius())) { + context.host.damagePlayerIfVulnerable(VolatileReactorData.getExplosionDamage(), 0L); + } + context.host.createBossParticles( + reactor.getX(), + reactor.getY(), + VolatileReactorData.getExplosionRadius(), + neonYellow, + 1.0f, + 30); + } + + if (!explodedThisFrame) { + applyFireZoneDamage(reactor, context); + } + + if (reactor.shouldShootMissiles()) { + BossProjectileFactory.spawnVolatileReactorMissiles( + reactor, context.bulletSystem, context.random::angle); + } + } + + private void applyFireZoneDamage( + VolatileReactorData reactor, SpecialCircleUpdateContext context) { + for (VolatileReactorData.FireZone zone : reactor.getFireZones()) { + if (RangeChecks.withinRadiusExclusive( + zone.x, + zone.y, + context.squareCenterX, + context.squareCenterY, + zone.radius)) { + context.host.damagePlayerIfVulnerable( + VolatileReactorData.getFireZoneDamage(), + VolatileReactorData.getFireZoneDamageCooldownMs()); + return; + } + } + } +} + +final class HealerBehavior extends TypedSpecialCircleBehavior { + HealerBehavior() { + super(HealerCircleData.class); + } + + @Override + protected void updateTyped(HealerCircleData healer, SpecialCircleUpdateContext context) { + if (!healer.shouldPulse()) return; + + float heals = HealerCircleData.getHealRadius(); + float heals2 = RangeChecks.radiusSquared(heals); + int amount = HealerCircleData.getHealAmount(); + for (BaseCircleData other : context.circles) { + if (other == healer) continue; + if (other.isDead()) continue; + if (RangeChecks.distanceSquared( + healer.getX(), healer.getY(), other.getX(), other.getY()) + <= heals2) { + other.health += amount; + } + } + context.host.createExplosion(healer.getX(), healer.getY(), healer.getColor()); + } +} + +final class DasherBehavior extends TypedSpecialCircleBehavior { + DasherBehavior() { + super(DasherCircleData.class); + } + + @Override + protected void updateTyped(DasherCircleData dasher, SpecialCircleUpdateContext context) { + dasher.tick(context.squareCenterX, context.squareCenterY); + } +} + +final class SniperBehavior extends TypedSpecialCircleBehavior { + private final Color neonRed; + + SniperBehavior(Color neonRed) { + super(SniperCircleData.class); + this.neonRed = neonRed; + } + + @Override + public void beforeMove(BaseCircleData circle, float squareCenterX, float squareCenterY) { + ((SniperCircleData) circle).setPlayerPosition(squareCenterX, squareCenterY); + } + + @Override + protected void updateTyped(SniperCircleData sniper, SpecialCircleUpdateContext context) { + if (!sniper.shouldShoot()) return; + + float dx = context.squareCenterX - sniper.getX(); + float dy = context.squareCenterY - sniper.getY(); + float len = (float) Math.sqrt(dx * dx + dy * dy); + if (len <= 0f) return; + + float speed = SniperCircleData.getProjectileSpeed(); + BulletData bullet = Pools.obtain(BulletData.class); + bullet.configureAsEnemyBullet( + sniper.getX(), + sniper.getY(), + SniperCircleData.getProjectileRadius(), + dx / len * speed, + dy / len * speed, + sniper.damage); + bullet.setColor(neonRed); + context.bulletSystem.addEnemyBullet(bullet); + } + + @Override + public boolean allowsIdleSteering(BaseCircleData circle) { + return !((SniperCircleData) circle).isHoldingPosition(); + } +} + +final class GlacialWardenBehavior extends TypedSpecialCircleBehavior { + private final Color neonCyan; + + GlacialWardenBehavior(Color neonCyan) { + super(GlacialWardenData.class); + this.neonCyan = neonCyan; + } + + @Override + protected void updateTyped(GlacialWardenData warden, SpecialCircleUpdateContext context) { + warden.update(); + warden.updatePlayerAuraState( + RangeChecks.withinRadiusExclusive( + warden.getX(), + warden.getY(), + context.squareCenterX, + context.squareCenterY, + warden.getAuraRadius())); + + if (warden.shouldStartPrison()) { + warden.startPrisonCast(context.squareCenterX, context.squareCenterY); + } + + boolean prisonDamagedThisFrame = false; + if (warden.isPrisonActive()) { + if (RangeChecks.withinRadiusExclusive( + warden.getPrisonChargePosition().x, + warden.getPrisonChargePosition().y, + context.squareCenterX, + context.squareCenterY, + GlacialWardenData.getPrisonRadius())) { + context.host.damagePlayerIfVulnerable(GlacialWardenData.getPrisonDamage(), 1000L); + prisonDamagedThisFrame = true; + } + } + + if (warden.shouldShootShards()) { + BossProjectileFactory.spawnGlacialWardenShards(warden, context.random::angle); + } + if (!prisonDamagedThisFrame) { + applyShardDamage(warden, context); + } + + if (warden.shouldFreeze()) { + if (RangeChecks.withinRadiusExclusive( + warden.getX(), + warden.getY(), + context.squareCenterX, + context.squareCenterY, + warden.getFreezeRadius())) { + warden.activateFreezeField(); + } + context.host.createBossParticles( + warden.getX(), warden.getY(), warden.getFreezeRadius(), neonCyan, 1.0f, 20); + } + } + + private void applyShardDamage(GlacialWardenData warden, SpecialCircleUpdateContext context) { + Array shards = warden.getActiveShards(); + for (int i = shards.size - 1; i >= 0; i--) { + GlacialWardenData.IceShard shard = shards.get(i); + if (RangeChecks.withinRadiusExclusive( + shard.x, + shard.y, + context.squareCenterX, + context.squareCenterY, + GlacialWardenData.getShardRadius())) { + context.host.damagePlayerIfVulnerable( + GlacialWardenData.getShardDamage(), + GlacialWardenData.getShardDamageCooldownMs()); + shards.removeIndex(i); + return; + } + } + } +} + +final class IllusionMasterBehavior extends TypedSpecialCircleBehavior { + IllusionMasterBehavior() { + super(IllusionMasterData.class); + } + + @Override + protected void updateTyped(IllusionMasterData master, SpecialCircleUpdateContext context) { + applyIllusionContactDamage(master, context); + + if (master.shouldCreateIllusions()) { + float angle = context.random.angle(); + float dist = 150f; + master.createIllusion( + master.getX() + MathUtils.cos(angle) * dist, + master.getY() + MathUtils.sin(angle) * dist); + } + if (master.shouldShootProjectiles()) { + BossProjectileFactory.spawnIllusionMasterProjectiles( + master, context.bulletSystem, context.random::angle, context.gameScale); + } + } + + private void applyIllusionContactDamage( + IllusionMasterData master, SpecialCircleUpdateContext context) { + Array illusions = master.getIllusions(); + for (int i = illusions.size - 1; i >= 0; i--) { + IllusionMasterData.IllusionData illusion = illusions.get(i); + if (RangeChecks.withinRadiusExclusive( + illusion.getX(), + illusion.getY(), + context.squareCenterX, + context.squareCenterY, + illusion.getRadius())) { + context.host.damagePlayerIfVulnerable( + IllusionMasterData.getIllusionContactDamage(), + IllusionMasterData.getIllusionDamageCooldownMs()); + return; + } + } + } +} diff --git a/core/src/main/java/ru/project/tower/systems/SpecialCircleSystem.java b/core/src/main/java/ru/project/tower/systems/SpecialCircleSystem.java new file mode 100644 index 0000000..660e864 --- /dev/null +++ b/core/src/main/java/ru/project/tower/systems/SpecialCircleSystem.java @@ -0,0 +1,194 @@ +package ru.project.tower.systems; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.math.Circle; +import com.badlogic.gdx.math.Rectangle; +import com.badlogic.gdx.utils.Array; +import java.util.IdentityHashMap; +import java.util.Map; +import ru.project.tower.entities.bullets.BulletSystem; +import ru.project.tower.entities.circles.BaseCircleData; +import ru.project.tower.entities.circles.bosses.SwarmQueenData; +import ru.project.tower.support.MathUtilsRandomSource; +import ru.project.tower.support.RandomSource; +import ru.project.tower.support.RangeChecks; + +public final class SpecialCircleSystem { + public interface Host { + void spawnQueenMinion(SwarmQueenData queen); + + void createBossParticles( + float x, float y, float radius, Color color, float spread, int count); + + void createExplosion(float x, float y, Color color); + + void createExplosion(float x, float y, float[] color); + + boolean isCircleIntersectingSquare(Circle circle, Rectangle square); + + boolean damagePlayerIfVulnerable(int damage, long damageCooldownMs); + } + + private static final SpecialCircleBehavior NO_BEHAVIOR = + new SpecialCircleBehavior() { + @Override + public boolean supports(BaseCircleData circle) { + return false; + } + + @Override + public void update(BaseCircleData circle, SpecialCircleUpdateContext context) {} + }; + + private final SpecialCircleBehavior[] behaviors; + private final Map, SpecialCircleBehavior> behaviorCache = new IdentityHashMap<>(); + private final boolean classStableDispatch; + private final RandomSource random; + + public SpecialCircleSystem( + Color neonRed, Color neonBlue, Color neonYellow, Color neonCyan, Color neonPurple) { + this(neonRed, neonBlue, neonYellow, neonCyan, neonPurple, new MathUtilsRandomSource()); + } + + public SpecialCircleSystem( + Color neonRed, + Color neonBlue, + Color neonYellow, + Color neonCyan, + Color neonPurple, + RandomSource random) { + this( + random, + new SwarmQueenBehavior(), + new JuggernautBehavior(neonRed, neonBlue), + new ShadowWeaverBehavior(neonPurple), + new VolatileReactorBehavior(neonYellow), + new HealerBehavior(), + new DasherBehavior(), + new SniperBehavior(neonRed), + new GlacialWardenBehavior(neonCyan), + new IllusionMasterBehavior()); + } + + SpecialCircleSystem(SpecialCircleBehavior... behaviors) { + this(new MathUtilsRandomSource(), behaviors); + } + + SpecialCircleSystem(RandomSource random, SpecialCircleBehavior... behaviors) { + this.random = random; + this.behaviors = behaviors; + this.classStableDispatch = supportsOnlyDependOnCircleClass(behaviors); + } + + public void prepareForMovement(BaseCircleData circle, Rectangle square) { + SpecialCircleBehavior behavior = behaviorFor(circle); + if (behavior == null) return; + + behavior.beforeMove(circle, square.x + square.width / 2f, square.y + square.height / 2f); + } + + public void update( + Array circles, + Rectangle square, + BulletSystem bulletSystem, + Host host, + float gameScale) { + SpecialCircleUpdateContext context = null; + + for (int i = circles.size - 1; i >= 0; i--) { + BaseCircleData circle = circles.get(i); + if (circle.isDead()) continue; + + SpecialCircleBehavior behavior = behaviorFor(circle); + if (behavior != null) { + if (context == null) { + context = + new SpecialCircleUpdateContext( + circles, square, bulletSystem, host, gameScale, random); + } + behavior.update(circle, context); + } + + if (behavior == null || behavior.allowsIdleSteering(circle)) { + float squareCenterX = + context == null ? square.x + square.width / 2f : context.squareCenterX; + float squareCenterY = + context == null ? square.y + square.height / 2f : context.squareCenterY; + steerTowardPlayerWhenIdle(circle, squareCenterX, squareCenterY, gameScale); + } + } + } + + private SpecialCircleBehavior behaviorFor(BaseCircleData circle) { + if (!classStableDispatch) { + return behaviorForBySupports(circle); + } + + Class circleClass = circle.getClass(); + SpecialCircleBehavior behavior = behaviorCache.get(circleClass); + if (behavior != null) { + return behavior == NO_BEHAVIOR ? null : behavior; + } + + behavior = resolveBehavior(circleClass); + behaviorCache.put(circleClass, behavior == null ? NO_BEHAVIOR : behavior); + return behavior; + } + + private SpecialCircleBehavior behaviorForBySupports(BaseCircleData circle) { + for (int i = 0; i < behaviors.length; i++) { + SpecialCircleBehavior behavior = behaviors[i]; + if (behavior.supports(circle)) { + return behavior; + } + } + return null; + } + + private SpecialCircleBehavior resolveBehavior(Class circleClass) { + for (int i = 0; i < behaviors.length; i++) { + SpecialCircleBehavior behavior = behaviors[i]; + if (isCircleClassSupported(circleClass, behavior.supportedType())) { + return behavior; + } + } + return null; + } + + private boolean isCircleClassSupported( + Class circleClass, Class supportedType) { + for (Class type = circleClass; type != null; type = type.getSuperclass()) { + if (type == supportedType) return true; + if (type == BaseCircleData.class) return false; + } + return false; + } + + private boolean supportsOnlyDependOnCircleClass(SpecialCircleBehavior[] behaviors) { + for (int i = 0; i < behaviors.length; i++) { + SpecialCircleBehavior behavior = behaviors[i]; + if (behavior.supportedType() == null) { + return false; + } + } + return true; + } + + private void steerTowardPlayerWhenIdle( + BaseCircleData circle, float squareCenterX, float squareCenterY, float gameScale) { + if (circle.isFrozen()) return; + + float dx = squareCenterX - circle.getX(); + float dy = squareCenterY - circle.getY(); + float dist2 = + RangeChecks.distanceSquared( + squareCenterX, squareCenterY, circle.getX(), circle.getY()); + + if (dist2 > RangeChecks.radiusSquared(10f)) { + float dist = (float) Math.sqrt(dist2); + float speed = circle.velocity.len(); + if (speed < 10f) speed = 40f * gameScale; + circle.velocity.set(dx / dist * speed, dy / dist * speed); + } + } +} diff --git a/core/src/main/java/ru/project/tower/talents/TalentData.java b/core/src/main/java/ru/project/tower/talents/TalentData.java new file mode 100644 index 0000000..ae213ed --- /dev/null +++ b/core/src/main/java/ru/project/tower/talents/TalentData.java @@ -0,0 +1,101 @@ +package ru.project.tower.talents; + +import com.badlogic.gdx.math.Vector2; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + + + + +public class TalentData { + public enum TalentType { + DAMAGE, + HEALTH, + SPEED, + COOLDOWN, + REGEN, + CONTROL, + ECONOMY, + ABILITY, + UTILITY, + KEYSTONE + } + + private final String id; + private final String name; + private final String description; + private final TalentType type; + private final Vector2 position; + private final List dependencyIds; + private final List dependencyIdsView; + private final int maxLevel; + private final int baseCost; + private final float costMultiplier; + + public TalentData( + String id, + String name, + String description, + TalentType type, + float x, + float y, + int maxLevel, + int baseCost, + float costMultiplier) { + this.id = id; + this.name = name; + this.description = description; + this.type = type; + this.position = new Vector2(x, y); + this.maxLevel = maxLevel; + this.baseCost = baseCost; + this.costMultiplier = costMultiplier; + this.dependencyIds = new ArrayList<>(); + this.dependencyIdsView = Collections.unmodifiableList(dependencyIds); + } + + public void addDependency(String talentId) { + dependencyIds.add(talentId); + } + + public int getCost(int currentLevel) { + return (int) (baseCost * Math.pow(costMultiplier, currentLevel)); + } + + public String getId() { + return id; + } + + public String getName() { + return name; + } + + public String getDescription() { + return description; + } + + public TalentType getType() { + return type; + } + + public Vector2 getPosition() { + return new Vector2(position); + } + + public float getX() { + return position.x; + } + + public float getY() { + return position.y; + } + + public List getDependencyIds() { + return dependencyIdsView; + } + + public int getMaxLevel() { + return maxLevel; + } +} diff --git a/core/src/main/java/ru/project/tower/talents/TalentTree.java b/core/src/main/java/ru/project/tower/talents/TalentTree.java new file mode 100644 index 0000000..4438a7a --- /dev/null +++ b/core/src/main/java/ru/project/tower/talents/TalentTree.java @@ -0,0 +1,789 @@ +package ru.project.tower.talents; + +import com.badlogic.gdx.utils.Array; +import com.badlogic.gdx.utils.ObjectMap; +import java.util.ArrayList; +import java.util.Collections; +import java.util.EnumMap; +import java.util.List; +import java.util.Map; +import ru.project.tower.balance.EndlessBalanceSpec; +import ru.project.tower.balance.PowerAxis; +import ru.project.tower.player.PlayerStats; + + + + +public class TalentTree { + private static final TalentSpec[] TALENT_SPECS = { + rootTalent( + "health_1", + "Запас здоровья", + "+10 к максимуму здоровья за уровень.", + TalentData.TalentType.HEALTH, + 0, + 0, + 5, + 100, + 1.5f), + talent( + "damage_1", + "Сила выстрела", + "+1 к урону пули за уровень.", + TalentData.TalentType.DAMAGE, + 120, + 70, + 5, + 150, + 1.5f, + "health_1"), + talent( + "cooldown_1", + "Быстрый затвор", + "-50 мс перезарядки за уровень.", + TalentData.TalentType.COOLDOWN, + 120, + -70, + 5, + 200, + 1.5f, + "health_1"), + talent( + "speed_1", + "Скорость пуль", + "+20 к скорости пуль за уровень.", + TalentData.TalentType.SPEED, + -120, + -70, + 5, + 100, + 1.5f, + "health_1"), + talent( + "regen_1", + "Восстановление", + "+1 здоровья/с за уровень.", + TalentData.TalentType.REGEN, + -120, + 70, + 5, + 250, + 1.5f, + "health_1"), + talent( + "damage_2", + "Мощный выстрел", + "+5 к урону пули за уровень.", + TalentData.TalentType.DAMAGE, + 240, + 0, + 3, + 500, + 1.8f, + "damage_1", + "cooldown_1"), + talent( + "cooldown_2", + "Ускоренный огонь", + "-100 мс перезарядки за уровень.", + TalentData.TalentType.COOLDOWN, + 0, + -140, + 3, + 600, + 1.8f, + "cooldown_1", + "speed_1"), + talent( + "speed_2", + "Сверхбыстрые пули", + "+100 к скорости пуль за уровень.", + TalentData.TalentType.SPEED, + -240, + 0, + 3, + 400, + 1.8f, + "speed_1", + "regen_1"), + talent( + "health_2", + "Крепкая защита", + "+50 к максимуму здоровья за уровень.", + TalentData.TalentType.HEALTH, + 0, + 140, + 3, + 450, + 1.8f, + "regen_1", + "damage_1"), + talent( + "economy_1", + "Боевые трофеи", + "Даёт рейтинг ресурсов +5 за уровень.", + TalentData.TalentType.ECONOMY, + 0, + 260, + 4, + 300, + 1.65f, + "health_2"), + talent( + "ability_1", + "Тактика умений", + "Даёт рейтинг умений +5 за уровень.", + TalentData.TalentType.ABILITY, + 240, + -120, + 4, + 380, + 1.7f, + "cooldown_1"), + talent( + "utility_1", + "Надежная помощь", + "Даёт рейтинг поддержки +5 за уровень.", + TalentData.TalentType.UTILITY, + -240, + -120, + 4, + 320, + 1.65f, + "speed_1"), + talent( + "control_1", + "Замедление", + "Даёт рейтинг замедления +5 за уровень.", + TalentData.TalentType.CONTROL, + -360, + -140, + 4, + 350, + 1.7f, + "speed_2", + "utility_1"), + talent( + "regen_2", + "Сильное лечение", + "+2 здоровья/с за уровень.", + TalentData.TalentType.REGEN, + -120, + 220, + 3, + 620, + 1.85f, + "regen_1", + "economy_1"), + talent( + "ability_2", + "Быстрый откат", + "Даёт рейтинг умений +5 за уровень.", + TalentData.TalentType.ABILITY, + 360, + -140, + 3, + 700, + 1.9f, + "ability_1"), + talent( + "utility_bonus", + "Магнит бонусов", + "Даёт рейтинг поддержки +5 за уровень.", + TalentData.TalentType.UTILITY, + -360, + 100, + 3, + 720, + 1.8f, + "speed_2", + "utility_1"), + talent( + "ability_blast", + "Ударная волна", + "Даёт рейтинг умений +5 за уровень.", + TalentData.TalentType.ABILITY, + 360, + 100, + 3, + 780, + 1.85f, + "ability_2", + "damage_2"), + talent( + "control_execute", + "Урон по замедленным", + "Даёт рейтинг замедления +5 за уровень.", + TalentData.TalentType.CONTROL, + -480, + -260, + 3, + 740, + 1.85f, + "control_1"), + talent( + "engineering_turret", + "Боевая турель", + "Даёт рейтинг умений +5 за уровень.", + TalentData.TalentType.ABILITY, + 480, + -260, + 3, + 820, + 1.9f, + "ability_2"), + talent( + "attack_precision", + "Точный выстрел", + "+2 к урону пули за уровень.", + TalentData.TalentType.DAMAGE, + 360, + 220, + 3, + 760, + 1.85f, + "damage_2", + "ability_blast"), + talent( + "survival_barrier", + "Резерв выживания", + "+15 к максимуму здоровья за уровень.", + TalentData.TalentType.HEALTH, + -240, + 300, + 3, + 780, + 1.85f, + "regen_2"), + talent( + "economy_reroll", + "Лучший выбор", + "Даёт рейтинг ресурсов +5 за уровень.", + TalentData.TalentType.ECONOMY, + 240, + 300, + 3, + 760, + 1.85f, + "economy_1"), + talent( + "keystone_pierce", + "Сквозной выстрел", + "Даёт рейтинг пробоя +5 за уровень.", + TalentData.TalentType.KEYSTONE, + 0, + -280, + 3, + 800, + 2.0f, + "cooldown_2"), + talent( + "keystone_crit", + "Крит-мастер", + "Даёт рейтинг шанса крита +5 за уровень.", + TalentData.TalentType.KEYSTONE, + 360, + 360, + 5, + 700, + 1.8f, + "attack_precision"), + talent( + "keystone_aoe", + "Урон по области", + "Даёт рейтинг урона по области +5 за уровень.", + TalentData.TalentType.KEYSTONE, + -120, + 360, + 2, + 900, + 2.2f, + "regen_2", + "survival_barrier"), + talent( + "keystone_splash", + "Осколочный залп", + "Даёт рейтинг урона по области +5 за уровень.", + TalentData.TalentType.KEYSTONE, + -360, + 360, + 2, + 1100, + 2.1f, + "utility_bonus", + "keystone_aoe"), + talent( + "keystone_turret", + "Мощная турель", + "Даёт рейтинг умений +5 за уровень.", + TalentData.TalentType.KEYSTONE, + 480, + -420, + 2, + 1150, + 2.1f, + "engineering_turret"), + talent( + "keystone_control_execute", + "Контроль и добивание", + "Даёт рейтинг замедления +5 за уровень.", + TalentData.TalentType.KEYSTONE, + -480, + -420, + 2, + 1150, + 2.1f, + "control_execute"), + talent( + "keystone_shield_regen", + "Щит и лечение", + "Даёт рейтинг щита +5 за уровень.", + TalentData.TalentType.KEYSTONE, + -240, + 420, + 2, + 1120, + 2.1f, + "survival_barrier", + "regen_2"), + talent( + "keystone_economy_reroll", + "Мастер выбора", + "Даёт рейтинг ресурсов +5 за уровень.", + TalentData.TalentType.KEYSTONE, + 180, + 420, + 2, + 1120, + 2.1f, + "economy_reroll", + "economy_1") + }; + + private final PlayerStats stats; + private final ObjectMap talents; + private final Array roots; + private final ArrayList allTalents; + private final List allTalentsView; + + private static TalentSpec rootTalent( + String id, + String name, + String description, + TalentData.TalentType type, + float x, + float y, + int maxLevel, + int baseCost, + float costMultiplier) { + return new TalentSpec( + true, id, name, description, type, x, y, maxLevel, baseCost, costMultiplier); + } + + private static TalentSpec talent( + String id, + String name, + String description, + TalentData.TalentType type, + float x, + float y, + int maxLevel, + int baseCost, + float costMultiplier, + String... dependencyIds) { + return new TalentSpec( + false, + id, + name, + description, + type, + x, + y, + maxLevel, + baseCost, + costMultiplier, + dependencyIds); + } + + private static final class TalentSpec { + private final boolean root; + private final String id; + private final String name; + private final String description; + private final TalentData.TalentType type; + private final float x; + private final float y; + private final int maxLevel; + private final int baseCost; + private final float costMultiplier; + private final String[] dependencyIds; + + private TalentSpec( + boolean root, + String id, + String name, + String description, + TalentData.TalentType type, + float x, + float y, + int maxLevel, + int baseCost, + float costMultiplier, + String... dependencyIds) { + this.root = root; + this.id = id; + this.name = name; + this.description = description; + this.type = type; + this.x = x; + this.y = y; + this.maxLevel = maxLevel; + this.baseCost = baseCost; + this.costMultiplier = costMultiplier; + this.dependencyIds = dependencyIds; + } + } + + + + + public TalentTree(PlayerStats stats) { + this.stats = stats; + this.talents = new ObjectMap<>(); + this.roots = new Array<>(); + this.allTalents = new ArrayList<>(); + this.allTalentsView = Collections.unmodifiableList(allTalents); + initializeTree(); + } + + private void registerTalent(TalentData talent) { + talents.put(talent.getId(), talent); + allTalents.add(talent); + } + + private TalentData addRootTalent( + String id, + String name, + String description, + TalentData.TalentType type, + float x, + float y, + int maxLevel, + int baseCost, + float costMultiplier) { + TalentData root = + addTalent(id, name, description, type, x, y, maxLevel, baseCost, costMultiplier); + roots.add(root); + return root; + } + + private TalentData addTalent( + String id, + String name, + String description, + TalentData.TalentType type, + float x, + float y, + int maxLevel, + int baseCost, + float costMultiplier, + String... dependencyIds) { + TalentData talent = + new TalentData( + id, name, description, type, x, y, maxLevel, baseCost, costMultiplier); + for (String dependencyId : dependencyIds) { + talent.addDependency(dependencyId); + } + registerTalent(talent); + return talent; + } + + private TalentData addTalent(TalentSpec spec) { + if (spec.root) { + return addRootTalent( + spec.id, + spec.name, + spec.description, + spec.type, + spec.x, + spec.y, + spec.maxLevel, + spec.baseCost, + spec.costMultiplier); + } + return addTalent( + spec.id, + spec.name, + spec.description, + spec.type, + spec.x, + spec.y, + spec.maxLevel, + spec.baseCost, + spec.costMultiplier, + spec.dependencyIds); + } + + private void initializeTree() { + for (TalentSpec spec : TALENT_SPECS) { + addTalent(spec); + } + } + + public TalentData getTalent(String id) { + return talents.get(id); + } + + public List getAllTalents() { + return allTalentsView; + } + + public boolean isUnlocked(String talentId) { + TalentData talent = getTalent(talentId); + if (talent == null) return false; + if (talent.getDependencyIds().isEmpty()) return true; + + + + + for (String depId : talent.getDependencyIds()) { + if (getCurrentLevel(depId) == 0) { + return false; + } + } + return true; + } + + public int getCurrentLevel(String talentId) { + if (getTalent(talentId) == null) return 0; + return stats.getTalentNodeLevel(talentId); + } + + public boolean canUpgradeTalent(String talentId) { + TalentData talent = getTalent(talentId); + return talent != null + && isUnlocked(talentId) + && getCurrentLevel(talentId) < talent.getMaxLevel(); + } + + public boolean upgradeTalent(String talentId) { + if (!canUpgradeTalent(talentId)) return false; + stats.incrementTalentNode(talentId); + return true; + } + + public float getStatBonus(TalentData.TalentType type) { + float bonus = 0; + for (TalentData talent : talents.values()) { + if (talent.getType() != type) continue; + int level = getCurrentLevel(talent.getId()); + if (level <= 0) continue; + + switch (talent.getId()) { + case "health_1": + bonus += level * 10; + break; + case "health_2": + bonus += level * 50; + break; + case "survival_barrier": + bonus += level * 15; + break; + + case "damage_1": + bonus += level * 1; + break; + case "damage_2": + bonus += level * 5; + break; + case "attack_precision": + bonus += level * 2; + break; + + case "speed_1": + bonus += level * 20; + break; + case "speed_2": + bonus += level * 100; + break; + + case "cooldown_1": + bonus += level * 50; + break; + case "cooldown_2": + bonus += level * 100; + break; + + case "regen_1": + bonus += level * 1; + break; + case "regen_2": + bonus += level * 2; + break; + default: + break; + } + } + return bonus; + } + + public Map getPermanentAxisRatings() { + EnumMap ratings = new EnumMap<>(PowerAxis.class); + ratings.put( + PowerAxis.DAMAGE, + EndlessBalanceSpec.permanentTalentRating( + stats.getDamageTalentLevel() + getCurrentLevel("attack_precision"))); + ratings.put( + PowerAxis.UTILITY, + EndlessBalanceSpec.permanentTalentRating( + stats.getSpeedTalentLevel() + + getCurrentLevel("utility_1") + + getCurrentLevel("utility_bonus") + + getCurrentLevel("economy_reroll"))); + ratings.put( + PowerAxis.CADENCE, + EndlessBalanceSpec.permanentTalentRating( + stats.getCooldownTalentLevel() + + getCurrentLevel("ability_1") + + getCurrentLevel("ability_2"))); + ratings.put( + PowerAxis.REGEN, + EndlessBalanceSpec.permanentTalentRating( + stats.getRegenTalentLevel() + getCurrentLevel("economy_1"))); + ratings.put( + PowerAxis.HEALTH, + EndlessBalanceSpec.permanentTalentRating( + stats.getHealthTalentLevel() + + getCurrentLevel("economy_1") + + getCurrentLevel("survival_barrier") + + getCurrentLevel("keystone_shield_regen"))); + ratings.put( + PowerAxis.CRIT, + EndlessBalanceSpec.permanentTalentRating(getCurrentLevel("keystone_crit"))); + ratings.put( + PowerAxis.AOE, + EndlessBalanceSpec.permanentTalentRating( + getCurrentLevel("keystone_aoe") + getCurrentLevel("keystone_splash"))); + ratings.put( + PowerAxis.CONTROL, + EndlessBalanceSpec.permanentTalentRating( + getCurrentLevel("keystone_pierce") + + getCurrentLevel("control_1") + + getCurrentLevel("control_execute") + + getCurrentLevel("keystone_control_execute") + + getCurrentLevel("ability_1") + + getCurrentLevel("ability_2"))); + ratings.put( + PowerAxis.SHIELD, + EndlessBalanceSpec.permanentTalentRating( + stats.getHealthTalentLevel() + + getCurrentLevel("survival_barrier") + + getCurrentLevel("keystone_shield_regen"))); + ratings.put( + PowerAxis.ECONOMY, + EndlessBalanceSpec.permanentTalentRating( + getCurrentLevel("economy_1") + + getCurrentLevel("economy_reroll") + + getCurrentLevel("keystone_economy_reroll"))); + ratings.put( + PowerAxis.ABILITY, + EndlessBalanceSpec.permanentTalentRating( + getCurrentLevel("ability_1") + + getCurrentLevel("ability_2") + + getCurrentLevel("ability_blast") + + getCurrentLevel("engineering_turret") + + getCurrentLevel("keystone_turret"))); + ratings.put( + PowerAxis.BOSSING, + EndlessBalanceSpec.permanentTalentRating( + getCurrentLevel("attack_precision") + + getCurrentLevel("control_execute") + + getCurrentLevel("keystone_control_execute"))); + return ratings; + } + + public PowerAxis axisForTalent(String talentId) { + TalentData talent = getTalent(talentId); + if (talent == null) return PowerAxis.HEALTH; + switch (talent.getType()) { + case DAMAGE: + return PowerAxis.DAMAGE; + case SPEED: + return PowerAxis.UTILITY; + case COOLDOWN: + return PowerAxis.CADENCE; + case REGEN: + return PowerAxis.REGEN; + case CONTROL: + return PowerAxis.CONTROL; + case ABILITY: + return PowerAxis.ABILITY; + case UTILITY: + return PowerAxis.UTILITY; + case ECONOMY: + return PowerAxis.ECONOMY; + case KEYSTONE: + if ("keystone_crit".equals(talentId)) return PowerAxis.CRIT; + if ("keystone_aoe".equals(talentId)) return PowerAxis.AOE; + if ("keystone_splash".equals(talentId)) return PowerAxis.AOE; + if ("keystone_turret".equals(talentId)) return PowerAxis.ABILITY; + if ("keystone_shield_regen".equals(talentId)) return PowerAxis.SHIELD; + if ("keystone_economy_reroll".equals(talentId)) return PowerAxis.ECONOMY; + return PowerAxis.CONTROL; + case HEALTH: + default: + return PowerAxis.HEALTH; + } + } + + public String boundedRatingText(String talentId) { + PowerAxis axis = axisForTalent(talentId); + int currentRating = getPermanentAxisRatings().get(axis); + TalentData talent = getTalent(talentId); + int currentLevel = getCurrentLevel(talentId); + int nextLevel = + talent == null ? currentLevel : Math.min(talent.getMaxLevel(), currentLevel + 1); + int nextRating = EndlessBalanceSpec.permanentTalentRating(nextLevel); + return axisDisplayName(axis) + + " " + + currentRating + + "/" + + EndlessBalanceSpec.TALENT_AXIS_MAX_RATING + + " далее " + + nextRating; + } + + private static String axisDisplayName(PowerAxis axis) { + switch (axis) { + case DAMAGE: + return "Урон"; + case UTILITY: + return "Поддержка"; + case CADENCE: + return "Перезарядка"; + case REGEN: + return "Ремонт"; + case CRIT: + return "Крит"; + case AOE: + return "Урон по области"; + case CONTROL: + return "Замедление"; + case ECONOMY: + return "Ресурсы"; + case ABILITY: + return "Умения"; + case BOSSING: + return "Боссы"; + case ARMOR: + return "Броня"; + case PIERCE: + return "Пробой"; + case HEALTH: + return "Здоровье"; + case SHIELD: + default: + return "Щит"; + } + } +} diff --git a/core/src/main/java/ru/project/tower/upgrades/UpgradeHost.java b/core/src/main/java/ru/project/tower/upgrades/UpgradeHost.java new file mode 100644 index 0000000..ecccc15 --- /dev/null +++ b/core/src/main/java/ru/project/tower/upgrades/UpgradeHost.java @@ -0,0 +1,31 @@ +package ru.project.tower.upgrades; + +import com.badlogic.gdx.graphics.Color; +import ru.project.tower.entities.bullets.BulletSystem; + + + + + + + +public interface UpgradeHost { + + void addRunDamagePercentBonus(int percent); + + void addRunPierceBonus(int bonus); + + void addRunAoeBonus(float radiusBonus); + + void addMaxHealth(int amount); + + void healToFull(); + + void addHealthRegen(int perSecond); + + void addFloatingText(float x, float y, String text, Color color); + + float getPlayerCenterX(); + + float getPlayerCenterY(); +} diff --git a/core/src/main/java/ru/project/tower/upgrades/UpgradeKind.java b/core/src/main/java/ru/project/tower/upgrades/UpgradeKind.java new file mode 100644 index 0000000..759fec1 --- /dev/null +++ b/core/src/main/java/ru/project/tower/upgrades/UpgradeKind.java @@ -0,0 +1,73 @@ +package ru.project.tower.upgrades; + + +public enum UpgradeKind { + DAMAGE("Сильный заряд", "+15% урон", "damage", 8, "common", 1.20f, "pure", "damage"), + FIRE_RATE("Быстрый затвор", "-10% перезарядка", "speed", 7, "common", 1.10f, "cadence", "tempo"), + PIERCE("Пуля навылет", "+1 пробой", "control", 6, "common", 1.00f, "pierce", "swarm"), + AOE("Взрывная волна", "+25 радиус взрыва", "control", 7, "common", 1.00f, "aoe", "swarm"), + CRIT("Слабое место", "+5% шанс крита", "attack", 7, "common", 1.05f, "crit", "burst"), + HEAL("Запас прочности", "+30 здоровье", "shield", 6, "common", 1.00f, "health", "shield"), + REGEN("Ремонтный ритм", "+1 здоровья/с", "defense", 6, "common", 1.00f, "regen", "sustain"), + BOSS_BREAKER("Охотник на боссов", "+10% урон по боссам", "attack", 5, "uncommon", 0.80f, "boss", "single-target"), + EXECUTION_LINE("Добивание", "+8% по раненым", "attack", 5, "uncommon", 0.80f, "execute", "single-target"), + STATIC_FIELD("Сдерживающий заряд", "+18 радиус, +1 пробой", "control", 5, "uncommon", 0.80f, "slow", "aoe"), + PLATED_CORE("Бронезапас", "+20 здоровье, +1/с", "defense", 5, "uncommon", 0.75f, "armor", "health"), + COIN_COMPOUNDER("Монетный разгон", "+4% урон", "utility", 5, "common", 0.90f, "money", "shop"), + REROLL_SIGNAL("Точный переброс", "+2% шанс крита", "utility", 5, "uncommon", 0.75f, "reroll", "choice"), + BONUS_MAGNET("Бонусный магнит", "-4% перезарядка", "utility", 5, "common", 0.90f, "bonus", "pickup"), + TURRET_DIRECTIVE("Турельный залп", "+15 радиус взрыва", "ability", 5, "uncommon", 0.75f, "turret", "ability"), + BLAST_PROTOCOL("Громовой заряд", "+6% урон, +12 радиус", "ability", 5, "uncommon", 0.75f, "explosion", "ability"), + SHIELD_SCRIPT("Крепкий щит", "+15 здоровье", "ability", 5, "uncommon", 0.75f, "shield", "ability"), + VOLATILE_BARGAIN("Опасная сделка", "+18% урон", "risk", 4, "rare", 0.45f, "risk", "damage"), + GLASS_CANNON("Тонкая меткость", "+7% шанс крита", "risk", 4, "rare", 0.45f, "risk", "crit"); + + public final String label; + private final String effectText; + private final String family; + private final int maxStacks; + private final String rarity; + private final float offerWeight; + private final String[] tags; + + UpgradeKind( + String label, + String effectText, + String family, + int maxStacks, + String rarity, + float offerWeight, + String... tags) { + this.label = label; + this.effectText = effectText; + this.family = family; + this.maxStacks = maxStacks; + this.rarity = rarity; + this.offerWeight = offerWeight; + this.tags = tags == null ? new String[0] : tags.clone(); + } + + public String family() { + return family; + } + + public String effectText() { + return effectText; + } + + public int maxStacks() { + return maxStacks; + } + + public String rarity() { + return rarity; + } + + public float offerWeight() { + return offerWeight; + } + + public String[] tags() { + return tags.clone(); + } +} diff --git a/core/src/main/java/ru/project/tower/upgrades/UpgradeSynergy.java b/core/src/main/java/ru/project/tower/upgrades/UpgradeSynergy.java new file mode 100644 index 0000000..54a6519 --- /dev/null +++ b/core/src/main/java/ru/project/tower/upgrades/UpgradeSynergy.java @@ -0,0 +1,51 @@ +package ru.project.tower.upgrades; + +public enum UpgradeSynergy { + TEMPO_CORE("tempo_core", UpgradeKind.DAMAGE, 1, UpgradeKind.FIRE_RATE, 1), + PRECISION_BURST("precision_burst", UpgradeKind.DAMAGE, 2, UpgradeKind.CRIT, 2), + BARRAGE("barrage", UpgradeKind.FIRE_RATE, 2, UpgradeKind.PIERCE, 1), + CONTROL_FIELD("control_field", UpgradeKind.PIERCE, 2, UpgradeKind.AOE, 2), + VITAL_ENGINE("vital_engine", UpgradeKind.HEAL, 2, UpgradeKind.REGEN, 2); + + private final String id; + private final UpgradeKind firstKind; + private final int firstStacks; + private final UpgradeKind secondKind; + private final int secondStacks; + + UpgradeSynergy( + String id, + UpgradeKind firstKind, + int firstStacks, + UpgradeKind secondKind, + int secondStacks) { + this.id = id; + this.firstKind = firstKind; + this.firstStacks = firstStacks; + this.secondKind = secondKind; + this.secondStacks = secondStacks; + } + + public String id() { + return id; + } + + boolean isTriggeredByCounts(int[] pickedCounts) { + return count(pickedCounts, firstKind) >= firstStacks + && count(pickedCounts, secondKind) >= secondStacks; + } + + boolean wouldTriggerAfterPick(UpgradeKind pickedKind, int[] pickedCounts) { + if (pickedKind != firstKind && pickedKind != secondKind) { + return false; + } + int first = count(pickedCounts, firstKind) + (pickedKind == firstKind ? 1 : 0); + int second = count(pickedCounts, secondKind) + (pickedKind == secondKind ? 1 : 0); + return first >= firstStacks && second >= secondStacks; + } + + private static int count(int[] pickedCounts, UpgradeKind kind) { + int index = kind.ordinal(); + return index < pickedCounts.length ? pickedCounts[index] : 0; + } +} diff --git a/core/src/main/java/ru/project/tower/upgrades/UpgradeSystem.java b/core/src/main/java/ru/project/tower/upgrades/UpgradeSystem.java new file mode 100644 index 0000000..8860203 --- /dev/null +++ b/core/src/main/java/ru/project/tower/upgrades/UpgradeSystem.java @@ -0,0 +1,539 @@ +package ru.project.tower.upgrades; + +import com.badlogic.gdx.graphics.Color; +import ru.project.tower.balance.EndlessBalanceSpec; +import ru.project.tower.support.RandomSource; + +public final class UpgradeSystem { + + private static final UpgradeKind[] ALL_KINDS = UpgradeKind.values(); + private static final UpgradeSynergy[] ALL_SYNERGIES = UpgradeSynergy.values(); + private static final int PICK_OPTION_COUNT = 3; + private static final int MAX_REROLLS_PER_OFFER = 2; + private static final int BASE_REROLL_COST = 15; + + private static final Color NEON_YELLOW = new Color(1f, 1f, 0.2f, 1f); + private static final float FLOATING_TEXT_Y_OFFSET = 50f; + private static final float FLOATING_TEXT_SCALE = 2.5f; + private static final float FLOATING_TEXT_LIFETIME = 1.3f; + private static final float FLOATING_TEXT_RISE = 20f; + + private final RandomSource random; + private final UpgradeHost host; + + private boolean pickActive = false; + private UpgradeKind[] pickOptions = null; + private final UpgradeKind[] pickOptionsBuffer = new UpgradeKind[PICK_OPTION_COUNT]; + private final UpgradeKind[] pickPool = new UpgradeKind[ALL_KINDS.length]; + private final int[] pickedCounts = new int[ALL_KINDS.length]; + private final boolean[] triggeredSynergies = new boolean[ALL_SYNERGIES.length]; + + private float runCooldownMult = 1.0f; + private float runCritBonus = 0f; + private int rerollsUsed; + + public UpgradeSystem(RandomSource random, UpgradeHost host) { + this.random = random; + this.host = host; + } + + public void triggerPick() { + drawPickOptions(true); + } + + private void drawPickOptions(boolean resetRerolls) { + int poolSize = fillAvailablePickPool(); + if (poolSize == 0) { + dismissPick(); + return; + } + + int optionCount = Math.min(PICK_OPTION_COUNT, poolSize); + UpgradeKind[] options = + optionCount == PICK_OPTION_COUNT ? pickOptionsBuffer : new UpgradeKind[optionCount]; + for (int i = 0; i < optionCount; i++) { + int idx = random.nextIntInclusive(poolSize - 1); + options[i] = pickPool[idx]; + int elementsAfterRemoved = poolSize - idx - 1; + if (elementsAfterRemoved > 0) { + System.arraycopy(pickPool, idx + 1, pickPool, idx, elementsAfterRemoved); + } + pickPool[--poolSize] = null; + } + pickOptions = options; + pickActive = true; + if (resetRerolls) { + rerollsUsed = 0; + } + } + + private int fillAvailablePickPool() { + int poolSize = 0; + for (UpgradeKind kind : ALL_KINDS) { + if (!isCapped(kind)) { + pickPool[poolSize++] = kind; + } + } + for (int i = poolSize; i < pickPool.length; i++) { + pickPool[i] = null; + } + return poolSize; + } + + public boolean isPickActive() { + return pickActive; + } + + public UpgradeKind[] getPickOptions() { + return pickOptions; + } + + public PickSnapshot snapshot() { + UpgradeKind[] options = null; + if (pickActive && pickOptions != null) { + options = new UpgradeKind[pickOptions.length]; + System.arraycopy(pickOptions, 0, options, 0, pickOptions.length); + } + return new PickSnapshot( + pickActive, + options, + runCooldownMult, + runCritBonus, + pickedCounts, + triggeredSynergies, + rerollsUsed); + } + + public void apply(PickSnapshot snapshot) { + if (snapshot == null) { + resetForNewRun(); + return; + } + pickActive = snapshot.pickActive(); + if (snapshot.pickOptions() == null) { + pickOptions = null; + } else { + UpgradeKind[] options = snapshot.pickOptions(); + System.arraycopy(options, 0, pickOptionsBuffer, 0, options.length); + pickOptions = pickOptionsBuffer; + } + runCooldownMult = snapshot.runCooldownMult(); + runCritBonus = snapshot.runCritBonus(); + rerollsUsed = snapshot.rerollsUsed(); + int[] snapshotCounts = snapshot.pickedCounts(); + for (int i = 0; i < pickedCounts.length; i++) { + pickedCounts[i] = i < snapshotCounts.length ? snapshotCounts[i] : 0; + } + boolean[] snapshotSynergies = snapshot.triggeredSynergies(); + for (int i = 0; i < triggeredSynergies.length; i++) { + triggeredSynergies[i] = i < snapshotSynergies.length && snapshotSynergies[i]; + } + } + + public void applyPick(int index) { + if (!pickActive || index < 0 || index >= pickOptions.length) return; + UpgradeKind k = pickOptions[index]; + if (isCapped(k)) { + dismissPick(); + return; + } + switch (k) { + case DAMAGE: + host.addRunDamagePercentBonus( + EndlessBalanceSpec.upgradeCardDamagePercent(pickedCounts[k.ordinal()])); + break; + case FIRE_RATE: + runCooldownMult *= + EndlessBalanceSpec.upgradeCardFireRateMultiplier(pickedCounts[k.ordinal()]); + break; + case PIERCE: + host.addRunPierceBonus(1); + break; + case AOE: + host.addRunAoeBonus(25f); + break; + case CRIT: + runCritBonus += 0.05f; + break; + case HEAL: + host.addMaxHealth(30); + host.healToFull(); + break; + case REGEN: + host.addHealthRegen(1); + break; + case BOSS_BREAKER: + host.addRunDamagePercentBonus(10); + runCritBonus += 0.01f; + break; + case EXECUTION_LINE: + host.addRunDamagePercentBonus(8); + break; + case STATIC_FIELD: + host.addRunAoeBonus(18f); + host.addRunPierceBonus(1); + break; + case PLATED_CORE: + host.addMaxHealth(20); + host.addHealthRegen(1); + break; + case COIN_COMPOUNDER: + host.addRunDamagePercentBonus(4); + break; + case REROLL_SIGNAL: + runCritBonus += 0.02f; + break; + case BONUS_MAGNET: + runCooldownMult *= 0.96f; + break; + case TURRET_DIRECTIVE: + host.addRunAoeBonus(15f); + break; + case BLAST_PROTOCOL: + host.addRunDamagePercentBonus(6); + host.addRunAoeBonus(12f); + break; + case SHIELD_SCRIPT: + host.addMaxHealth(15); + break; + case VOLATILE_BARGAIN: + host.addRunDamagePercentBonus(18); + break; + case GLASS_CANNON: + runCritBonus += 0.07f; + break; + } + pickedCounts[k.ordinal()]++; + applyNewSynergies(); + host.addFloatingText( + host.getPlayerCenterX(), + host.getPlayerCenterY() + FLOATING_TEXT_Y_OFFSET, + k.label, + NEON_YELLOW); + pickActive = false; + pickOptions = null; + rerollsUsed = 0; + } + + private boolean isCapped(UpgradeKind kind) { + return pickedCounts[kind.ordinal()] >= kind.maxStacks(); + } + + public void dismissPick() { + pickActive = false; + pickOptions = null; + rerollsUsed = 0; + } + + + public void resetForNewRun() { + dismissPick(); + runCooldownMult = 1.0f; + runCritBonus = 0f; + for (int i = 0; i < pickedCounts.length; i++) { + pickedCounts[i] = 0; + } + for (int i = 0; i < triggeredSynergies.length; i++) { + triggeredSynergies[i] = false; + } + rerollsUsed = 0; + } + + public float getRunCooldownMult() { + return runCooldownMult; + } + + public float getRunCritBonus() { + return runCritBonus; + } + + public boolean hasTriggeredSynergy(UpgradeSynergy synergy) { + return triggeredSynergies[synergy.ordinal()]; + } + + public int triggeredSynergyCount() { + int count = 0; + for (boolean triggered : triggeredSynergies) { + if (triggered) count++; + } + return count; + } + + public boolean rerollPick(float discountFraction) { + if (!pickActive || pickOptions == null || rerollsRemaining() <= 0) { + return false; + } + rerollsUsed++; + drawPickOptions(false); + return true; + } + + public int rerollsRemaining() { + return Math.max(0, MAX_REROLLS_PER_OFFER - rerollsUsed); + } + + public int rerollCost(float discountFraction) { + float discount = Math.max(0f, Math.min(0.80f, discountFraction)); + return Math.max(1, (int) Math.ceil(BASE_REROLL_COST * (1f - discount))); + } + + public OfferCardView[] activeOfferViews() { + if (!pickActive || pickOptions == null) { + return new OfferCardView[0]; + } + OfferCardView[] views = new OfferCardView[pickOptions.length]; + for (int i = 0; i < pickOptions.length; i++) { + UpgradeKind kind = pickOptions[i]; + int stacks = pickedCounts[kind.ordinal()]; + views[i] = + new OfferCardView( + kind, + kind.family(), + stacks, + kind.maxStacks(), + stacks >= kind.maxStacks(), + completingSynergyId(kind), + kind.rarity(), + kind.offerWeight(), + kind.effectText(), + kind.tags()); + } + return views; + } + + private String completingSynergyId(UpgradeKind kind) { + for (UpgradeSynergy synergy : ALL_SYNERGIES) { + if (!triggeredSynergies[synergy.ordinal()] + && synergy.wouldTriggerAfterPick(kind, pickedCounts)) { + return synergy.id(); + } + } + return null; + } + + private void applyNewSynergies() { + for (UpgradeSynergy synergy : ALL_SYNERGIES) { + int index = synergy.ordinal(); + if (triggeredSynergies[index] || !synergy.isTriggeredByCounts(pickedCounts)) { + continue; + } + triggeredSynergies[index] = true; + applySynergy(synergy); + } + } + + private void applySynergy(UpgradeSynergy synergy) { + switch (synergy) { + case TEMPO_CORE: + runCooldownMult *= 0.97f; + break; + case PRECISION_BURST: + runCritBonus += 0.03f; + break; + case BARRAGE: + host.addRunPierceBonus(1); + break; + case CONTROL_FIELD: + host.addRunAoeBonus(20f); + break; + case VITAL_ENGINE: + host.addHealthRegen(2); + break; + default: + throw new IllegalArgumentException("Unknown upgrade synergy: " + synergy); + } + } + + public static final class PickSnapshot { + private final boolean pickActive; + private final UpgradeKind[] pickOptions; + private final float runCooldownMult; + private final float runCritBonus; + private final int[] pickedCounts; + private final boolean[] triggeredSynergies; + private final int rerollsUsed; + + public PickSnapshot( + boolean pickActive, + UpgradeKind[] pickOptions, + float runCooldownMult, + float runCritBonus) { + this(pickActive, pickOptions, runCooldownMult, runCritBonus, new int[0]); + } + + public PickSnapshot( + boolean pickActive, + UpgradeKind[] pickOptions, + float runCooldownMult, + float runCritBonus, + int[] pickedCounts) { + this( + pickActive, + pickOptions, + runCooldownMult, + runCritBonus, + pickedCounts, + new boolean[0], + 0); + } + + public PickSnapshot( + boolean pickActive, + UpgradeKind[] pickOptions, + float runCooldownMult, + float runCritBonus, + int[] pickedCounts, + boolean[] triggeredSynergies) { + this( + pickActive, + pickOptions, + runCooldownMult, + runCritBonus, + pickedCounts, + triggeredSynergies, + 0); + } + + public PickSnapshot( + boolean pickActive, + UpgradeKind[] pickOptions, + float runCooldownMult, + float runCritBonus, + int[] pickedCounts, + boolean[] triggeredSynergies, + int rerollsUsed) { + this.pickActive = pickActive; + if (pickOptions == null) { + this.pickOptions = null; + } else { + this.pickOptions = new UpgradeKind[pickOptions.length]; + System.arraycopy(pickOptions, 0, this.pickOptions, 0, pickOptions.length); + } + this.runCooldownMult = runCooldownMult; + this.runCritBonus = runCritBonus; + this.pickedCounts = new int[pickedCounts.length]; + System.arraycopy(pickedCounts, 0, this.pickedCounts, 0, pickedCounts.length); + this.triggeredSynergies = new boolean[triggeredSynergies.length]; + System.arraycopy( + triggeredSynergies, 0, this.triggeredSynergies, 0, triggeredSynergies.length); + this.rerollsUsed = Math.max(0, rerollsUsed); + } + + public boolean pickActive() { + return pickActive; + } + + public UpgradeKind[] pickOptions() { + if (pickOptions == null) { + return null; + } + UpgradeKind[] copy = new UpgradeKind[pickOptions.length]; + System.arraycopy(pickOptions, 0, copy, 0, pickOptions.length); + return copy; + } + + public float runCooldownMult() { + return runCooldownMult; + } + + public float runCritBonus() { + return runCritBonus; + } + + public int[] pickedCounts() { + int[] copy = new int[pickedCounts.length]; + System.arraycopy(pickedCounts, 0, copy, 0, pickedCounts.length); + return copy; + } + + public boolean[] triggeredSynergies() { + boolean[] copy = new boolean[triggeredSynergies.length]; + System.arraycopy(triggeredSynergies, 0, copy, 0, triggeredSynergies.length); + return copy; + } + + public int rerollsUsed() { + return rerollsUsed; + } + } + + public static final class OfferCardView { + private final UpgradeKind kind; + private final String family; + private final int stacks; + private final int maxStacks; + private final boolean unavailable; + private final String synergyId; + private final String rarity; + private final float offerWeight; + private final String effectText; + private final String[] tags; + + private OfferCardView( + UpgradeKind kind, + String family, + int stacks, + int maxStacks, + boolean unavailable, + String synergyId, + String rarity, + float offerWeight, + String effectText, + String[] tags) { + this.kind = kind; + this.family = family; + this.stacks = stacks; + this.maxStacks = maxStacks; + this.unavailable = unavailable; + this.synergyId = synergyId; + this.rarity = rarity; + this.offerWeight = offerWeight; + this.effectText = effectText; + this.tags = tags == null ? new String[0] : tags.clone(); + } + + public UpgradeKind kind() { + return kind; + } + + public String family() { + return family; + } + + public int stacks() { + return stacks; + } + + public int maxStacks() { + return maxStacks; + } + + public boolean unavailable() { + return unavailable; + } + + public boolean synergyReady() { + return synergyId != null; + } + + public String synergyId() { + return synergyId; + } + + public String rarity() { + return rarity; + } + + public float offerWeight() { + return offerWeight; + } + + public String effectText() { + return effectText; + } + + public String[] tags() { + return tags.clone(); + } + } +} diff --git a/core/src/main/java/ru/project/tower/upgrades/shop/ShopUpgradeCategory.java b/core/src/main/java/ru/project/tower/upgrades/shop/ShopUpgradeCategory.java new file mode 100644 index 0000000..8037302 --- /dev/null +++ b/core/src/main/java/ru/project/tower/upgrades/shop/ShopUpgradeCategory.java @@ -0,0 +1,17 @@ +package ru.project.tower.upgrades.shop; + +public enum ShopUpgradeCategory { + ATTACK("Атака"), + DEFENSE("Защита"), + BONUS("Бонусы"); + + private final String gameName; + + ShopUpgradeCategory(String gameName) { + this.gameName = gameName; + } + + public String gameName() { + return gameName; + } +} diff --git a/core/src/main/java/ru/project/tower/upgrades/shop/ShopUpgradeDefinition.java b/core/src/main/java/ru/project/tower/upgrades/shop/ShopUpgradeDefinition.java new file mode 100644 index 0000000..1abfa78 --- /dev/null +++ b/core/src/main/java/ru/project/tower/upgrades/shop/ShopUpgradeDefinition.java @@ -0,0 +1,80 @@ +package ru.project.tower.upgrades.shop; + +import java.util.Objects; +import ru.project.tower.balance.PowerAxis; + +public final class ShopUpgradeDefinition { + private final ShopUpgradeKind kind; + private final String id; + private final ShopUpgradeCategory category; + private final PowerAxis axis; + private final String gameName; + private final String shortDescription; + private final int maxLevel; + private final double costScale; + private final String iconToken; + private final String colorToken; + + ShopUpgradeDefinition( + ShopUpgradeKind kind, + String id, + ShopUpgradeCategory category, + PowerAxis axis, + String gameName, + String shortDescription, + int maxLevel, + double costScale, + String iconToken, + String colorToken) { + this.kind = Objects.requireNonNull(kind, "kind"); + this.id = Objects.requireNonNull(id, "id"); + this.category = Objects.requireNonNull(category, "category"); + this.axis = Objects.requireNonNull(axis, "axis"); + this.gameName = Objects.requireNonNull(gameName, "gameName"); + this.shortDescription = Objects.requireNonNull(shortDescription, "shortDescription"); + this.maxLevel = maxLevel; + this.costScale = costScale; + this.iconToken = Objects.requireNonNull(iconToken, "iconToken"); + this.colorToken = Objects.requireNonNull(colorToken, "colorToken"); + } + + public ShopUpgradeKind kind() { + return kind; + } + + public String id() { + return id; + } + + public ShopUpgradeCategory category() { + return category; + } + + public PowerAxis axis() { + return axis; + } + + public String gameName() { + return gameName; + } + + public String shortDescription() { + return shortDescription; + } + + public int maxLevel() { + return maxLevel; + } + + public double costScale() { + return costScale; + } + + public String iconToken() { + return iconToken; + } + + public String colorToken() { + return colorToken; + } +} diff --git a/core/src/main/java/ru/project/tower/upgrades/shop/ShopUpgradeHost.java b/core/src/main/java/ru/project/tower/upgrades/shop/ShopUpgradeHost.java new file mode 100644 index 0000000..016946b --- /dev/null +++ b/core/src/main/java/ru/project/tower/upgrades/shop/ShopUpgradeHost.java @@ -0,0 +1,18 @@ +package ru.project.tower.upgrades.shop; + + +public interface ShopUpgradeHost { + boolean spendMoney(int amount); + + void addMaxHealth(int amount); + + void healToFull(); + + void addBaseDamage(int amount); + + void addBaseSpeed(float amount); + + void reduceShotCooldown(float amount, float minimum); + + void addHealthRegen(int amount); +} diff --git a/core/src/main/java/ru/project/tower/upgrades/shop/ShopUpgradeKind.java b/core/src/main/java/ru/project/tower/upgrades/shop/ShopUpgradeKind.java new file mode 100644 index 0000000..e96d29e --- /dev/null +++ b/core/src/main/java/ru/project/tower/upgrades/shop/ShopUpgradeKind.java @@ -0,0 +1,45 @@ +package ru.project.tower.upgrades.shop; + + +public enum ShopUpgradeKind { + HEALTH(1.2), + DAMAGE(1.2), + SPEED(1.2), + COOLDOWN(1.2), + REGEN(1.2), + CRIT_CHANCE(1.5), + CRIT_MULTIPLIER(1.5), + PIERCE(1.28), + SPLASH_DAMAGE(1.30), + EXECUTE_DAMAGE(1.32), + BOSS_DAMAGE(1.35), + CONTROL_DAMAGE(1.32), + CONTACT_ARMOR(1.22), + PROJECTILE_ARMOR(1.24), + SHIELD_CAPACITY(1.26), + SHIELD_RECHARGE(1.26), + EMERGENCY_BARRIER(1.34), + WAVE_RECOVERY(1.24), + SAFE_MOBILITY(1.28), + SLOW_AURA(1.32), + PICKUP_RADIUS(1.18), + BONUS_DURATION(1.22), + BONUS_POWER(1.28), + BONUS_STABILITY(1.24), + BONUS_PITY(1.30), + BONUS_FILTER(1.30), + COIN_INCOME(1.26), + SHOP_DISCOUNT(1.30), + CARD_REROLL(1.32), + SYNERGY_CATALYST(1.34); + + private final double costScale; + + ShopUpgradeKind(double costScale) { + this.costScale = costScale; + } + + public double costScale() { + return costScale; + } +} diff --git a/core/src/main/java/ru/project/tower/upgrades/shop/ShopUpgradeRegistry.java b/core/src/main/java/ru/project/tower/upgrades/shop/ShopUpgradeRegistry.java new file mode 100644 index 0000000..c5cd751 --- /dev/null +++ b/core/src/main/java/ru/project/tower/upgrades/shop/ShopUpgradeRegistry.java @@ -0,0 +1,373 @@ +package ru.project.tower.upgrades.shop; + +import java.util.ArrayList; +import java.util.EnumMap; +import java.util.List; +import ru.project.tower.balance.EndlessBalanceSpec; +import ru.project.tower.balance.PowerAxis; + +public final class ShopUpgradeRegistry { + private static final ShopUpgradeDefinition[] DEFINITIONS = { + attack( + ShopUpgradeKind.DAMAGE, + "attack.core_damage", + PowerAxis.DAMAGE, + "Урон", + "+урон пули.", + "sword", + "upgrade.damage"), + attack( + ShopUpgradeKind.SPEED, + "attack.bullet_speed", + PowerAxis.UTILITY, + "Скорость", + "+скорость пуль.", + "fast-forward", + "upgrade.speed"), + attack( + ShopUpgradeKind.COOLDOWN, + "attack.cadence", + PowerAxis.CADENCE, + "Перезарядка", + "-перезарядка.", + "zap", + "upgrade.cooldown"), + attack( + ShopUpgradeKind.CRIT_CHANCE, + "attack.crit_chance", + PowerAxis.CRIT, + "Шанс крита", + "+шанс крита.", + "crosshair", + "upgrade.critChance"), + attack( + ShopUpgradeKind.CRIT_MULTIPLIER, + "attack.crit_power", + PowerAxis.CRIT, + "Множитель крита", + "+сила крита.", + "sparkles", + "upgrade.critPower"), + attack( + ShopUpgradeKind.PIERCE, + "attack.pierce", + PowerAxis.PIERCE, + "Сквозной урон", + "+целей пробивает пуля.", + "arrow-right", + "upgrade.pierce"), + attack( + ShopUpgradeKind.SPLASH_DAMAGE, + "attack.splash", + PowerAxis.AOE, + "Радиус взрыва", + "+радиус урона по области.", + "burst", + "upgrade.aoe"), + attack( + ShopUpgradeKind.EXECUTE_DAMAGE, + "attack.execute", + PowerAxis.DAMAGE, + "Урон по раненым", + "+% урона по раненым.", + "scissors", + "upgrade.execute"), + attack( + ShopUpgradeKind.BOSS_DAMAGE, + "attack.bossing", + PowerAxis.BOSSING, + "Босс-урон", + "+% урона по боссам.", + "shield-alert", + "upgrade.bossing"), + attack( + ShopUpgradeKind.CONTROL_DAMAGE, + "attack.controlled", + PowerAxis.CONTROL, + "Урон по замедленным", + "+% урона по замедленным.", + "snowflake", + "upgrade.control"), + defense( + ShopUpgradeKind.HEALTH, + "defense.health", + PowerAxis.HEALTH, + "Здоровье", + "+20 к максимуму здоровья.", + "heart", + "upgrade.health"), + defense( + ShopUpgradeKind.REGEN, + "defense.regen", + PowerAxis.REGEN, + "Восстановление", + "+здоровья в секунду.", + "activity", + "upgrade.regen"), + defense( + ShopUpgradeKind.CONTACT_ARMOR, + "defense.contact_armor", + PowerAxis.ARMOR, + "Броня", + "-% урона от столкновений.", + "shield", + "upgrade.armor"), + defense( + ShopUpgradeKind.PROJECTILE_ARMOR, + "defense.projectile_armor", + PowerAxis.ARMOR, + "Защита от снарядов", + "-% урона от снарядов.", + "shield-check", + "upgrade.projectileArmor"), + defense( + ShopUpgradeKind.SHIELD_CAPACITY, + "defense.shield_capacity", + PowerAxis.SHIELD, + "Запас щита", + "+прочность щита.", + "battery", + "upgrade.shield"), + defense( + ShopUpgradeKind.SHIELD_RECHARGE, + "defense.shield_recharge", + PowerAxis.SHIELD, + "Восстановление щита", + "-перезарядка щита.", + "rotate-cw", + "upgrade.shieldRecharge"), + defense( + ShopUpgradeKind.EMERGENCY_BARRIER, + "defense.emergency_barrier", + PowerAxis.SHIELD, + "Спасительный барьер", + "+порог спасения.", + "octagon-alert", + "upgrade.barrier"), + defense( + ShopUpgradeKind.WAVE_RECOVERY, + "defense.wave_recovery", + PowerAxis.REGEN, + "Лечение после боя", + "+здоровья после зачистки.", + "flag", + "upgrade.waveRecovery"), + defense( + ShopUpgradeKind.SAFE_MOBILITY, + "defense.safe_mobility", + PowerAxis.ABILITY, + "Броня после рывка", + "-% урона после рывка.", + "move", + "upgrade.mobility"), + defense( + ShopUpgradeKind.SLOW_AURA, + "defense.slow_aura", + PowerAxis.CONTROL, + "Аура замедления", + "+% замедления рядом.", + "circle-dot", + "upgrade.slowAura"), + bonus( + ShopUpgradeKind.PICKUP_RADIUS, + "bonus.pickup_radius", + PowerAxis.UTILITY, + "Радиус сбора", + "+радиус сбора бонусов.", + "magnet", + "upgrade.pickup"), + bonus( + ShopUpgradeKind.BONUS_DURATION, + "bonus.duration", + PowerAxis.UTILITY, + "Длительность бонусов", + "+сек действия бонусов.", + "timer", + "upgrade.bonusDuration"), + bonus( + ShopUpgradeKind.BONUS_POWER, + "bonus.power", + PowerAxis.UTILITY, + "Сила бонусов", + "+% силы временных бонусов.", + "plus-circle", + "upgrade.bonusPower"), + bonus( + ShopUpgradeKind.BONUS_STABILITY, + "bonus.stability", + PowerAxis.UTILITY, + "Стойкость бонусов", + "-% потери силы бонусов.", + "layers", + "upgrade.bonusStability"), + bonus( + ShopUpgradeKind.BONUS_PITY, + "bonus.pity", + PowerAxis.UTILITY, + "Гарант бонуса", + "+шанс бонуса после серии без бонусов.", + "gift", + "upgrade.bonusPity"), + bonus( + ShopUpgradeKind.BONUS_FILTER, + "bonus.filter", + PowerAxis.UTILITY, + "Шанс нужного бонуса", + "+шанс нужного типа бонуса.", + "filter", + "upgrade.bonusFilter"), + bonus( + ShopUpgradeKind.COIN_INCOME, + "bonus.coin_income", + PowerAxis.ECONOMY, + "Доход", + "+% монет за зачистку.", + "coins", + "upgrade.coinIncome"), + bonus( + ShopUpgradeKind.SHOP_DISCOUNT, + "bonus.shop_discount", + PowerAxis.ECONOMY, + "Скидка", + "-% цены магазина.", + "badge-percent", + "upgrade.discount"), + bonus( + ShopUpgradeKind.CARD_REROLL, + "bonus.card_reroll", + PowerAxis.UTILITY, + "Цена переброса", + "-% цены переброса.", + "refresh-cw", + "upgrade.reroll"), + bonus( + ShopUpgradeKind.SYNERGY_CATALYST, + "bonus.synergy", + PowerAxis.UTILITY, + "Сила синергий", + "+% к срабатыванию синергий.", + "network", + "upgrade.synergy") + }; + private static final EnumMap BY_KIND = + new EnumMap<>(ShopUpgradeKind.class); + private static final EnumMap BY_CATEGORY = + new EnumMap<>(ShopUpgradeCategory.class); + + static { + for (ShopUpgradeDefinition definition : DEFINITIONS) { + BY_KIND.put(definition.kind(), definition); + } + for (ShopUpgradeCategory category : ShopUpgradeCategory.values()) { + List matches = new ArrayList<>(); + for (ShopUpgradeDefinition definition : DEFINITIONS) { + if (definition.category() == category) { + matches.add(definition); + } + } + BY_CATEGORY.put(category, matches.toArray(new ShopUpgradeDefinition[0])); + } + } + + private ShopUpgradeRegistry() {} + + public static ShopUpgradeDefinition[] all() { + ShopUpgradeDefinition[] copy = new ShopUpgradeDefinition[DEFINITIONS.length]; + System.arraycopy(DEFINITIONS, 0, copy, 0, DEFINITIONS.length); + return copy; + } + + public static ShopUpgradeDefinition[] byCategory(ShopUpgradeCategory category) { + ShopUpgradeDefinition[] source = BY_CATEGORY.get(category); + ShopUpgradeDefinition[] copy = new ShopUpgradeDefinition[source.length]; + System.arraycopy(source, 0, copy, 0, source.length); + return copy; + } + + public static ShopUpgradeDefinition definition(ShopUpgradeKind kind) { + ShopUpgradeDefinition definition = BY_KIND.get(kind); + if (definition == null) { + throw new IllegalArgumentException("No shop upgrade definition for " + kind); + } + return definition; + } + + private static ShopUpgradeDefinition attack( + ShopUpgradeKind kind, + String id, + PowerAxis axis, + String gameName, + String description, + String iconToken, + String colorToken) { + return definition( + kind, + id, + ShopUpgradeCategory.ATTACK, + axis, + gameName, + description, + iconToken, + colorToken); + } + + private static ShopUpgradeDefinition defense( + ShopUpgradeKind kind, + String id, + PowerAxis axis, + String gameName, + String description, + String iconToken, + String colorToken) { + return definition( + kind, + id, + ShopUpgradeCategory.DEFENSE, + axis, + gameName, + description, + iconToken, + colorToken); + } + + private static ShopUpgradeDefinition bonus( + ShopUpgradeKind kind, + String id, + PowerAxis axis, + String gameName, + String description, + String iconToken, + String colorToken) { + return definition( + kind, + id, + ShopUpgradeCategory.BONUS, + axis, + gameName, + description, + iconToken, + colorToken); + } + + private static ShopUpgradeDefinition definition( + ShopUpgradeKind kind, + String id, + ShopUpgradeCategory category, + PowerAxis axis, + String gameName, + String description, + String iconToken, + String colorToken) { + return new ShopUpgradeDefinition( + kind, + id, + category, + axis, + gameName, + description, + EndlessBalanceSpec.SHOP_MAX_LEVEL, + kind.costScale(), + iconToken, + colorToken); + } +} diff --git a/core/src/main/java/ru/project/tower/upgrades/shop/ShopUpgradeSnapshot.java b/core/src/main/java/ru/project/tower/upgrades/shop/ShopUpgradeSnapshot.java new file mode 100644 index 0000000..48ff34c --- /dev/null +++ b/core/src/main/java/ru/project/tower/upgrades/shop/ShopUpgradeSnapshot.java @@ -0,0 +1,135 @@ +package ru.project.tower.upgrades.shop; + + +public final class ShopUpgradeSnapshot { + public static final int SCHEMA_VERSION = 1; + private static final ShopUpgradeKind[] KINDS = ShopUpgradeKind.values(); + + private final int schemaVersion; + private final int[] levels; + + private ShopUpgradeSnapshot(int schemaVersion, int[] levels) { + this.schemaVersion = schemaVersion; + this.levels = copyLevels(levels); + } + + public static ShopUpgradeSnapshot of( + int healthLevel, + int damageLevel, + int speedLevel, + int cooldownLevel, + int regenLevel, + int critChanceLevel, + int critMultiplierLevel) { + return new ShopUpgradeSnapshot( + SCHEMA_VERSION, + legacyLevels( + healthLevel, + damageLevel, + speedLevel, + cooldownLevel, + regenLevel, + critChanceLevel, + critMultiplierLevel)); + } + + public static ShopUpgradeSnapshot ofLevels(int[] levels) { + return new ShopUpgradeSnapshot(SCHEMA_VERSION, levels); + } + + public static ShopUpgradeSnapshot versioned( + int schemaVersion, + int healthLevel, + int damageLevel, + int speedLevel, + int cooldownLevel, + int regenLevel, + int critChanceLevel, + int critMultiplierLevel) { + return new ShopUpgradeSnapshot( + schemaVersion, + legacyLevels( + healthLevel, + damageLevel, + speedLevel, + cooldownLevel, + regenLevel, + critChanceLevel, + critMultiplierLevel)); + } + + public int schemaVersion() { + return schemaVersion; + } + + public int level(ShopUpgradeKind kind) { + int index = kind.ordinal(); + return index < levels.length ? levels[index] : 0; + } + + public int[] levels() { + return copyLevels(levels); + } + + public boolean hasNegativeLevel() { + for (int level : levels) { + if (level < 0) return true; + } + return false; + } + + public int getHealthLevel() { + return level(ShopUpgradeKind.HEALTH); + } + + public int getDamageLevel() { + return level(ShopUpgradeKind.DAMAGE); + } + + public int getSpeedLevel() { + return level(ShopUpgradeKind.SPEED); + } + + public int getCooldownLevel() { + return level(ShopUpgradeKind.COOLDOWN); + } + + public int getRegenLevel() { + return level(ShopUpgradeKind.REGEN); + } + + public int getCritChanceLevel() { + return level(ShopUpgradeKind.CRIT_CHANCE); + } + + public int getCritMultiplierLevel() { + return level(ShopUpgradeKind.CRIT_MULTIPLIER); + } + + private static int[] legacyLevels( + int healthLevel, + int damageLevel, + int speedLevel, + int cooldownLevel, + int regenLevel, + int critChanceLevel, + int critMultiplierLevel) { + int[] levels = new int[KINDS.length]; + levels[ShopUpgradeKind.HEALTH.ordinal()] = healthLevel; + levels[ShopUpgradeKind.DAMAGE.ordinal()] = damageLevel; + levels[ShopUpgradeKind.SPEED.ordinal()] = speedLevel; + levels[ShopUpgradeKind.COOLDOWN.ordinal()] = cooldownLevel; + levels[ShopUpgradeKind.REGEN.ordinal()] = regenLevel; + levels[ShopUpgradeKind.CRIT_CHANCE.ordinal()] = critChanceLevel; + levels[ShopUpgradeKind.CRIT_MULTIPLIER.ordinal()] = critMultiplierLevel; + return levels; + } + + private static int[] copyLevels(int[] source) { + int[] copy = new int[KINDS.length]; + if (source != null) { + System.arraycopy(source, 0, copy, 0, Math.min(source.length, copy.length)); + } + return copy; + } +} diff --git a/core/src/main/java/ru/project/tower/upgrades/shop/ShopUpgradeSystem.java b/core/src/main/java/ru/project/tower/upgrades/shop/ShopUpgradeSystem.java new file mode 100644 index 0000000..9b0deff --- /dev/null +++ b/core/src/main/java/ru/project/tower/upgrades/shop/ShopUpgradeSystem.java @@ -0,0 +1,261 @@ +package ru.project.tower.upgrades.shop; + +import java.util.Objects; +import ru.project.tower.balance.EndlessBalanceSpec; + +public final class ShopUpgradeSystem { + + public enum PurchaseResult { + PURCHASED, + INSUFFICIENT_FUNDS, + MAX_LEVEL + } + + private static final int BASE_COST = 5; + private static final int HEALTH_GAIN = 20; + private static final float MIN_SHOT_COOLDOWN = 100f; + private static final ShopUpgradeKind[] UPGRADE_KINDS = ShopUpgradeKind.values(); + + private final ShopUpgradeHost host; + private final int[] levels = new int[UPGRADE_KINDS.length]; + + public ShopUpgradeSystem(ShopUpgradeHost host) { + this.host = Objects.requireNonNull(host, "host"); + } + + public int level(ShopUpgradeKind kind) { + return levels[index(kind)]; + } + + public int cost(ShopUpgradeKind kind) { + return EndlessBalanceSpec.shopCost(kind, level(kind)); + } + + public int damageBonus() { + return EndlessBalanceSpec.shopDamageBonusAtLevel(level(ShopUpgradeKind.DAMAGE)); + } + + public float speedBonus() { + return EndlessBalanceSpec.shopSpeedBonusAtLevel(level(ShopUpgradeKind.SPEED)); + } + + public float cooldownReduction() { + return EndlessBalanceSpec.shopCooldownReductionAtLevel(level(ShopUpgradeKind.COOLDOWN)); + } + + public int regenBonus() { + return EndlessBalanceSpec.shopRegenBonusAtLevel(level(ShopUpgradeKind.REGEN)); + } + + public float critChanceBonus() { + return EndlessBalanceSpec.shopCritChanceBonusAtLevel(level(ShopUpgradeKind.CRIT_CHANCE)); + } + + public float critMultiplierBonus() { + return EndlessBalanceSpec.shopCritMultiplierBonusAtLevel( + level(ShopUpgradeKind.CRIT_MULTIPLIER)); + } + + public int pierceBonus() { + return EndlessBalanceSpec.shopPierceBonusAtLevel(level(ShopUpgradeKind.PIERCE)); + } + + public float aoeRadiusBonus() { + return EndlessBalanceSpec.shopAoeRadiusBonusAtLevel(level(ShopUpgradeKind.SPLASH_DAMAGE)); + } + + public float executeDamageBonus() { + return EndlessBalanceSpec.shopExecuteDamageBonusAtLevel( + level(ShopUpgradeKind.EXECUTE_DAMAGE)); + } + + public float bossDamageBonus() { + return EndlessBalanceSpec.shopBossDamageBonusAtLevel(level(ShopUpgradeKind.BOSS_DAMAGE)); + } + + public float controlledDamageBonus() { + return EndlessBalanceSpec.shopControlledDamageBonusAtLevel( + level(ShopUpgradeKind.CONTROL_DAMAGE)); + } + + public float contactArmorReduction() { + return EndlessBalanceSpec.shopContactArmorReductionAtLevel( + level(ShopUpgradeKind.CONTACT_ARMOR)); + } + + public float projectileArmorReduction() { + return EndlessBalanceSpec.shopProjectileArmorReductionAtLevel( + level(ShopUpgradeKind.PROJECTILE_ARMOR)); + } + + public int shieldCapacityBonus() { + return EndlessBalanceSpec.shopShieldCapacityBonusAtLevel( + level(ShopUpgradeKind.SHIELD_CAPACITY)); + } + + public float shieldRechargeReduction() { + return EndlessBalanceSpec.shopShieldRechargeReductionAtLevel( + level(ShopUpgradeKind.SHIELD_RECHARGE)); + } + + public float emergencyBarrierThreshold() { + return EndlessBalanceSpec.shopEmergencyBarrierThresholdAtLevel( + level(ShopUpgradeKind.EMERGENCY_BARRIER)); + } + + public int waveRecoveryHeal() { + return EndlessBalanceSpec.shopWaveRecoveryHealAtLevel(level(ShopUpgradeKind.WAVE_RECOVERY)); + } + + public float safeMobilityReduction() { + return EndlessBalanceSpec.shopSafeMobilityReductionAtLevel( + level(ShopUpgradeKind.SAFE_MOBILITY)); + } + + public float slowAuraStrength() { + return EndlessBalanceSpec.shopSlowAuraStrengthAtLevel(level(ShopUpgradeKind.SLOW_AURA)); + } + + public float pickupRadiusBonus() { + return EndlessBalanceSpec.shopPickupRadiusBonusAtLevel( + level(ShopUpgradeKind.PICKUP_RADIUS)); + } + + public int bonusDurationBonus() { + return EndlessBalanceSpec.shopBonusDurationBonusAtLevel( + level(ShopUpgradeKind.BONUS_DURATION)); + } + + public float bonusPowerBonus() { + return EndlessBalanceSpec.shopBonusPowerBonusAtLevel(level(ShopUpgradeKind.BONUS_POWER)); + } + + public float bonusStabilityBonus() { + return EndlessBalanceSpec.shopBonusStabilityBonusAtLevel( + level(ShopUpgradeKind.BONUS_STABILITY)); + } + + public int bonusPityBonus() { + return EndlessBalanceSpec.shopBonusPityBonusAtLevel(level(ShopUpgradeKind.BONUS_PITY)); + } + + public float bonusFilterChance() { + return EndlessBalanceSpec.shopBonusFilterChanceAtLevel(level(ShopUpgradeKind.BONUS_FILTER)); + } + + public float coinIncomeBonus() { + return EndlessBalanceSpec.shopCoinIncomeBonusAtLevel(level(ShopUpgradeKind.COIN_INCOME)); + } + + public float shopDiscount() { + return EndlessBalanceSpec.shopDiscountAtLevel(level(ShopUpgradeKind.SHOP_DISCOUNT)); + } + + public float cardRerollDiscount() { + return EndlessBalanceSpec.shopCardRerollDiscountAtLevel(level(ShopUpgradeKind.CARD_REROLL)); + } + + public float synergyCatalystBonus() { + return EndlessBalanceSpec.shopSynergyCatalystBonusAtLevel( + level(ShopUpgradeKind.SYNERGY_CATALYST)); + } + + public PurchaseResult tryBuy(ShopUpgradeKind kind) { + if (level(kind) >= ShopUpgradeRegistry.definition(kind).maxLevel()) { + return PurchaseResult.MAX_LEVEL; + } + int cost = cost(kind); + if (!host.spendMoney(cost)) { + return PurchaseResult.INSUFFICIENT_FUNDS; + } + + levels[index(kind)]++; + applyPurchasedEffect(kind); + return PurchaseResult.PURCHASED; + } + + public void reset() { + for (int i = 0; i < levels.length; i++) { + levels[i] = 0; + } + } + + public ShopUpgradeSnapshot snapshot() { + return ShopUpgradeSnapshot.ofLevels(levels); + } + + public boolean apply(ShopUpgradeSnapshot snapshot) { + Objects.requireNonNull(snapshot, "snapshot"); + if (snapshot.schemaVersion() != ShopUpgradeSnapshot.SCHEMA_VERSION + || snapshot.hasNegativeLevel()) { + return false; + } + + for (ShopUpgradeKind kind : UPGRADE_KINDS) { + levels[index(kind)] = snapshot.level(kind); + } + return true; + } + + private void applyPurchasedEffect(ShopUpgradeKind kind) { + switch (kind) { + case HEALTH: + host.addMaxHealth(HEALTH_GAIN); + host.healToFull(); + break; + case DAMAGE: + host.addBaseDamage( + EndlessBalanceSpec.shopDamageBonusAtLevel(level(kind)) + - EndlessBalanceSpec.shopDamageBonusAtLevel(level(kind) - 1)); + break; + case SPEED: + host.addBaseSpeed( + EndlessBalanceSpec.shopSpeedBonusAtLevel(level(kind)) + - EndlessBalanceSpec.shopSpeedBonusAtLevel(level(kind) - 1)); + break; + case COOLDOWN: + host.reduceShotCooldown( + EndlessBalanceSpec.shopCooldownReductionAtLevel(level(kind)) + - EndlessBalanceSpec.shopCooldownReductionAtLevel(level(kind) - 1), + MIN_SHOT_COOLDOWN); + break; + case REGEN: + host.addHealthRegen( + EndlessBalanceSpec.shopRegenBonusAtLevel(level(kind)) + - EndlessBalanceSpec.shopRegenBonusAtLevel(level(kind) - 1)); + break; + case CRIT_CHANCE: + case CRIT_MULTIPLIER: + case PIERCE: + case SPLASH_DAMAGE: + case EXECUTE_DAMAGE: + case BOSS_DAMAGE: + case CONTROL_DAMAGE: + case CONTACT_ARMOR: + case PROJECTILE_ARMOR: + case SHIELD_CAPACITY: + case SHIELD_RECHARGE: + case EMERGENCY_BARRIER: + case WAVE_RECOVERY: + case SAFE_MOBILITY: + case SLOW_AURA: + case PICKUP_RADIUS: + case BONUS_DURATION: + case BONUS_POWER: + case BONUS_STABILITY: + case BONUS_PITY: + case BONUS_FILTER: + case COIN_INCOME: + case SHOP_DISCOUNT: + case CARD_REROLL: + case SYNERGY_CATALYST: + break; + default: + throw new IllegalArgumentException("Unknown shop upgrade kind: " + kind); + } + } + + private static int index(ShopUpgradeKind kind) { + return Objects.requireNonNull(kind, "kind").ordinal(); + } +} diff --git a/core/src/main/java/ru/project/tower/waves/BossSpawnController.java b/core/src/main/java/ru/project/tower/waves/BossSpawnController.java new file mode 100644 index 0000000..659650f --- /dev/null +++ b/core/src/main/java/ru/project/tower/waves/BossSpawnController.java @@ -0,0 +1,184 @@ +package ru.project.tower.waves; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.math.Circle; +import com.badlogic.gdx.math.MathUtils; +import com.badlogic.gdx.math.Rectangle; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.utils.Array; +import ru.project.tower.balance.EndlessBalanceSpec; +import ru.project.tower.content.BossContentRegistry; +import ru.project.tower.content.BossContentRegistry.BossSpec; +import ru.project.tower.entities.bullets.BulletSystem; +import ru.project.tower.entities.circles.BaseCircleData; +import ru.project.tower.entities.circles.BasicCircleData; +import ru.project.tower.entities.circles.bosses.GlacialWardenData; +import ru.project.tower.entities.circles.bosses.IllusionMasterData; +import ru.project.tower.entities.circles.bosses.ShadowWeaverData; +import ru.project.tower.entities.circles.bosses.SwarmQueenData; +import ru.project.tower.entities.circles.bosses.VolatileReactorData; +import ru.project.tower.support.BossEffectsHost; +import ru.project.tower.support.RandomSource; +import ru.project.tower.support.ViewportSize; +import ru.project.tower.systems.BossProjectileFactory; + +public final class BossSpawnController { + static final int BOSS_WAVE_INTERVAL = 20; + static final float BOSS_HEALTH_SCALE_BASE = 1.3f; + static final float BOSS_SPEED_SCALE_BASE = 1.1f; + static final float BOSS_WORLD_SPAWN_RADIUS = 420f; + + private static final float QUEEN_MINION_DISTANCE = 100f; + + private final Array circles; + private final Array spawnedBosses; + private final BulletSystem bulletSystem; + private final Rectangle square; + private final RandomSource random; + private final BossEffectsHost bossHost; + private final Vector2 bossSpawnPosition = new Vector2(); + + private float gameScale = 1f; + private int currentWave = 0; + + public BossSpawnController( + Array circles, + Array spawnedBosses, + BulletSystem bulletSystem, + Rectangle square, + RandomSource random, + ViewportSize viewport, + BossEffectsHost bossHost) { + this.circles = circles; + this.spawnedBosses = spawnedBosses; + this.bulletSystem = bulletSystem; + this.square = square; + this.random = random; + this.bossHost = bossHost; + } + + public void setRenderScale(float gameScale) { + this.gameScale = gameScale; + } + + public void setCurrentWave(int currentWave) { + this.currentWave = currentWave; + } + + static String[] allBossesForTests() { + return BossContentRegistry.ids(); + } + + public BaseCircleData spawnRandomBoss() { + String bossType = selectUnspawnedBossType(); + float angle = random.angle(); + Vector2 spawnPosition = calculateBossSpawnPositionInto(angle, bossSpawnPosition); + + float bossScaleLevel = (float) currentWave / BOSS_WAVE_INTERVAL; + float healthScale = (float) Math.pow(BOSS_HEALTH_SCALE_BASE, bossScaleLevel - 1); + float speedScale = (float) Math.pow(BOSS_SPEED_SCALE_BASE, bossScaleLevel - 1); + + BaseCircleData boss = + createBoss(bossType, spawnPosition.x, spawnPosition.y, angle, speedScale); + if (boss == null) { + return null; + } + + boss.health = + Math.max( + (int) (boss.health * healthScale), + EndlessBalanceSpec.bossHealthForWave(bossType, currentWave)); + circles.add(boss); + return boss; + } + + private Vector2 calculateBossSpawnPositionInto(float angle, Vector2 out) { + float squareCenterX = square.x + square.width / 2f; + float squareCenterY = square.y + square.height / 2f; + return out.set( + squareCenterX + MathUtils.cos(angle) * BOSS_WORLD_SPAWN_RADIUS, + squareCenterY + MathUtils.sin(angle) * BOSS_WORLD_SPAWN_RADIUS); + } + + private BaseCircleData createBoss( + String bossType, float spawnX, float spawnY, float angle, float speedScale) { + BossSpec boss = BossContentRegistry.findById(bossType); + if (boss == null) { + return null; + } + + Circle bossCircle = new Circle(spawnX, spawnY, boss.radius() * gameScale); + Vector2 velocity = createBossVelocity(angle, boss.speed(), speedScale); + return boss.create(bossCircle, velocity, bossHost); + } + + private String selectUnspawnedBossType() { + BossSpec[] bosses = BossContentRegistry.all(); + if (spawnedBosses.size >= bosses.length) { + spawnedBosses.clear(); + } + + String bossType; + do { + int index = random.nextIntInclusive(bosses.length - 1); + bossType = bosses[index].id(); + } while (spawnedBosses.contains(bossType, false)); + + spawnedBosses.add(bossType); + return bossType; + } + + private Vector2 createBossVelocity(float angle, float baseSpeed, float speedScale) { + return new Vector2( + -MathUtils.cos(angle) * baseSpeed * gameScale * speedScale, + -MathUtils.sin(angle) * baseSpeed * gameScale * speedScale); + } + + public void spawnQueenMinion(final SwarmQueenData queen) { + float angle = random.range(0f, 360f); + float x = queen.getX() + QUEEN_MINION_DISTANCE * MathUtils.cosDeg(angle); + float y = queen.getY() + QUEEN_MINION_DISTANCE * MathUtils.sinDeg(angle); + + Circle circle = new Circle(x, y, SpawnController.CIRCLE_RADIUS); + Vector2 velocity = new Vector2(); + BasicCircleData minion = + new BasicCircleData(circle, velocity, 2, 1) { + private final float[] scratchColor = new float[4]; + + @Override + public float[] getColor() { + Color color = queen.getMinionColor(); + scratchColor[0] = color.r; + scratchColor[1] = color.g; + scratchColor[2] = color.b; + scratchColor[3] = color.a; + return scratchColor; + } + }; + minion.markNoRewardSpawn(); + circles.add(minion); + } + + public void spawnQueenProjectiles(SwarmQueenData queen) { + BossProjectileFactory.spawnQueenProjectiles(queen, bulletSystem); + } + + public void spawnShadowWeaverProjectile(ShadowWeaverData weaver) { + float targetX = square.x + square.width / 2f; + float targetY = square.y + square.height / 2f; + BossProjectileFactory.spawnShadowWeaverProjectile(weaver, bulletSystem, targetX, targetY); + } + + public void spawnVolatileReactorMissiles(VolatileReactorData reactor) { + BossProjectileFactory.spawnVolatileReactorMissiles(reactor, bulletSystem, random::angle); + } + + public void spawnGlacialWardenShards(GlacialWardenData warden) { + BossProjectileFactory.spawnGlacialWardenShards(warden, random::angle); + } + + public void spawnIllusionMasterProjectiles(IllusionMasterData master) { + BossProjectileFactory.spawnIllusionMasterProjectiles( + master, bulletSystem, random::angle, gameScale); + } +} diff --git a/core/src/main/java/ru/project/tower/waves/SpawnController.java b/core/src/main/java/ru/project/tower/waves/SpawnController.java new file mode 100644 index 0000000..fa26145 --- /dev/null +++ b/core/src/main/java/ru/project/tower/waves/SpawnController.java @@ -0,0 +1,639 @@ +package ru.project.tower.waves; + +import com.badlogic.gdx.math.MathUtils; +import com.badlogic.gdx.math.Rectangle; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.utils.Array; +import com.badlogic.gdx.utils.Pools; +import ru.project.tower.balance.EndlessBalanceSpec; +import ru.project.tower.balance.EnemyComposition; +import ru.project.tower.entities.circles.BaseCircleData; +import ru.project.tower.entities.circles.BasicCircleData; +import ru.project.tower.entities.circles.BonusBallData; +import ru.project.tower.entities.circles.DasherCircleData; +import ru.project.tower.entities.circles.FastCircleData; +import ru.project.tower.entities.circles.HealerCircleData; +import ru.project.tower.entities.circles.SniperCircleData; +import ru.project.tower.entities.circles.SpawnerCircleData; +import ru.project.tower.entities.circles.SplitterCircleData; +import ru.project.tower.entities.circles.StrongCircleData; +import ru.project.tower.support.RandomSource; +import ru.project.tower.support.ViewportSize; + +public final class SpawnController { + + public static final float CIRCLE_RADIUS = 10f; + static final int BASIC_CIRCLE_HEALTH = 1; + public static final float BASIC_CIRCLE_SPEED = 150f; + + public static final float STRONG_CIRCLE_CHANCE = 0.10f; + static final int STRONG_CIRCLE_HEALTH = 3; + public static final float STRONG_CIRCLE_SPEED = 100f; + + public static final int FAST_CIRCLE_HEALTH = 1; + static final int FAST_START_WAVE = 3; + public static final float FAST_CIRCLE_SPEED = 250f; + public static final float FAST_CIRCLE_RADIUS = 5f; + + static final int SPLITTER_CIRCLE_HEALTH = 2; + static final int SPLITTER_START_WAVE = 7; + public static final float SPLITTER_CIRCLE_SPEED = 120f; + public static final float SPLITTER_SHARD_SPEED = 200f; + + static final float SPAWNER_CIRCLE_CHANCE = 0.15f; + public static final int SPAWNER_CIRCLE_HEALTH = 10; + static final int SPAWNER_START_WAVE = 15; + static final int SPAWNER_WAVE_PERIOD = 11; + static final float SPAWNER_CIRCLE_SPEED = 70f; + + static final float HEALER_CIRCLE_CHANCE = 0.08f; + static final int HEALER_CIRCLE_HEALTH = 6; + static final int HEALER_START_WAVE = 8; + + static final float DASHER_CIRCLE_CHANCE = 0.10f; + static final int DASHER_CIRCLE_HEALTH = 2; + static final int DASHER_START_WAVE = 6; + + static final float SNIPER_CIRCLE_CHANCE = 0.07f; + static final int SNIPER_CIRCLE_HEALTH = 3; + static final int SNIPER_START_WAVE = 7; + static final int SNIPER_DAMAGE_MULT = 2; + + static final int ELITE_START_WAVE = 5; + static final float ELITE_BASE_CHANCE = 0.05f; + static final float ELITE_MAX_CHANCE = 0.25f; + static final float ELITE_WAVE_STEP = 0.01f; + + static final float BONUS_BALL_TRIGGER_CHANCE = 0.2f; + static final float BONUS_BALL_RADIUS_MULTIPLIER = 1.5f; + static final float BONUS_BALL_BASE_SPEED = 50f; + static final float BONUS_BALL_SPEED_RANGE = 50f; + public static final float WORLD_SPAWN_RADIUS = 260f; + private static final BonusBallData.BonusType[] BONUS_TYPES = BonusBallData.BonusType.values(); + + private final Rectangle square; + private final Array circles; + private final Array bonusBalls; + private final RandomSource random; + private final RandomSource bonusRandom; + private final Vector2 spawnEdgePosition = new Vector2(); + private final Vector2 spawnVelocity = new Vector2(); + + private int currentWave = 0; + private float currentStrongCircleChance = STRONG_CIRCLE_CHANCE; + private float currentFastCircleChance = 0f; + private float currentSplitterCircleChance = 0f; + private int currentBasicCircleHealth = BASIC_CIRCLE_HEALTH; + private int currentStrongCircleHealth = STRONG_CIRCLE_HEALTH; + private int currentCircleDamage = 1; + private float currentEnemySpeedMultiplier = 1.0f; + private int bonusDropsThisWave = 0; + private int spawnAttemptsThisWave = 0; + + private float gameScale = 1.0f; + private float adaptedCircleRadius = 10f; + + public SpawnController( + Rectangle square, + Array circles, + Array bonusBalls, + RandomSource random, + ViewportSize viewport) { + this(square, circles, bonusBalls, random, random, viewport); + } + + public SpawnController( + Rectangle square, + Array circles, + Array bonusBalls, + RandomSource random, + RandomSource bonusRandom, + ViewportSize viewport) { + this.square = square; + this.circles = circles; + this.bonusBalls = bonusBalls; + this.random = random; + this.bonusRandom = bonusRandom; + } + + public void setWaveTuning( + int currentWave, + float strongChance, + float fastChance, + float splitterChance, + int basicHealth, + int strongHealth, + int damage, + float enemySpeedMultiplier) { + this.currentWave = currentWave; + this.currentStrongCircleChance = strongChance; + this.currentFastCircleChance = fastChance; + this.currentSplitterCircleChance = splitterChance; + this.currentBasicCircleHealth = basicHealth; + this.currentStrongCircleHealth = strongHealth; + this.currentCircleDamage = damage; + this.currentEnemySpeedMultiplier = enemySpeedMultiplier; + this.bonusDropsThisWave = 0; + this.spawnAttemptsThisWave = 0; + } + + public void setRenderScale(float gameScale, float adaptedCircleRadius) { + this.gameScale = gameScale; + this.adaptedCircleRadius = adaptedCircleRadius; + } + + public BaseCircleData spawnWaveCircle() { + EnemyArchetype archetype = selectArchetype(); + + float radius = archetype.radius(this); + + float squareCenterX = square.x + square.width / 2f; + float squareCenterY = square.y + square.height / 2f; + Vector2 spawnPosition = calculateSpawnEdgePositionInto(radius, spawnEdgePosition); + float x = spawnPosition.x; + float y = spawnPosition.y; + + float speed = archetype.speed(this); + Vector2 velocity = + calculateVelocityTowardInto( + x, y, squareCenterX, squareCenterY, speed, spawnVelocity); + BaseCircleData spawned = archetype.create(this, x, y, radius, velocity.x, velocity.y); + + if (archetype.isEliteEligible() && currentWave >= ELITE_START_WAVE) { + float eliteChance = + Math.min( + ELITE_MAX_CHANCE, + ELITE_BASE_CHANCE + (currentWave - ELITE_START_WAVE) * ELITE_WAVE_STEP); + if (random.nextFloat() < eliteChance) { + spawned.makeElite(); + } + } + + circles.add(spawned); + spawnAttemptsThisWave++; + + float dropChance = + Math.min( + BONUS_BALL_TRIGGER_CHANCE, + EndlessBalanceSpec.bonusDropBudgetForWave(currentWave) + / (float) Math.max(8, currentWave + 20)); + float bonusRoll = bonusRandom.nextFloat(); + if (canSpawnBonusBall() && (bonusRoll < dropChance || shouldPitySpawnBonusBall())) { + spawnBonusBall(); + bonusDropsThisWave++; + } + + return spawned; + } + + private boolean canSpawnBonusBall() { + return bonusDropsThisWave < EndlessBalanceSpec.bonusDropBudgetForWave(currentWave) + && bonusBalls.size < EndlessBalanceSpec.maxVisibleBonusBalls(); + } + + private boolean shouldPitySpawnBonusBall() { + int budget = EndlessBalanceSpec.bonusDropBudgetForWave(currentWave); + if (budget <= 0 || bonusDropsThisWave >= budget) { + return false; + } + float expectedSpawns = + Math.max(1f, EndlessBalanceSpec.waveTuning(currentWave).enemiesPerWave()); + int nextPityAttempt = + Math.max(1, Math.round(expectedSpawns * (bonusDropsThisWave + 1) / budget)); + return spawnAttemptsThisWave >= nextPityAttempt; + } + + private EnemyArchetype selectArchetype() { + EnemyComposition composition = EndlessBalanceSpec.compositionForWave(currentWave); + EnemyArchetype archetype = archetypeFor(composition.select(random.nextFloat())); + return archetype.isEligible(this) ? archetype : EnemyArchetype.BASIC; + } + + private static EnemyArchetype archetypeFor(String id) { + switch (id) { + case "STRONG": + return EnemyArchetype.STRONG; + case "FAST": + return EnemyArchetype.FAST; + case "SPLITTER": + return EnemyArchetype.SPLITTER; + case "HEALER": + return EnemyArchetype.HEALER; + case "DASHER": + return EnemyArchetype.DASHER; + case "SNIPER": + return EnemyArchetype.SNIPER; + case "SPAWNER": + return EnemyArchetype.SPAWNER; + case "BASIC": + default: + return EnemyArchetype.BASIC; + } + } + + private Vector2 calculateSpawnEdgePositionInto(float radius, Vector2 out) { + return calculateSpawnEdgePositionInto(random, radius, out); + } + + private float spawnBandAngle(int side, float sideCoord) { + switch (side) { + case 0: + return MathUtils.PI / 4f + sideCoord * MathUtils.PI / 2f; + case 1: + return -MathUtils.PI / 4f + sideCoord * MathUtils.PI / 2f; + case 2: + return MathUtils.PI + MathUtils.PI / 4f + sideCoord * MathUtils.PI / 2f; + case 3: + return MathUtils.PI * 3f / 4f + sideCoord * MathUtils.PI / 2f; + default: + return 0f; + } + } + + private Vector2 calculateVelocityTowardInto( + float fromX, float fromY, float targetX, float targetY, float speed, Vector2 out) { + float dirX = targetX - fromX; + float dirY = targetY - fromY; + float length = (float) Math.sqrt(dirX * dirX + dirY * dirY); + if (length > 0f) { + return out.set((dirX / length) * speed, (dirY / length) * speed); + } + return out.set(0f, 0f); + } + + private void spawnBonusBall() { + float radius = adaptedCircleRadius * BONUS_BALL_RADIUS_MULTIPLIER; + + Vector2 spawnPosition = + calculateSpawnEdgePositionInto(bonusRandom, radius, spawnEdgePosition); + float x = spawnPosition.x; + float y = spawnPosition.y; + float baseSpeed = + (BONUS_BALL_BASE_SPEED + bonusRandom.range(0f, BONUS_BALL_SPEED_RANGE)) * gameScale; + + float centerX = square.x + square.width / 2f; + float centerY = square.y + square.height / 2f; + Vector2 velocity = + calculateVelocityTowardInto(x, y, centerX, centerY, baseSpeed, spawnVelocity); + + BonusBallData.BonusType type = + BONUS_TYPES[bonusRandom.nextIntInclusive(BONUS_TYPES.length - 1)]; + BonusBallData ball = Pools.obtain(BonusBallData.class); + ball.configure(x, y, radius, velocity.x, velocity.y, type); + bonusBalls.add(ball); + } + + private Vector2 calculateSpawnEdgePositionInto(RandomSource source, float radius, Vector2 out) { + int side = source.nextIntInclusive(3); + float sideCoord = source.nextFloat(); + + float angle = spawnBandAngle(side, sideCoord); + float spawnDistance = WORLD_SPAWN_RADIUS + radius; + float squareCenterX = square.x + square.width / 2f; + float squareCenterY = square.y + square.height / 2f; + return out.set( + squareCenterX + MathUtils.cos(angle) * spawnDistance, + squareCenterY + MathUtils.sin(angle) * spawnDistance); + } + + public void processSpawnerChildren() { + int initialSize = circles.size; + for (int i = 0; i < initialSize; i++) { + BaseCircleData circleData = circles.get(i); + if (!(circleData instanceof SpawnerCircleData)) continue; + + SpawnerCircleData spawner = (SpawnerCircleData) circleData; + if (!spawner.shouldSpawnCircle()) continue; + + circles.add(createSpawnerChild(circleData)); + } + } + + private BasicCircleData createSpawnerChild(BaseCircleData circleData) { + float angle = random.angle(); + float dirX = MathUtils.cos(angle); + float dirY = MathUtils.sin(angle); + + float speed = BASIC_CIRCLE_SPEED * gameScale * currentEnemySpeedMultiplier; + BasicCircleData child = Pools.obtain(BasicCircleData.class); + child.configure( + circleData.circle.x, + circleData.circle.y, + adaptedCircleRadius, + dirX * speed, + dirY * speed, + currentBasicCircleHealth, + currentCircleDamage); + child.markSpawnerChild(); + return child; + } + + private enum EnemyArchetype { + SPAWNER(false) { + @Override + boolean isEligible(SpawnController controller) { + return controller.currentWave >= SPAWNER_START_WAVE + && (controller.currentWave - SPAWNER_START_WAVE) % SPAWNER_WAVE_PERIOD == 0; + } + + @Override + float chance(SpawnController controller) { + return SPAWNER_CIRCLE_CHANCE; + } + + @Override + float speed(SpawnController controller) { + return scaledSpeed(controller, SPAWNER_CIRCLE_SPEED); + } + + @Override + BaseCircleData create( + SpawnController controller, + float x, + float y, + float radius, + float vx, + float vy) { + SpawnerCircleData data = Pools.obtain(SpawnerCircleData.class); + data.configure( + x, y, radius, vx, vy, controller.scaledHealth(SPAWNER_CIRCLE_HEALTH)); + return data; + } + }, + FAST(true) { + @Override + boolean isEligible(SpawnController controller) { + return controller.currentWave >= FAST_START_WAVE; + } + + @Override + float chance(SpawnController controller) { + return controller.currentFastCircleChance; + } + + @Override + float radius(SpawnController controller) { + return FAST_CIRCLE_RADIUS * controller.gameScale; + } + + @Override + float speed(SpawnController controller) { + return scaledSpeed(controller, FAST_CIRCLE_SPEED); + } + + @Override + BaseCircleData create( + SpawnController controller, + float x, + float y, + float radius, + float vx, + float vy) { + FastCircleData data = Pools.obtain(FastCircleData.class); + data.configure( + x, y, radius, vx, vy, FAST_CIRCLE_HEALTH, controller.currentCircleDamage); + return data; + } + }, + SPLITTER(true) { + @Override + boolean isEligible(SpawnController controller) { + return controller.currentWave >= SPLITTER_START_WAVE; + } + + @Override + float chance(SpawnController controller) { + return controller.currentSplitterCircleChance; + } + + @Override + float speed(SpawnController controller) { + return scaledSpeed(controller, SPLITTER_CIRCLE_SPEED); + } + + @Override + BaseCircleData create( + SpawnController controller, + float x, + float y, + float radius, + float vx, + float vy) { + SplitterCircleData data = Pools.obtain(SplitterCircleData.class); + data.configure( + x, + y, + radius, + vx, + vy, + controller.scaledHealth(SPLITTER_CIRCLE_HEALTH), + controller.currentCircleDamage, + false); + return data; + } + }, + HEALER(true) { + @Override + boolean isEligible(SpawnController controller) { + return controller.currentWave >= HEALER_START_WAVE; + } + + @Override + float chance(SpawnController controller) { + return HEALER_CIRCLE_CHANCE; + } + + @Override + float speed(SpawnController controller) { + return scaledSpeed(controller, BASIC_CIRCLE_SPEED); + } + + @Override + BaseCircleData create( + SpawnController controller, + float x, + float y, + float radius, + float vx, + float vy) { + HealerCircleData data = Pools.obtain(HealerCircleData.class); + data.configure( + x, + y, + radius, + vx, + vy, + controller.scaledHealth(HEALER_CIRCLE_HEALTH), + controller.currentCircleDamage); + return data; + } + }, + DASHER(true) { + @Override + boolean isEligible(SpawnController controller) { + return controller.currentWave >= DASHER_START_WAVE; + } + + @Override + float chance(SpawnController controller) { + return DASHER_CIRCLE_CHANCE; + } + + @Override + float speed(SpawnController controller) { + return scaledSpeed(controller, BASIC_CIRCLE_SPEED); + } + + @Override + BaseCircleData create( + SpawnController controller, + float x, + float y, + float radius, + float vx, + float vy) { + DasherCircleData data = Pools.obtain(DasherCircleData.class); + data.configure( + x, + y, + radius, + vx, + vy, + controller.scaledHealth(DASHER_CIRCLE_HEALTH), + controller.currentCircleDamage); + return data; + } + }, + SNIPER(true) { + @Override + boolean isEligible(SpawnController controller) { + return controller.currentWave >= SNIPER_START_WAVE; + } + + @Override + float chance(SpawnController controller) { + return SNIPER_CIRCLE_CHANCE; + } + + @Override + float speed(SpawnController controller) { + return scaledSpeed(controller, BASIC_CIRCLE_SPEED); + } + + @Override + BaseCircleData create( + SpawnController controller, + float x, + float y, + float radius, + float vx, + float vy) { + SniperCircleData data = Pools.obtain(SniperCircleData.class); + data.configure( + x, + y, + radius, + vx, + vy, + controller.scaledHealth(SNIPER_CIRCLE_HEALTH), + controller.currentCircleDamage * SNIPER_DAMAGE_MULT); + return data; + } + }, + STRONG(true) { + @Override + float chance(SpawnController controller) { + return controller.currentStrongCircleChance; + } + + @Override + float speed(SpawnController controller) { + return scaledSpeed(controller, STRONG_CIRCLE_SPEED); + } + + @Override + BaseCircleData create( + SpawnController controller, + float x, + float y, + float radius, + float vx, + float vy) { + StrongCircleData data = Pools.obtain(StrongCircleData.class); + data.configure( + x, + y, + radius, + vx, + vy, + controller.currentStrongCircleHealth, + controller.currentCircleDamage); + return data; + } + }, + BASIC(true) { + @Override + float chance(SpawnController controller) { + return 1f; + } + + @Override + float speed(SpawnController controller) { + return scaledSpeed(controller, BASIC_CIRCLE_SPEED); + } + + @Override + BaseCircleData create( + SpawnController controller, + float x, + float y, + float radius, + float vx, + float vy) { + BasicCircleData data = Pools.obtain(BasicCircleData.class); + data.configure( + x, + y, + radius, + vx, + vy, + controller.currentBasicCircleHealth, + controller.currentCircleDamage); + return data; + } + }; + + private final boolean eliteEligible; + + EnemyArchetype(boolean eliteEligible) { + this.eliteEligible = eliteEligible; + } + + boolean isEligible(SpawnController controller) { + return true; + } + + boolean isEliteEligible() { + return eliteEligible; + } + + float radius(SpawnController controller) { + return controller.adaptedCircleRadius; + } + + abstract float chance(SpawnController controller); + + abstract float speed(SpawnController controller); + + abstract BaseCircleData create( + SpawnController controller, float x, float y, float radius, float vx, float vy); + + static float scaledSpeed(SpawnController controller, float baseSpeed) { + return baseSpeed * controller.gameScale * controller.currentEnemySpeedMultiplier; + } + } + + private int scaledHealth(int baseHealth) { + return Math.max(baseHealth, baseHealth * currentBasicCircleHealth); + } +} diff --git a/core/src/main/java/ru/project/tower/waves/WaveController.java b/core/src/main/java/ru/project/tower/waves/WaveController.java new file mode 100644 index 0000000..781e522 --- /dev/null +++ b/core/src/main/java/ru/project/tower/waves/WaveController.java @@ -0,0 +1,267 @@ +package ru.project.tower.waves; + +import ru.project.tower.balance.EndlessBalanceSpec; + + + + + + + + + + + +public class WaveController { + + public static final int BOSS_WAVE_INTERVAL = 20; + public static final int SPLITTER_START_WAVE = 7; + public static final int BASIC_CIRCLE_HEALTH = 1; + public static final int STRONG_CIRCLE_HEALTH = 3; + public static final float STRONG_CIRCLE_CHANCE = 0.10f; + public static final float FAST_CIRCLE_CHANCE = 0.15f; + public static final float INITIAL_SPLITTER_CHANCE = 0.05f; + public static final float MAX_SPLITTER_CHANCE = 0.15f; + + private int currentWave = 0; + private boolean isWaveActive = false; + private long waveStartTime = 0L; + private long enemiesSpawnedThisWave = 0L; + private long enemiesPerWave = 0L; + private long lastSpawnTime = 0L; + private float spawnInterval = 0f; + + private int currentBasicCircleHealth = BASIC_CIRCLE_HEALTH; + private int currentStrongCircleHealth = STRONG_CIRCLE_HEALTH; + private int currentCircleDamage = 1; + private float currentEnemySpeedMultiplier = 1.0f; + private float currentStrongCircleChance = STRONG_CIRCLE_CHANCE; + private float currentFastCircleChance = 0f; + private float currentSplitterCircleChance = 0f; + + private int baseWaveClearBonus = 10; + private long timeBetweenWaves = 5000L; + + + + + + public void startNextWave(long nowMs) { + currentWave++; + isWaveActive = true; + waveStartTime = nowMs; + enemiesSpawnedThisWave = 0L; + + WaveTuning tuning = EndlessBalanceSpec.waveTuning(currentWave); + enemiesPerWave = tuning.enemiesPerWave(); + spawnInterval = (float) Math.max(200, 1000 / Math.pow(1.05, currentWave - 1)); + applyCurrentWaveScaling(); + + lastSpawnTime = nowMs; + } + + + + + + + public WaveTuning currentWaveTuning() { + if (currentWave > 0) { + return tuningForWave(currentWave, enemiesPerWave); + } + + return new WaveTuning( + currentWave, + enemiesPerWave, + currentStrongCircleChance, + currentFastCircleChance, + currentSplitterCircleChance, + currentBasicCircleHealth, + currentStrongCircleHealth, + currentCircleDamage, + currentEnemySpeedMultiplier); + } + + + + + + public WaveClearReward endWave(long nowMs) { + isWaveActive = false; + waveStartTime = nowMs; + + int moneyBonus = (int) (baseWaveClearBonus * Math.pow(1.15, currentWave - 1)); + int currencyReward = (currentWave % 5 == 0) ? 15 : 5; + boolean shouldShowUpgrade = currentWave > 0 && currentWave % 3 == 0; + + return new WaveClearReward(currentWave, moneyBonus, currencyReward, shouldShowUpgrade); + } + + + public void noteEnemySpawned(long nowMs) { + enemiesSpawnedThisWave++; + lastSpawnTime = nowMs; + } + + + public void resetForNewRun(long nowMs) { + currentWave = 0; + isWaveActive = false; + waveStartTime = nowMs; + enemiesSpawnedThisWave = 0L; + enemiesPerWave = 0L; + lastSpawnTime = 0L; + spawnInterval = 0f; + currentBasicCircleHealth = BASIC_CIRCLE_HEALTH; + currentStrongCircleHealth = STRONG_CIRCLE_HEALTH; + currentCircleDamage = 1; + currentEnemySpeedMultiplier = 1.0f; + currentStrongCircleChance = STRONG_CIRCLE_CHANCE; + currentFastCircleChance = 0f; + currentSplitterCircleChance = 0f; + } + + public static boolean isBossWave(int wave) { + return wave % BOSS_WAVE_INTERVAL == 0; + } + + public int getCurrentWave() { + return currentWave; + } + + public boolean isWaveActive() { + return isWaveActive; + } + + public long getWaveStartTime() { + return waveStartTime; + } + + public long getEnemiesSpawnedThisWave() { + return enemiesSpawnedThisWave; + } + + public long getEnemiesPerWave() { + return enemiesPerWave; + } + + public long getLastSpawnTime() { + return lastSpawnTime; + } + + public float getSpawnInterval() { + return spawnInterval; + } + + public int getCurrentBasicCircleHealth() { + return currentBasicCircleHealth; + } + + public int getCurrentStrongCircleHealth() { + return currentStrongCircleHealth; + } + + public int getCurrentCircleDamage() { + return currentCircleDamage; + } + + public float getCurrentEnemySpeedMultiplier() { + return currentEnemySpeedMultiplier; + } + + public float getCurrentStrongCircleChance() { + return currentStrongCircleChance; + } + + public float getCurrentFastCircleChance() { + return currentFastCircleChance; + } + + public float getCurrentSplitterCircleChance() { + return currentSplitterCircleChance; + } + + public int getBaseWaveClearBonus() { + return baseWaveClearBonus; + } + + public void setBaseWaveClearBonus(int baseWaveClearBonus) { + this.baseWaveClearBonus = baseWaveClearBonus; + } + + public long getTimeBetweenWaves() { + return timeBetweenWaves; + } + + public void setTimeBetweenWaves(long timeBetweenWaves) { + this.timeBetweenWaves = timeBetweenWaves; + } + + + public void setWaveStartTime(long waveStartTime) { + this.waveStartTime = waveStartTime; + } + + + + + public void setCurrentWave(int currentWave) { + this.currentWave = currentWave; + } + + public void setWaveActive(boolean waveActive) { + this.isWaveActive = waveActive; + } + + public void setEnemiesSpawnedThisWave(long enemiesSpawnedThisWave) { + this.enemiesSpawnedThisWave = enemiesSpawnedThisWave; + } + + public void setEnemiesPerWave(long enemiesPerWave) { + this.enemiesPerWave = enemiesPerWave; + } + + private void applyCurrentWaveScaling() { + WaveTuning tuning = tuningForWave(currentWave, enemiesPerWave); + currentStrongCircleChance = tuning.strongCircleChance(); + currentFastCircleChance = tuning.fastCircleChance(); + currentSplitterCircleChance = tuning.splitterCircleChance(); + currentBasicCircleHealth = tuning.basicCircleHealth(); + currentStrongCircleHealth = tuning.strongCircleHealth(); + currentCircleDamage = tuning.circleDamage(); + currentEnemySpeedMultiplier = tuning.enemySpeedMultiplier(); + } + + private static WaveTuning tuningForWave(int wave, long enemiesPerWave) { + WaveTuning tuning = EndlessBalanceSpec.waveTuning(wave); + return new WaveTuning( + wave, + enemiesPerWave > 0 ? enemiesPerWave : tuning.enemiesPerWave(), + tuning.strongCircleChance(), + tuning.fastCircleChance(), + tuning.splitterCircleChance(), + tuning.basicCircleHealth(), + tuning.strongCircleHealth(), + tuning.circleDamage(), + tuning.enemySpeedMultiplier()); + } + + + + + + public static final class WaveClearReward { + public final int clearedWave; + public final int moneyBonus; + public final int currencyReward; + public final boolean shouldShowUpgrade; + + public WaveClearReward( + int clearedWave, int moneyBonus, int currencyReward, boolean shouldShowUpgrade) { + this.clearedWave = clearedWave; + this.moneyBonus = moneyBonus; + this.currencyReward = currencyReward; + this.shouldShowUpgrade = shouldShowUpgrade; + } + } +} diff --git a/core/src/main/java/ru/project/tower/waves/WaveRunEvents.java b/core/src/main/java/ru/project/tower/waves/WaveRunEvents.java new file mode 100644 index 0000000..25cbfc2 --- /dev/null +++ b/core/src/main/java/ru/project/tower/waves/WaveRunEvents.java @@ -0,0 +1,22 @@ +package ru.project.tower.waves; + + + + + + +public interface WaveRunEvents { + void waveStarted(int wave); + + void waveTuning(WaveTuning tuning); + + void spawnWaveCircle(); + + void spawnRandomBoss(); + + void waveCleared(WaveController.WaveClearReward reward); + + void triggerUpgradePick(); + + void waveClearFinished(WaveController.WaveClearReward reward); +} diff --git a/core/src/main/java/ru/project/tower/waves/WaveRunOrchestrator.java b/core/src/main/java/ru/project/tower/waves/WaveRunOrchestrator.java new file mode 100644 index 0000000..19f855d --- /dev/null +++ b/core/src/main/java/ru/project/tower/waves/WaveRunOrchestrator.java @@ -0,0 +1,94 @@ +package ru.project.tower.waves; + +import java.util.Objects; + + + + + +public final class WaveRunOrchestrator { + private final WaveController waveController; + private final WaveRunEvents events; + + public WaveRunOrchestrator(WaveController waveController, WaveRunEvents events) { + this.waveController = Objects.requireNonNull(waveController, "waveController"); + this.events = Objects.requireNonNull(events, "events"); + } + + + + + + + + + public void update(long nowMs, int activeEnemyCount, boolean upgradePickActive) { + if (upgradePickActive) { + waveController.setWaveStartTime(nowMs); + return; + } + + if (!waveController.isWaveActive()) { + if (nowMs - waveController.getWaveStartTime() > waveController.getTimeBetweenWaves()) { + startNextWave(nowMs); + } + return; + } + + boolean spawnedEnemy = false; + if (shouldSpawnEnemy(nowMs)) { + events.spawnWaveCircle(); + waveController.noteEnemySpawned(nowMs); + spawnedEnemy = true; + } + + if (!spawnedEnemy && shouldClearWave(activeEnemyCount)) { + endWave(nowMs); + } + } + + public void startNextWave(long nowMs) { + waveController.startNextWave(nowMs); + + events.waveStarted(waveController.getCurrentWave()); + events.waveTuning( + new WaveTuning( + waveController.getCurrentWave(), + waveController.getEnemiesPerWave(), + waveController.getCurrentStrongCircleChance(), + waveController.getCurrentFastCircleChance(), + waveController.getCurrentSplitterCircleChance(), + waveController.getCurrentBasicCircleHealth(), + waveController.getCurrentStrongCircleHealth(), + waveController.getCurrentCircleDamage(), + waveController.getCurrentEnemySpeedMultiplier())); + + if (waveController.getCurrentWave() > 0 + && WaveController.isBossWave(waveController.getCurrentWave())) { + events.spawnRandomBoss(); + } + } + + public WaveController.WaveClearReward endWave(long nowMs) { + WaveController.WaveClearReward reward = waveController.endWave(nowMs); + events.waveCleared(reward); + + if (reward.shouldShowUpgrade) { + events.triggerUpgradePick(); + } + + events.waveClearFinished(reward); + + return reward; + } + + private boolean shouldSpawnEnemy(long nowMs) { + return waveController.getEnemiesSpawnedThisWave() < waveController.getEnemiesPerWave() + && nowMs - waveController.getLastSpawnTime() > waveController.getSpawnInterval(); + } + + private boolean shouldClearWave(int activeEnemyCount) { + return waveController.getEnemiesSpawnedThisWave() >= waveController.getEnemiesPerWave() + && activeEnemyCount == 0; + } +} diff --git a/core/src/main/java/ru/project/tower/waves/WaveTuning.java b/core/src/main/java/ru/project/tower/waves/WaveTuning.java new file mode 100644 index 0000000..9508c07 --- /dev/null +++ b/core/src/main/java/ru/project/tower/waves/WaveTuning.java @@ -0,0 +1,73 @@ +package ru.project.tower.waves; + + + + +public final class WaveTuning { + private final int currentWave; + private final long enemiesPerWave; + private final float strongCircleChance; + private final float fastCircleChance; + private final float splitterCircleChance; + private final int basicCircleHealth; + private final int strongCircleHealth; + private final int circleDamage; + private final float enemySpeedMultiplier; + + public WaveTuning( + int currentWave, + long enemiesPerWave, + float strongCircleChance, + float fastCircleChance, + float splitterCircleChance, + int basicCircleHealth, + int strongCircleHealth, + int circleDamage, + float enemySpeedMultiplier) { + this.currentWave = currentWave; + this.enemiesPerWave = enemiesPerWave; + this.strongCircleChance = strongCircleChance; + this.fastCircleChance = fastCircleChance; + this.splitterCircleChance = splitterCircleChance; + this.basicCircleHealth = basicCircleHealth; + this.strongCircleHealth = strongCircleHealth; + this.circleDamage = circleDamage; + this.enemySpeedMultiplier = enemySpeedMultiplier; + } + + public int currentWave() { + return currentWave; + } + + public long enemiesPerWave() { + return enemiesPerWave; + } + + public float strongCircleChance() { + return strongCircleChance; + } + + public float fastCircleChance() { + return fastCircleChance; + } + + public float splitterCircleChance() { + return splitterCircleChance; + } + + public int basicCircleHealth() { + return basicCircleHealth; + } + + public int strongCircleHealth() { + return strongCircleHealth; + } + + public int circleDamage() { + return circleDamage; + } + + public float enemySpeedMultiplier() { + return enemySpeedMultiplier; + } +} diff --git a/core/src/main/resources/default.fnt b/core/src/main/resources/default.fnt new file mode 100644 index 0000000..9cb460f --- /dev/null +++ b/core/src/main/resources/default.fnt @@ -0,0 +1,99 @@ +info face="Arial" size=32 bold=0 italic=0 charset="" unicode=1 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=1,1 +common lineHeight=37 base=26 scaleW=512 scaleH=512 pages=1 packed=0 +page id=0 file="default.png" +chars count=95 +char id=32 x=0 y=0 width=0 height=0 xoffset=0 yoffset=0 xadvance=8 page=0 chnl=0 +char id=33 x=0 y=0 width=8 height=32 xoffset=0 yoffset=0 xadvance=8 page=0 chnl=0 +char id=34 x=8 y=0 width=12 height=12 xoffset=0 yoffset=0 xadvance=12 page=0 chnl=0 +char id=35 x=20 y=0 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=36 x=44 y=0 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=37 x=64 y=0 width=32 height=32 xoffset=0 yoffset=0 xadvance=32 page=0 chnl=0 +char id=38 x=96 y=0 width=28 height=32 xoffset=0 yoffset=0 xadvance=28 page=0 chnl=0 +char id=39 x=124 y=0 width=8 height=12 xoffset=0 yoffset=0 xadvance=8 page=0 chnl=0 +char id=40 x=132 y=0 width=12 height=32 xoffset=0 yoffset=0 xadvance=12 page=0 chnl=0 +char id=41 x=144 y=0 width=12 height=32 xoffset=0 yoffset=0 xadvance=12 page=0 chnl=0 +char id=42 x=156 y=0 width=16 height=16 xoffset=0 yoffset=0 xadvance=16 page=0 chnl=0 +char id=43 x=172 y=0 width=20 height=20 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=44 x=192 y=0 width=8 height=12 xoffset=0 yoffset=20 xadvance=8 page=0 chnl=0 +char id=45 x=200 y=0 width=12 height=4 xoffset=0 yoffset=14 xadvance=12 page=0 chnl=0 +char id=46 x=212 y=0 width=8 height=8 xoffset=0 yoffset=24 xadvance=8 page=0 chnl=0 +char id=47 x=220 y=0 width=16 height=32 xoffset=0 yoffset=0 xadvance=16 page=0 chnl=0 +char id=48 x=236 y=0 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=49 x=256 y=0 width=12 height=32 xoffset=0 yoffset=0 xadvance=12 page=0 chnl=0 +char id=50 x=268 y=0 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=51 x=288 y=0 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=52 x=308 y=0 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=53 x=328 y=0 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=54 x=348 y=0 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=55 x=368 y=0 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=56 x=388 y=0 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=57 x=408 y=0 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=58 x=428 y=0 width=8 height=24 xoffset=0 yoffset=4 xadvance=8 page=0 chnl=0 +char id=59 x=436 y=0 width=8 height=28 xoffset=0 yoffset=4 xadvance=8 page=0 chnl=0 +char id=60 x=444 y=0 width=20 height=20 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=61 x=464 y=0 width=20 height=12 xoffset=0 yoffset=10 xadvance=20 page=0 chnl=0 +char id=62 x=484 y=0 width=20 height=20 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=63 x=504 y=0 width=16 height=32 xoffset=0 yoffset=0 xadvance=16 page=0 chnl=0 +char id=64 x=0 y=32 width=32 height=32 xoffset=0 yoffset=0 xadvance=32 page=0 chnl=0 +char id=65 x=32 y=32 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=66 x=56 y=32 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=67 x=76 y=32 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=68 x=100 y=32 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=69 x=124 y=32 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=70 x=144 y=32 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=71 x=164 y=32 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=72 x=188 y=32 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=73 x=212 y=32 width=8 height=32 xoffset=0 yoffset=0 xadvance=8 page=0 chnl=0 +char id=74 x=220 y=32 width=16 height=32 xoffset=0 yoffset=0 xadvance=16 page=0 chnl=0 +char id=75 x=236 y=32 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=76 x=260 y=32 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=77 x=280 y=32 width=28 height=32 xoffset=0 yoffset=0 xadvance=28 page=0 chnl=0 +char id=78 x=308 y=32 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=79 x=332 y=32 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=80 x=356 y=32 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=81 x=376 y=32 width=24 height=36 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=82 x=400 y=32 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=83 x=420 y=32 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=84 x=440 y=32 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=85 x=460 y=32 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=86 x=484 y=32 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=87 x=0 y=64 width=32 height=32 xoffset=0 yoffset=0 xadvance=32 page=0 chnl=0 +char id=88 x=32 y=64 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=89 x=56 y=64 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=90 x=80 y=64 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=91 x=100 y=64 width=12 height=32 xoffset=0 yoffset=0 xadvance=12 page=0 chnl=0 +char id=92 x=112 y=64 width=16 height=32 xoffset=0 yoffset=0 xadvance=16 page=0 chnl=0 +char id=93 x=128 y=64 width=12 height=32 xoffset=0 yoffset=0 xadvance=12 page=0 chnl=0 +char id=94 x=140 y=64 width=20 height=16 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=95 x=160 y=64 width=20 height=4 xoffset=0 yoffset=28 xadvance=20 page=0 chnl=0 +char id=96 x=180 y=64 width=12 height=12 xoffset=0 yoffset=0 xadvance=12 page=0 chnl=0 +char id=97 x=192 y=64 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=98 x=212 y=64 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=99 x=232 y=64 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=100 x=252 y=64 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=101 x=272 y=64 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=102 x=292 y=64 width=16 height=32 xoffset=0 yoffset=0 xadvance=16 page=0 chnl=0 +char id=103 x=308 y=64 width=20 height=32 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=104 x=328 y=64 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=105 x=348 y=64 width=8 height=32 xoffset=0 yoffset=0 xadvance=8 page=0 chnl=0 +char id=106 x=356 y=64 width=12 height=40 xoffset=0 yoffset=0 xadvance=12 page=0 chnl=0 +char id=107 x=368 y=64 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=108 x=388 y=64 width=8 height=32 xoffset=0 yoffset=0 xadvance=8 page=0 chnl=0 +char id=109 x=396 y=64 width=32 height=24 xoffset=0 yoffset=8 xadvance=32 page=0 chnl=0 +char id=110 x=428 y=64 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=111 x=448 y=64 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=112 x=468 y=64 width=20 height=32 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=113 x=488 y=64 width=20 height=32 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=114 x=0 y=96 width=16 height=24 xoffset=0 yoffset=8 xadvance=16 page=0 chnl=0 +char id=115 x=16 y=96 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=116 x=36 y=96 width=16 height=32 xoffset=0 yoffset=0 xadvance=16 page=0 chnl=0 +char id=117 x=52 y=96 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=118 x=72 y=96 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=119 x=92 y=96 width=28 height=24 xoffset=0 yoffset=8 xadvance=28 page=0 chnl=0 +char id=120 x=120 y=96 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=121 x=140 y=96 width=20 height=32 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=122 x=160 y=96 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=123 x=180 y=96 width=16 height=32 xoffset=0 yoffset=0 xadvance=16 page=0 chnl=0 +char id=124 x=196 y=96 width=8 height=32 xoffset=0 yoffset=0 xadvance=8 page=0 chnl=0 +char id=125 x=204 y=96 width=16 height=32 xoffset=0 yoffset=0 xadvance=16 page=0 chnl=0 +char id=126 x=220 y=96 width=24 height=12 xoffset=0 yoffset=10 xadvance=24 page=0 chnl=0 \ No newline at end of file diff --git a/core/src/main/resources/font.fnt b/core/src/main/resources/font.fnt new file mode 100644 index 0000000..f48b561 --- /dev/null +++ b/core/src/main/resources/font.fnt @@ -0,0 +1,164 @@ +info face="Arial" size=32 bold=0 italic=0 charset="" unicode=1 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=1,1 +common lineHeight=37 base=26 scaleW=512 scaleH=512 pages=1 packed=0 +page id=0 file="font.png" +chars count=95 +char id=32 x=0 y=0 width=0 height=0 xoffset=0 yoffset=0 xadvance=8 page=0 chnl=0 +char id=33 x=0 y=0 width=8 height=32 xoffset=0 yoffset=0 xadvance=8 page=0 chnl=0 +char id=34 x=8 y=0 width=12 height=12 xoffset=0 yoffset=0 xadvance=12 page=0 chnl=0 +char id=35 x=20 y=0 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=36 x=44 y=0 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=37 x=64 y=0 width=32 height=32 xoffset=0 yoffset=0 xadvance=32 page=0 chnl=0 +char id=38 x=96 y=0 width=28 height=32 xoffset=0 yoffset=0 xadvance=28 page=0 chnl=0 +char id=39 x=124 y=0 width=8 height=12 xoffset=0 yoffset=0 xadvance=8 page=0 chnl=0 +char id=40 x=132 y=0 width=12 height=32 xoffset=0 yoffset=0 xadvance=12 page=0 chnl=0 +char id=41 x=144 y=0 width=12 height=32 xoffset=0 yoffset=0 xadvance=12 page=0 chnl=0 +char id=42 x=156 y=0 width=16 height=16 xoffset=0 yoffset=0 xadvance=16 page=0 chnl=0 +char id=43 x=172 y=0 width=20 height=20 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=44 x=192 y=0 width=8 height=12 xoffset=0 yoffset=20 xadvance=8 page=0 chnl=0 +char id=45 x=200 y=0 width=12 height=4 xoffset=0 yoffset=14 xadvance=12 page=0 chnl=0 +char id=46 x=212 y=0 width=8 height=8 xoffset=0 yoffset=24 xadvance=8 page=0 chnl=0 +char id=47 x=220 y=0 width=16 height=32 xoffset=0 yoffset=0 xadvance=16 page=0 chnl=0 +char id=48 x=236 y=0 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=49 x=256 y=0 width=12 height=32 xoffset=0 yoffset=0 xadvance=12 page=0 chnl=0 +char id=50 x=268 y=0 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=51 x=288 y=0 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=52 x=308 y=0 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=53 x=328 y=0 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=54 x=348 y=0 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=55 x=368 y=0 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=56 x=388 y=0 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=57 x=408 y=0 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=58 x=428 y=0 width=8 height=24 xoffset=0 yoffset=4 xadvance=8 page=0 chnl=0 +char id=59 x=436 y=0 width=8 height=28 xoffset=0 yoffset=4 xadvance=8 page=0 chnl=0 +char id=60 x=444 y=0 width=20 height=20 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=61 x=464 y=0 width=20 height=12 xoffset=0 yoffset=10 xadvance=20 page=0 chnl=0 +char id=62 x=484 y=0 width=20 height=20 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=63 x=504 y=0 width=16 height=32 xoffset=0 yoffset=0 xadvance=16 page=0 chnl=0 +char id=64 x=0 y=32 width=32 height=32 xoffset=0 yoffset=0 xadvance=32 page=0 chnl=0 +char id=65 x=32 y=32 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=66 x=56 y=32 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=67 x=76 y=32 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=68 x=100 y=32 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=69 x=124 y=32 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=70 x=144 y=32 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=71 x=164 y=32 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=72 x=188 y=32 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=73 x=212 y=32 width=8 height=32 xoffset=0 yoffset=0 xadvance=8 page=0 chnl=0 +char id=74 x=220 y=32 width=16 height=32 xoffset=0 yoffset=0 xadvance=16 page=0 chnl=0 +char id=75 x=236 y=32 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=76 x=260 y=32 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=77 x=280 y=32 width=28 height=32 xoffset=0 yoffset=0 xadvance=28 page=0 chnl=0 +char id=78 x=308 y=32 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=79 x=332 y=32 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=80 x=356 y=32 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=81 x=376 y=32 width=24 height=36 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=82 x=400 y=32 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=83 x=420 y=32 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=84 x=440 y=32 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=85 x=460 y=32 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=86 x=484 y=32 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=87 x=0 y=64 width=32 height=32 xoffset=0 yoffset=0 xadvance=32 page=0 chnl=0 +char id=88 x=32 y=64 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=89 x=56 y=64 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=90 x=80 y=64 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=91 x=100 y=64 width=12 height=32 xoffset=0 yoffset=0 xadvance=12 page=0 chnl=0 +char id=92 x=112 y=64 width=16 height=32 xoffset=0 yoffset=0 xadvance=16 page=0 chnl=0 +char id=93 x=128 y=64 width=12 height=32 xoffset=0 yoffset=0 xadvance=12 page=0 chnl=0 +char id=94 x=140 y=64 width=20 height=16 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=95 x=160 y=64 width=20 height=4 xoffset=0 yoffset=28 xadvance=20 page=0 chnl=0 +char id=96 x=180 y=64 width=12 height=12 xoffset=0 yoffset=0 xadvance=12 page=0 chnl=0 +char id=97 x=192 y=64 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=98 x=212 y=64 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=99 x=232 y=64 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=100 x=252 y=64 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=101 x=272 y=64 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=102 x=292 y=64 width=16 height=32 xoffset=0 yoffset=0 xadvance=16 page=0 chnl=0 +char id=103 x=308 y=64 width=20 height=32 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=104 x=328 y=64 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=105 x=348 y=64 width=8 height=32 xoffset=0 yoffset=0 xadvance=8 page=0 chnl=0 +char id=106 x=356 y=64 width=12 height=40 xoffset=0 yoffset=0 xadvance=12 page=0 chnl=0 +char id=107 x=368 y=64 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=108 x=388 y=64 width=8 height=32 xoffset=0 yoffset=0 xadvance=8 page=0 chnl=0 +char id=109 x=396 y=64 width=32 height=24 xoffset=0 yoffset=8 xadvance=32 page=0 chnl=0 +char id=110 x=428 y=64 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=111 x=448 y=64 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=112 x=468 y=64 width=20 height=32 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=113 x=488 y=64 width=20 height=32 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=114 x=0 y=96 width=16 height=24 xoffset=0 yoffset=8 xadvance=16 page=0 chnl=0 +char id=115 x=16 y=96 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=116 x=36 y=96 width=16 height=32 xoffset=0 yoffset=0 xadvance=16 page=0 chnl=0 +char id=117 x=52 y=96 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=118 x=72 y=96 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=119 x=92 y=96 width=28 height=24 xoffset=0 yoffset=8 xadvance=28 page=0 chnl=0 +char id=120 x=120 y=96 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=121 x=140 y=96 width=20 height=32 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=122 x=160 y=96 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=123 x=180 y=96 width=16 height=32 xoffset=0 yoffset=0 xadvance=16 page=0 chnl=0 +char id=124 x=196 y=96 width=8 height=32 xoffset=0 yoffset=0 xadvance=8 page=0 chnl=0 +char id=125 x=204 y=96 width=16 height=32 xoffset=0 yoffset=0 xadvance=16 page=0 chnl=0 +char id=126 x=220 y=96 width=24 height=12 xoffset=0 yoffset=10 xadvance=24 page=0 chnl=0 +char id=1040 x=244 y=96 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=1041 x=268 y=96 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=1042 x=288 y=96 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=1043 x=308 y=96 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=1044 x=328 y=96 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=1045 x=352 y=96 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=1046 x=372 y=96 width=32 height=32 xoffset=0 yoffset=0 xadvance=32 page=0 chnl=0 +char id=1047 x=404 y=96 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=1048 x=424 y=96 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=1049 x=448 y=96 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=1050 x=472 y=96 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=1051 x=492 y=96 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=1052 x=0 y=128 width=28 height=32 xoffset=0 yoffset=0 xadvance=28 page=0 chnl=0 +char id=1053 x=28 y=128 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=1054 x=48 y=128 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=1055 x=72 y=128 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=1056 x=96 y=128 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=1057 x=116 y=128 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=1058 x=140 y=128 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=1059 x=160 y=128 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=1060 x=184 y=128 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=1061 x=208 y=128 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=1062 x=232 y=128 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=1063 x=256 y=128 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=1064 x=276 y=128 width=28 height=32 xoffset=0 yoffset=0 xadvance=28 page=0 chnl=0 +char id=1065 x=304 y=128 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=1066 x=328 y=128 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=1067 x=348 y=128 width=24 height=32 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=0 +char id=1068 x=372 y=128 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=1069 x=392 y=128 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=1070 x=412 y=128 width=28 height=32 xoffset=0 yoffset=0 xadvance=28 page=0 chnl=0 +char id=1071 x=440 y=128 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=1072 x=460 y=128 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=1073 x=480 y=128 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=1074 x=0 y=160 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=1075 x=20 y=160 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=1076 x=40 y=160 width=20 height=32 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 +char id=1077 x=60 y=160 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=1078 x=80 y=160 width=28 height=24 xoffset=0 yoffset=8 xadvance=28 page=0 chnl=0 +char id=1079 x=108 y=160 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=1080 x=128 y=160 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=1081 x=148 y=160 width=20 height=32 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=1082 x=168 y=160 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=1083 x=188 y=160 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=1084 x=208 y=160 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=1085 x=228 y=160 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=1086 x=248 y=160 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=1087 x=268 y=160 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=1088 x=288 y=160 width=20 height=32 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=1089 x=308 y=160 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=1090 x=328 y=160 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=1091 x=348 y=160 width=20 height=32 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=1092 x=368 y=160 width=28 height=24 xoffset=0 yoffset=8 xadvance=28 page=0 chnl=0 +char id=1093 x=396 y=160 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=1094 x=416 y=160 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=1095 x=436 y=160 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=1096 x=456 y=160 width=20 height=32 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=1097 x=476 y=160 width=20 height=32 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=1098 x=0 y=192 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=1099 x=20 y=192 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=1100 x=40 y=192 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=1101 x=60 y=192 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=1102 x=80 y=192 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=1103 x=100 y=192 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=1105 x=120 y=192 width=20 height=24 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 \ No newline at end of file diff --git a/core/src/main/resources/uiskin.json b/core/src/main/resources/uiskin.json new file mode 100644 index 0000000..92d5818 --- /dev/null +++ b/core/src/main/resources/uiskin.json @@ -0,0 +1,22 @@ +{ + "com.badlogic.gdx.graphics.g2d.BitmapFont": { + "default-font": { + "file": "default.fnt" + } + }, + "com.badlogic.gdx.graphics.Color": { + "white": { "r": 1, "g": 1, "b": 1, "a": 1 }, + "black": { "r": 0, "g": 0, "b": 0, "a": 1 }, + "red": { "r": 1, "g": 0, "b": 0, "a": 1 }, + "green": { "r": 0, "g": 1, "b": 0, "a": 1 }, + "blue": { "r": 0, "g": 0, "b": 1, "a": 1 } + }, + "com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle": { + "default": { + "font": "default-font", + "fontColor": "white", + "downFontColor": "red", + "overFontColor": "green" + } + } +} \ No newline at end of file diff --git a/docs/superpowers/plans/2026-04-17-phase3-content-meta-retention.md b/docs/superpowers/plans/2026-04-17-phase3-content-meta-retention.md new file mode 100644 index 0000000..b9e2172 --- /dev/null +++ b/docs/superpowers/plans/2026-04-17-phase3-content-meta-retention.md @@ -0,0 +1,604 @@ +# TowerAn — Phase 3: Content, Meta & Retention + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. +> +> **Note on TDD:** This project has **no test infrastructure** (libGDX game, procedural rendering, no existing JUnit/Spock tests). The "write failing test first" ritual is not applicable. Verification is **visual / manual**: run the desktop launcher (`lwjgl3/src/main/java/ru/project/tower/lwjgl3/Lwjgl3Launcher`), reproduce the scenario, confirm the change. Each task lists explicit visual checks in place of test assertions. Introducing a test harness is itself a Phase 3 candidate (Task 0) but is not a prerequisite. + +**Goal:** Close the content and retention gaps identified by the three game-design agents — new enemy archetypes, boss fight depth, environment variety, audio, onboarding, achievements, daily seeds, save/resume, and full-tree build diversity. + +**Architecture:** All enemies extend `BaseCircleData` in the flat `ru.project.tower` package. New systems (achievements, daily seed, settings) piggyback on existing `Preferences`-based persistence alongside `PlayerStats`/`PlayerAbilities`. Onboarding is a `FirstScreen` overlay (same pattern as the mid-run upgrade pick added in Phase 2). Biomes are data-driven palette swaps applied each wave. + +**Tech Stack:** Java 8, libGDX 1.13.1, `ShapeRenderer`/`SpriteBatch`, `Preferences` for persistence, `GlyphLayout` for tooltips. + +**Prerequisites:** Phases 1 and 2 merged. Run the game at least once to confirm Phase 2 overlays render correctly (the Phase 2 session discovered that `renderUI()`/`renderGameObjects()` are not wired — render pipeline is direct-to-`render()`; new renderers must be called explicitly from `render()`). + +--- + +## Task ordering + +Tasks are grouped by area. Within an area they go easiest → hardest. Between areas: + +1. **Enemy archetypes** (pure data classes, mechanical payoff, low risk) +2. **Boss depth** (enrage phase, reuses existing frameworks) +3. **Projectile variants** (ties into existing `BulletData` flags from Phase 1) +4. **Audio pack** (tiny code, requires asset decisions) +5. **Biomes** (procedural palette swap) +6. **Onboarding / tooltips** (touches many screens) +7. **Achievements & unlocks** (new persistent store) +8. **Daily seed & run modifiers** (roguelite hook) +9. **Save/resume mid-run** (serialization work) +10. **Ability mastery** (XP per ability, optional late-tier) + +Each Task group ends with a commit. Skip any group that the user explicitly de-prioritizes. + +--- + +# Area A — Enemy archetypes + +Two complaints from the variety agent: **only 5 enemy archetypes** (Basic/Strong/Fast/Spawner/Splitter), **all travel in a straight line toward center** (no behaviour differences beyond HP/speed/colour). Add 4 behaviourally distinct enemies. Each is a single file + a tiny spawn-chance hook in `FirstScreen.spawnCircle`. + +## Task A1: `HealerCircleData` — AoE healer + +**Files:** +- Create: `core/src/main/java/ru/project/tower/HealerCircleData.java` +- Modify: `core/src/main/java/ru/project/tower/FirstScreen.java` (add spawn branch + constants) + +- [ ] **Step 1: Create `HealerCircleData`** + +```java +package ru.project.tower; + +import com.badlogic.gdx.math.Circle; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.utils.TimeUtils; + +public class HealerCircleData extends BaseCircleData { + private static final long HEAL_INTERVAL_MS = 1500L; + private static final float HEAL_RADIUS = 120f; + private static final int HEAL_AMOUNT = 3; + private long lastHealTime = TimeUtils.millis(); + + public HealerCircleData(Circle circle, Vector2 velocity, int health, int damage) { + super(circle, velocity, health, damage); + } + + public boolean shouldPulse() { + if (TimeUtils.millis() - lastHealTime > HEAL_INTERVAL_MS) { + lastHealTime = TimeUtils.millis(); + return true; + } + return false; + } + + public static float getHealRadius() { return HEAL_RADIUS; } + public static int getHealAmount() { return HEAL_AMOUNT; } + + @Override + public float[] getColor() { + return new float[]{0.2f, 1.0f, 0.5f, 1f}; + } + + @Override + protected int getBaseReward() { return 4; } +} +``` + +- [ ] **Step 2: Add spawn constants in `FirstScreen.java`** near the other enemy constants (search for `SPLITTER_CIRCLE_CHANCE`): + +```java +private static final float HEALER_CIRCLE_CHANCE = 0.08f; +private static final int HEALER_CIRCLE_HEALTH = 6; +private static final int HEALER_START_WAVE = 8; +``` + +- [ ] **Step 3: Add spawn branch in `spawnCircle()`** — after the `isSplitterCircle` branch, before `isStrongCircle`: + +```java +boolean isHealerCircle = !isSpawnerCircle && !isFastCircle && !isSplitterCircle + && currentWave >= HEALER_START_WAVE + && random < (currentFastCircleChance + currentSplitterCircleChance + HEALER_CIRCLE_CHANCE); +``` + +Then add a construction branch mirroring the other archetypes and set `spawned = new HealerCircleData(...)`. + +- [ ] **Step 4: Pulse loop in the per-frame circle iterator** (same block that spawns from `SpawnerCircleData`): + +```java +if (circleData instanceof HealerCircleData) { + HealerCircleData healer = (HealerCircleData) circleData; + if (healer.shouldPulse()) { + for (BaseCircleData other : circles) { + if (other == healer) continue; + if (Vector2.dst(healer.getX(), healer.getY(), other.getX(), other.getY()) + <= HealerCircleData.getHealRadius()) { + other.health += HealerCircleData.getHealAmount(); + } + } + createExplosion(healer.getX(), healer.getY(), + new Color(0.2f, 1f, 0.5f, 1f)); + } +} +``` + +- [ ] **Step 5: Visual check** — play until wave 8, spot a green enemy, watch nearby enemies gain HP (visible because `StrongCircleData.getColor` scales alpha with health — strong enemies near a healer should stay bright blue). + +- [ ] **Step 6: Commit** + +```bash +git add core/src/main/java/ru/project/tower/HealerCircleData.java \ + core/src/main/java/ru/project/tower/FirstScreen.java +git commit -m "feat: add HealerCircleData AoE healer enemy" +``` + +--- + +## Task A2: `DasherCircleData` — telegraphed charge + +Uses `JuggernautData`'s charge pattern at a smaller scale for a rank-and-file enemy. + +**Files:** +- Create: `core/src/main/java/ru/project/tower/DasherCircleData.java` +- Modify: `FirstScreen.java` (spawn branch, per-frame state tick, render tint for the "windup" phase) + +- [ ] **Step 1: Create class** — holds a `long dashReadyAt` and `boolean dashing`. At `update()` time: if idle and in range of player, enter windup for 800ms (velocity halved, visually pulses yellow), then lock a direction, multiply velocity ×3 for 400ms, return to normal. + +```java +package ru.project.tower; + +import com.badlogic.gdx.math.Circle; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.utils.TimeUtils; + +public class DasherCircleData extends BaseCircleData { + private static final long WINDUP_MS = 800L; + private static final long DASH_MS = 400L; + private static final float DASH_SPEED_MULT = 3f; + private enum State { IDLE, WINDUP, DASHING } + private State state = State.IDLE; + private long stateEnter = 0; + private Vector2 baseVelocity; + + public DasherCircleData(Circle circle, Vector2 velocity, int health, int damage) { + super(circle, velocity, health, damage); + this.baseVelocity = new Vector2(velocity); + } + + public boolean isWindup() { return state == State.WINDUP; } + public boolean isDashing() { return state == State.DASHING; } + + public void tick(float squareX, float squareY) { + long now = TimeUtils.millis(); + switch (state) { + case IDLE: + if (Vector2.dst(getX(), getY(), squareX, squareY) < 280f) { + state = State.WINDUP; + stateEnter = now; + velocity.scl(0.3f); + } + break; + case WINDUP: + if (now - stateEnter > WINDUP_MS) { + state = State.DASHING; + stateEnter = now; + float dx = squareX - getX(), dy = squareY - getY(); + float len = (float)Math.sqrt(dx*dx + dy*dy); + if (len > 0f) { + velocity.set(dx/len, dy/len).scl(baseVelocity.len() * DASH_SPEED_MULT); + } + } + break; + case DASHING: + if (now - stateEnter > DASH_MS) { + state = State.IDLE; + velocity.set(baseVelocity); + } + break; + } + } + + @Override + public float[] getColor() { + switch (state) { + case WINDUP: return new float[]{1f, 0.9f, 0.3f, 1f}; + case DASHING: return new float[]{1f, 0.4f, 0.1f, 1f}; + default: return new float[]{0.9f, 0.6f, 0.2f, 1f}; + } + } + + @Override + protected int getBaseReward() { return 3; } +} +``` + +- [ ] **Step 2: Spawn branch** in `spawnCircle` with `currentWave >= 6` and chance 0.10. + +- [ ] **Step 3: Call `dasher.tick(squareCenterX, squareCenterY)`** inside the per-frame circles loop (same spot that handles spawner spawning). + +- [ ] **Step 4: Visual check** — from wave 6 a dasher should pulse yellow for ~0.8s then streak toward the square at 3× speed. Good stress test for Dash/Shield abilities. + +- [ ] **Step 5: Commit.** + +--- + +## Task A3: `SniperCircleData` — ranged shooter + +Stays at range, fires `BulletData(isEnemyBullet=true)` projectiles. + +**Files:** as above. + +- [ ] **Step 1: Class holds `long lastShotAt` and overrides movement** — moves toward player until distance ~= 400, then stops (velocity set to 0) and fires every 2s. + +- [ ] **Step 2: Spawning & firing** mirror `ShadowWeaverData.shouldShoot()` usage on lines 5935–5940 of current FirstScreen. + +- [ ] **Step 3: Balance** — damage = 2× basic damage, HP = 0.5× basic. + +- [ ] **Step 4: Visual check** — sniper stops in a ring ~400px from square, red tracer shots visible. Shield/Dash should block them. + +- [ ] **Step 5: Commit.** + +--- + +## Task A4: `GnatCircleData` — 1-HP swarm + +Fastest type, 1 HP, spawned in packs. Overrides `BaseCircleData`'s single-spawn assumption by inserting a small "swarm" around a spawn roll. + +**Files:** as above. + +- [ ] **Step 1: Class is trivial** — health always 1, speed 1.8× basic, radius 0.6× basic. + +- [ ] **Step 2: Spawn as a pack** — when rolled, call `spawnCircle`-like helper 5 times with small offsets around the roll point. Add `isGnatSwarm` branch before the Basic branch. + +- [ ] **Step 3: Visual check** — from wave 10+, occasional pack of tiny pink dots darts in. AoE abilities should shred them. + +- [ ] **Step 4: Commit.** + +--- + +# Area B — Boss depth + +## Task B1: Enrage phase for all 6 bosses + +Add a shared `BaseBossData` abstract class **or** a `BossEnrage` mixin-helper invoked from each boss. Pragmatic path: helper invoked from each boss's `update()`. + +**Files:** +- Modify: `JuggernautData`, `SwarmQueenData`, `GlacialWardenData`, `IllusionMasterData`, `ShadowWeaverData`, `VolatileReactorData` + +- [ ] **Step 1: Add per-boss `maxHealth` field** — captured at construction time. Boss HP is already scaled in `spawnRandomBoss`; snapshot right after construction. + +- [ ] **Step 2: Add `boolean isEnraged()` per boss** — `health / maxHealth < 0.33f`. Cache the flag so enrage triggers once. + +- [ ] **Step 3: Multiply attack cadence by 1.5× when enraged** — find each `shouldShoot`/`shouldCharge`/`shouldCreateFireZone` cadence constant and divide by `isEnraged() ? 1.5f : 1f`. + +- [ ] **Step 4: Visual/audio telegraph** — one-time screen shake + red flash + `"ENRAGE!"` floating text when transitioning. Trigger from `FirstScreen.updateBosses` by checking `boss.isEnraged() && !boss.enrageTriggered`. + +- [ ] **Step 5: Visual check** — boss at low HP flashes red, floating text appears, projectile cadence noticeably faster. + +- [ ] **Step 6: Commit.** + +## Task B2: De-templatize the "projectile barrage + summon" pattern + +Agent noted 4 of 6 bosses use the same `burst + minions` pattern. Low-effort differentiator: + +- [ ] **Step 1: Give `ShadowWeaverData` a beam attack** (continuous line that deals 1 dmg/tick instead of its volley). +- [ ] **Step 2: Give `GlacialWardenData` a wall-spawn** (creates temporary immovable obstacles that bullets collide with). +- [ ] **Step 3: Commit.** + +_(Lower priority — skip if schedule tight.)_ + +--- + +# Area C — Projectile variants exposed to the player + +Phase 1 added `piercesLeft / homing / aoeRadius` to `BulletData` and Phase 2 wired pierce + AoE to keystones. `homing` is defined but unimplemented. + +## Task C1: Implement homing + +**Files:** `FirstScreen.java`, `BulletData.java` + +- [ ] **Step 1:** In the bullet-update loop (where `bulletData.move(delta)` lives), if `bullet.homing && !bullet.isEnemyBullet()`: find nearest enemy within 400px, compute desired velocity direction, lerp `bullet.velocity` toward it by `0.06f` per frame (caps turn rate so homing feels responsive but not snap-on). + +- [ ] **Step 2:** Add a new **Keystone talent** `keystone_homing` (tier 3) that sets `bullet.homing = true` on all bullets when level >= 1. Add registration in `TalentTree.initializeTree`, add `"keystone_homing"` to `PlayerStats.TALENT_NODE_IDS`. + +- [ ] **Step 3: Visual check** — with the keystone bought, bullets curve toward enemies. + +- [ ] **Step 4: Commit.** + +## Task C2: Chain lightning on hit + +New per-bullet flag `chainJumps` (int). On collision, if `chainJumps > 0`, find nearest enemy within 200px, spawn a short-lived line render + deal damage, decrement. + +- [ ] **Step 1:** Add field to `BulletData`. +- [ ] **Step 2:** Add collision-site chain logic in `FirstScreen` bullet-vs-circle resolution block (near the existing `bulletData.aoeRadius > 0f` check). +- [ ] **Step 3:** Render the chain as a thin additive-blend line from hit-point to hit-target, alpha fading over 150ms. +- [ ] **Step 4:** New keystone `keystone_chain`. Each level = +1 jump. +- [ ] **Step 5: Commit.** + +--- + +# Area D — Audio pack + +The project ships with **2 sounds** (`pop.wav`, `shot.wav`) and 1 PNG. Need a base pack. **Asset dependency** — cannot be completed in a code-only session. The plan's task is to wire up the loader; the user supplies the files. + +## Task D1: Sound asset loader + +**Files:** +- Create: `core/src/main/java/ru/project/tower/SoundAssets.java` +- Modify: `FirstScreen.java` + +- [ ] **Step 1: Create `SoundAssets` singleton** that lazy-loads and caches `Sound` handles: + +```java +public class SoundAssets { + private static SoundAssets instance; + private final Map cache = new HashMap<>(); + + public static SoundAssets get() { + if (instance == null) instance = new SoundAssets(); + return instance; + } + + public Sound load(String filename) { + Sound s = cache.get(filename); + if (s != null) return s; + FileHandle f = Gdx.files.internal(filename); + if (!f.exists() || f.length() < 200) return null; + try { s = Gdx.audio.newSound(f); cache.put(filename, s); return s; } + catch (Exception e) { return null; } + } + + public void play(String filename, float volume, float pitch) { + Sound s = load(filename); + if (s != null) s.play(volume, pitch, 0f); + } +} +``` + +- [ ] **Step 2: Replace direct `Gdx.audio.newSound` in `FirstScreen.show`** with `SoundAssets.get().load(...)`. + +- [ ] **Step 3: Add explicit call sites** for the 10 events the variety agent listed. For each event, add `SoundAssets.get().play(".wav", vol, pitch)`: + - `player_hit.wav` — in the 5 damage-to-player sites added in Phase 1 + - `boss_spawn.wav` — in `spawnRandomBoss` + - `ability_freeze.wav` / `_explosion.wav` / `_shield.wav` / `_impulse.wav` / `_dash.wav` / `_pull.wav` / `_turret.wav` — start of each `activateX` method + - `wave_start.wav` — first line of `startNextWave` + - `wave_clear.wav` — in `endWave` after bonus calculation + - `game_over.wav` — first line of `gameOver` + - `ui_click.wav` — in `handleUpgradeButtons` / `handleUpgradePickTouch` after a successful button hit + +- [ ] **Step 4:** Missing files degrade silently (loader returns null → play is no-op). No crash if user hasn't supplied assets yet. + +- [ ] **Step 5: Commit.** + +## Task D2: Music loop slots + +- [ ] **Step 1:** Add `Music menuTrack, combatTrack, bossTrack` fields; load via `Gdx.audio.newMusic(Gdx.files.internal("music/...ogg"))` guarded by `exists()`. +- [ ] **Step 2:** Start combat track in `show()`; switch to boss track when a boss is active (`isAnyBossOnScreen`); restore combat track when boss dies. +- [ ] **Step 3: Commit.** + +--- + +# Area E — Biomes / palette variety + +One `BACKGROUND_COLOR`, one particle palette. Agent: rotate every ~5 waves. + +## Task E1: `BiomePalette` data class + per-wave selection + +**Files:** +- Create: `core/src/main/java/ru/project/tower/BiomePalette.java` +- Modify: `FirstScreen.java` + +- [ ] **Step 1: Create class** + +```java +public class BiomePalette { + public final Color background; + public final Color particle1; + public final Color particle2; + public final String label; + public BiomePalette(Color bg, Color p1, Color p2, String label) { + this.background = bg; this.particle1 = p1; this.particle2 = p2; this.label = label; + } + public static final BiomePalette[] ALL = { + new BiomePalette(new Color(0.05f,0.05f,0.10f,1f), new Color(0.2f,0.6f,1f,1f), new Color(1f,0.2f,0.6f,1f), "Neon City"), + new BiomePalette(new Color(0.02f,0.08f,0.05f,1f), new Color(0.2f,1f,0.5f,1f), new Color(1f,1f,0.3f,1f), "Bio Jungle"), + new BiomePalette(new Color(0.08f,0.02f,0.02f,1f), new Color(1f,0.3f,0.1f,1f), new Color(1f,0.8f,0.2f,1f), "Magma Forge"), + new BiomePalette(new Color(0.03f,0.03f,0.12f,1f), new Color(0.5f,0.2f,1f,1f), new Color(0.2f,0.9f,1f,1f), "Void Shift"), + }; +} +``` + +- [ ] **Step 2: Select in `startNextWave`** — `currentBiome = BiomePalette.ALL[(currentWave / 5) % BiomePalette.ALL.length]`. Replace the static `BACKGROUND_COLOR` references in `render()` with `currentBiome.background`. + +- [ ] **Step 3: Background particle colors** — in the background particle spawn logic, pick randomly between `currentBiome.particle1` and `particle2`. + +- [ ] **Step 4: Biome transition floating text** — when biome changes, spawn a 3-second floating text with `currentBiome.label`. + +- [ ] **Step 5: Visual check** — at waves 5, 10, 15, 20 the background and particle colors rotate. + +- [ ] **Step 6: Commit.** + +## Task E2: Random wave modifiers + +Once per run, at wave-start, roll a 25% chance of a modifier from a small list: "double gravity" (pulls enemies toward center faster), "fog" (shooting range -30%), "rush" (+25% enemy speed, +25% reward). Display as floating text at wave start. Stores as fields on `FirstScreen`; cleared in `endWave`. + +- [ ] **Step 1:** Add `enum WaveModifier { NONE, GRAVITY, FOG, RUSH }` and `WaveModifier currentWaveModifier`. +- [ ] **Step 2:** Roll in `startNextWave`. +- [ ] **Step 3:** Apply effects: GRAVITY → multiply `currentEnemySpeedMultiplier` by 1.3 and pull velocity toward center each tick; FOG → shrink `SHOOTING_RANGE` effective value by 0.7; RUSH → multiply speed × 1.25, reward × 1.25. +- [ ] **Step 4:** Floating text at wave start with the label. +- [ ] **Step 5: Commit.** + +--- + +# Area F — Onboarding + +## Task F1: Tutorial overlay for first run + +**Files:** +- Modify: `FirstScreen.java`, `PlayerStats.java` (add `tutorialSeen` preference) + +- [ ] **Step 1:** Add boolean `tutorialSeen` to `PlayerStats` persisted in Preferences, default false. +- [ ] **Step 2:** In `FirstScreen.show`, if `!playerStats.tutorialSeen`, set `showTutorialStep = 0` and skip auto-starting wave 1. +- [ ] **Step 3:** Add `renderTutorialOverlay()` method — dims the screen and shows one tip at a time with an arrow pointing at the relevant UI region. + - Step 0: "Автоматическая турель в центре стреляет по ближайшему врагу" + - Step 1: "Кнопки способностей снизу — жмите когда заряжены" + - Step 2: "Каждые 3 волны выбирайте улучшение" + - Step 3: "Магазин и дерево талантов в главном меню" +- [ ] **Step 4:** Tap advances. Last step → `tutorialSeen = true; saveData();` and wave 1 starts. +- [ ] **Step 5: Call `renderTutorialOverlay()` at the end of `render()`** (alongside `renderUpgradePickOverlay`). +- [ ] **Step 6: Commit.** + +## Task F2: Tooltips on upgrade/talent/ability buttons + +- [ ] **Step 1:** Add `tooltipText` field on each button and track hover state (already tracked in `renderNeonButton` via `isHovered`). +- [ ] **Step 2:** When hovered, render a small panel above the button with text. One pass, one method — `drawTooltip(Rectangle btn, String text)`. +- [ ] **Step 3:** Wire per button — damage/speed/cooldown upgrades get stat deltas, ability buttons get radius/damage/duration values. +- [ ] **Step 4: Commit.** + +--- + +# Area G — Achievements & unlocks + +## Task G1: Achievements store + +**Files:** +- Create: `core/src/main/java/ru/project/tower/Achievements.java` +- Modify: `FirstScreen.java` (hook increment calls) + +- [ ] **Step 1: Define enum** of 15 achievements: + - `FIRST_BLOOD` (1 kill), `KILL_100`, `KILL_1000` + - `WAVE_10`, `WAVE_25`, `WAVE_50` + - `BOSS_ALL_6` (defeat each boss once) + - `NO_HIT_WAVE` (complete a wave with no damage taken) + - `FREEZE_100_FROZEN`, `SHATTER_50` + - `ELITE_KILL_100` + - `TALENT_TREE_COMPLETE`, `FULL_ABILITY_ROSTER` + - `DAILY_SEED_FIRST`, `RUN_WITH_ALL_3_KEYSTONES` + +- [ ] **Step 2: `Achievements` singleton with `Preferences`-backed unlocked set and counters**. `increment(key)`, `unlock(id)`, `isUnlocked(id)`. Each unlock awards a currency bounty (e.g., 25 for easy, 100 for hard). + +- [ ] **Step 3: Hook call sites** — kill counter in the bullet-kill block, wave counter in `endWave`, boss-defeated in the circle.health<=0 block when `isBossCircle`, etc. + +- [ ] **Step 4: Unlock toast** — on first unlock of an achievement, floating text "ДОСТИЖЕНИЕ: (+N монет)" + shake. + +- [ ] **Step 5:** Add an "Achievements" button on `MainScreen` → new `AchievementsScreen` with a scrollable list (use same stage/skin style as `AbilityShopScreen`). + +- [ ] **Step 6: Commit.** + +## Task G2: Cosmetic unlocks + +Simple: square tint unlocks (5 colours unlocked by achievement thresholds). Stored in `PlayerStats.selectedTint`. Applied in `renderNeonSquare`. + +- [ ] **Step 1:** Add `String selectedTint` / list of unlocked tints to `PlayerStats`. +- [ ] **Step 2:** Cosmetics screen launched from `MainScreen`. +- [ ] **Step 3: Commit.** + +--- + +# Area H — Daily seed & run modifiers + +## Task H1: Daily seed + +**Files:** +- Create: `core/src/main/java/ru/project/tower/DailySeed.java` +- Modify: `MainScreen.java`, `FirstScreen.java` + +- [ ] **Step 1:** `DailySeed.todaySeed()` returns `LocalDate.now().toString().hashCode()`. +- [ ] **Step 2:** New "Daily Challenge" button on main menu that starts a run with `MathUtils.random.setSeed(seed)` injected into `FirstScreen` before first `spawnCircle`. +- [ ] **Step 3:** Record best-wave-today in Preferences keyed by date. Display on main menu "Daily: best W14". +- [ ] **Step 4:** At wave end in daily mode, also save to a rolling 7-day log for a "last 7 days" leaderboard view. +- [ ] **Step 5: Commit.** + +## Task H2: Pre-run modifiers + +Before starting a run, offer an optional modifier card: "+30% reward if all 3 abilities selected", "Bosses +50% HP / reward ×2", etc. Applied as `GameState.runModifier` flag, checked in relevant methods. + +- [ ] Deferred — pair with Area E2 work. + +--- + +# Area I — Save mid-run + +Agent noted `GameState` is in-memory only. Serialize run to JSON on pause/quit so players can resume. + +**Files:** +- Modify: `GameState.java`, `FirstScreen.java` (serialize on pause, deserialize on show) + +- [ ] **Step 1:** Add `toJson()`/`fromJson(String)` on `GameState` using libGDX `Json`. Include: `currentWave`, `squareHealth`, `maxSquareHealth`, `money`, `runDamageBonus`, `runPierceBonus`, etc. (the Phase 2 `run*` fields). +- [ ] **Step 2:** On pause (`shouldPause` branch), write JSON string into `Preferences`. +- [ ] **Step 3:** On `FirstScreen.show`, if a saved run exists and user chose "Resume" from main menu, deserialize and jump to `startNextWave`-equivalent state. +- [ ] **Step 4:** Main menu gets a "Resume" button that appears only when save exists. +- [ ] **Step 5: Commit.** + +--- + +# Area J — Ability mastery + +Roguelite depth — each ability gains XP as it's used; XP unlocks passive modifiers. + +**Files:** +- Create: `core/src/main/java/ru/project/tower/AbilityMastery.java` +- Modify: `FirstScreen.java` (increment on each cast), `AbilitySelectionScreen.java` (show levels) + +- [ ] **Step 1:** `AbilityMastery` singleton tracks `int masteryXp[ability]` persisted in Preferences. Level = `floor(sqrt(xp/10))`. +- [ ] **Step 2:** Increment 10 XP per cast; 50 XP per "meaningful kill" (freeze of 5+, explosion of 10+ etc.) +- [ ] **Step 3:** Unlocks per level: + - Freeze L2: +30% radius; L4: +25% duration; L6: enemies under Freeze take +25% bullet damage. + - Explosion L2: +30% radius; L4: applies brief slow; L6: double damage vs frozen (stacks with Phase 1 synergy). + - Shield L2: +1s duration; L4: reflects projectiles; L6: explosion on expire. + - Impulse L2: +30% force; L4: +50% damage to pushed enemies; L6: also applies freeze 500ms. + - Dash L2: +150ms i-frames; L4: leaves fire trail; L6: double-dash (2 charges). + - Pull L2: +30% radius; L4: pulled enemies take +20% damage for 2s; L6: pulls bosses briefly. + - Turret L2: +3s lifetime; L4: +25% fire rate; L6: turret shots pierce +1. +- [ ] **Step 4: Visualise** — in `AbilitySelectionScreen`, show level number on each selected ability card. +- [ ] **Step 5: Commit.** + +--- + +# Area K — Test harness (optional, enabler for future work) + +Not required for any Phase 3 task but strongly suggested before Phase 4. + +- [ ] **Step 1:** Add JUnit 5 to `core/build.gradle`: `testImplementation 'org.junit.jupiter:junit-jupiter:5.9.0'`. +- [ ] **Step 2:** Headless libGDX test scaffolding via `Headless Application` — enough for `PlayerStats`, `Achievements`, `TalentTree`, `DailySeed` logic tests. +- [ ] **Step 3:** One sample test per class to prove the pattern. +- [ ] **Step 4:** Document in README the `gradle test` command. +- [ ] **Step 5: Commit.** + +--- + +## Priority summary + +| Priority | Area | Rationale | +| --- | --- | --- | +| P1 | A1 Healer, A3 Sniper, B1 Enrage, E1 Biomes | Cheap, high-impact variety; no new assets | +| P1 | F1 Tutorial, F2 Tooltips | Fixes onboarding (agent's #3 critical gap) | +| P1 | G1 Achievements (core only) | Fixes retention goals (agent's #2 critical gap) | +| P2 | A2 Dasher, A4 Gnat, C1 Homing, C2 Chain | More variety + keystone payoffs | +| P2 | H1 Daily seed | Flywheel for returning players | +| P2 | I Save mid-run | Mobile QoL | +| P3 | D1 Audio pack | Requires assets | +| P3 | B2 Boss de-templating | Large rework, lower leverage | +| P3 | J Ability mastery | Late-tier depth | +| P3 | E2 Wave modifiers, H2 Pre-run modifiers | Nice-to-have | +| P4 | K Test harness | Enabler for Phase 4 | + +Implement top-to-bottom. P1 block (A1+A3+B1+E1+F1+F2+G1) is the minimum that addresses all three agent reports. + +--- + +## Self-review notes + +- **Spec coverage:** Every top-level gap from the three agent reports maps to at least one task. Elite modifier and 3 new abilities (Dash/Pull/Turret) from Phase 2 aren't re-planned here; homing is the only `BulletData` flag that was dormant. +- **Placeholder scan:** Task B2 is the only explicitly-deferred item; flagged P3. All other code steps show the code. +- **Type consistency:** `HealerCircleData.getHealRadius()` used from `FirstScreen` matches class definition. `BiomePalette.ALL` array is the public API used in `startNextWave`. `Achievements.increment(String key)` signature referenced in Task G1.step3 matches Task G1.step2. +- **Out-of-scope:** Multiplayer, shader-based bloom, and new fonts are not in this plan. Boss entry cinematics, cosmetic particle trails, and lore text are intentionally skipped — re-open after data shows engagement. + +--- + +## Execution handoff + +This plan is saved as `docs/superpowers/plans/2026-04-17-phase3-content-meta-retention.md`. When you're ready to execute: + +1. **Subagent-Driven (recommended):** Fresh subagent per task group (A, B, ... J), review between groups. Use `superpowers:subagent-driven-development`. +2. **Inline Execution:** Step through in-session with `superpowers:executing-plans`, checkpoint after each area. + +Tell Claude which approach and which priority tier (P1 only? P1+P2? full sweep?) to run. diff --git a/docs/superpowers/plans/2026-04-17-phase3-k1-test-harness-completion.md b/docs/superpowers/plans/2026-04-17-phase3-k1-test-harness-completion.md new file mode 100644 index 0000000..d9aa41f --- /dev/null +++ b/docs/superpowers/plans/2026-04-17-phase3-k1-test-harness-completion.md @@ -0,0 +1,127 @@ +# Phase 3.K.1 — Completion Report + +**Date completed:** 2026-04-17 +**Source plan:** `2026-04-17-phase3-k1-test-harness.md` +**Source spec:** `../specs/2026-04-17-phase3-k1-test-harness-design.md` +**Execution mode:** subagent-driven-development (fresh subagent per task, two-stage review). + +## Status + +- **Code:** ✅ Shipped. All 11 tasks complete. +- **Automated verification:** ✅ `./gradlew core:test` → 58/58 green. `./gradlew :core:build :lwjgl3:build` → BUILD SUCCESSFUL. +- **Manual smoke test:** ⏳ Pending user — see checklist below. +- **Git:** project is not a git repository; no commits were made. All work lives in the working tree. + +## What was delivered + +### New files (10) + +Production (1): +- `core/src/main/java/ru/project/tower/GameContext.java` — composition-root holder for shared persistent-state services. `public final` fields for `PlayerStats`, `PlayerAbilities`, `GameState`, `TalentTree`, and two `Preferences` refs. + +Tests (9): +- `core/src/test/java/ru/project/tower/HarnessSanityTest.java` +- `core/src/test/java/ru/project/tower/FakePreferences.java` — in-memory `Preferences` impl, reused by every downstream test. +- `core/src/test/java/ru/project/tower/FakePreferencesTest.java` +- `core/src/test/java/ru/project/tower/PlayerStatsTest.java` +- `core/src/test/java/ru/project/tower/PlayerAbilitiesTest.java` +- `core/src/test/java/ru/project/tower/GameStateTest.java` +- `core/src/test/java/ru/project/tower/TalentTreeTest.java` +- `core/src/test/java/ru/project/tower/TalentDataTest.java` +- `core/src/test/java/ru/project/tower/GameContextTest.java` + +### Modified files (10) + +Production classes (singletons → DI): +- `PlayerStats.java` — public `PlayerStats(Preferences)` ctor, `getInstance()` deleted, `instance` field deleted, `PREFS_NAME` deleted, `Gdx` import deleted, `preferences` field made `final`. +- `PlayerAbilities.java` — public `PlayerAbilities(Preferences)` ctor, `getInstance()` deleted, `instance` field deleted, `PREFS_NAME` deleted, `preferences` field made `final`. `Gdx` import kept (used by `Gdx.app.error(...)`). +- `GameState.java` — ctor made public, `getInstance()` deleted, `instance` field deleted. +- `TalentTree.java` — public `TalentTree(PlayerStats)` ctor, `getInstance()` deleted, `instance` field deleted, two internal `PlayerStats.getInstance()` calls replaced with injected `stats` field, `talents`/`roots` made `final`. + +Composition root + screens: +- `Main.java` — rewritten; builds `GameContext` from two `Preferences`, passes to `MainScreen`. +- `MainScreen.java` — 2-arg ctor, 3 downstream `new X(game)` → `new X(game, ctx)`. +- `FirstScreen.java` — 2-arg ctor, 3 new cached fields (`ctx`, `gameState`, `talentTree`), 4 cached services assigned at ctor top (closed an NPE window), 13 `getInstance()` call-sites replaced, internal `new MainScreen(game)` → `new MainScreen(game, ctx)`, 2 redundant local shadows removed. +- `AbilityShopScreen.java` — 2-arg ctor, 2 `getInstance()` replacements, internal `new MainScreen(game, ctx)`. +- `AbilitySelectionScreen.java` — 2-arg ctor, 2 `getInstance()` replacements, internal `new MainScreen(gameInstance, ctx)` + `new FirstScreen(gameInstance, ctx)`. +- `TalentTreeScreen.java` — 2-arg ctor, 2 `getInstance()` replacements, internal `new MainScreen(game, ctx)`. + +Build: +- `core/build.gradle` — `testImplementation 'org.junit.jupiter:junit-jupiter:5.10.2'`, `testImplementation 'org.assertj:assertj-core:3.26.3'`, `test { useJUnitPlatform() }`. + +### Test counts (by class) + +| Test class | Tests | +|---|---| +| HarnessSanityTest | 1 | +| FakePreferencesTest | 7 | +| PlayerStatsTest | 14 | +| PlayerAbilitiesTest | 8 | +| GameStateTest | 6 | +| TalentTreeTest | 12 | +| TalentDataTest | 6 | +| GameContextTest | 4 | +| **Total** | **58** | + +### Invariants verified at completion + +- `grep "getInstance(" core/src/main/java/ru/project/tower -r` → 0 matches. +- `grep "private static \w+ instance;" core/src/main/java/ru/project/tower -r` → 0 matches. +- `./gradlew core:test` → 58 passed, 0 failed. +- `./gradlew :core:build :lwjgl3:build` → BUILD SUCCESSFUL. + +## Manual smoke test — ⏳ pending + +Run `lwjgl3/src/main/java/ru/project/tower/lwjgl3/Lwjgl3Launcher` and verify: + +- [ ] Main menu renders with persisted currency + max-wave. +- [ ] Talent Tree: purchased levels display, new purchase deducts currency, back returns to menu. +- [ ] Ability Shop: owned abilities display correctly, new purchase (e.g., Shield) persists after a restart. +- [ ] Ability Selection → Start Game → wave 1 plays, firing kills enemies, death returns to menu, currency reflects loot. +- [ ] Mid-run shop flow: save/restore works (upgrade survives shop round-trip). +- [ ] Close and relaunch: all persisted state (currency, max wave, unlocked abilities, talent levels) survives. + +If any check fails, report back — most likely a missed call-site or a `ctx` threading bug; fix scope is minutes, not hours. + +## Carry-over items (non-blocking) + +These were flagged by reviewers during K.1 execution but are either pre-existing (not regressions introduced by K.1) or are tiny cleanups better folded into the next spec. They do not block K.2. + +### Pre-existing design issues surfaced by the new test harness + +- **`PlayerStats.getRegenTalentLevel()` sums only `regen_1`.** Other aggregate getters sum two nodes. If a `regen_2` node is added later, this getter silently reports the wrong value. Add a `regen_2` node or a comment explaining the omission. (Flagged in Task 3 review.) +- **`PlayerStats.incrementTalentNode(String)` accepts any string, including typos.** Phantom nodes are created in the in-memory `talentLevels` map but not persisted (saveData iterates `TALENT_NODE_IDS`). Consider a validation guard. (Flagged in Task 3 review.) +- **`PlayerStats.resetData()` Javadoc says "для тестирования"** but the test suite doesn't call it — callers live elsewhere. Clarify the comment or remove the method. (Task 3 review.) +- **`PlayerAbilities.resetData()` clears everything, including `freeze` and `explosion` which default to `true` on construction.** Intentional per the existing code, but the name implies "factory defaults" which it isn't. Rename or add a comment. (Task 4 review.) +- **`GameState.resetGameState()` doesn't reset `spawnedBosses` or the gameplay stat fields** (money, squareHealth, bulletSpeed, etc.). If this method is the "start new run" boundary, that's a latent bug. (Task 5 review.) +- **`FirstScreen.java` field declarations near lines 429–435 are non-final** while the `ctx` field is `final`. Consistency drift inside one file. (Final review.) +- **`Main.ctx` is `public` non-final.** Safe given libGDX `Game.create()` semantics, but `public final` would document intent. (Final review.) + +### Test-coverage gaps (not bugs) + +- `TalentTreeTest.getStatBonus_*` exercises only the `damage_1` multiplier. A second multiplier (cooldown_1, health_1, etc.) would lock more of the formula. (Task 6 review.) +- `TalentDataTest.enum_whenKeystone_thenEnumMatches` is a tautology (`KEYSTONE != DAMAGE`). Safe to delete. (Final review.) +- `PlayerAbilitiesTest.purchaseAbility_whenUnknownType_thenNoChange` doesn't assert that the unknown key wasn't written to Preferences. (Task 4 review.) +- `PlayerAbilitiesTest.construct_whenPreferencesPrePopulated_thenHonoursStored` seeds only `freeze` and `shield` — doesn't verify that absent `explosion` key falls through to the `true` default. (Task 4 review.) + +### FakePreferences polish + +- `FakePreferences.put(Map)` bulk-put isn't guarded — values inserted through this path could be types no getter recognises (e.g., `Double`, `Short`). No test exercises this. (Task 2 review.) +- `FakePreferences.getFloat`/`getLong` and the no-default single-arg getters have no tests. (Task 2 review.) + +## What's next + +K.1 is the foundation. The remaining specs in the K-series each handle one subsystem extraction out of `FirstScreen`'s god-class. Each follows the same brainstorm → spec → plan → subagent-driven-implementation cycle. + +| Spec | Scope | Dependency | +|---|---|---| +| **K.2** | `BulletSystem` extraction — bullet tick, bullet-vs-circle collision, homing/pierce/aoe/chain resolution | K.1 | +| **K.3** | `SpawnController` extraction — `spawnCircle()` cascade | K.1 | +| **K.4** | `WaveController` extraction — `startNextWave` / `endWave` / scaling | K.1 | +| **K.5** | `EnemyBehaviour` tests — `tick()` for `HealerCircleData`, `DasherCircleData`, `SniperCircleData` (and others) | K.1 + Phase 3 A1/A2/A3 | +| **K.6** | `AbilitySystem` extraction — cooldowns, activations, effects | K.1 | +| **K.7** | `UpgradeSystem` extraction — mid-run upgrade pick, money, apply-effect | K.1 | + +Recommended next step: brainstorm **K.2** (`BulletSystem`) — highest-value extraction because bullet logic is central to the game, has the most flags (`piercesLeft`, `homing`, `aoeRadius`, `chainJumps`), and is the first place Phase 3's `homing` keystone + C2 chain work will land. + +Phase 3 gameplay tasks (A–J from the parent Phase 3 plan) remain untouched and can proceed in parallel with K.2+ when desired. diff --git a/docs/superpowers/plans/2026-04-17-phase3-k1-test-harness.md b/docs/superpowers/plans/2026-04-17-phase3-k1-test-harness.md new file mode 100644 index 0000000..d493b23 --- /dev/null +++ b/docs/superpowers/plans/2026-04-17-phase3-k1-test-harness.md @@ -0,0 +1,1594 @@ +# Phase 3.K.1 — Test harness foundation Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Introduce JUnit 5 + AssertJ test infrastructure, refactor four persistent-state singletons (`PlayerStats`, `PlayerAbilities`, `GameState`, `TalentTree`) to constructor injection via a new `GameContext` holder, and author ~30 unit tests that will serve as the safety net for subsequent K.2–K.7 logic-extraction specs. + +**Architecture:** Each singleton gains a public constructor that accepts its dependencies; the legacy `getInstance()` methods are kept in a transitional state until every call-site is switched, then deleted in one sweep. `Main.create()` becomes the composition root, building a `GameContext` and passing it to every screen constructor. Tests use an in-memory `FakePreferences` that implements `com.badlogic.gdx.Preferences`, so no headless libGDX runtime is required. + +**Tech Stack:** Java 8, libGDX 1.13.1, Gradle, JUnit Jupiter 5.10.2, AssertJ 3.26.3. + +--- + +## Design reference + +The authoritative design is `docs/superpowers/specs/2026-04-17-phase3-k1-test-harness-design.md`. Read it once before beginning. Key constraints: + +- `GameContext` has `public final` fields (Google Java Style §5.3 idiom for immutable data carrier). +- Tests are named `methodName_whenCondition_thenExpected`. +- Bodies use Arrange / Act / Assert separated by blank lines, no `// Arrange` comments. +- No code coverage gate (no JaCoCo), no CI wiring. +- Headless libGDX is explicitly **not** used. + +## Project realities + +- **No git repository.** `Is a git repository: false` in the environment. Every "Commit" step below should be executed as a checkpoint: confirm the change set is clean, then run the verification. If you initialize git before starting, run `git init` once and treat commits as real; otherwise use each commit step as a mental save-point and keep moving. +- **No existing test infrastructure.** Task 1 is the first point at which `./gradlew test` becomes a meaningful command. +- **TDD applies to test-bearing tasks (Tasks 2–8).** Tasks 9–14 are mechanical refactors with no new behaviour — their verification is *compile passes* + *existing tests still pass* + *desktop launcher still runs correctly*. The plan calls this out per-task. +- **Call-site counts (verified via grep, 2026-04-17):** 21 total `getInstance()` calls across 6 files: + - `FirstScreen.java`: 13 (lines 179, 502, 579, 617, 644, 645, 1366, 1474, 1497, 1794, 2634, 5737, 6756) + - `AbilityShopScreen.java`: 2 (lines 69, 70) + - `AbilitySelectionScreen.java`: 2 (lines 171, 340) + - `TalentTreeScreen.java`: 2 (lines 98, 99) + - `TalentTree.java`: 2 (lines 133, 138) — self-references for `PlayerStats` + +Line numbers may drift as prior tasks add imports; use the tagged symbol names rather than hardcoded line numbers when editing. + +## File structure + +**New files (production):** +- `core/src/main/java/ru/project/tower/GameContext.java` — DI holder. + +**New files (test):** +- `core/src/test/java/ru/project/tower/FakePreferences.java` — in-memory `Preferences` implementation. +- `core/src/test/java/ru/project/tower/FakePreferencesTest.java` +- `core/src/test/java/ru/project/tower/PlayerStatsTest.java` +- `core/src/test/java/ru/project/tower/PlayerAbilitiesTest.java` +- `core/src/test/java/ru/project/tower/GameStateTest.java` +- `core/src/test/java/ru/project/tower/TalentTreeTest.java` +- `core/src/test/java/ru/project/tower/TalentDataTest.java` +- `core/src/test/java/ru/project/tower/GameContextTest.java` + +**Modified files:** +- `core/build.gradle` — add `testImplementation` deps and `useJUnitPlatform()`. +- `core/src/main/java/ru/project/tower/PlayerStats.java` — add public ctor; remove `getInstance()` (Task 10). +- `core/src/main/java/ru/project/tower/PlayerAbilities.java` — add public ctor; remove `getInstance()`. +- `core/src/main/java/ru/project/tower/GameState.java` — make ctor public; remove `getInstance()`. +- `core/src/main/java/ru/project/tower/TalentTree.java` — add `TalentTree(PlayerStats)` ctor; remove `getInstance()`; replace 2 internal `PlayerStats.getInstance()` calls with field. +- `core/src/main/java/ru/project/tower/Main.java` — composition root. +- `core/src/main/java/ru/project/tower/MainScreen.java` — take `GameContext` in ctor; pass to downstream screens. +- `core/src/main/java/ru/project/tower/FirstScreen.java` — take `GameContext`; cache services in fields; replace 13 call-sites. +- `core/src/main/java/ru/project/tower/AbilityShopScreen.java` — take `GameContext`; replace 2 call-sites. +- `core/src/main/java/ru/project/tower/AbilitySelectionScreen.java` — take `GameContext`; replace 2 call-sites; update internal `new FirstScreen(...)` and `new MainScreen(...)` construction. +- `core/src/main/java/ru/project/tower/TalentTreeScreen.java` — take `GameContext`; replace 2 call-sites; update internal `new MainScreen(...)`. + +--- + +## Task 1: Build config for test infrastructure + +**Files:** +- Modify: `core/build.gradle` +- Create: `core/src/test/java/ru/project/tower/HarnessSanityTest.java` + +- [ ] **Step 1: Add JUnit 5 + AssertJ dependencies to `core/build.gradle`** + +Replace the current `dependencies` block in `core/build.gradle`: + +```gradle +dependencies { + api "com.badlogicgames.gdx:gdx-freetype:$gdxVersion" + api "com.badlogicgames.gdx:gdx:$gdxVersion" + + testImplementation 'org.junit.jupiter:junit-jupiter:5.10.2' + testImplementation 'org.assertj:assertj-core:3.26.3' + + if(enableGraalNative == 'true') { + implementation "io.github.berstanio:gdx-svmhelper-annotations:$graalHelperVersion" + } +} + +test { + useJUnitPlatform() +} +``` + +- [ ] **Step 2: Create the test source tree and a sanity test** + +Create `core/src/test/java/ru/project/tower/HarnessSanityTest.java` (verifies JUnit + AssertJ actually wire up): + +```java +package ru.project.tower; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class HarnessSanityTest { + + @Test + void assertj_whenUsed_thenWorks() { + assertThat(1 + 1).isEqualTo(2); + } +} +``` + +- [ ] **Step 3: Run the test** + +Run: `./gradlew core:test --info` + +Expected: `BUILD SUCCESSFUL`, `HarnessSanityTest > assertj_whenUsed_thenWorks() PASSED`. + +If you get `Could not resolve org.junit.jupiter:junit-jupiter:5.10.2` — check the subprojects repositories in the root `build.gradle` include `mavenCentral()` (they already do as of 2026-04-17). + +- [ ] **Step 4: Commit** + +```bash +git add core/build.gradle core/src/test/java/ru/project/tower/HarnessSanityTest.java +git commit -m "feat(test): add JUnit 5 + AssertJ test harness to core module" +``` + +--- + +## Task 2: `FakePreferences` helper + +**Files:** +- Create: `core/src/test/java/ru/project/tower/FakePreferences.java` +- Create: `core/src/test/java/ru/project/tower/FakePreferencesTest.java` + +- [ ] **Step 1: Write the failing test** + +Create `core/src/test/java/ru/project/tower/FakePreferencesTest.java`: + +```java +package ru.project.tower; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class FakePreferencesTest { + + @Test + void putInteger_whenRead_thenReturnsSameValue() { + FakePreferences prefs = new FakePreferences(); + + prefs.putInteger("k", 42); + + assertThat(prefs.getInteger("k", -1)).isEqualTo(42); + } + + @Test + void getInteger_whenMissing_thenReturnsDefault() { + FakePreferences prefs = new FakePreferences(); + + assertThat(prefs.getInteger("missing", 7)).isEqualTo(7); + } + + @Test + void putBoolean_whenRead_thenReturnsSameValue() { + FakePreferences prefs = new FakePreferences(); + + prefs.putBoolean("flag", true); + + assertThat(prefs.getBoolean("flag", false)).isTrue(); + } + + @Test + void putString_whenRead_thenReturnsSameValue() { + FakePreferences prefs = new FakePreferences(); + + prefs.putString("name", "neo"); + + assertThat(prefs.getString("name", "")).isEqualTo("neo"); + } + + @Test + void contains_whenKeyPresent_thenTrue() { + FakePreferences prefs = new FakePreferences(); + + prefs.putInteger("k", 1); + + assertThat(prefs.contains("k")).isTrue(); + assertThat(prefs.contains("other")).isFalse(); + } + + @Test + void clear_whenInvoked_thenEmptiesStore() { + FakePreferences prefs = new FakePreferences(); + prefs.putInteger("k", 1); + + prefs.clear(); + + assertThat(prefs.contains("k")).isFalse(); + } + + @Test + void remove_whenKeyExists_thenRemovesOnlyThatKey() { + FakePreferences prefs = new FakePreferences(); + prefs.putInteger("a", 1); + prefs.putInteger("b", 2); + + prefs.remove("a"); + + assertThat(prefs.contains("a")).isFalse(); + assertThat(prefs.getInteger("b", -1)).isEqualTo(2); + } +} +``` + +- [ ] **Step 2: Run test to verify it fails** + +Run: `./gradlew core:test --tests FakePreferencesTest` +Expected: `FAIL` with "cannot find symbol: class FakePreferences". + +- [ ] **Step 3: Implement `FakePreferences`** + +Create `core/src/test/java/ru/project/tower/FakePreferences.java`. This is a full implementation of `com.badlogic.gdx.Preferences`. Every method delegates to a `HashMap`. `flush()` is a no-op. + +```java +package ru.project.tower; + +import com.badlogic.gdx.Preferences; + +import java.util.HashMap; +import java.util.Map; + +/** + * In-memory test double for {@link Preferences}. No disk I/O, no libGDX + * runtime required. {@link #flush()} is a no-op. + */ +public class FakePreferences implements Preferences { + + private final Map store = new HashMap<>(); + + @Override public Preferences putBoolean(String key, boolean val) { store.put(key, val); return this; } + @Override public Preferences putInteger(String key, int val) { store.put(key, val); return this; } + @Override public Preferences putLong(String key, long val) { store.put(key, val); return this; } + @Override public Preferences putFloat(String key, float val) { store.put(key, val); return this; } + @Override public Preferences putString(String key, String val) { store.put(key, val); return this; } + + @Override + public Preferences put(Map vals) { + store.putAll(vals); + return this; + } + + @Override public boolean getBoolean(String key) { return getBoolean(key, false); } + @Override public int getInteger(String key) { return getInteger(key, 0); } + @Override public long getLong(String key) { return getLong(key, 0L); } + @Override public float getFloat(String key) { return getFloat(key, 0f); } + @Override public String getString(String key) { return getString(key, ""); } + + @Override + public boolean getBoolean(String key, boolean defValue) { + Object v = store.get(key); + return v instanceof Boolean ? (Boolean) v : defValue; + } + + @Override + public int getInteger(String key, int defValue) { + Object v = store.get(key); + return v instanceof Integer ? (Integer) v : defValue; + } + + @Override + public long getLong(String key, long defValue) { + Object v = store.get(key); + return v instanceof Long ? (Long) v : defValue; + } + + @Override + public float getFloat(String key, float defValue) { + Object v = store.get(key); + return v instanceof Float ? (Float) v : defValue; + } + + @Override + public String getString(String key, String defValue) { + Object v = store.get(key); + return v instanceof String ? (String) v : defValue; + } + + @Override + public Map get() { + return new HashMap<>(store); + } + + @Override public boolean contains(String key) { return store.containsKey(key); } + @Override public void clear() { store.clear(); } + @Override public void remove(String key) { store.remove(key); } + @Override public void flush() { /* no-op */ } +} +``` + +- [ ] **Step 4: Run tests to verify they pass** + +Run: `./gradlew core:test --tests FakePreferencesTest` +Expected: all 7 tests pass. + +- [ ] **Step 5: Commit** + +```bash +git add core/src/test/java/ru/project/tower/FakePreferences.java \ + core/src/test/java/ru/project/tower/FakePreferencesTest.java +git commit -m "test: add FakePreferences in-memory double" +``` + +--- + +## Task 3: `PlayerStats` — DI refactor + tests + +**Files:** +- Modify: `core/src/main/java/ru/project/tower/PlayerStats.java` +- Create: `core/src/test/java/ru/project/tower/PlayerStatsTest.java` + +- [ ] **Step 1: Write the failing tests** + +Create `core/src/test/java/ru/project/tower/PlayerStatsTest.java`: + +```java +package ru.project.tower; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class PlayerStatsTest { + + private FakePreferences prefs; + private PlayerStats stats; + + @BeforeEach + void setUp() { + prefs = new FakePreferences(); + stats = new PlayerStats(prefs); + } + + @Test + void getCurrency_whenNotYetSet_thenReturnsZero() { + assertThat(stats.getCurrency()).isZero(); + } + + @Test + void addCurrency_whenPositiveAmount_thenIncrementsAndPersists() { + stats.addCurrency(50); + + assertThat(stats.getCurrency()).isEqualTo(50); + assertThat(prefs.getInteger("player_currency", -1)).isEqualTo(50); + } + + @Test + void addCurrency_whenNonPositive_thenNoChange() { + stats.addCurrency(0); + stats.addCurrency(-10); + + assertThat(stats.getCurrency()).isZero(); + } + + @Test + void spendCurrency_whenInsufficient_thenReturnsFalseAndLeavesBalance() { + stats.addCurrency(10); + + boolean result = stats.spendCurrency(25); + + assertThat(result).isFalse(); + assertThat(stats.getCurrency()).isEqualTo(10); + } + + @Test + void spendCurrency_whenSufficient_thenReturnsTrueAndDeducts() { + stats.addCurrency(100); + + boolean result = stats.spendCurrency(30); + + assertThat(result).isTrue(); + assertThat(stats.getCurrency()).isEqualTo(70); + assertThat(prefs.getInteger("player_currency", -1)).isEqualTo(70); + } + + @Test + void spendCurrency_whenZeroOrNegative_thenReturnsTrueWithoutDeducting() { + stats.addCurrency(10); + + assertThat(stats.spendCurrency(0)).isTrue(); + assertThat(stats.spendCurrency(-5)).isTrue(); + assertThat(stats.getCurrency()).isEqualTo(10); + } + + @Test + void updateMaxWave_whenHigher_thenUpdatesAndPersists() { + stats.updateMaxWave(5); + stats.updateMaxWave(12); + + assertThat(stats.getMaxWaveReached()).isEqualTo(12); + assertThat(prefs.getInteger("max_wave_reached", -1)).isEqualTo(12); + } + + @Test + void updateMaxWave_whenLowerOrEqual_thenIgnored() { + stats.updateMaxWave(10); + + stats.updateMaxWave(10); + stats.updateMaxWave(3); + + assertThat(stats.getMaxWaveReached()).isEqualTo(10); + } + + @Test + void getTalentNodeLevel_whenUnseen_thenZero() { + assertThat(stats.getTalentNodeLevel("damage_1")).isZero(); + } + + @Test + void incrementTalentNode_whenCalled_thenLevelOneAndPersisted() { + stats.incrementTalentNode("damage_1"); + + assertThat(stats.getTalentNodeLevel("damage_1")).isEqualTo(1); + assertThat(prefs.getInteger("talent_node_damage_1", -1)).isEqualTo(1); + } + + @Test + void incrementTalentNode_whenCalledTwice_thenLevelTwo() { + stats.incrementTalentNode("damage_1"); + stats.incrementTalentNode("damage_1"); + + assertThat(stats.getTalentNodeLevel("damage_1")).isEqualTo(2); + } + + @Test + void legacyAggregateGetter_whenMultipleTiers_thenReturnsSumAcrossNodes() { + stats.incrementTalentNode("damage_1"); + stats.incrementTalentNode("damage_1"); + stats.incrementTalentNode("damage_2"); + + assertThat(stats.getDamageTalentLevel()).isEqualTo(3); + } + + @Test + void construct_whenPreferencesPrePopulated_thenRoundTripsValues() { + FakePreferences seeded = new FakePreferences(); + seeded.putInteger("player_currency", 250); + seeded.putInteger("max_wave_reached", 17); + seeded.putInteger("talent_node_keystone_pierce", 1); + + PlayerStats fresh = new PlayerStats(seeded); + + assertThat(fresh.getCurrency()).isEqualTo(250); + assertThat(fresh.getMaxWaveReached()).isEqualTo(17); + assertThat(fresh.getTalentNodeLevel("keystone_pierce")).isEqualTo(1); + } + + @Test + void construct_whenLegacyDamageKeyPresent_thenSeedsDamage1() { + FakePreferences seeded = new FakePreferences(); + seeded.putInteger("talent_damage_level", 3); + + PlayerStats fresh = new PlayerStats(seeded); + + assertThat(fresh.getTalentNodeLevel("damage_1")).isEqualTo(3); + } +} +``` + +- [ ] **Step 2: Run tests to verify they fail** + +Run: `./gradlew core:test --tests PlayerStatsTest` +Expected: `FAIL` with "constructor PlayerStats(FakePreferences) not found" (ctor is currently private & argumentless). + +- [ ] **Step 3: Refactor `PlayerStats`** + +Modify `core/src/main/java/ru/project/tower/PlayerStats.java`. The change has three parts: add a public ctor that accepts `Preferences`, remove the old private ctor (its body moves into the public one), and rewrite `getInstance()` to delegate via the new ctor. `getInstance()` stays alive until Task 10 deletes it after all call-sites are switched. + +Replace the existing ctor block and `getInstance()` (lines 37–75 in the current file) with: + +```java + /** + * DI-friendly constructor. Used by {@link GameContext} and tests. + */ + public PlayerStats(Preferences preferences) { + this.preferences = preferences; + + currency = preferences.getInteger(CURRENCY_KEY, 0); + maxWaveReached = preferences.getInteger(MAX_WAVE_KEY, 0); + + for (String id : TALENT_NODE_IDS) { + talentLevels.put(id, preferences.getInteger(TALENT_NODE_KEY_PREFIX + id, 0)); + } + seedLegacyLevel("damage_1", DAMAGE_TALENT_KEY); + seedLegacyLevel("health_1", HEALTH_TALENT_KEY); + seedLegacyLevel("speed_1", SPEED_TALENT_KEY); + seedLegacyLevel("cooldown_1", COOLDOWN_TALENT_KEY); + seedLegacyLevel("regen_1", REGEN_TALENT_KEY); + } + + /** + * Legacy singleton accessor. Delete in Task 10 once call-sites use GameContext. + */ + public static PlayerStats getInstance() { + if (instance == null) { + instance = new PlayerStats(Gdx.app.getPreferences(PREFS_NAME)); + } + return instance; + } +``` + +The old `private PlayerStats()` constructor is gone — its body moved verbatim into the public one, minus the first line which was `preferences = Gdx.app.getPreferences(PREFS_NAME);`. The `preferences` field stays, `PREFS_NAME` stays (still used by `getInstance()`). + +Leave `instance`, `loadData`-adjacent behaviour, `saveData`, `resetData`, and all public accessors unchanged. + +- [ ] **Step 4: Run tests to verify they pass** + +Run: `./gradlew core:test --tests PlayerStatsTest` +Expected: all 13 tests pass. + +Also run the full suite: `./gradlew core:test` +Expected: `FakePreferencesTest` + `HarnessSanityTest` + `PlayerStatsTest` all pass. + +- [ ] **Step 5: Verify production code still compiles** + +Run: `./gradlew core:compileJava` +Expected: `BUILD SUCCESSFUL` (existing `PlayerStats.getInstance()` callers in `AbilityShopScreen`, `FirstScreen`, `TalentTree`, `TalentTreeScreen` are untouched and still compile). + +- [ ] **Step 6: Commit** + +```bash +git add core/src/main/java/ru/project/tower/PlayerStats.java \ + core/src/test/java/ru/project/tower/PlayerStatsTest.java +git commit -m "refactor(PlayerStats): expose public ctor + add unit tests" +``` + +--- + +## Task 4: `PlayerAbilities` — DI refactor + tests + +**Files:** +- Modify: `core/src/main/java/ru/project/tower/PlayerAbilities.java` +- Create: `core/src/test/java/ru/project/tower/PlayerAbilitiesTest.java` + +- [ ] **Step 1: Write the failing tests** + +Create `core/src/test/java/ru/project/tower/PlayerAbilitiesTest.java`: + +```java +package ru.project.tower; + +import com.badlogic.gdx.utils.Array; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class PlayerAbilitiesTest { + + private FakePreferences prefs; + private PlayerAbilities abilities; + + @BeforeEach + void setUp() { + prefs = new FakePreferences(); + abilities = new PlayerAbilities(prefs); + } + + @Test + void defaults_whenFreshPreferences_thenFreezeAndExplosionUnlocked() { + // Defaults in current code: freeze=true, explosion=true, others=false. + assertThat(abilities.hasAbility("freeze")).isTrue(); + assertThat(abilities.hasAbility("explosion")).isTrue(); + assertThat(abilities.hasAbility("shield")).isFalse(); + assertThat(abilities.hasAbility("impulse")).isFalse(); + assertThat(abilities.hasAbility("dash")).isFalse(); + assertThat(abilities.hasAbility("pull")).isFalse(); + assertThat(abilities.hasAbility("turret")).isFalse(); + } + + @Test + void purchaseAbility_whenShield_thenUnlocksAndPersists() { + abilities.purchaseAbility("shield"); + + assertThat(abilities.hasAbility("shield")).isTrue(); + assertThat(prefs.getBoolean("has_shield_ability", false)).isTrue(); + } + + @Test + void purchaseAbility_whenUnknownType_thenNoChange() { + abilities.purchaseAbility("rocket_launcher"); + + // No crash, no state change to known abilities. + assertThat(abilities.hasAbility("shield")).isFalse(); + } + + @Test + void hasAbility_whenUnknownType_thenFalse() { + assertThat(abilities.hasAbility("rocket_launcher")).isFalse(); + } + + @Test + void getPurchasedAbilities_whenDefaults_thenContainsFreezeAndExplosion() { + Array list = abilities.getPurchasedAbilities(); + + assertThat(list).containsExactly("freeze", "explosion"); + } + + @Test + void getPurchasedAbilities_afterShieldPurchase_thenIncludesShield() { + abilities.purchaseAbility("shield"); + + Array list = abilities.getPurchasedAbilities(); + + assertThat(list).contains("shield"); + } + + @Test + void construct_whenPreferencesPrePopulated_thenHonoursStored() { + FakePreferences seeded = new FakePreferences(); + seeded.putBoolean("has_freeze_ability", false); + seeded.putBoolean("has_shield_ability", true); + + PlayerAbilities fresh = new PlayerAbilities(seeded); + + assertThat(fresh.hasAbility("freeze")).isFalse(); + assertThat(fresh.hasAbility("shield")).isTrue(); + } + + @Test + void resetData_whenInvoked_thenAllFalseAndPersisted() { + abilities.purchaseAbility("shield"); + + abilities.resetData(); + + assertThat(abilities.hasAbility("freeze")).isFalse(); + assertThat(abilities.hasAbility("explosion")).isFalse(); + assertThat(abilities.hasAbility("shield")).isFalse(); + assertThat(prefs.getBoolean("has_shield_ability", true)).isFalse(); + } +} +``` + +Note on `containsExactly`: AssertJ's support for libGDX `Array` works because AssertJ accepts any `Iterable`; `com.badlogic.gdx.utils.Array` implements `Iterable` since libGDX 1.x. + +- [ ] **Step 2: Run tests to verify they fail** + +Run: `./gradlew core:test --tests PlayerAbilitiesTest` +Expected: `FAIL` with "constructor PlayerAbilities(FakePreferences) not found". + +- [ ] **Step 3: Refactor `PlayerAbilities`** + +Modify `core/src/main/java/ru/project/tower/PlayerAbilities.java`. Same shape as `PlayerStats`: add public ctor, delegate the legacy private ctor. + +Replace the existing ctor block and `getInstance()` (lines 33–77 in the current file) with: + +```java + /** + * DI-friendly constructor. Used by {@link GameContext} and tests. + */ + public PlayerAbilities(Preferences preferences) { + try { + DebugLog.log("PlayerAbilities", "Initializing PlayerAbilities"); + this.preferences = preferences; + DebugLog.log("PlayerAbilities", "Got preferences"); + + hasFreezeAbility = preferences.getBoolean(FREEZE_ABILITY_KEY, true); + hasExplosionAbility = preferences.getBoolean(EXPLOSION_ABILITY_KEY, true); + hasShieldAbility = preferences.getBoolean(SHIELD_ABILITY_KEY, false); + hasImpulseAbility = preferences.getBoolean(IMPULSE_ABILITY_KEY, false); + hasDashAbility = preferences.getBoolean(DASH_ABILITY_KEY, false); + hasPullAbility = preferences.getBoolean(PULL_ABILITY_KEY, false); + hasTurretAbility = preferences.getBoolean(TURRET_ABILITY_KEY, false); + + DebugLog.log("PlayerAbilities", String.format( + "Loaded abilities - Freeze: %b, Explosion: %b, Shield: %b, Impulse: %b, Dash: %b, Pull: %b, Turret: %b", + hasFreezeAbility, hasExplosionAbility, hasShieldAbility, hasImpulseAbility, + hasDashAbility, hasPullAbility, hasTurretAbility + )); + } catch (Exception e) { + Gdx.app.error("PlayerAbilities", "Error in constructor: ", e); + throw e; + } + } + + /** + * Legacy singleton accessor. Delete in Task 10 once call-sites use GameContext. + */ + public static PlayerAbilities getInstance() { + try { + if (instance == null) { + DebugLog.log("PlayerAbilities", "Creating new instance"); + instance = new PlayerAbilities(Gdx.app.getPreferences(PREFS_NAME)); + DebugLog.log("PlayerAbilities", "Instance created"); + } + return instance; + } catch (Exception e) { + Gdx.app.error("PlayerAbilities", "Error in getInstance: ", e); + throw e; + } + } +``` + +Constants `PREFS_NAME`, `FREEZE_ABILITY_KEY`, etc. remain as-is. The `private PlayerAbilities()` ctor is replaced. + +- [ ] **Step 4: Run tests to verify they pass** + +Run: `./gradlew core:test --tests PlayerAbilitiesTest` +Expected: all 8 tests pass. + +- [ ] **Step 5: Compile check** + +Run: `./gradlew core:compileJava` +Expected: `BUILD SUCCESSFUL`. + +- [ ] **Step 6: Commit** + +```bash +git add core/src/main/java/ru/project/tower/PlayerAbilities.java \ + core/src/test/java/ru/project/tower/PlayerAbilitiesTest.java +git commit -m "refactor(PlayerAbilities): expose public ctor + add unit tests" +``` + +--- + +## Task 5: `GameState` — DI refactor + tests + +**Files:** +- Modify: `core/src/main/java/ru/project/tower/GameState.java` +- Create: `core/src/test/java/ru/project/tower/GameStateTest.java` + +`GameState` has no `Preferences`; the refactor simply makes the private ctor public. Tests avoid methods that take a `FirstScreen` argument (those are coupled to libGDX; they stay covered by the manual smoke test in Task 11). + +- [ ] **Step 1: Write the failing tests** + +Create `core/src/test/java/ru/project/tower/GameStateTest.java`: + +```java +package ru.project.tower; + +import com.badlogic.gdx.utils.Array; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class GameStateTest { + + private GameState state; + + @BeforeEach + void setUp() { + state = new GameState(); + } + + @Test + void freshState_whenCreated_thenNotReturnedFromShop() { + assertThat(state.isReturnedFromShop()).isFalse(); + } + + @Test + void freshState_whenCreated_thenSelectedAbilitiesEmpty() { + assertThat(state.getSelectedAbilities().size).isZero(); + } + + @Test + void freshState_whenCreated_thenSpawnedBossesEmpty() { + assertThat(state.getSpawnedBosses().size).isZero(); + } + + @Test + void setSelectedAbilities_whenCalled_thenReplacesPreviousList() { + Array first = new Array<>(); + first.add("freeze"); + state.setSelectedAbilities(first); + + Array second = new Array<>(); + second.add("dash"); + second.add("pull"); + state.setSelectedAbilities(second); + + Array stored = state.getSelectedAbilities(); + assertThat(stored.size).isEqualTo(2); + assertThat(stored).contains("dash", "pull"); + } + + @Test + void resetGameState_whenInvoked_thenClearsReturnFlagAndAbilities() { + Array initial = new Array<>(); + initial.add("freeze"); + state.setSelectedAbilities(initial); + // No public setter for returnedFromShop; the flag flips to true in + // saveGameState(FirstScreen), which we cannot call without the screen. + // We therefore verify the reset clears the abilities list. + + state.resetGameState(); + + assertThat(state.getSelectedAbilities().size).isZero(); + assertThat(state.isReturnedFromShop()).isFalse(); + } + + @Test + void setSpawnedBosses_whenCalled_thenGetSpawnedBossesReturnsSame() { + Array bosses = new Array<>(); + bosses.add("juggernaut"); + + state.setSpawnedBosses(bosses); + + assertThat(state.getSpawnedBosses()).isSameAs(bosses); + } +} +``` + +- [ ] **Step 2: Run tests to verify they fail** + +Run: `./gradlew core:test --tests GameStateTest` +Expected: `FAIL` with "GameState() has private access". + +- [ ] **Step 3: Refactor `GameState`** + +In `core/src/main/java/ru/project/tower/GameState.java`, change line 45 (`private GameState() { }`) to: + +```java + public GameState() { + } +``` + +That is literally the entire production change for this task. Leave `instance`, `getInstance()`, and every other method untouched. + +- [ ] **Step 4: Run tests to verify they pass** + +Run: `./gradlew core:test --tests GameStateTest` +Expected: all 6 tests pass. + +- [ ] **Step 5: Compile check** + +Run: `./gradlew core:compileJava` +Expected: `BUILD SUCCESSFUL`. + +- [ ] **Step 6: Commit** + +```bash +git add core/src/main/java/ru/project/tower/GameState.java \ + core/src/test/java/ru/project/tower/GameStateTest.java +git commit -m "refactor(GameState): expose public ctor + add unit tests" +``` + +--- + +## Task 6: `TalentTree` — DI refactor + tests + +**Files:** +- Modify: `core/src/main/java/ru/project/tower/TalentTree.java` +- Create: `core/src/test/java/ru/project/tower/TalentTreeTest.java` + +`TalentTree` must hold a `PlayerStats` reference. After this task, the class has both its legacy zero-arg ctor (delegating via `PlayerStats.getInstance()`) and the new DI ctor. + +- [ ] **Step 1: Write the failing tests** + +Create `core/src/test/java/ru/project/tower/TalentTreeTest.java`: + +```java +package ru.project.tower; + +import com.badlogic.gdx.utils.Array; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class TalentTreeTest { + + private FakePreferences prefs; + private PlayerStats stats; + private TalentTree tree; + + @BeforeEach + void setUp() { + prefs = new FakePreferences(); + stats = new PlayerStats(prefs); + tree = new TalentTree(stats); + } + + @Test + void getTalent_whenHealth1_thenReturnsRootNode() { + TalentData root = tree.getTalent("health_1"); + + assertThat(root).isNotNull(); + assertThat(root.getType()).isEqualTo(TalentData.TalentType.HEALTH); + assertThat(root.getDependencyIds().size).isZero(); + } + + @Test + void getAllTalents_thenContainsAllExpectedIds() { + Array all = tree.getAllTalents(); + + assertThat(all.size).isEqualTo(12); + } + + @Test + void isUnlocked_whenRoot_thenTrue() { + assertThat(tree.isUnlocked("health_1")).isTrue(); + } + + @Test + void isUnlocked_whenDependencyNotMet_thenFalse() { + assertThat(tree.isUnlocked("damage_1")).isFalse(); + } + + @Test + void isUnlocked_whenDependencyHasLevel_thenTrue() { + stats.incrementTalentNode("health_1"); + + assertThat(tree.isUnlocked("damage_1")).isTrue(); + } + + @Test + void getCurrentLevel_whenDelegatedToStats_thenMatches() { + stats.incrementTalentNode("damage_1"); + stats.incrementTalentNode("damage_1"); + + assertThat(tree.getCurrentLevel("damage_1")).isEqualTo(2); + } + + @Test + void getCurrentLevel_whenUnknownTalent_thenZero() { + assertThat(tree.getCurrentLevel("nonexistent")).isZero(); + } + + @Test + void upgradeTalent_whenCalled_thenStatsLevelIncrements() { + tree.upgradeTalent("damage_1"); + + assertThat(stats.getTalentNodeLevel("damage_1")).isEqualTo(1); + } + + @Test + void upgradeTalent_whenUnknownId_thenNoCrash() { + tree.upgradeTalent("nonexistent"); + // No assertion needed; the test passes if no exception was thrown. + } + + @Test + void keystoneNodes_thenAllRegistered() { + assertThat(tree.getTalent("keystone_pierce")).isNotNull(); + assertThat(tree.getTalent("keystone_crit")).isNotNull(); + assertThat(tree.getTalent("keystone_aoe")).isNotNull(); + } + + @Test + void getStatBonus_whenDamage1HasLevel_thenBonusOnePerLevel() { + stats.incrementTalentNode("damage_1"); + stats.incrementTalentNode("damage_1"); + + float bonus = tree.getStatBonus(TalentData.TalentType.DAMAGE); + + assertThat(bonus).isEqualTo(2f); + } + + @Test + void getStatBonus_whenNoLevels_thenZero() { + assertThat(tree.getStatBonus(TalentData.TalentType.DAMAGE)).isZero(); + } +} +``` + +- [ ] **Step 2: Run tests to verify they fail** + +Run: `./gradlew core:test --tests TalentTreeTest` +Expected: `FAIL` with "constructor TalentTree(PlayerStats) not found". + +- [ ] **Step 3: Refactor `TalentTree`** + +In `core/src/main/java/ru/project/tower/TalentTree.java`: + +1. Add a `private final PlayerStats stats;` field. +2. Replace the single constructor (lines 14–18) and `getInstance()` (lines 20–25): + +```java + private final PlayerStats stats; + + /** + * DI-friendly constructor. Used by {@link GameContext} and tests. + */ + public TalentTree(PlayerStats stats) { + this.stats = stats; + this.talents = new ObjectMap<>(); + this.roots = new Array<>(); + initializeTree(); + } + + /** + * Legacy singleton accessor. Delete in Task 10 once call-sites use GameContext. + */ + public static TalentTree getInstance() { + if (instance == null) { + instance = new TalentTree(PlayerStats.getInstance()); + } + return instance; + } +``` + +3. Replace line 133 (`return PlayerStats.getInstance().getTalentNodeLevel(talentId);`) with: + +```java + return stats.getTalentNodeLevel(talentId); +``` + +4. Replace line 138 (`PlayerStats.getInstance().incrementTalentNode(talentId);`) with: + +```java + stats.incrementTalentNode(talentId); +``` + +Leave the rest of the file (tree initialization, `getStatBonus`, etc.) unchanged. + +- [ ] **Step 4: Run tests to verify they pass** + +Run: `./gradlew core:test --tests TalentTreeTest` +Expected: all 12 tests pass. + +- [ ] **Step 5: Compile check** + +Run: `./gradlew core:compileJava` +Expected: `BUILD SUCCESSFUL`. + +- [ ] **Step 6: Commit** + +```bash +git add core/src/main/java/ru/project/tower/TalentTree.java \ + core/src/test/java/ru/project/tower/TalentTreeTest.java +git commit -m "refactor(TalentTree): inject PlayerStats via ctor + add unit tests" +``` + +--- + +## Task 7: `TalentData` — tests only + +**Files:** +- Create: `core/src/test/java/ru/project/tower/TalentDataTest.java` + +No refactor needed; `TalentData` is a plain data class. + +- [ ] **Step 1: Write the tests** + +Create `core/src/test/java/ru/project/tower/TalentDataTest.java`: + +```java +package ru.project.tower; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class TalentDataTest { + + @Test + void getters_whenConstructed_thenReturnProvidedValues() { + TalentData data = new TalentData( + "id_x", "Name", "Desc", TalentData.TalentType.DAMAGE, + 10f, 20f, 5, 100, 1.5f); + + assertThat(data.getId()).isEqualTo("id_x"); + assertThat(data.getName()).isEqualTo("Name"); + assertThat(data.getDescription()).isEqualTo("Desc"); + assertThat(data.getType()).isEqualTo(TalentData.TalentType.DAMAGE); + assertThat(data.getPosition().x).isEqualTo(10f); + assertThat(data.getPosition().y).isEqualTo(20f); + assertThat(data.getMaxLevel()).isEqualTo(5); + } + + @Test + void addDependency_whenCalled_thenPresentInDependencyIds() { + TalentData data = new TalentData( + "child", "", "", TalentData.TalentType.HEALTH, 0, 0, 1, 10, 1f); + + data.addDependency("parent"); + + assertThat(data.getDependencyIds()).containsExactly("parent"); + } + + @Test + void getCost_whenLevelZero_thenBaseCost() { + TalentData data = new TalentData( + "id_x", "", "", TalentData.TalentType.DAMAGE, + 0, 0, 5, 100, 1.5f); + + assertThat(data.getCost(0)).isEqualTo(100); + } + + @Test + void getCost_whenLevelOne_thenBaseCostTimesMultiplier() { + TalentData data = new TalentData( + "id_x", "", "", TalentData.TalentType.DAMAGE, + 0, 0, 5, 100, 1.5f); + + // 100 * 1.5^1 = 150 (int cast) + assertThat(data.getCost(1)).isEqualTo(150); + } + + @Test + void getCost_whenLevelTwo_thenAppliesExponent() { + TalentData data = new TalentData( + "id_x", "", "", TalentData.TalentType.DAMAGE, + 0, 0, 5, 100, 1.5f); + + // 100 * 1.5^2 = 225 (int cast) + assertThat(data.getCost(2)).isEqualTo(225); + } + + @Test + void enum_whenKeystone_thenEnumMatches() { + assertThat(TalentData.TalentType.KEYSTONE).isNotEqualTo(TalentData.TalentType.DAMAGE); + } +} +``` + +- [ ] **Step 2: Run tests to verify they pass** + +Run: `./gradlew core:test --tests TalentDataTest` +Expected: all 6 tests pass (no production change needed). + +- [ ] **Step 3: Commit** + +```bash +git add core/src/test/java/ru/project/tower/TalentDataTest.java +git commit -m "test(TalentData): add unit tests for data accessors and cost formula" +``` + +--- + +## Task 8: `GameContext` + its test + +**Files:** +- Create: `core/src/main/java/ru/project/tower/GameContext.java` +- Create: `core/src/test/java/ru/project/tower/GameContextTest.java` + +- [ ] **Step 1: Write the failing test** + +Create `core/src/test/java/ru/project/tower/GameContextTest.java`: + +```java +package ru.project.tower; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class GameContextTest { + + @Test + void construct_whenGivenTwoPreferences_thenAllServicesNonNull() { + FakePreferences playerData = new FakePreferences(); + FakePreferences abilities = new FakePreferences(); + + GameContext ctx = new GameContext(playerData, abilities); + + assertThat(ctx.playerStats).isNotNull(); + assertThat(ctx.playerAbilities).isNotNull(); + assertThat(ctx.gameState).isNotNull(); + assertThat(ctx.talentTree).isNotNull(); + assertThat(ctx.playerDataPrefs).isSameAs(playerData); + assertThat(ctx.abilitiesPrefs).isSameAs(abilities); + } + + @Test + void construct_whenTalentTreeQueriesPlayerStats_thenReadsInjectedInstance() { + FakePreferences playerData = new FakePreferences(); + FakePreferences abilities = new FakePreferences(); + + GameContext ctx = new GameContext(playerData, abilities); + ctx.playerStats.incrementTalentNode("damage_1"); + + assertThat(ctx.talentTree.getCurrentLevel("damage_1")).isEqualTo(1); + } + + @Test + void construct_whenPlayerDataPrefsSeeded_thenPlayerStatsReflects() { + FakePreferences playerData = new FakePreferences(); + playerData.putInteger("player_currency", 500); + FakePreferences abilities = new FakePreferences(); + + GameContext ctx = new GameContext(playerData, abilities); + + assertThat(ctx.playerStats.getCurrency()).isEqualTo(500); + } + + @Test + void construct_whenAbilitiesPrefsSeeded_thenPlayerAbilitiesReflects() { + FakePreferences playerData = new FakePreferences(); + FakePreferences abilities = new FakePreferences(); + abilities.putBoolean("has_shield_ability", true); + + GameContext ctx = new GameContext(playerData, abilities); + + assertThat(ctx.playerAbilities.hasAbility("shield")).isTrue(); + } +} +``` + +- [ ] **Step 2: Run test to verify it fails** + +Run: `./gradlew core:test --tests GameContextTest` +Expected: `FAIL` with "cannot find symbol: class GameContext". + +- [ ] **Step 3: Create `GameContext`** + +Create `core/src/main/java/ru/project/tower/GameContext.java`: + +```java +package ru.project.tower; + +import com.badlogic.gdx.Preferences; + +/** + * Composition-root holder for shared persistent-state services. + * Construction order is load-bearing: {@link TalentTree} depends on {@link PlayerStats}. + */ +public class GameContext { + + public final Preferences playerDataPrefs; + public final Preferences abilitiesPrefs; + public final PlayerStats playerStats; + public final PlayerAbilities playerAbilities; + public final GameState gameState; + public final TalentTree talentTree; + + public GameContext(Preferences playerDataPrefs, Preferences abilitiesPrefs) { + this.playerDataPrefs = playerDataPrefs; + this.abilitiesPrefs = abilitiesPrefs; + this.playerStats = new PlayerStats(playerDataPrefs); + this.playerAbilities = new PlayerAbilities(abilitiesPrefs); + this.gameState = new GameState(); + this.talentTree = new TalentTree(this.playerStats); + } +} +``` + +- [ ] **Step 4: Run tests to verify they pass** + +Run: `./gradlew core:test --tests GameContextTest` +Expected: all 4 tests pass. + +Run the full suite: `./gradlew core:test` +Expected: all accumulated tests still pass. + +- [ ] **Step 5: Commit** + +```bash +git add core/src/main/java/ru/project/tower/GameContext.java \ + core/src/test/java/ru/project/tower/GameContextTest.java +git commit -m "feat: add GameContext composition-root holder" +``` + +--- + +## Task 9: Thread `GameContext` through `Main` and all five screens (atomic refactor) + +**Files:** +- Modify: `core/src/main/java/ru/project/tower/Main.java` +- Modify: `core/src/main/java/ru/project/tower/MainScreen.java` +- Modify: `core/src/main/java/ru/project/tower/FirstScreen.java` +- Modify: `core/src/main/java/ru/project/tower/AbilityShopScreen.java` +- Modify: `core/src/main/java/ru/project/tower/AbilitySelectionScreen.java` +- Modify: `core/src/main/java/ru/project/tower/TalentTreeScreen.java` + +This is a single atomic refactor: every screen constructor changes signature in one sweep so there is **no intermediate transition state** where some screens use `ctx` and others use `getInstance()`. Without atomicity, `GameState` (which is in-memory only, not `Preferences`-backed) would drift across two live instances during the transition and break the shop save/restore flow. + +The `getInstance()` methods themselves are not removed here — they stay alive but unused until Task 10. That keeps the diff focused on the wiring and lets Task 10 be a pure deletion. + +Mid-task the build will be red because each file edit leaves downstream call-sites broken until the next file is updated. That is expected — the build goes green only after all sub-steps are applied. + +- [ ] **Step 1: `Main.java` — build `GameContext` and pass it to `MainScreen`** + +Replace the entire file with: + +```java +package ru.project.tower; + +import com.badlogic.gdx.Game; +import com.badlogic.gdx.Gdx; + + +public class Main extends Game { + + private static final String PLAYER_DATA_PREFS_NAME = "tower_attack_player_data"; + private static final String ABILITIES_PREFS_NAME = "tower_attack_player_abilities"; + + public GameContext ctx; + + @Override + public void create() { + ctx = new GameContext( + Gdx.app.getPreferences(PLAYER_DATA_PREFS_NAME), + Gdx.app.getPreferences(ABILITIES_PREFS_NAME) + ); + setScreen(new MainScreen(this, ctx)); + } +} +``` + +- [ ] **Step 2: `MainScreen.java` — accept `GameContext`, pass to downstream screens** + +In `core/src/main/java/ru/project/tower/MainScreen.java`: + +1. Add a field near the existing private fields: + +```java + private final GameContext ctx; +``` + +2. Change the ctor signature at line 87 from `public MainScreen(Game game) {` to: + +```java + public MainScreen(Game game, GameContext ctx) { + this.ctx = ctx; +``` + +Leave the rest of the body identical (only the first assignment is added). + +3. Update downstream screen-construction call-sites: + +| Line | Before | After | +|---|---|---| +| 222 | `game.setScreen(new AbilitySelectionScreen(game));` | `game.setScreen(new AbilitySelectionScreen(game, ctx));` | +| 231 | `game.setScreen(new TalentTreeScreen(game));` | `game.setScreen(new TalentTreeScreen(game, ctx));` | +| 251 | `game.setScreen(new AbilityShopScreen(game));` | `game.setScreen(new AbilityShopScreen(game, ctx));` | + +- [ ] **Step 3: `FirstScreen.java` — accept `GameContext`, cache four services, replace 13 call-sites** + +In `core/src/main/java/ru/project/tower/FirstScreen.java`: + +1. Add fields in the field-declarations block (roughly near line 490 where `PlayerStats playerStats` and `PlayerAbilities playerAbilities` are already declared): + +```java + private final GameContext ctx; + private GameState gameState; + private TalentTree talentTree; +``` + +If `playerStats` and `playerAbilities` are already declared with `private` but without `final`, leave them as-is. The existing code later assigns them via `= PlayerStats.getInstance()`; we redirect those assignments below. + +2. Change the ctor signature at line 496 from `public FirstScreen(Game game) {` to: + +```java + public FirstScreen(Game game, GameContext ctx) { + this.ctx = ctx; +``` + +Leave the rest of the ctor body identical except for the field-wiring update in Step 3.4 below. + +3. Replace the 13 `getInstance()` call-sites. Line numbers are from the pre-refactor state; after Steps 1–2 lines drift, so search by symbol. + +| Current line | Before | After | +|---|---|---| +| 179 | `return (long) TalentTree.getInstance().getStatBonus(TalentData.TalentType.COOLDOWN);` | `return (long) talentTree.getStatBonus(TalentData.TalentType.COOLDOWN);` | +| 502 | `GameState gameState = GameState.getInstance();` | `GameState gameState = ctx.gameState;` | +| 579 | `GameState gameState = GameState.getInstance();` | `GameState gameState = ctx.gameState;` | +| 617 | `TalentTree talentTree = TalentTree.getInstance();` | `TalentTree talentTree = ctx.talentTree;` | +| 644 | `playerStats = PlayerStats.getInstance();` | `playerStats = ctx.playerStats;` | +| 645 | `playerAbilities = PlayerAbilities.getInstance();` | `playerAbilities = ctx.playerAbilities;` | +| 1366 | `GameState gameState = GameState.getInstance();` | `GameState gameState = ctx.gameState;` | +| 1474 | `TalentTree talentTree = TalentTree.getInstance();` | `TalentTree talentTree = ctx.talentTree;` | +| 1497 | `GameState.getInstance().resetGameState();` | `ctx.gameState.resetGameState();` | +| 1794 | `TalentTree tt = TalentTree.getInstance();` | `TalentTree tt = ctx.talentTree;` | +| 2634 | `GameState.getInstance().setSpawnedBosses(spawnedBosses);` | `ctx.gameState.setSpawnedBosses(spawnedBosses);` | +| 5737 | `GameState gameState = GameState.getInstance();` | `GameState gameState = ctx.gameState;` | +| 6756 | `int critKeystone = TalentTree.getInstance().getCurrentLevel("keystone_crit");` | `int critKeystone = ctx.talentTree.getCurrentLevel("keystone_crit");` | + +4. **Immediately after line 645 (where `playerAbilities = ctx.playerAbilities;` now lives)**, initialize the new cached fields so later code that references the local `gameState` / `talentTree` can fall back to them when not shadowed: + +```java + gameState = ctx.gameState; + talentTree = ctx.talentTree; +``` + +5. Update the internal screen-construction call in `FirstScreen`: + +| Line | Before | After | +|---|---|---| +| 6066 | `game.setScreen(new MainScreen(game));` | `game.setScreen(new MainScreen(game, ctx));` | + +- [ ] **Step 4: `AbilityShopScreen.java` — accept `GameContext`, replace 2 call-sites** + +In `core/src/main/java/ru/project/tower/AbilityShopScreen.java`: + +1. Add field: `private final GameContext ctx;`. +2. Change ctor signature at line 65 to `public AbilityShopScreen(Game game, GameContext ctx) {` and add `this.ctx = ctx;` as the first line of the body. +3. Replace call-sites: + +| Line | Before | After | +|---|---|---| +| 69 | `this.playerStats = PlayerStats.getInstance();` | `this.playerStats = ctx.playerStats;` | +| 70 | `this.playerAbilities = PlayerAbilities.getInstance();` | `this.playerAbilities = ctx.playerAbilities;` | +| 209 | `game.setScreen(new MainScreen(game));` | `game.setScreen(new MainScreen(game, ctx));` | + +- [ ] **Step 5: `AbilitySelectionScreen.java` — accept `GameContext`, replace 2 call-sites + 2 screen-construction sites** + +In `core/src/main/java/ru/project/tower/AbilitySelectionScreen.java`: + +1. Add field: `private final GameContext ctx;`. +2. Change ctor signature at line 94 to `public AbilitySelectionScreen(Game game, GameContext ctx) {` and add `this.ctx = ctx;` as the first line of the body. +3. Replace call-sites: + +| Line | Before | After | +|---|---|---| +| 171 | `PlayerAbilities playerAbilities = PlayerAbilities.getInstance();` | `PlayerAbilities playerAbilities = ctx.playerAbilities;` | +| 219 | `gameInstance.setScreen(new MainScreen(gameInstance));` | `gameInstance.setScreen(new MainScreen(gameInstance, ctx));` | +| 340 | `GameState gameState = GameState.getInstance();` | `GameState gameState = ctx.gameState;` | +| 371 | `FirstScreen firstScreen = new FirstScreen(gameInstance);` | `FirstScreen firstScreen = new FirstScreen(gameInstance, ctx);` | + +- [ ] **Step 6: `TalentTreeScreen.java` — accept `GameContext`, replace 2 call-sites** + +In `core/src/main/java/ru/project/tower/TalentTreeScreen.java`: + +1. Add field: `private final GameContext ctx;`. +2. Change ctor signature at line 65 to `public TalentTreeScreen(Game game, GameContext ctx) {` and add `this.ctx = ctx;` as the first line of the body. +3. Replace call-sites: + +| Line | Before | After | +|---|---|---| +| 98 | `this.talentTree = TalentTree.getInstance();` | `this.talentTree = ctx.talentTree;` | +| 99 | `this.playerStats = PlayerStats.getInstance();` | `this.playerStats = ctx.playerStats;` | +| 248 | `game.setScreen(new MainScreen(game));` | `game.setScreen(new MainScreen(game, ctx));` | + +- [ ] **Step 7: Compile check** + +Run: `./gradlew core:compileJava` +Expected: `BUILD SUCCESSFUL`. All screen ctors take two args, all call-sites pass two args. + +If compile fails, search for missed `new XxxScreen(` patterns: `rg 'new (Main|First|AbilityShop|AbilitySelection|TalentTree)Screen\(' core/src/main | rg -v 'ctx'` should return zero hits. + +- [ ] **Step 8: Run test suite (no regression)** + +Run: `./gradlew core:test` +Expected: all tests pass. + +Tests do not depend on screens, so the only way this fails is if a prior task's test was accidentally broken while touching singleton files. Unlikely, but good to verify. + +- [ ] **Step 9: Manual smoke test** + +Launch `lwjgl3/src/main/java/ru/project/tower/lwjgl3/Lwjgl3Launcher`. + +Verify: +- Main menu renders with persisted currency / max wave. +- Navigate: main menu → Ability Shop → back. +- Navigate: main menu → Talent Tree → buy one level → back. Currency decremented. +- Navigate: main menu → Ability Selection → pick freeze + explosion → Start Game. Wave 1 plays. +- During wave: fire bullets, kill enemies. Enter shop mid-run if the game allows it; buy an upgrade; return to game. Confirm the upgrade applied (shop save/restore uses in-memory `GameState` — if `returnedFromShop` flag is lost, stats will reset on return). +- Die. Return to menu. Currency reflects collected loot. + +- [ ] **Step 10: Commit** + +```bash +git add core/src/main/java/ru/project/tower/Main.java \ + core/src/main/java/ru/project/tower/MainScreen.java \ + core/src/main/java/ru/project/tower/FirstScreen.java \ + core/src/main/java/ru/project/tower/AbilityShopScreen.java \ + core/src/main/java/ru/project/tower/AbilitySelectionScreen.java \ + core/src/main/java/ru/project/tower/TalentTreeScreen.java +git commit -m "refactor: thread GameContext through Main and all screens" +``` + +--- + +## Task 10: Remove legacy `getInstance()` methods and `instance` fields + +Every non-test call-site now uses `ctx.x` after Task 9. Time to delete the legacy paths. + +**Files:** +- Modify: `core/src/main/java/ru/project/tower/PlayerStats.java` +- Modify: `core/src/main/java/ru/project/tower/PlayerAbilities.java` +- Modify: `core/src/main/java/ru/project/tower/GameState.java` +- Modify: `core/src/main/java/ru/project/tower/TalentTree.java` + +- [ ] **Step 1: Verify no call-sites remain in production code** + +Run: `rg 'getInstance\(' core/src/main` +Expected: zero matches. + +If any match appears, it's a missed call-site in Task 9 — fix it and re-run before continuing. + +- [ ] **Step 2: Delete `getInstance()` and `private static instance` from each singleton** + +In each of `PlayerStats.java`, `PlayerAbilities.java`, `GameState.java`, `TalentTree.java`: + +1. Delete the `private static instance;` field. +2. Delete the `public static getInstance()` method. + +In `PlayerStats.java`, also delete: +- The `PREFS_NAME` constant (the literal moved to `Main.java` in Task 9). +- The `import com.badlogic.gdx.Gdx;` line — no longer used after removing `getInstance()`. + +In `PlayerAbilities.java`, also delete: +- The `PREFS_NAME` constant. +- Keep the `import com.badlogic.gdx.Gdx;` line — the ctor still logs errors via `Gdx.app.error(...)`. + +- [ ] **Step 3: Compile check** + +Run: `./gradlew core:compileJava` +Expected: `BUILD SUCCESSFUL`. No call-sites, no references to the deleted symbols. + +- [ ] **Step 4: Run test suite** + +Run: `./gradlew core:test` +Expected: all tests pass. + +The tests themselves do not call `getInstance()` (they construct services directly) — if any test is red here, it's a regression in how a service is built. Most likely culprit: accidentally deleted `preferences` field instead of just `instance`. + +- [ ] **Step 5: Grep-gate to confirm removal** + +Run: `rg 'getInstance\(' core/src/main` +Expected: zero matches. + +Run: `rg 'private static \w+ instance;' core/src/main` +Expected: zero matches. + +- [ ] **Step 6: Commit** + +```bash +git add core/src/main/java/ru/project/tower/PlayerStats.java \ + core/src/main/java/ru/project/tower/PlayerAbilities.java \ + core/src/main/java/ru/project/tower/GameState.java \ + core/src/main/java/ru/project/tower/TalentTree.java +git commit -m "refactor: remove legacy singleton getInstance methods" +``` + +--- + +## Task 11: Final verification + +No code change — confirmation that the refactor is complete and the game still runs. + +- [ ] **Step 1: Full test run** + +Run: `./gradlew core:test` +Expected: all tests pass. Count should be roughly: `HarnessSanityTest (1)` + `FakePreferencesTest (7)` + `PlayerStatsTest (13)` + `PlayerAbilitiesTest (8)` + `GameStateTest (6)` + `TalentTreeTest (12)` + `TalentDataTest (6)` + `GameContextTest (4)` = **57 tests**, all green. + +- [ ] **Step 2: Full build** + +Run: `./gradlew build` +Expected: `BUILD SUCCESSFUL`. `lwjgl3` and `android` modules compile. + +- [ ] **Step 3: Desktop launcher smoke test** + +Launch `lwjgl3/src/main/java/ru/project/tower/lwjgl3/Lwjgl3Launcher`. + +Verify: +- Main menu renders. Currency and max-wave values show up (non-zero if a previous session existed; otherwise zero — try the game once to seed them before running this check if you started from a clean `Preferences`). +- Click "Talent Tree" → tree displays. Purchase one talent level. Return to menu — currency decremented. +- Click "Ability Shop" → shop displays owned abilities with correct enabled state. +- Click "Start Game" → ability-selection → first wave plays. Fire bullets, kill an enemy, collect currency, die. Return to menu — currency increased. +- Close and reopen the launcher. Previous currency is persisted. + +- [ ] **Step 4: Final commit checkpoint** + +```bash +git add -A +git status # should show clean working tree — no stray modifications +git commit --allow-empty -m "chore(K.1): Phase 3.K.1 complete — test harness + DI refactor" +``` + +(If the project is not a git repository, skip the commit and treat this as a mental save-point — confirm that `git status` equivalent in your workflow shows the expected file set.) + +--- + +## Spec coverage + +Mapping from the spec's requirements to the tasks that satisfy them: + +| Spec requirement | Task(s) | +|---|---| +| DI refactor: `PlayerStats`, `PlayerAbilities`, `GameState`, `TalentTree` | 3, 4, 5, 6 | +| `GameContext` holder (public final fields, construction order) | 8 | +| `Main` as composition root | 9 | +| Screen ctors accept `GameContext` | 9 | +| `FakePreferences` test helper | 2 | +| JUnit 5 + AssertJ build config | 1 | +| Test class layout under `core/src/test/java/ru/project/tower/` | all tasks 2+ | +| `PlayerStatsTest` per spec test list | 3 | +| `PlayerAbilitiesTest` per spec test list | 4 | +| `GameStateTest` per spec test list | 5 | +| `TalentTreeTest` per spec test list | 6 | +| `TalentDataTest` per spec test list | 7 | +| `GameContextTest` per spec test list | 8 | +| Deletion of `getInstance()` methods | 10 | +| Manual desktop-launcher smoke test | 9, 11 | +| Headless libGDX *not* used | (entire plan — proved by use of `FakePreferences` only) | + +All spec requirements have at least one task. No placeholders. No references to methods introduced in later tasks without prior definition. diff --git a/docs/superpowers/specs/2026-04-17-phase3-k1-test-harness-design.md b/docs/superpowers/specs/2026-04-17-phase3-k1-test-harness-design.md new file mode 100644 index 0000000..0125b76 --- /dev/null +++ b/docs/superpowers/specs/2026-04-17-phase3-k1-test-harness-design.md @@ -0,0 +1,312 @@ +# Phase 3.K.1 — Test harness foundation (DI refactor + pure-logic tests) + +**Status:** Design, awaiting review +**Date:** 2026-04-17 +**Parent:** Phase 3, Area K (Test harness). Originally a single P4 task in `2026-04-17-phase3-content-meta-retention.md`; expanded into the K.x series after brainstorming. + +--- + +## Goal + +Establish a test harness in the TowerAn project that serves as a **safety net for future refactoring**. Introduce unit tests for pure-logic singletons (`PlayerStats`, `PlayerAbilities`, `GameState`, `TalentTree`, `TalentData`) so that subsequent extraction work in the `FirstScreen` god-class (planned as spec series K.2–K.7) can proceed without fear of silent regressions. + +The spec also delivers the architectural prerequisite for testability: **removing the `getInstance()` singleton pattern** from the persistent-state classes, replacing it with constructor injection via a lightweight `GameContext` holder. + +## Non-goals + +- Any extraction of logic out of `FirstScreen`. Those are separate specs (K.2 `BulletSystem`, K.3 `SpawnController`, K.4 `WaveController`, K.5 `EnemyBehaviour`, K.6 `AbilitySystem`, K.7 `UpgradeSystem`). K.1 only prepares the ground. +- Tests for `Achievements` and `DailySeed`. These classes do not exist yet (Phase 3 Tasks G1 / H1); their tests are authored alongside the classes, not in K.1. +- Tests for enemy behaviour (`BaseCircleData` and subclasses). Deferred to K.5 because the new Phase 3 archetypes (Healer, Dasher, Sniper, Gnat) are not yet implemented. +- Code coverage gating (JaCoCo). Introducing coverage thresholds without baseline history is premature. +- CI integration (GitHub Actions or similar). Scope is local `./gradlew test`. CI wiring can be a tiny follow-up once K.1 is merged. +- Headless libGDX (`HeadlessApplication`). Not needed because the DI refactor lets tests supply an in-memory `Preferences` directly. + +## Background + +TowerAn is a libGDX 1.13.1 game on Java 8, gdx-liftoff template, flat `ru.project.tower` package. There are currently **no tests of any kind** — no JUnit, no Spock, no manual harness. Verification has been purely visual: launch `Lwjgl3Launcher`, play, watch. + +Five classes hold persistent or shared state through a static-singleton pattern: + +- `PlayerStats` — currency, max wave, talent node levels. Backed by `Preferences` (`tower_attack_player_data`). `getInstance()` eagerly calls `Gdx.app.getPreferences(...)`. +- `PlayerAbilities` — unlocked abilities, levels. Backed by `Preferences` (`tower_attack_player_abilities`). Same pattern. +- `GameState` — in-memory run state (current wave, square health, money, run bonuses). No `Preferences`. +- `TalentTree` — tree structure + level queries that call `PlayerStats.getInstance()` internally (lines 133, 138). +- `TalentData` — plain data class used by `TalentTree`. No singleton; already testable but currently untested. + +`getInstance()` usage is concentrated in five files (15 calls): `AbilitySelectionScreen` (2), `AbilityShopScreen` (2), `FirstScreen` (8), `TalentTreeScreen` (1), `TalentTree` (2). + +Because singletons eagerly touch `Gdx.app` and `Preferences` on first `getInstance()`, any test that instantiates them fails outside a running libGDX context. The options are (a) reflection-nuking the `instance` field between tests, (b) `@VisibleForTesting resetForTests()` helpers, or (c) breaking the pattern. We chose (c) — it's a one-time architectural change that makes tests clean and unlocks downstream `FirstScreen` extraction work in K.2+. + +## Architecture overview + +Three layers, implemented in this order (later layers depend on earlier ones): + +1. **DI refactor.** Delete `private static instance` and `public static getInstance()` from `PlayerStats`, `PlayerAbilities`, `GameState`, `TalentTree`. Make constructors public and accept their dependencies explicitly. +2. **Composition root.** Introduce `GameContext` as a holder for the refactored singletons. `Main.create()` constructs two `Preferences` instances, wraps them in a `GameContext`, and passes the `GameContext` to each screen via constructor injection. +3. **Test harness.** Add JUnit 5 + AssertJ to `core/build.gradle`. Create an in-memory `FakePreferences` helper in `core/src/test/java`. Write unit tests for the five target classes. + +Nothing in the rendering layer, the screen hierarchy, the enemy hierarchy, or the gameplay loop changes beyond mechanical `X.getInstance()` → `ctx.x` substitutions. + +## Components + +### `GameContext` (new, `core/src/main/java/ru/project/tower/GameContext.java`) + +A tiny holder with `public final` fields, idiomatic Java for an immutable data carrier (Google Java Style §5.3 allows `public final` for this role). + +```java +public class GameContext { + public final Preferences playerDataPrefs; + public final Preferences abilitiesPrefs; + public final PlayerStats playerStats; + public final PlayerAbilities playerAbilities; + public final GameState gameState; + public final TalentTree talentTree; + + public GameContext(Preferences playerDataPrefs, Preferences abilitiesPrefs) { + this.playerDataPrefs = playerDataPrefs; + this.abilitiesPrefs = abilitiesPrefs; + this.playerStats = new PlayerStats(playerDataPrefs); + this.playerAbilities = new PlayerAbilities(abilitiesPrefs); + this.gameState = new GameState(); + this.talentTree = new TalentTree(this.playerStats); + } +} +``` + +Construction order matters: `TalentTree` depends on `PlayerStats`, so `playerStats` is created first. `Preferences` references are retained on the holder so future services (e.g., `Achievements`, `DailySeed` in Phase 3 G/H) can reuse them without re-plumbing `Main`. + +### Singleton-to-DI conversions + +For each target, the change is the same mechanical shape. Example for `PlayerStats`: + +```java +// Before +private static PlayerStats instance; +private Preferences preferences; + +private PlayerStats() { + preferences = Gdx.app.getPreferences(PREFS_NAME); + loadData(); +} + +public static PlayerStats getInstance() { + if (instance == null) instance = new PlayerStats(); + return instance; +} + +// After +private final Preferences preferences; + +public PlayerStats(Preferences preferences) { + this.preferences = preferences; + loadData(); +} +``` + +The private `PREFS_NAME = "tower_attack_player_data"` constant is deleted; the same literal moves to `Main` as `private static final String PLAYER_DATA_PREFS_NAME`. `PlayerAbilities` gets analogous treatment with `ABILITIES_PREFS_NAME`. + +`GameState` has no `Preferences`, so its constructor is simply made public and argumentless. `TalentTree(PlayerStats stats)` stores the reference and replaces the two `PlayerStats.getInstance()` calls at lines 133 / 138 with `this.stats.getTalentNodeLevel(...)` and `this.stats.incrementTalentNode(...)`. + +### `Main` as composition root + +```java +public class Main extends Game { + private static final String PLAYER_DATA_PREFS_NAME = "tower_attack_player_data"; + private static final String ABILITIES_PREFS_NAME = "tower_attack_player_abilities"; + + public GameContext ctx; + + @Override + public void create() { + ctx = new GameContext( + Gdx.app.getPreferences(PLAYER_DATA_PREFS_NAME), + Gdx.app.getPreferences(ABILITIES_PREFS_NAME) + ); + setScreen(new MainScreen(this, ctx)); + } +} +``` + +`ctx` is a public field on `Main` so screens that already hold a `Main` reference can read it if needed, but the preferred path is receiving `GameContext` in the constructor. + +### Screen constructor changes + +Every screen class currently instantiated with `new Xxx(game)` becomes `new Xxx(game, ctx)`: + +- `MainScreen(Main game, GameContext ctx)` +- `FirstScreen(Main game, GameContext ctx)` +- `AbilityShopScreen(Main game, GameContext ctx)` +- `AbilitySelectionScreen(Main game, GameContext ctx)` +- `TalentTreeScreen(Main game, GameContext ctx)` + +Every `X.getInstance()` call becomes `ctx.x`. In `FirstScreen`, where there are 8 calls, cache into fields (`private final PlayerStats playerStats;` etc.) during the constructor to avoid `ctx.playerStats` repetition. + +### `FakePreferences` (test helper, `core/src/test/java/ru/project/tower/FakePreferences.java`) + +An in-memory implementation of `com.badlogic.gdx.Preferences` backed by `HashMap`. Approximately 30 trivial methods — every `putX(k, v)` stores in the map, every `getX(k)` / `getX(k, default)` reads. `flush()` is a no-op. `clear()` clears the map. `contains(k)` delegates to `map.containsKey`. + +One shared helper serves every test class. Chosen over Mockito because Mockito for a single deterministic interface adds a dependency and weaker error messages for a trivial case. + +## Data flow + +**Production:** +``` +Main.create() + └─ creates two Preferences via Gdx.app.getPreferences(...) + └─ new GameContext(playerDataPrefs, abilitiesPrefs) + └─ setScreen(new MainScreen(this, ctx)) + │ + └─ ctx propagates to every downstream screen constructor + └─ screens access ctx.playerStats, ctx.talentTree, etc. +``` + +**Tests:** +``` +@BeforeEach + └─ new FakePreferences() + └─ new PlayerStats(fakePrefs) // or the class under test, injected with fakes +@Test + └─ AAA: arrange state, invoke method, assert outcome + (both on the object's API and on the fake Preferences where persistence matters) +``` + +## Test conventions + +- **Framework:** JUnit 5 (`org.junit.jupiter:junit-jupiter:5.10.2`). +- **Assertions:** AssertJ (`org.assertj:assertj-core:3.26.3`). All assertions use `assertThat(...)` — no `assertEquals`. Rationale: fluent API, clearer messages, industry standard in modern Java. +- **Test-method naming:** `methodName_whenCondition_thenExpected`. Sorts naturally by method in IDE, reads like a sentence. + - `incrementTalentNode_whenNewNode_thenStoredInPreferences` + - `getCurrency_whenNotYetSet_thenReturnsZero` +- **Test-class naming:** `Test` (e.g., `PlayerStatsTest.java`). +- **Body structure:** Arrange / Act / Assert separated by blank lines. No `// Arrange` comments. +- **Isolation:** JUnit 5's default new-instance-per-test + `@BeforeEach` for setup. No static state between tests. +- **One behaviour per test.** If a test has three `assertThat(...)` lines, they should all be aspects of the same behaviour (e.g., state returned _and_ persisted). Don't bundle unrelated scenarios. + +## Test coverage targets + +Approximately 30–35 test methods across 6 test classes, as sketched below. This is a floor, not a ceiling — prefer covering each public-API method with at least one happy-path test and one edge case. + +### `PlayerStatsTest` +- `getCurrency_whenNotYetSet_thenReturnsZero` +- `addCurrency_whenCalled_thenIncrementsAndPersists` +- `spendCurrency_whenInsufficient_thenReturnsFalseAndDoesNotDeduct` +- `spendCurrency_whenSufficient_thenReturnsTrueAndDeducts` +- `getMaxWaveReached_thenReadsFromPreferences` +- `updateMaxWaveReached_whenNewHigher_thenUpdates` +- `updateMaxWaveReached_whenNewLower_thenIgnored` +- `getTalentNodeLevel_whenUnseen_thenZero` +- `incrementTalentNode_whenCalled_thenLevelOneAndPersisted` +- `incrementTalentNode_whenCalledTwice_thenLevelTwo` +- Legacy aggregate getter(s): one test covering the wrapper still reports the right total. +- A test that constructs `PlayerStats` from pre-populated `FakePreferences` and reads back expected state (persistence round-trip). + +### `PlayerAbilitiesTest` +- Every ability-unlock flag, get/set round-trip through `FakePreferences`. +- Unlock toggles don't affect unrelated flags. +- Default-state test (fresh `FakePreferences` gives the expected initial roster). + +### `GameStateTest` +- Initial values (wave, square health, money). +- Wave increment. +- Phase 2 `run*` bonus fields (damage, pierce, etc.) accumulate correctly. +- Reset-for-new-run behaviour. The implementation plan must first confirm whether `GameState` has a reset API; if not, the plan adds a small one as part of this spec (this is a test-enabling concession, not feature work). + +### `TalentTreeTest` +- `initializeTree` creates expected roots and node IDs. +- `getTalentLevel(id)` delegates to injected `PlayerStats`. +- `incrementTalent(id)` delegates to injected `PlayerStats`. +- Keystone node IDs (`keystone_pierce`, `keystone_crit`, `keystone_aoe`) are all registered. + +### `TalentDataTest` +- Construction: id, name, description, type, position, max level, base cost, cost multiplier all round-trip via getters. +- Cost-at-level formula round-trip. The exact formula is read from the current `TalentData` source during implementation; the test locks in whatever that formula is, not a newly-invited one. + +### `GameContextTest` +- Construction with two `FakePreferences` yields non-null services. +- `ctx.talentTree.getTalentLevel(someId)` reads from the same `PlayerStats` that `ctx.playerStats` exposes (i.e., wiring is correct). +- Construction order: `TalentTree` sees the injected `PlayerStats`, not a new one. + +## Build configuration + +`core/build.gradle`: + +```gradle +dependencies { + api "com.badlogicgames.gdx:gdx-freetype:$gdxVersion" + api "com.badlogicgames.gdx:gdx:$gdxVersion" + + testImplementation 'org.junit.jupiter:junit-jupiter:5.10.2' + testImplementation 'org.assertj:assertj-core:3.26.3' + + if (enableGraalNative == 'true') { + implementation "io.github.berstanio:gdx-svmhelper-annotations:$graalHelperVersion" + } +} + +test { + useJUnitPlatform() +} +``` + +Java 8 compatibility is preserved: JUnit 5.10 and AssertJ 3.26 both still ship Java-8-compatible bytecode. + +## File layout + +``` +core/src/ + main/java/ru/project/tower/ + GameContext.java [NEW] + PlayerStats.java [MODIFIED — constructor + remove getInstance] + PlayerAbilities.java [MODIFIED — constructor + remove getInstance] + GameState.java [MODIFIED — constructor public + remove getInstance] + TalentTree.java [MODIFIED — constructor + remove getInstance] + Main.java [MODIFIED — composition root] + MainScreen.java [MODIFIED — constructor takes ctx] + FirstScreen.java [MODIFIED — constructor takes ctx, replace 8 getInstance] + AbilityShopScreen.java [MODIFIED — constructor takes ctx] + AbilitySelectionScreen.java [MODIFIED — constructor takes ctx] + TalentTreeScreen.java [MODIFIED — constructor takes ctx] + test/java/ru/project/tower/ [NEW TREE] + FakePreferences.java + PlayerStatsTest.java + PlayerAbilitiesTest.java + GameStateTest.java + TalentTreeTest.java + TalentDataTest.java + GameContextTest.java +``` + +## Error handling + +There is one edge where the refactor can silently change behaviour: `getInstance()` lazily creates the singleton on first call. A class that was instantiated *before* `Gdx.app` was ready (unlikely in this codebase but worth naming) would now fail eagerly at `Main.create()` instead of at first use. Since `Main.create()` is the libGDX entry point and `Gdx.app` is guaranteed set by the backend before `create()` runs, this is safe. + +All other error paths are unchanged — `Preferences.putX`/`getX` throw the same exceptions; `loadData()` runs the same logic. + +## Verification + +Because K.1 introduces the test harness itself, verification is both **automated** (the tests) and **manual** (the DI refactor must not break the running game): + +- `./gradlew test` runs cleanly, all tests pass. +- Launch `Lwjgl3Launcher`. Confirm: + - Main menu renders; currency and max-wave values read from existing preferences. + - Entering the talent tree shows purchased levels unchanged. + - Starting a run, buying an upgrade, dying, and returning to menu preserves currency. + - Ability shop displays owned abilities correctly. + +Any of these failing indicates the `getInstance()` → `ctx.x` substitution dropped a wire. + +## Risks and mitigations + +- **Missed call-site.** 15 `getInstance()` calls plus possibly some we didn't count (constants, static initializers). Mitigation: after the refactor, `grep -r "getInstance()" core/src/main` must return zero hits. Automated in implementation plan. +- **Screen-constructor signature changes break something external.** `lwjgl3/` and `android/` only touch `Main`, not individual screens. Mitigation: grep across all modules for `new MainScreen(`, `new FirstScreen(`, etc. after the refactor. +- **Hidden `Preferences`-name constants.** We found two (`tower_attack_player_data`, `tower_attack_player_abilities`). If Phase 3 work introduces a third, the spec still works — just add another `Preferences` parameter to `GameContext`. Not a risk for K.1 itself. +- **Test flakiness from order dependence.** Prevented by JUnit 5 per-test-instance default + fresh `FakePreferences` in `@BeforeEach`. + +## Out of scope (reminder) + +K.1 delivers the harness and proves the pattern on five pure-logic classes. Every subsequent K.x spec (K.2–K.7) builds on this to extract and test real gameplay subsystems. K.1 is merged when: + +1. All 15+ `getInstance()` calls are gone. +2. `GameContext` is the sole composition point for persistent services. +3. `./gradlew test` runs and passes all 30+ tests authored in this spec. +4. The game still boots and plays correctly on the desktop launcher. diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..535a929 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,9 @@ +org.gradle.daemon=false +org.gradle.jvmargs=-Xms512M -Xmx1G -Dfile.encoding=UTF-8 -Dconsole.encoding=UTF-8 +org.gradle.configureondemand=false +graalHelperVersion=2.0.1 +enableGraalNative=false +android.useAndroidX=true +android.enableR8.fullMode=false +gdxVersion=1.13.1 +projectVersion=1.0.0 diff --git a/gradle/gradle-daemon-jvm.properties b/gradle/gradle-daemon-jvm.properties new file mode 100644 index 0000000..e6b22c8 --- /dev/null +++ b/gradle/gradle-daemon-jvm.properties @@ -0,0 +1,13 @@ +#This file is generated by updateDaemonJvm +toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/538ec8b643622db586076dcc6de01496/redirect +toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/3c821b3d2a2ed31cd255a8836df5ca27/redirect +toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/538ec8b643622db586076dcc6de01496/redirect +toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/3c821b3d2a2ed31cd255a8836df5ca27/redirect +toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/4eb299e08ff72ece03792f6745206490/redirect +toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/240ef070840c3324981ae8cc2985a9e6/redirect +toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/538ec8b643622db586076dcc6de01496/redirect +toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/3c821b3d2a2ed31cd255a8836df5ca27/redirect +toolchainUrl.WINDOWS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/ad1096e6e0353fb5900e1a5ece7d864a/redirect +toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/41f6d00ddc15a000f14896a6d3bfb1b8/redirect +toolchainVendor=BELLSOFT +toolchainVersion=17 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..9bbc975c742b298b441bfb90dbc124400a3751b9 GIT binary patch literal 43705 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 DHx0+F literal 0 HcmV?d00001 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..37f853b --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..faf9300 --- /dev/null +++ b/gradlew @@ -0,0 +1,251 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..9d21a21 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,94 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/lwjgl3/build.gradle b/lwjgl3/build.gradle new file mode 100644 index 0000000..f871d9f --- /dev/null +++ b/lwjgl3/build.gradle @@ -0,0 +1,180 @@ + +buildscript { + repositories { + gradlePluginPortal() + } + dependencies { + classpath "io.github.fourlastor:construo:1.7.1" + if(enableGraalNative == 'true') { + classpath "org.graalvm.buildtools.native:org.graalvm.buildtools.native.gradle.plugin:0.9.28" + } + } +} +plugins { + id "application" +} +apply plugin: 'io.github.fourlastor.construo' + + +import io.github.fourlastor.construo.Target + +sourceSets.main.resources.srcDirs += [ rootProject.file('assets').path ] +mainClassName = 'ru.project.tower.lwjgl3.Lwjgl3Launcher' +application.setMainClass(mainClassName) +eclipse.project.name = appName + '-lwjgl3' +java.sourceCompatibility = 8 +java.targetCompatibility = 8 +if (JavaVersion.current().isJava9Compatible()) { + compileJava.options.release.set(8) +} + +dependencies { + implementation "com.badlogicgames.gdx:gdx-backend-lwjgl3:$gdxVersion" + implementation "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-desktop" + implementation "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop" + implementation project(':core') + + if(enableGraalNative == 'true') { + implementation "io.github.berstanio:gdx-svmhelper-backend-lwjgl3:$graalHelperVersion" + implementation "io.github.berstanio:gdx-svmhelper-extension-freetype:$graalHelperVersion" + + } +} + +def os = System.properties['os.name'].toLowerCase() + +run { + workingDir = rootProject.file('assets').path +// You can uncomment the next line if your IDE claims a build failure even when the app closed properly. + //setIgnoreExitValue(true) + + if (os.contains('mac')) jvmArgs += "-XstartOnFirstThread" +} + +jar { +// sets the name of the .jar file this produces to the name of the game or app, with the version after. + archiveFileName.set("${appName}-${projectVersion}.jar") +// the duplicatesStrategy matters starting in Gradle 7.0; this setting works. + duplicatesStrategy(DuplicatesStrategy.EXCLUDE) + dependsOn configurations.runtimeClasspath + from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } +// these "exclude" lines remove some unnecessary duplicate files in the output JAR. + exclude('META-INF/INDEX.LIST', 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA') + dependencies { + exclude('META-INF/INDEX.LIST', 'META-INF/maven/**') + } +// setting the manifest makes the JAR runnable. + manifest { + attributes 'Main-Class': project.mainClassName + } +// this last step may help on some OSes that need extra instruction to make runnable JARs. + doLast { + file(archiveFile).setExecutable(true, false) + } +} + +// Builds a JAR that only includes the files needed to run on macOS, not Windows or Linux. +// The file size for a Mac-only JAR is about 7MB smaller than a cross-platform JAR. +tasks.register("jarMac") { + dependsOn("jar") + group("build") + jar.archiveFileName.set("${appName}-${projectVersion}-mac.jar") + jar.exclude("windows/x86/**", "windows/x64/**", "linux/arm32/**", "linux/arm64/**", "linux/x64/**", "**/*.dll", "**/*.so", + 'META-INF/INDEX.LIST', 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA') + dependencies { + jar.exclude("windows/x86/**", "windows/x64/**", "linux/arm32/**", "linux/arm64/**", "linux/x64/**", + 'META-INF/INDEX.LIST', 'META-INF/maven/**') + } +} + +// Builds a JAR that only includes the files needed to run on Linux, not Windows or macOS. +// The file size for a Linux-only JAR is about 5MB smaller than a cross-platform JAR. +tasks.register("jarLinux") { + dependsOn("jar") + group("build") + jar.archiveFileName.set("${appName}-${projectVersion}-linux.jar") + jar.exclude("windows/x86/**", "windows/x64/**", "macos/arm64/**", "macos/x64/**", "**/*.dll", "**/*.dylib", + 'META-INF/INDEX.LIST', 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA') + dependencies { + jar.exclude("windows/x86/**", "windows/x64/**", "macos/arm64/**", "macos/x64/**", + 'META-INF/INDEX.LIST', 'META-INF/maven/**') + } +} + +// Builds a JAR that only includes the files needed to run on Windows, not Linux or macOS. +// The file size for a Windows-only JAR is about 6MB smaller than a cross-platform JAR. +tasks.register("jarWin") { + dependsOn("jar") + group("build") + jar.archiveFileName.set("${appName}-${projectVersion}-win.jar") + jar.exclude("macos/arm64/**", "macos/x64/**", "linux/arm32/**", "linux/arm64/**", "linux/x64/**", "**/*.dylib", "**/*.so", + 'META-INF/INDEX.LIST', 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA') + dependencies { + jar.exclude("macos/arm64/**", "macos/x64/**", "linux/arm32/**", "linux/arm64/**", "linux/x64/**", + 'META-INF/INDEX.LIST', 'META-INF/maven/**') + } +} + +construo { + // name of the executable + name.set(appName) + // human-readable name, used for example in the `.app` name for macOS + humanName.set(appName) + // Optional, defaults to project version property + version.set("$projectVersion") + + targets.configure { + create("linuxX64", Target.Linux) { + architecture.set(Target.Architecture.X86_64) + jdkUrl.set("https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.12%2B7/OpenJDK17U-jdk_x64_linux_hotspot_17.0.12_7.tar.gz") + } + create("macM1", Target.MacOs) { + architecture.set(Target.Architecture.AARCH64) + jdkUrl.set("https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.12%2B7/OpenJDK17U-jdk_aarch64_mac_hotspot_17.0.12_7.tar.gz") + // macOS needs an identifier + identifier.set("ru.project.tower." + appName) + // Optional: icon for macOS + macIcon.set(project.file("icons/logo.icns")) + } + create("macX64", Target.MacOs) { + architecture.set(Target.Architecture.X86_64) + jdkUrl.set("https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.12%2B7/OpenJDK17U-jdk_x64_mac_hotspot_17.0.12_7.tar.gz") + // macOS needs an identifier + identifier.set("ru.project.tower." + appName) + // Optional: icon for macOS + macIcon.set(project.file("icons/logo.icns")) + } + create("winX64", Target.Windows) { + architecture.set(Target.Architecture.X86_64) + jdkUrl.set("https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.12%2B7/OpenJDK17U-jdk_x64_windows_hotspot_17.0.12_7.zip") + // Uncomment the next line to show a console when the game runs, to print messages. + //useConsole.set(true) + } + } +} + +// Equivalent to the jar task; here for compatibility with gdx-setup. +tasks.register('dist') { + dependsOn 'jar' +} + +distributions { + main { + contents { + into('libs') { + project.configurations.runtimeClasspath.files.findAll { file -> + file.getName() != project.tasks.jar.outputs.files.singleFile.name + }.each { file -> + exclude file.name + } + } + } + } +} + +startScripts.dependsOn(':lwjgl3:jar') +startScripts.classpath = project.tasks.jar.outputs.files + +if(enableGraalNative == 'true') { + apply from: file("nativeimage.gradle") +} diff --git a/lwjgl3/icons/logo.icns b/lwjgl3/icons/logo.icns new file mode 100644 index 0000000000000000000000000000000000000000..5e41ad7c1af69bbc1ea082c61fccd833abc5c4ff GIT binary patch literal 201876 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

KO)MRW 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

`#4_X4po6zBr>DFqDjW2! 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

cA7S300(&bdH%H(r{!}03eiT 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%0AkkRmPQ{dG3dzBwr=mmS1jY1w{3c> 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%0AGT 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