diff --git a/.vsconfig b/.vsconfig new file mode 100644 index 0000000..f019fd0 --- /dev/null +++ b/.vsconfig @@ -0,0 +1,6 @@ +{ + "version": "1.0", + "components": [ + "Microsoft.VisualStudio.Workload.ManagedGame" + ] +} diff --git a/Assets/Audio.meta b/Assets/Audio.meta new file mode 100644 index 0000000..b8f9702 --- /dev/null +++ b/Assets/Audio.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: eed53f0ba2c1e68449dedbb12f650e43 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Audio/Clips.meta b/Assets/Audio/Clips.meta new file mode 100644 index 0000000..6d7ea75 --- /dev/null +++ b/Assets/Audio/Clips.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fb21226c032e76542b00dd19f80bff59 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Audio/Clips/Generated.meta b/Assets/Audio/Clips/Generated.meta new file mode 100644 index 0000000..4f2f07c --- /dev/null +++ b/Assets/Audio/Clips/Generated.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6fbc57475f270d340a03038b56ff2386 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Audio/Clips/Generated/boost_collected.wav b/Assets/Audio/Clips/Generated/boost_collected.wav new file mode 100644 index 0000000..a90c592 --- /dev/null +++ b/Assets/Audio/Clips/Generated/boost_collected.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:64b06ff9e91b6fabe5cab20191c9770dd222cc851e300794d7b14408ec10c324 +size 21212 diff --git a/Assets/Audio/Clips/Generated/boost_collected.wav.meta b/Assets/Audio/Clips/Generated/boost_collected.wav.meta new file mode 100644 index 0000000..9049c56 --- /dev/null +++ b/Assets/Audio/Clips/Generated/boost_collected.wav.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: e3dc6a0fbf543b64388f7b60615f4145 +AudioImporter: + externalObjects: {} + serializedVersion: 8 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Audio/Clips/Generated/coin_collected.wav b/Assets/Audio/Clips/Generated/coin_collected.wav new file mode 100644 index 0000000..796b43b --- /dev/null +++ b/Assets/Audio/Clips/Generated/coin_collected.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1eaf93e852dfa575a953caccb81d49fb82d774e11a482396312adf1a1052f764 +size 12392 diff --git a/Assets/Audio/Clips/Generated/coin_collected.wav.meta b/Assets/Audio/Clips/Generated/coin_collected.wav.meta new file mode 100644 index 0000000..b04ebe0 --- /dev/null +++ b/Assets/Audio/Clips/Generated/coin_collected.wav.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 2be8148962585984fa7c7f14ae577839 +AudioImporter: + externalObjects: {} + serializedVersion: 8 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Audio/Clips/Generated/continue_accepted.wav b/Assets/Audio/Clips/Generated/continue_accepted.wav new file mode 100644 index 0000000..e14ff48 --- /dev/null +++ b/Assets/Audio/Clips/Generated/continue_accepted.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb69e656652739354ddc4906fa3d277875ca9e53ddded5a6c02f7885f6c889ac +size 22976 diff --git a/Assets/Audio/Clips/Generated/continue_accepted.wav.meta b/Assets/Audio/Clips/Generated/continue_accepted.wav.meta new file mode 100644 index 0000000..7354bab --- /dev/null +++ b/Assets/Audio/Clips/Generated/continue_accepted.wav.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: ae1b48318c83bfa40a0c1050ad79b3c3 +AudioImporter: + externalObjects: {} + serializedVersion: 8 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Audio/Clips/Generated/game_over.wav b/Assets/Audio/Clips/Generated/game_over.wav new file mode 100644 index 0000000..aae3c32 --- /dev/null +++ b/Assets/Audio/Clips/Generated/game_over.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee93c48f084cae6bd92705a3438111ffca5701e4eb3ee0f001fa88f9b427cc5c +size 61782 diff --git a/Assets/Audio/Clips/Generated/game_over.wav.meta b/Assets/Audio/Clips/Generated/game_over.wav.meta new file mode 100644 index 0000000..533b8b1 --- /dev/null +++ b/Assets/Audio/Clips/Generated/game_over.wav.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: b435a43950545be458c5fdca99fbe35d +AudioImporter: + externalObjects: {} + serializedVersion: 8 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Audio/Clips/Generated/game_start.wav b/Assets/Audio/Clips/Generated/game_start.wav new file mode 100644 index 0000000..f359a75 --- /dev/null +++ b/Assets/Audio/Clips/Generated/game_start.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:733e2d4820fefc67c06adaa5881953f9a27dbffe419bcda7e79f08ad526be0b0 +size 33560 diff --git a/Assets/Audio/Clips/Generated/game_start.wav.meta b/Assets/Audio/Clips/Generated/game_start.wav.meta new file mode 100644 index 0000000..f3cd4b9 --- /dev/null +++ b/Assets/Audio/Clips/Generated/game_start.wav.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: aa9657a7d0b5f7645bd09cef753a3241 +AudioImporter: + externalObjects: {} + serializedVersion: 8 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Audio/Clips/Generated/jetpack_collected.wav b/Assets/Audio/Clips/Generated/jetpack_collected.wav new file mode 100644 index 0000000..2f8cff4 --- /dev/null +++ b/Assets/Audio/Clips/Generated/jetpack_collected.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9897ecda881f7e20870b3883d99f7bbe6b76881d798dca0e17e5965bb2012ab7 +size 38852 diff --git a/Assets/Audio/Clips/Generated/jetpack_collected.wav.meta b/Assets/Audio/Clips/Generated/jetpack_collected.wav.meta new file mode 100644 index 0000000..f3a1fe3 --- /dev/null +++ b/Assets/Audio/Clips/Generated/jetpack_collected.wav.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 12bcd9f3a3e360441922c1b1d580bfd4 +AudioImporter: + externalObjects: {} + serializedVersion: 8 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Audio/Clips/Generated/jump_pad_activated.wav b/Assets/Audio/Clips/Generated/jump_pad_activated.wav new file mode 100644 index 0000000..22fff54 --- /dev/null +++ b/Assets/Audio/Clips/Generated/jump_pad_activated.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd4ff6545863627f05c7d0d9313815680644e904dfa7bc8694f30a840d276d7e +size 20330 diff --git a/Assets/Audio/Clips/Generated/jump_pad_activated.wav.meta b/Assets/Audio/Clips/Generated/jump_pad_activated.wav.meta new file mode 100644 index 0000000..999884d --- /dev/null +++ b/Assets/Audio/Clips/Generated/jump_pad_activated.wav.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 0dd7ddaa5ac08f94ab2a8127bdadfd89 +AudioImporter: + externalObjects: {} + serializedVersion: 8 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Audio/Clips/Generated/player_death.wav b/Assets/Audio/Clips/Generated/player_death.wav new file mode 100644 index 0000000..c05643d --- /dev/null +++ b/Assets/Audio/Clips/Generated/player_death.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:16738e70ef912ac2d3ba5ad8fbecc2f5c7692966ad344b1b5a6a8dfabc7fb808 +size 40616 diff --git a/Assets/Audio/Clips/Generated/player_death.wav.meta b/Assets/Audio/Clips/Generated/player_death.wav.meta new file mode 100644 index 0000000..dd3c50a --- /dev/null +++ b/Assets/Audio/Clips/Generated/player_death.wav.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 803f2112075bf8f43b9932da0b6412f4 +AudioImporter: + externalObjects: {} + serializedVersion: 8 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Audio/Clips/Generated/player_jump.wav b/Assets/Audio/Clips/Generated/player_jump.wav new file mode 100644 index 0000000..468f136 --- /dev/null +++ b/Assets/Audio/Clips/Generated/player_jump.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4e72cd0bf58ee28bf28a9bd7af51c665dc53a3c23040875196d0e8ac85b7e5f +size 14156 diff --git a/Assets/Audio/Clips/Generated/player_jump.wav.meta b/Assets/Audio/Clips/Generated/player_jump.wav.meta new file mode 100644 index 0000000..1d81350 --- /dev/null +++ b/Assets/Audio/Clips/Generated/player_jump.wav.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 46c2c848c1ca5ee4ca5d65e2c53ac8cc +AudioImporter: + externalObjects: {} + serializedVersion: 8 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Audio/Clips/Generated/player_respawn.wav b/Assets/Audio/Clips/Generated/player_respawn.wav new file mode 100644 index 0000000..4dd67a6 --- /dev/null +++ b/Assets/Audio/Clips/Generated/player_respawn.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e481dc41b8350945af31f4afcc0f25033d12701c2bac3ad69b049e56f28a977a +size 19448 diff --git a/Assets/Audio/Clips/Generated/player_respawn.wav.meta b/Assets/Audio/Clips/Generated/player_respawn.wav.meta new file mode 100644 index 0000000..8d7759b --- /dev/null +++ b/Assets/Audio/Clips/Generated/player_respawn.wav.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 172d2de1ca63ba742941ed67d82c7a7a +AudioImporter: + externalObjects: {} + serializedVersion: 8 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Audio/Clips/Generated/prize_physical_started.wav b/Assets/Audio/Clips/Generated/prize_physical_started.wav new file mode 100644 index 0000000..4578b76 --- /dev/null +++ b/Assets/Audio/Clips/Generated/prize_physical_started.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b1fb583ae353dcbb0ccaeab12734687d8a170e565daea519f3f374a03d9715c +size 38852 diff --git a/Assets/Audio/Clips/Generated/prize_physical_started.wav.meta b/Assets/Audio/Clips/Generated/prize_physical_started.wav.meta new file mode 100644 index 0000000..a17df09 --- /dev/null +++ b/Assets/Audio/Clips/Generated/prize_physical_started.wav.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 7933b6e19ab8feb4ea4e905ee9e52c57 +AudioImporter: + externalObjects: {} + serializedVersion: 8 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Audio/Clips/Generated/prize_qr_started.wav b/Assets/Audio/Clips/Generated/prize_qr_started.wav new file mode 100644 index 0000000..e337cae --- /dev/null +++ b/Assets/Audio/Clips/Generated/prize_qr_started.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:560d1d44f3ad60c5a750c41031de535604c3a59ad254baf52e98877e715ffbdf +size 30032 diff --git a/Assets/Audio/Clips/Generated/prize_qr_started.wav.meta b/Assets/Audio/Clips/Generated/prize_qr_started.wav.meta new file mode 100644 index 0000000..b0e537e --- /dev/null +++ b/Assets/Audio/Clips/Generated/prize_qr_started.wav.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: fc76f32ac20220e4fa9947fdda16e80a +AudioImporter: + externalObjects: {} + serializedVersion: 8 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Audio/Clips/Generated/prize_started.wav b/Assets/Audio/Clips/Generated/prize_started.wav new file mode 100644 index 0000000..59c00d5 --- /dev/null +++ b/Assets/Audio/Clips/Generated/prize_started.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1df8225c5b879a8b9659980aa7b718d99d114b2a253b0549b0a2de7d02db418 +size 42380 diff --git a/Assets/Audio/Clips/Generated/prize_started.wav.meta b/Assets/Audio/Clips/Generated/prize_started.wav.meta new file mode 100644 index 0000000..a8d70bc --- /dev/null +++ b/Assets/Audio/Clips/Generated/prize_started.wav.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: a64959ada619fd148b353ac9ad0f276d +AudioImporter: + externalObjects: {} + serializedVersion: 8 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Audio/Clips/Generated/spring_activated.wav b/Assets/Audio/Clips/Generated/spring_activated.wav new file mode 100644 index 0000000..0ebeb49 --- /dev/null +++ b/Assets/Audio/Clips/Generated/spring_activated.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:61ea37070196566c0913290ee1e10ba4b8320c5ad0f112e87c82bcc44680b363 +size 17684 diff --git a/Assets/Audio/Clips/Generated/spring_activated.wav.meta b/Assets/Audio/Clips/Generated/spring_activated.wav.meta new file mode 100644 index 0000000..c518b56 --- /dev/null +++ b/Assets/Audio/Clips/Generated/spring_activated.wav.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 62fd512b6d0ddd6409b156be1d682416 +AudioImporter: + externalObjects: {} + serializedVersion: 8 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Audio/Clips/Generated/ui_back.wav b/Assets/Audio/Clips/Generated/ui_back.wav new file mode 100644 index 0000000..c8fbf81 --- /dev/null +++ b/Assets/Audio/Clips/Generated/ui_back.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a26e954b1f78d69723f02384c689fd4bd6849973905984c9c4b653ea5cf30332 +size 14156 diff --git a/Assets/Audio/Clips/Generated/ui_back.wav.meta b/Assets/Audio/Clips/Generated/ui_back.wav.meta new file mode 100644 index 0000000..beea755 --- /dev/null +++ b/Assets/Audio/Clips/Generated/ui_back.wav.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 86f4e01db21734942bc827c352d1192d +AudioImporter: + externalObjects: {} + serializedVersion: 8 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Audio/Clips/Generated/ui_error.wav b/Assets/Audio/Clips/Generated/ui_error.wav new file mode 100644 index 0000000..5fb8ca6 --- /dev/null +++ b/Assets/Audio/Clips/Generated/ui_error.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6e4450872ac5e73e812fbaadad62f702e9de6b02dbb91c030717c96d6fd13a1a +size 17684 diff --git a/Assets/Audio/Clips/Generated/ui_error.wav.meta b/Assets/Audio/Clips/Generated/ui_error.wav.meta new file mode 100644 index 0000000..0c83194 --- /dev/null +++ b/Assets/Audio/Clips/Generated/ui_error.wav.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 83e35ed99b265944ca0af63349a93b39 +AudioImporter: + externalObjects: {} + serializedVersion: 8 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Audio/Clips/Generated/ui_navigate.wav b/Assets/Audio/Clips/Generated/ui_navigate.wav new file mode 100644 index 0000000..44b84c5 --- /dev/null +++ b/Assets/Audio/Clips/Generated/ui_navigate.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0bcfb72ae02da7b81c8a7691bb44407ba60257b450fccceb0633029b9cf37114 +size 6218 diff --git a/Assets/Audio/Clips/Generated/ui_navigate.wav.meta b/Assets/Audio/Clips/Generated/ui_navigate.wav.meta new file mode 100644 index 0000000..ff32695 --- /dev/null +++ b/Assets/Audio/Clips/Generated/ui_navigate.wav.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 2ad9b6d07a8e6214bbe919e2b5d94001 +AudioImporter: + externalObjects: {} + serializedVersion: 8 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Audio/Clips/Generated/ui_submit.wav b/Assets/Audio/Clips/Generated/ui_submit.wav new file mode 100644 index 0000000..8653e8f --- /dev/null +++ b/Assets/Audio/Clips/Generated/ui_submit.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:811ce139f7311179c25d224fb2ae9c358689bae152c0170ed48ebc611f43f181 +size 12392 diff --git a/Assets/Audio/Clips/Generated/ui_submit.wav.meta b/Assets/Audio/Clips/Generated/ui_submit.wav.meta new file mode 100644 index 0000000..cb2fd1f --- /dev/null +++ b/Assets/Audio/Clips/Generated/ui_submit.wav.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: b1c90ee21bc444d4fb49b39000584eb0 +AudioImporter: + externalObjects: {} + serializedVersion: 8 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Audio/Mixers.meta b/Assets/Audio/Mixers.meta new file mode 100644 index 0000000..449aab1 --- /dev/null +++ b/Assets/Audio/Mixers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5c4ba769be157e5459cbd025fba52af8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Audio/Mixers/GameAudioMixer.mixer b/Assets/Audio/Mixers/GameAudioMixer.mixer new file mode 100644 index 0000000..583083b --- /dev/null +++ b/Assets/Audio/Mixers/GameAudioMixer.mixer @@ -0,0 +1,239 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!243 &-7907471987795070158 +AudioMixerGroupController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Music + m_AudioMixer: {fileID: 24100000} + m_GroupID: 8478690b25035494dadd1a1f37938d91 + m_Children: [] + m_Volume: aa39af793ad8de04d9f403c40e43e817 + m_Pitch: c45e8002f72def04481db4ff819acc9a + m_Send: 00000000000000000000000000000000 + m_Effects: + - {fileID: -7255383930698867984} + m_UserColorIndex: 0 + m_Mute: 0 + m_Solo: 0 + m_BypassEffects: 0 +--- !u!244 &-7255383930698867984 +AudioMixerEffectController: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_EffectID: 31fee717867cc184ab21248945934c3e + m_EffectName: Attenuation + m_MixLevel: f4aa0afb53ea6884788105384f945d47 + m_Parameters: [] + m_SendTarget: {fileID: 0} + m_EnableWetMix: 0 + m_Bypass: 0 +--- !u!243 &-7217844520931084221 +AudioMixerGroupController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Ambience + m_AudioMixer: {fileID: 24100000} + m_GroupID: bddd63f5c1b0be248ba048ea7c6f1235 + m_Children: [] + m_Volume: d7867c4ffc8e799428e2e0c9af0b1ac5 + m_Pitch: 6f6b834778cb0594ab565bf947a26e14 + m_Send: 00000000000000000000000000000000 + m_Effects: + - {fileID: -1657385023915166172} + m_UserColorIndex: 0 + m_Mute: 0 + m_Solo: 0 + m_BypassEffects: 0 +--- !u!243 &-5027576678584524412 +AudioMixerGroupController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: UI + m_AudioMixer: {fileID: 24100000} + m_GroupID: 7fef6e1290001664dac7c593c8fc4894 + m_Children: [] + m_Volume: aca784eab31d24748b2b0fe22dea3fed + m_Pitch: da9fb75066720f944882a49da33cb982 + m_Send: 00000000000000000000000000000000 + m_Effects: + - {fileID: -3875845403683988259} + m_UserColorIndex: 0 + m_Mute: 0 + m_Solo: 0 + m_BypassEffects: 0 +--- !u!244 &-3875845403683988259 +AudioMixerEffectController: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_EffectID: a2b60d3b173401f42aa3813ce9325975 + m_EffectName: Attenuation + m_MixLevel: b100fc3403333fe4e824f99f7d43251c + m_Parameters: [] + m_SendTarget: {fileID: 0} + m_EnableWetMix: 0 + m_Bypass: 0 +--- !u!244 &-1657385023915166172 +AudioMixerEffectController: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_EffectID: 7a2cc57f6b3027f45bfcee777547a1a0 + m_EffectName: Attenuation + m_MixLevel: 3ff9d85e58f77d44ba098848fd3b82bb + m_Parameters: [] + m_SendTarget: {fileID: 0} + m_EnableWetMix: 0 + m_Bypass: 0 +--- !u!243 &-769777606815116712 +AudioMixerGroupController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: SFX + m_AudioMixer: {fileID: 24100000} + m_GroupID: 313fac706123ef544a6e182b9f0e9852 + m_Children: + - {fileID: -5027576678584524412} + - {fileID: 4708169676529525986} + - {fileID: -7217844520931084221} + m_Volume: 189b6be1a4bf3164a90885b0f24a7a48 + m_Pitch: 7d10388a6c8809c4e893e924af2e1665 + m_Send: 00000000000000000000000000000000 + m_Effects: + - {fileID: 1593934803790896400} + m_UserColorIndex: 0 + m_Mute: 0 + m_Solo: 0 + m_BypassEffects: 0 +--- !u!241 &24100000 +AudioMixerController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: GameAudioMixer + m_OutputGroup: {fileID: 0} + m_MasterGroup: {fileID: 24300002} + m_Snapshots: + - {fileID: 24500006} + m_StartSnapshot: {fileID: 24500006} + m_SuspendThreshold: -80 + m_EnableSuspend: 1 + m_UpdateMode: 0 + m_ExposedParameters: + - guid: aa39af793ad8de04d9f403c40e43e817 + name: MusicVolume + - guid: 189b6be1a4bf3164a90885b0f24a7a48 + name: SoundsVolume + m_AudioMixerGroupViews: [] + m_CurrentViewIndex: 0 + m_TargetSnapshot: {fileID: 24500006} +--- !u!243 &24300002 +AudioMixerGroupController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Master + m_AudioMixer: {fileID: 24100000} + m_GroupID: 5164b58c69786c341b1a5415bbcc6718 + m_Children: + - {fileID: -7907471987795070158} + - {fileID: -769777606815116712} + m_Volume: 75328ceaf129d1e46b7dfbbe32410621 + m_Pitch: 9b6ccf985505b244a8acf7fb6c85c3fa + m_Send: 00000000000000000000000000000000 + m_Effects: + - {fileID: 24400004} + m_UserColorIndex: 0 + m_Mute: 0 + m_Solo: 0 + m_BypassEffects: 0 +--- !u!244 &24400004 +AudioMixerEffectController: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_EffectID: 84ea623bc73ae90428944b4de74a2e83 + m_EffectName: Attenuation + m_MixLevel: 939f982fdeffab44bb2a2b72ec9d2c6c + m_Parameters: [] + m_SendTarget: {fileID: 0} + m_EnableWetMix: 0 + m_Bypass: 0 +--- !u!245 &24500006 +AudioMixerSnapshotController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Snapshot + m_AudioMixer: {fileID: 24100000} + m_SnapshotID: 821b11805a7efdc4c96a7bff86a68c27 + m_FloatValues: {} + m_TransitionOverrides: {} +--- !u!244 &1593934803790896400 +AudioMixerEffectController: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_EffectID: c209efae5caeed4458c5d5a3d401df6a + m_EffectName: Attenuation + m_MixLevel: e020ce8f83e400f47b0f6d66c7d28aa5 + m_Parameters: [] + m_SendTarget: {fileID: 0} + m_EnableWetMix: 0 + m_Bypass: 0 +--- !u!243 &4708169676529525986 +AudioMixerGroupController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Gameplay + m_AudioMixer: {fileID: 24100000} + m_GroupID: 35db7625f6672cb44a6ccabc6e36b6c4 + m_Children: [] + m_Volume: a0733b1657650f34999e40422b4f3337 + m_Pitch: 353d935a6495994459ef5353bdd7a653 + m_Send: 00000000000000000000000000000000 + m_Effects: + - {fileID: 5794045651671756300} + m_UserColorIndex: 0 + m_Mute: 0 + m_Solo: 0 + m_BypassEffects: 0 +--- !u!244 &5794045651671756300 +AudioMixerEffectController: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_EffectID: f679916613bceda4e8dba76c12a09560 + m_EffectName: Attenuation + m_MixLevel: 6498f8e6b1021c54fa348a85bc317c90 + m_Parameters: [] + m_SendTarget: {fileID: 0} + m_EnableWetMix: 0 + m_Bypass: 0 diff --git a/Assets/Audio/Mixers/GameAudioMixer.mixer.meta b/Assets/Audio/Mixers/GameAudioMixer.mixer.meta new file mode 100644 index 0000000..0cf0988 --- /dev/null +++ b/Assets/Audio/Mixers/GameAudioMixer.mixer.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e7f5dba03b1fe564095aec623e122722 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 24100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Audio/Settings.meta b/Assets/Audio/Settings.meta new file mode 100644 index 0000000..66f4c18 --- /dev/null +++ b/Assets/Audio/Settings.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 80a5ce93b0e34814f975a52114815918 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Audio/Settings/GameAudioSettings.asset b/Assets/Audio/Settings/GameAudioSettings.asset new file mode 100644 index 0000000..88db2c6 --- /dev/null +++ b/Assets/Audio/Settings/GameAudioSettings.asset @@ -0,0 +1,242 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d6b6fabd3acfe76448ca16ffafdbe9f5, type: 3} + m_Name: GameAudioSettings + m_EditorClassIdentifier: DanroJump.Runtime::DanroJump.Audio.GameAudioSettings + mixer: {fileID: 24100000, guid: e7f5dba03b1fe564095aec623e122722, type: 2} + musicGroup: {fileID: -7907471987795070158, guid: e7f5dba03b1fe564095aec623e122722, type: 2} + sfxGroup: {fileID: -769777606815116712, guid: e7f5dba03b1fe564095aec623e122722, type: 2} + uiGroup: {fileID: -5027576678584524412, guid: e7f5dba03b1fe564095aec623e122722, type: 2} + gameplayGroup: {fileID: 4708169676529525986, guid: e7f5dba03b1fe564095aec623e122722, type: 2} + ambienceGroup: {fileID: -7217844520931084221, guid: e7f5dba03b1fe564095aec623e122722, type: 2} + musicLoop: {fileID: 0} + musicLoopVolume: 1 + playMusicOnInitialize: 1 + defaultMusicCue: 0 + musicTracks: [] + eventBindings: + - eventId: 0 + channel: 1 + outputGroupOverride: {fileID: 0} + clips: + - {fileID: 8300000, guid: 2ad9b6d07a8e6214bbe919e2b5d94001, type: 3} + volume: 0.55 + pitchRange: {x: 0.96, y: 1.04} + spatial: 0 + - eventId: 1 + channel: 1 + outputGroupOverride: {fileID: 0} + clips: + - {fileID: 8300000, guid: b1c90ee21bc444d4fb49b39000584eb0, type: 3} + volume: 0.65 + pitchRange: {x: 0.96, y: 1.04} + spatial: 0 + - eventId: 2 + channel: 1 + outputGroupOverride: {fileID: 0} + clips: + - {fileID: 8300000, guid: 86f4e01db21734942bc827c352d1192d, type: 3} + volume: 0.55 + pitchRange: {x: 0.96, y: 1.04} + spatial: 0 + - eventId: 3 + channel: 1 + outputGroupOverride: {fileID: 0} + clips: + - {fileID: 8300000, guid: 83e35ed99b265944ca0af63349a93b39, type: 3} + volume: 0.7 + pitchRange: {x: 0.96, y: 1.04} + spatial: 0 + - eventId: 10 + channel: 1 + outputGroupOverride: {fileID: 0} + clips: + - {fileID: 8300000, guid: aa9657a7d0b5f7645bd09cef753a3241, type: 3} + volume: 0.75 + pitchRange: {x: 0.96, y: 1.04} + spatial: 0 + - eventId: 20 + channel: 2 + outputGroupOverride: {fileID: 0} + clips: + - {fileID: 8300000, guid: 46c2c848c1ca5ee4ca5d65e2c53ac8cc, type: 3} + volume: 0.45 + pitchRange: {x: 0.96, y: 1.04} + spatial: 1 + - eventId: 21 + channel: 2 + outputGroupOverride: {fileID: 0} + clips: + - {fileID: 8300000, guid: 803f2112075bf8f43b9932da0b6412f4, type: 3} + volume: 0.75 + pitchRange: {x: 0.96, y: 1.04} + spatial: 1 + - eventId: 22 + channel: 2 + outputGroupOverride: {fileID: 0} + clips: + - {fileID: 8300000, guid: 172d2de1ca63ba742941ed67d82c7a7a, type: 3} + volume: 0.55 + pitchRange: {x: 0.96, y: 1.04} + spatial: 1 + - eventId: 23 + channel: 2 + outputGroupOverride: {fileID: 0} + clips: + - {fileID: 8300000, guid: b435a43950545be458c5fdca99fbe35d, type: 3} + volume: 0.8 + pitchRange: {x: 0.96, y: 1.04} + spatial: 0 + - eventId: 24 + channel: 1 + outputGroupOverride: {fileID: 0} + clips: + - {fileID: 8300000, guid: ae1b48318c83bfa40a0c1050ad79b3c3, type: 3} + volume: 0.65 + pitchRange: {x: 0.96, y: 1.04} + spatial: 0 + - eventId: 25 + channel: 2 + outputGroupOverride: {fileID: 0} + clips: + - {fileID: 8300000, guid: 46c2c848c1ca5ee4ca5d65e2c53ac8cc, type: 3} + volume: 0.35 + pitchRange: {x: 0.96, y: 1.04} + spatial: 1 + - eventId: 26 + channel: 2 + outputGroupOverride: {fileID: 0} + clips: + - {fileID: 8300000, guid: 803f2112075bf8f43b9932da0b6412f4, type: 3} + volume: 0.65 + pitchRange: {x: 0.96, y: 1.04} + spatial: 1 + - eventId: 27 + channel: 2 + outputGroupOverride: {fileID: 0} + clips: + - {fileID: 8300000, guid: e3dc6a0fbf543b64388f7b60615f4145, type: 3} + volume: 0.65 + pitchRange: {x: 0.96, y: 1.04} + spatial: 1 + - eventId: 28 + channel: 2 + outputGroupOverride: {fileID: 0} + clips: + - {fileID: 8300000, guid: 86f4e01db21734942bc827c352d1192d, type: 3} + volume: 0.35 + pitchRange: {x: 0.96, y: 1.04} + spatial: 1 + - eventId: 30 + channel: 2 + outputGroupOverride: {fileID: 0} + clips: + - {fileID: 8300000, guid: 2be8148962585984fa7c7f14ae577839, type: 3} + volume: 0.55 + pitchRange: {x: 0.96, y: 1.04} + spatial: 1 + - eventId: 31 + channel: 2 + outputGroupOverride: {fileID: 0} + clips: + - {fileID: 8300000, guid: e3dc6a0fbf543b64388f7b60615f4145, type: 3} + volume: 0.7 + pitchRange: {x: 0.96, y: 1.04} + spatial: 1 + - eventId: 32 + channel: 2 + outputGroupOverride: {fileID: 0} + clips: + - {fileID: 8300000, guid: 62fd512b6d0ddd6409b156be1d682416, type: 3} + volume: 0.65 + pitchRange: {x: 0.96, y: 1.04} + spatial: 1 + - eventId: 33 + channel: 2 + outputGroupOverride: {fileID: 0} + clips: + - {fileID: 8300000, guid: 0dd7ddaa5ac08f94ab2a8127bdadfd89, type: 3} + volume: 0.7 + pitchRange: {x: 0.96, y: 1.04} + spatial: 1 + - eventId: 34 + channel: 2 + outputGroupOverride: {fileID: 0} + clips: + - {fileID: 8300000, guid: 12bcd9f3a3e360441922c1b1d580bfd4, type: 3} + volume: 0.75 + pitchRange: {x: 0.96, y: 1.04} + spatial: 1 + - eventId: 40 + channel: 1 + outputGroupOverride: {fileID: 0} + clips: + - {fileID: 8300000, guid: a64959ada619fd148b353ac9ad0f276d, type: 3} + volume: 0.55 + pitchRange: {x: 0.96, y: 1.04} + spatial: 0 + - eventId: 41 + channel: 1 + outputGroupOverride: {fileID: 0} + clips: + - {fileID: 8300000, guid: fc76f32ac20220e4fa9947fdda16e80a, type: 3} + volume: 0.55 + pitchRange: {x: 0.96, y: 1.04} + spatial: 0 + - eventId: 42 + channel: 1 + outputGroupOverride: {fileID: 0} + clips: + - {fileID: 8300000, guid: 7933b6e19ab8feb4ea4e905ee9e52c57, type: 3} + volume: 0.55 + pitchRange: {x: 0.96, y: 1.04} + spatial: 0 + - eventId: 50 + channel: 2 + outputGroupOverride: {fileID: 0} + clips: + - {fileID: 8300000, guid: e3dc6a0fbf543b64388f7b60615f4145, type: 3} + volume: 0.4 + pitchRange: {x: 0.96, y: 1.04} + spatial: 1 + - eventId: 51 + channel: 2 + outputGroupOverride: {fileID: 0} + clips: + - {fileID: 8300000, guid: 46c2c848c1ca5ee4ca5d65e2c53ac8cc, type: 3} + volume: 0.25 + pitchRange: {x: 0.96, y: 1.04} + spatial: 1 + - eventId: 52 + channel: 2 + outputGroupOverride: {fileID: 0} + clips: + - {fileID: 8300000, guid: 83e35ed99b265944ca0af63349a93b39, type: 3} + volume: 0.65 + pitchRange: {x: 0.96, y: 1.04} + spatial: 1 + - eventId: 53 + channel: 2 + outputGroupOverride: {fileID: 0} + clips: + - {fileID: 8300000, guid: e3dc6a0fbf543b64388f7b60615f4145, type: 3} + volume: 0.65 + pitchRange: {x: 0.96, y: 1.04} + spatial: 1 + - eventId: 54 + channel: 2 + outputGroupOverride: {fileID: 0} + clips: + - {fileID: 8300000, guid: 2be8148962585984fa7c7f14ae577839, type: 3} + volume: 0.65 + pitchRange: {x: 0.96, y: 1.04} + spatial: 1 diff --git a/Assets/Audio/Settings/GameAudioSettings.asset.meta b/Assets/Audio/Settings/GameAudioSettings.asset.meta new file mode 100644 index 0000000..6def250 --- /dev/null +++ b/Assets/Audio/Settings/GameAudioSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b8788b5bf4f92e94f83f651bb5a0a6ee +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/ProjectContext.prefab b/Assets/Resources/ProjectContext.prefab index e5e18c8..59043d4 100644 --- a/Assets/Resources/ProjectContext.prefab +++ b/Assets/Resources/ProjectContext.prefab @@ -80,6 +80,7 @@ MonoBehaviour: m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Settings.ServiceSettingsInstaller databaseAddress: settings/service-settings-database fallbackDatabase: {fileID: 0} + audioSettings: {fileID: 11400000, guid: b8788b5bf4f92e94f83f651bb5a0a6ee, type: 2} fileName: service-settings.json loadImmediately: 1 bindActionsInScene: 1 @@ -98,3 +99,10 @@ MonoBehaviour: enabledOnStartup: 1 enabledChannels: -1 enabledOutputs: 3 + fileLoggingEnabled: 0 + fileLoggingUsePersistentDataPath: 1 + fileLoggingDirectory: Logs + fileLoggingFileName: debug.log + fileLoggingAppendToFile: 1 + fileLoggingWriteSessionHeader: 1 + fileLoggingFlushEveryEntries: 1 diff --git a/Assets/Screenshots/continue_overlay_play_render.png b/Assets/Screenshots/continue_overlay_play_render.png new file mode 100644 index 0000000..3318c65 Binary files /dev/null and b/Assets/Screenshots/continue_overlay_play_render.png differ diff --git a/Assets/Screenshots/continue_overlay_play_render.png.meta b/Assets/Screenshots/continue_overlay_play_render.png.meta new file mode 100644 index 0000000..ab78cf1 --- /dev/null +++ b/Assets/Screenshots/continue_overlay_play_render.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: a1db019a8b1afa84fbc695420ae41753 +TextureImporter: + internalIDToNameTable: + - first: + 213: 1174531882397755370 + second: continue_overlay_play_render_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: continue_overlay_play_render_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 698 + height: 1241 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: ae760bb2686cc4010800000000000000 + internalID: 1174531882397755370 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + continue_overlay_play_render_0: 1174531882397755370 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Screenshots/continue_overlay_ui_render-1.png b/Assets/Screenshots/continue_overlay_ui_render-1.png new file mode 100644 index 0000000..ee7dd56 Binary files /dev/null and b/Assets/Screenshots/continue_overlay_ui_render-1.png differ diff --git a/Assets/Screenshots/continue_overlay_ui_render-1.png.meta b/Assets/Screenshots/continue_overlay_ui_render-1.png.meta new file mode 100644 index 0000000..a02a014 --- /dev/null +++ b/Assets/Screenshots/continue_overlay_ui_render-1.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: 46d6362d7998346438ffe1175fee8b21 +TextureImporter: + internalIDToNameTable: + - first: + 213: 132306147487455866 + second: continue_overlay_ui_render-1_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: continue_overlay_ui_render-1_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1920 + height: 1080 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: a7a179a7dbb06d100800000000000000 + internalID: 132306147487455866 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + continue_overlay_ui_render-1_0: 132306147487455866 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Screenshots/continue_overlay_ui_render.png b/Assets/Screenshots/continue_overlay_ui_render.png new file mode 100644 index 0000000..ee7dd56 Binary files /dev/null and b/Assets/Screenshots/continue_overlay_ui_render.png differ diff --git a/Assets/Screenshots/continue_overlay_ui_render.png.meta b/Assets/Screenshots/continue_overlay_ui_render.png.meta new file mode 100644 index 0000000..4fea908 --- /dev/null +++ b/Assets/Screenshots/continue_overlay_ui_render.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: d8a7553b675e16740a64046d55d988cd +TextureImporter: + internalIDToNameTable: + - first: + 213: -7500016530885226919 + second: continue_overlay_ui_render_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: continue_overlay_ui_render_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1920 + height: 1080 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 95e4703b3b69ae790800000000000000 + internalID: -7500016530885226919 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + continue_overlay_ui_render_0: -7500016530885226919 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Screenshots/death_gameover_panel_timer_fixed.png b/Assets/Screenshots/death_gameover_panel_timer_fixed.png new file mode 100644 index 0000000..7da5782 Binary files /dev/null and b/Assets/Screenshots/death_gameover_panel_timer_fixed.png differ diff --git a/Assets/Screenshots/death_gameover_panel_timer_fixed.png.meta b/Assets/Screenshots/death_gameover_panel_timer_fixed.png.meta new file mode 100644 index 0000000..a4230fe --- /dev/null +++ b/Assets/Screenshots/death_gameover_panel_timer_fixed.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: 78312e5c3ec479542a05974c0f62cb71 +TextureImporter: + internalIDToNameTable: + - first: + 213: 1025458847261830504 + second: death_gameover_panel_timer_fixed_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: death_gameover_panel_timer_fixed_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 698 + height: 1241 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 86da2d273692b3e00800000000000000 + internalID: 1025458847261830504 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + death_gameover_panel_timer_fixed_0: 1025458847261830504 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Screenshots/gameover_panel_after_death_fixed.png b/Assets/Screenshots/gameover_panel_after_death_fixed.png new file mode 100644 index 0000000..c00fa82 Binary files /dev/null and b/Assets/Screenshots/gameover_panel_after_death_fixed.png differ diff --git a/Assets/Screenshots/gameover_panel_after_death_fixed.png.meta b/Assets/Screenshots/gameover_panel_after_death_fixed.png.meta new file mode 100644 index 0000000..d133847 --- /dev/null +++ b/Assets/Screenshots/gameover_panel_after_death_fixed.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: 0ad0cf0dc99dfc94ea665eff8b2553d4 +TextureImporter: + internalIDToNameTable: + - first: + 213: -2156163554073836210 + second: gameover_panel_after_death_fixed_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: gameover_panel_after_death_fixed_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 698 + height: 1241 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: e4509c1eba4c312e0800000000000000 + internalID: -2156163554073836210 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + gameover_panel_after_death_fixed_0: -2156163554073836210 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Screenshots/gameover_panel_direct_death_fixed.png b/Assets/Screenshots/gameover_panel_direct_death_fixed.png new file mode 100644 index 0000000..7da5782 Binary files /dev/null and b/Assets/Screenshots/gameover_panel_direct_death_fixed.png differ diff --git a/Assets/Screenshots/gameover_panel_direct_death_fixed.png.meta b/Assets/Screenshots/gameover_panel_direct_death_fixed.png.meta new file mode 100644 index 0000000..ef6dda1 --- /dev/null +++ b/Assets/Screenshots/gameover_panel_direct_death_fixed.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: 3d032536e43e00c44b6aee9928ca88a0 +TextureImporter: + internalIDToNameTable: + - first: + 213: 633741089748541556 + second: gameover_panel_direct_death_fixed_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: gameover_panel_direct_death_fixed_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 698 + height: 1241 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 470e706d9208bc800800000000000000 + internalID: 633741089748541556 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + gameover_panel_direct_death_fixed_0: 633741089748541556 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Screenshots/gameplay_continue_overlay_sprite_redesign.png b/Assets/Screenshots/gameplay_continue_overlay_sprite_redesign.png new file mode 100644 index 0000000..c911e8e Binary files /dev/null and b/Assets/Screenshots/gameplay_continue_overlay_sprite_redesign.png differ diff --git a/Assets/Screenshots/gameplay_continue_overlay_sprite_redesign.png.meta b/Assets/Screenshots/gameplay_continue_overlay_sprite_redesign.png.meta new file mode 100644 index 0000000..d909719 --- /dev/null +++ b/Assets/Screenshots/gameplay_continue_overlay_sprite_redesign.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: cc820f96ca5d8f041b091da567a0998c +TextureImporter: + internalIDToNameTable: + - first: + 213: 853499033846909977 + second: gameplay_continue_overlay_sprite_redesign_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: gameplay_continue_overlay_sprite_redesign_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 698 + height: 1241 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 91c859869dc38db00800000000000000 + internalID: 853499033846909977 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + gameplay_continue_overlay_sprite_redesign_0: 853499033846909977 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Screenshots/gameplay_continue_overlay_sprite_redesign_final.png b/Assets/Screenshots/gameplay_continue_overlay_sprite_redesign_final.png new file mode 100644 index 0000000..614b247 Binary files /dev/null and b/Assets/Screenshots/gameplay_continue_overlay_sprite_redesign_final.png differ diff --git a/Assets/Screenshots/gameplay_continue_overlay_sprite_redesign_final.png.meta b/Assets/Screenshots/gameplay_continue_overlay_sprite_redesign_final.png.meta new file mode 100644 index 0000000..dd55d35 --- /dev/null +++ b/Assets/Screenshots/gameplay_continue_overlay_sprite_redesign_final.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: 2585386bafde7bf4f8453d97f6fb3b00 +TextureImporter: + internalIDToNameTable: + - first: + 213: 33494475652622720 + second: gameplay_continue_overlay_sprite_redesign_final_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: gameplay_continue_overlay_sprite_redesign_final_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 698 + height: 1241 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 08966335c0ff67000800000000000000 + internalID: 33494475652622720 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + gameplay_continue_overlay_sprite_redesign_final_0: 33494475652622720 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Screenshots/gameplay_continue_overlay_sprite_redesign_fixed.png b/Assets/Screenshots/gameplay_continue_overlay_sprite_redesign_fixed.png new file mode 100644 index 0000000..d584419 Binary files /dev/null and b/Assets/Screenshots/gameplay_continue_overlay_sprite_redesign_fixed.png differ diff --git a/Assets/Screenshots/gameplay_continue_overlay_sprite_redesign_fixed.png.meta b/Assets/Screenshots/gameplay_continue_overlay_sprite_redesign_fixed.png.meta new file mode 100644 index 0000000..58b1b3a --- /dev/null +++ b/Assets/Screenshots/gameplay_continue_overlay_sprite_redesign_fixed.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: 864368987c4120e41bf351224662fa26 +TextureImporter: + internalIDToNameTable: + - first: + 213: -983061616352849355 + second: gameplay_continue_overlay_sprite_redesign_fixed_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: gameplay_continue_overlay_sprite_redesign_fixed_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 698 + height: 1241 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 53297fc1ba67b52f0800000000000000 + internalID: -983061616352849355 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + gameplay_continue_overlay_sprite_redesign_fixed_0: -983061616352849355 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Screenshots/gameplay_dev_stats_panel_visible.png b/Assets/Screenshots/gameplay_dev_stats_panel_visible.png new file mode 100644 index 0000000..d74691e Binary files /dev/null and b/Assets/Screenshots/gameplay_dev_stats_panel_visible.png differ diff --git a/Assets/Screenshots/gameplay_dev_stats_panel_visible.png.meta b/Assets/Screenshots/gameplay_dev_stats_panel_visible.png.meta new file mode 100644 index 0000000..8a5b091 --- /dev/null +++ b/Assets/Screenshots/gameplay_dev_stats_panel_visible.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: 36bd8985aca579d4d81c6fad8cf7c7f0 +TextureImporter: + internalIDToNameTable: + - first: + 213: 2788602301444786866 + second: gameplay_dev_stats_panel_visible_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: gameplay_dev_stats_panel_visible_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 698 + height: 1241 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 2ba047db40b13b620800000000000000 + internalID: 2788602301444786866 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + gameplay_dev_stats_panel_visible_0: 2788602301444786866 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Screenshots/gameplay_hud_sprite_redesign.png b/Assets/Screenshots/gameplay_hud_sprite_redesign.png new file mode 100644 index 0000000..5eaf824 Binary files /dev/null and b/Assets/Screenshots/gameplay_hud_sprite_redesign.png differ diff --git a/Assets/Screenshots/gameplay_hud_sprite_redesign.png.meta b/Assets/Screenshots/gameplay_hud_sprite_redesign.png.meta new file mode 100644 index 0000000..47f98c0 --- /dev/null +++ b/Assets/Screenshots/gameplay_hud_sprite_redesign.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: fd38b2f350042a3419d9110e33ddcdd2 +TextureImporter: + internalIDToNameTable: + - first: + 213: 8449785252589798085 + second: gameplay_hud_sprite_redesign_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: gameplay_hud_sprite_redesign_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 698 + height: 1241 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 5c203f81beaa34570800000000000000 + internalID: 8449785252589798085 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + gameplay_hud_sprite_redesign_0: 8449785252589798085 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Screenshots/gameplay_hud_sprite_redesign_large.png b/Assets/Screenshots/gameplay_hud_sprite_redesign_large.png new file mode 100644 index 0000000..ec151ec Binary files /dev/null and b/Assets/Screenshots/gameplay_hud_sprite_redesign_large.png differ diff --git a/Assets/Screenshots/gameplay_hud_sprite_redesign_large.png.meta b/Assets/Screenshots/gameplay_hud_sprite_redesign_large.png.meta new file mode 100644 index 0000000..3cd7d21 --- /dev/null +++ b/Assets/Screenshots/gameplay_hud_sprite_redesign_large.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: 61664431408b7154bb6150cb65427e16 +TextureImporter: + internalIDToNameTable: + - first: + 213: -5962762728378039441 + second: gameplay_hud_sprite_redesign_large_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: gameplay_hud_sprite_redesign_large_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 698 + height: 1241 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: f63861ff3e2004da0800000000000000 + internalID: -5962762728378039441 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + gameplay_hud_sprite_redesign_large_0: -5962762728378039441 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Screenshots/gameplay_prize_overlay_sprite_redesign.png b/Assets/Screenshots/gameplay_prize_overlay_sprite_redesign.png new file mode 100644 index 0000000..17bb192 Binary files /dev/null and b/Assets/Screenshots/gameplay_prize_overlay_sprite_redesign.png differ diff --git a/Assets/Screenshots/gameplay_prize_overlay_sprite_redesign.png.meta b/Assets/Screenshots/gameplay_prize_overlay_sprite_redesign.png.meta new file mode 100644 index 0000000..57f27e2 --- /dev/null +++ b/Assets/Screenshots/gameplay_prize_overlay_sprite_redesign.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: 00cd739dbb71ca348a0075136b2ec601 +TextureImporter: + internalIDToNameTable: + - first: + 213: -6222900476458118949 + second: gameplay_prize_overlay_sprite_redesign_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: gameplay_prize_overlay_sprite_redesign_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 698 + height: 1241 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: bd0da1cacf0d3a9a0800000000000000 + internalID: -6222900476458118949 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + gameplay_prize_overlay_sprite_redesign_0: -6222900476458118949 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Screenshots/main_menu_playmode.png b/Assets/Screenshots/main_menu_playmode.png new file mode 100644 index 0000000..7da5782 Binary files /dev/null and b/Assets/Screenshots/main_menu_playmode.png differ diff --git a/Assets/Screenshots/main_menu_playmode.png.meta b/Assets/Screenshots/main_menu_playmode.png.meta new file mode 100644 index 0000000..1c20351 --- /dev/null +++ b/Assets/Screenshots/main_menu_playmode.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: be02a77699f5d0c47a4fa5f0eab307a0 +TextureImporter: + internalIDToNameTable: + - first: + 213: -1921745591981713898 + second: main_menu_playmode_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: main_menu_playmode_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 698 + height: 1241 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 616d141e0969455e0800000000000000 + internalID: -1921745591981713898 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + main_menu_playmode_0: -1921745591981713898 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Screenshots/main_menu_scene.png b/Assets/Screenshots/main_menu_scene.png new file mode 100644 index 0000000..520c818 Binary files /dev/null and b/Assets/Screenshots/main_menu_scene.png differ diff --git a/Assets/Screenshots/main_menu_scene.png.meta b/Assets/Screenshots/main_menu_scene.png.meta new file mode 100644 index 0000000..088ae54 --- /dev/null +++ b/Assets/Screenshots/main_menu_scene.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: f7aea4ad20e7b69429f15bf29b7d74b5 +TextureImporter: + internalIDToNameTable: + - first: + 213: 4699180996166801269 + second: main_menu_scene_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: main_menu_scene_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1087 + height: 1241 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 577d9cbf738d63140800000000000000 + internalID: 4699180996166801269 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + main_menu_scene_0: 4699180996166801269 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Screenshots/prize-modal-focus-play-smoke.png b/Assets/Screenshots/prize-modal-focus-play-smoke.png new file mode 100644 index 0000000..b7599b1 Binary files /dev/null and b/Assets/Screenshots/prize-modal-focus-play-smoke.png differ diff --git a/Assets/Screenshots/prize-modal-focus-play-smoke.png.meta b/Assets/Screenshots/prize-modal-focus-play-smoke.png.meta new file mode 100644 index 0000000..e9676d8 --- /dev/null +++ b/Assets/Screenshots/prize-modal-focus-play-smoke.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: 7b1a86bea9a710347a33ca94b4e623b3 +TextureImporter: + internalIDToNameTable: + - first: + 213: -6758097801378009398 + second: prize-modal-focus-play-smoke_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: prize-modal-focus-play-smoke_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 698 + height: 1241 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: acee3870bd96632a0800000000000000 + internalID: -6758097801378009398 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + prize-modal-focus-play-smoke_0: -6758097801378009398 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Screenshots/prize-modal-focus-smoke-1.png b/Assets/Screenshots/prize-modal-focus-smoke-1.png new file mode 100644 index 0000000..ee7dd56 Binary files /dev/null and b/Assets/Screenshots/prize-modal-focus-smoke-1.png differ diff --git a/Assets/Screenshots/prize-modal-focus-smoke-1.png.meta b/Assets/Screenshots/prize-modal-focus-smoke-1.png.meta new file mode 100644 index 0000000..6a1f526 --- /dev/null +++ b/Assets/Screenshots/prize-modal-focus-smoke-1.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: a50ab562a12ea3e4cbe2e5fbf7a028f5 +TextureImporter: + internalIDToNameTable: + - first: + 213: 6513244024659437999 + second: prize-modal-focus-smoke-1_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: prize-modal-focus-smoke-1_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1920 + height: 1080 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: fa9e2498ee0b36a50800000000000000 + internalID: 6513244024659437999 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + prize-modal-focus-smoke-1_0: 6513244024659437999 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Screenshots/prize-modal-focus-smoke.png b/Assets/Screenshots/prize-modal-focus-smoke.png new file mode 100644 index 0000000..ee7dd56 Binary files /dev/null and b/Assets/Screenshots/prize-modal-focus-smoke.png differ diff --git a/Assets/Screenshots/prize-modal-focus-smoke.png.meta b/Assets/Screenshots/prize-modal-focus-smoke.png.meta new file mode 100644 index 0000000..fce0a86 --- /dev/null +++ b/Assets/Screenshots/prize-modal-focus-smoke.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: a1da950fb02b2a341b91d376fa082fa4 +TextureImporter: + internalIDToNameTable: + - first: + 213: -4295433110507755987 + second: prize-modal-focus-smoke_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: prize-modal-focus-smoke_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1920 + height: 1080 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: d26ebbb185e8364c0800000000000000 + internalID: -4295433110507755987 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + prize-modal-focus-smoke_0: -4295433110507755987 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Screenshots/prize_overlay_play_render.png b/Assets/Screenshots/prize_overlay_play_render.png new file mode 100644 index 0000000..8c4b28a Binary files /dev/null and b/Assets/Screenshots/prize_overlay_play_render.png differ diff --git a/Assets/Screenshots/prize_overlay_play_render.png.meta b/Assets/Screenshots/prize_overlay_play_render.png.meta new file mode 100644 index 0000000..74344d5 --- /dev/null +++ b/Assets/Screenshots/prize_overlay_play_render.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: c834887d1d4ad974f89b821228349558 +TextureImporter: + internalIDToNameTable: + - first: + 213: -8578960766550793857 + second: prize_overlay_play_render_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: prize_overlay_play_render_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 698 + height: 1241 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: f712ab7d2a861f880800000000000000 + internalID: -8578960766550793857 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + prize_overlay_play_render_0: -8578960766550793857 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Screenshots/screenshot-20260611-134506.png b/Assets/Screenshots/screenshot-20260611-134506.png new file mode 100644 index 0000000..03b9370 Binary files /dev/null and b/Assets/Screenshots/screenshot-20260611-134506.png differ diff --git a/Assets/Screenshots/screenshot-20260611-134506.png.meta b/Assets/Screenshots/screenshot-20260611-134506.png.meta new file mode 100644 index 0000000..037b7ea --- /dev/null +++ b/Assets/Screenshots/screenshot-20260611-134506.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: be6031a8fbc6728418c8ccd0a0eedfa5 +TextureImporter: + internalIDToNameTable: + - first: + 213: 3209825577113534537 + second: screenshot-20260611-134506_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: screenshot-20260611-134506_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 698 + height: 1241 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 940c0d22b579b8c20800000000000000 + internalID: 3209825577113534537 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + screenshot-20260611-134506_0: 3209825577113534537 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Screenshots/screenshot-20260611-142933.png b/Assets/Screenshots/screenshot-20260611-142933.png new file mode 100644 index 0000000..2d2ff22 Binary files /dev/null and b/Assets/Screenshots/screenshot-20260611-142933.png differ diff --git a/Assets/Screenshots/screenshot-20260611-142933.png.meta b/Assets/Screenshots/screenshot-20260611-142933.png.meta new file mode 100644 index 0000000..5a8b2f1 --- /dev/null +++ b/Assets/Screenshots/screenshot-20260611-142933.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: ac4b947bebcabc44dbf27e18fff0d1ef +TextureImporter: + internalIDToNameTable: + - first: + 213: -254849939547654045 + second: screenshot-20260611-142933_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: screenshot-20260611-142933_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 698 + height: 1241 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 3687b3a8457967cf0800000000000000 + internalID: -254849939547654045 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + screenshot-20260611-142933_0: -254849939547654045 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Screenshots/screenshot-20260611-143026.png b/Assets/Screenshots/screenshot-20260611-143026.png new file mode 100644 index 0000000..df25bb1 Binary files /dev/null and b/Assets/Screenshots/screenshot-20260611-143026.png differ diff --git a/Assets/Screenshots/screenshot-20260611-143026.png.meta b/Assets/Screenshots/screenshot-20260611-143026.png.meta new file mode 100644 index 0000000..d796592 --- /dev/null +++ b/Assets/Screenshots/screenshot-20260611-143026.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: f7b8677baeeb9a74383640e37cffb8a9 +TextureImporter: + internalIDToNameTable: + - first: + 213: -1218041822826240822 + second: screenshot-20260611-143026_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: screenshot-20260611-143026_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 698 + height: 1241 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: ac46fd46a65a81fe0800000000000000 + internalID: -1218041822826240822 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + screenshot-20260611-143026_0: -1218041822826240822 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Screenshots/service_info_modal_check.png b/Assets/Screenshots/service_info_modal_check.png new file mode 100644 index 0000000..d452949 Binary files /dev/null and b/Assets/Screenshots/service_info_modal_check.png differ diff --git a/Assets/Screenshots/service_info_modal_check.png.meta b/Assets/Screenshots/service_info_modal_check.png.meta new file mode 100644 index 0000000..5053711 --- /dev/null +++ b/Assets/Screenshots/service_info_modal_check.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: bd3b3bf1deed7c5478ce2ccc759f030a +TextureImporter: + internalIDToNameTable: + - first: + 213: -2432049245201484790 + second: service_info_modal_check_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: service_info_modal_check_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 698 + height: 1241 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: a043287d810af3ed0800000000000000 + internalID: -2432049245201484790 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + service_info_modal_check_0: -2432049245201484790 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Screenshots/service_info_modal_ui_render-1.png b/Assets/Screenshots/service_info_modal_ui_render-1.png new file mode 100644 index 0000000..69abde1 Binary files /dev/null and b/Assets/Screenshots/service_info_modal_ui_render-1.png differ diff --git a/Assets/Screenshots/service_info_modal_ui_render-1.png.meta b/Assets/Screenshots/service_info_modal_ui_render-1.png.meta new file mode 100644 index 0000000..95438c6 --- /dev/null +++ b/Assets/Screenshots/service_info_modal_ui_render-1.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: bf10d741d9186a54d8edc1abc94295ba +TextureImporter: + internalIDToNameTable: + - first: + 213: 4369281559604011672 + second: service_info_modal_ui_render-1_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: service_info_modal_ui_render-1_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1920 + height: 1080 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 892acd3dd6ec2ac30800000000000000 + internalID: 4369281559604011672 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + service_info_modal_ui_render-1_0: 4369281559604011672 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Screenshots/service_info_modal_ui_render-2.png b/Assets/Screenshots/service_info_modal_ui_render-2.png new file mode 100644 index 0000000..69abde1 Binary files /dev/null and b/Assets/Screenshots/service_info_modal_ui_render-2.png differ diff --git a/Assets/Screenshots/service_info_modal_ui_render-2.png.meta b/Assets/Screenshots/service_info_modal_ui_render-2.png.meta new file mode 100644 index 0000000..8b9c3e9 --- /dev/null +++ b/Assets/Screenshots/service_info_modal_ui_render-2.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: 38875bb98f22de74a9561ae56bbb2851 +TextureImporter: + internalIDToNameTable: + - first: + 213: -2906643133530269855 + second: service_info_modal_ui_render-2_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: service_info_modal_ui_render-2_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1920 + height: 1080 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 1679919587789a7d0800000000000000 + internalID: -2906643133530269855 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + service_info_modal_ui_render-2_0: -2906643133530269855 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Screenshots/service_info_modal_ui_render.png b/Assets/Screenshots/service_info_modal_ui_render.png new file mode 100644 index 0000000..ee7dd56 Binary files /dev/null and b/Assets/Screenshots/service_info_modal_ui_render.png differ diff --git a/Assets/Screenshots/service_info_modal_ui_render.png.meta b/Assets/Screenshots/service_info_modal_ui_render.png.meta new file mode 100644 index 0000000..09383aa --- /dev/null +++ b/Assets/Screenshots/service_info_modal_ui_render.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: 82a5808f7422db9448377a9870e68984 +TextureImporter: + internalIDToNameTable: + - first: + 213: -3732279464272664121 + second: service_info_modal_ui_render_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: service_info_modal_ui_render_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1920 + height: 1080 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 7c9ea890a97443cc0800000000000000 + internalID: -3732279464272664121 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + service_info_modal_ui_render_0: -3732279464272664121 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Screenshots/service_text_input_discrete_right_no_skip.png b/Assets/Screenshots/service_text_input_discrete_right_no_skip.png new file mode 100644 index 0000000..2989c4e Binary files /dev/null and b/Assets/Screenshots/service_text_input_discrete_right_no_skip.png differ diff --git a/Assets/Screenshots/service_text_input_discrete_right_no_skip.png.meta b/Assets/Screenshots/service_text_input_discrete_right_no_skip.png.meta new file mode 100644 index 0000000..1f1ff13 --- /dev/null +++ b/Assets/Screenshots/service_text_input_discrete_right_no_skip.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: a115ccd7fb8cdff42a7e38cc74dd9c86 +TextureImporter: + internalIDToNameTable: + - first: + 213: -4662236230716878853 + second: service_text_input_discrete_right_no_skip_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: service_text_input_discrete_right_no_skip_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 698 + height: 1241 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: bff0a2989d86c4fb0800000000000000 + internalID: -4662236230716878853 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + service_text_input_discrete_right_no_skip_0: -4662236230716878853 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Screenshots/service_text_input_discrete_right_no_skip_2.png b/Assets/Screenshots/service_text_input_discrete_right_no_skip_2.png new file mode 100644 index 0000000..905f0a2 Binary files /dev/null and b/Assets/Screenshots/service_text_input_discrete_right_no_skip_2.png differ diff --git a/Assets/Screenshots/service_text_input_discrete_right_no_skip_2.png.meta b/Assets/Screenshots/service_text_input_discrete_right_no_skip_2.png.meta new file mode 100644 index 0000000..5cdc4aa --- /dev/null +++ b/Assets/Screenshots/service_text_input_discrete_right_no_skip_2.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: 5fdc9925931973343bee78c42a7784ec +TextureImporter: + internalIDToNameTable: + - first: + 213: 6397094884569126916 + second: service_text_input_discrete_right_no_skip_2_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: service_text_input_discrete_right_no_skip_2_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 698 + height: 1241 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 408163d77eb07c850800000000000000 + internalID: 6397094884569126916 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + service_text_input_discrete_right_no_skip_2_0: 6397094884569126916 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Screenshots/service_text_input_discrete_right_no_skip_final.png b/Assets/Screenshots/service_text_input_discrete_right_no_skip_final.png new file mode 100644 index 0000000..905f0a2 Binary files /dev/null and b/Assets/Screenshots/service_text_input_discrete_right_no_skip_final.png differ diff --git a/Assets/Screenshots/service_text_input_discrete_right_no_skip_final.png.meta b/Assets/Screenshots/service_text_input_discrete_right_no_skip_final.png.meta new file mode 100644 index 0000000..0a1a9b5 --- /dev/null +++ b/Assets/Screenshots/service_text_input_discrete_right_no_skip_final.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: 1fbac32213e7e424b97e1e2ddf086501 +TextureImporter: + internalIDToNameTable: + - first: + 213: 449799378185761471 + second: service_text_input_discrete_right_no_skip_final_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: service_text_input_discrete_right_no_skip_final_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 698 + height: 1241 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: fb234fcb6220e3600800000000000000 + internalID: 449799378185761471 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + service_text_input_discrete_right_no_skip_final_0: 449799378185761471 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Screenshots/service_text_input_loop_navigation_keyboard_ok.png b/Assets/Screenshots/service_text_input_loop_navigation_keyboard_ok.png new file mode 100644 index 0000000..78ba255 Binary files /dev/null and b/Assets/Screenshots/service_text_input_loop_navigation_keyboard_ok.png differ diff --git a/Assets/Screenshots/service_text_input_loop_navigation_keyboard_ok.png.meta b/Assets/Screenshots/service_text_input_loop_navigation_keyboard_ok.png.meta new file mode 100644 index 0000000..b3b437d --- /dev/null +++ b/Assets/Screenshots/service_text_input_loop_navigation_keyboard_ok.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: c51fbbfba9ccc424b9762d4f7c52dd8a +TextureImporter: + internalIDToNameTable: + - first: + 213: -6953413858631157431 + second: service_text_input_loop_navigation_keyboard_ok_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: service_text_input_loop_navigation_keyboard_ok_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 698 + height: 1241 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 949f204bfe2808f90800000000000000 + internalID: -6953413858631157431 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + service_text_input_loop_navigation_keyboard_ok_0: -6953413858631157431 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Screenshots/service_text_input_modal_playmode.png b/Assets/Screenshots/service_text_input_modal_playmode.png new file mode 100644 index 0000000..d452949 Binary files /dev/null and b/Assets/Screenshots/service_text_input_modal_playmode.png differ diff --git a/Assets/Screenshots/service_text_input_modal_playmode.png.meta b/Assets/Screenshots/service_text_input_modal_playmode.png.meta new file mode 100644 index 0000000..f8c2f71 --- /dev/null +++ b/Assets/Screenshots/service_text_input_modal_playmode.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: 4909b719fe7038240a147ec457e9255f +TextureImporter: + internalIDToNameTable: + - first: + 213: 5617729613151109227 + second: service_text_input_modal_playmode_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: service_text_input_modal_playmode_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 698 + height: 1241 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: b608014b15f26fd40800000000000000 + internalID: 5617729613151109227 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + service_text_input_modal_playmode_0: 5617729613151109227 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Screenshots/service_text_input_modal_screen_capture.png b/Assets/Screenshots/service_text_input_modal_screen_capture.png new file mode 100644 index 0000000..589876b Binary files /dev/null and b/Assets/Screenshots/service_text_input_modal_screen_capture.png differ diff --git a/Assets/Screenshots/service_text_input_modal_screen_capture.png.meta b/Assets/Screenshots/service_text_input_modal_screen_capture.png.meta new file mode 100644 index 0000000..de269ec --- /dev/null +++ b/Assets/Screenshots/service_text_input_modal_screen_capture.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: 6cd5d57803ae284499a4c38521d034fb +TextureImporter: + internalIDToNameTable: + - first: + 213: -3566058241931444512 + second: service_text_input_modal_screen_capture_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: service_text_input_modal_screen_capture_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 698 + height: 1241 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 0ee72593ce0d28ec0800000000000000 + internalID: -3566058241931444512 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + service_text_input_modal_screen_capture_0: -3566058241931444512 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Screenshots/service_text_input_modal_screen_capture_2.png b/Assets/Screenshots/service_text_input_modal_screen_capture_2.png new file mode 100644 index 0000000..589876b Binary files /dev/null and b/Assets/Screenshots/service_text_input_modal_screen_capture_2.png differ diff --git a/Assets/Screenshots/service_text_input_modal_screen_capture_2.png.meta b/Assets/Screenshots/service_text_input_modal_screen_capture_2.png.meta new file mode 100644 index 0000000..b12208f --- /dev/null +++ b/Assets/Screenshots/service_text_input_modal_screen_capture_2.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: 2ff60000aea7ebb43b26e6b1ac011553 +TextureImporter: + internalIDToNameTable: + - first: + 213: -3654473533539601013 + second: service_text_input_modal_screen_capture_2_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: service_text_input_modal_screen_capture_2_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 698 + height: 1241 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: b853e48fea3b84dc0800000000000000 + internalID: -3654473533539601013 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + service_text_input_modal_screen_capture_2_0: -3654473533539601013 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Screenshots/service_text_input_modal_screen_capture_fixed.png b/Assets/Screenshots/service_text_input_modal_screen_capture_fixed.png new file mode 100644 index 0000000..eb18b9e Binary files /dev/null and b/Assets/Screenshots/service_text_input_modal_screen_capture_fixed.png differ diff --git a/Assets/Screenshots/service_text_input_modal_screen_capture_fixed.png.meta b/Assets/Screenshots/service_text_input_modal_screen_capture_fixed.png.meta new file mode 100644 index 0000000..5d13f48 --- /dev/null +++ b/Assets/Screenshots/service_text_input_modal_screen_capture_fixed.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: 9165e1113a8fc3e40b3d6baba6b8eee3 +TextureImporter: + internalIDToNameTable: + - first: + 213: 1819211929203260450 + second: service_text_input_modal_screen_capture_fixed_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: service_text_input_modal_screen_capture_fixed_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 698 + height: 1241 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 22c305b6c932f3910800000000000000 + internalID: 1819211929203260450 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + service_text_input_modal_screen_capture_fixed_0: 1819211929203260450 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Screenshots/service_text_input_no_skip_fixed.png b/Assets/Screenshots/service_text_input_no_skip_fixed.png new file mode 100644 index 0000000..eb18b9e Binary files /dev/null and b/Assets/Screenshots/service_text_input_no_skip_fixed.png differ diff --git a/Assets/Screenshots/service_text_input_no_skip_fixed.png.meta b/Assets/Screenshots/service_text_input_no_skip_fixed.png.meta new file mode 100644 index 0000000..7639d16 --- /dev/null +++ b/Assets/Screenshots/service_text_input_no_skip_fixed.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: cdbe6809598c1ec408a438fefec6995e +TextureImporter: + internalIDToNameTable: + - first: + 213: -7147554741299236450 + second: service_text_input_no_skip_fixed_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: service_text_input_no_skip_fixed_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 698 + height: 1241 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: e91333805d8cecc90800000000000000 + internalID: -7147554741299236450 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + service_text_input_no_skip_fixed_0: -7147554741299236450 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableObjects/Gameplay/MainAudioSettings.asset b/Assets/ScriptableObjects/Gameplay/MainAudioSettings.asset new file mode 100644 index 0000000..d64aa06 --- /dev/null +++ b/Assets/ScriptableObjects/Gameplay/MainAudioSettings.asset @@ -0,0 +1,26 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d6b6fabd3acfe76448ca16ffafdbe9f5, type: 3} + m_Name: MainAudioSettings + m_EditorClassIdentifier: DanroJump.Runtime::DanroJump.Audio.GameAudioSettings + mixer: {fileID: 0} + musicGroup: {fileID: 0} + sfxGroup: {fileID: 0} + uiGroup: {fileID: 0} + gameplayGroup: {fileID: 0} + ambienceGroup: {fileID: 0} + musicLoop: {fileID: 0} + musicLoopVolume: 1 + playMusicOnInitialize: 1 + defaultMusicCue: 0 + musicTracks: [] + eventBindings: [] diff --git a/Assets/ScriptableObjects/Gameplay/MainAudioSettings.asset.meta b/Assets/ScriptableObjects/Gameplay/MainAudioSettings.asset.meta new file mode 100644 index 0000000..235644d --- /dev/null +++ b/Assets/ScriptableObjects/Gameplay/MainAudioSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bf7ca407d43a63a4aa7bbee33da26d0f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Runtime/Audio.meta b/Assets/Scripts/Runtime/Audio.meta new file mode 100644 index 0000000..b83844b --- /dev/null +++ b/Assets/Scripts/Runtime/Audio.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4093aa3e2d70b94449e8774d6dda6a03 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Runtime/Audio/GameAudioChannel.cs b/Assets/Scripts/Runtime/Audio/GameAudioChannel.cs new file mode 100644 index 0000000..a22a634 --- /dev/null +++ b/Assets/Scripts/Runtime/Audio/GameAudioChannel.cs @@ -0,0 +1,14 @@ +namespace DanroJump.Audio +{ + /// + /// Логический канал звука, который выбирает AudioSource и mixer group. + /// + public enum GameAudioChannel + { + Sfx = 0, + Ui = 1, + Gameplay = 2, + Music = 3, + Ambience = 4 + } +} diff --git a/Assets/Scripts/Runtime/Audio/GameAudioChannel.cs.meta b/Assets/Scripts/Runtime/Audio/GameAudioChannel.cs.meta new file mode 100644 index 0000000..14c57b3 --- /dev/null +++ b/Assets/Scripts/Runtime/Audio/GameAudioChannel.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 6f7f0071e6f86de4eaa9c40e67d28a58 \ No newline at end of file diff --git a/Assets/Scripts/Runtime/Audio/GameAudioClipBinding.cs b/Assets/Scripts/Runtime/Audio/GameAudioClipBinding.cs new file mode 100644 index 0000000..26c1ae9 --- /dev/null +++ b/Assets/Scripts/Runtime/Audio/GameAudioClipBinding.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Audio; + +namespace DanroJump.Audio +{ + /// + /// Описывает набор клипов и параметры воспроизведения для одного игрового события. + /// + [Serializable] + public sealed class GameAudioClipBinding + { + [SerializeField] private GameAudioEvent eventId; + [SerializeField] private GameAudioChannel channel = GameAudioChannel.Sfx; + [SerializeField] private AudioMixerGroup outputGroupOverride; + [SerializeField] private AudioClip[] clips = Array.Empty(); + [SerializeField] [Range(0f, 1f)] private float volume = 1f; + [SerializeField] private Vector2 pitchRange = Vector2.one; + [SerializeField] private bool spatial; + + public GameAudioEvent EventId => eventId; + + public GameAudioChannel Channel => channel; + + public AudioMixerGroup OutputGroupOverride => outputGroupOverride; + + public IReadOnlyList Clips => clips; + + public float Volume => Mathf.Clamp01(volume); + + public bool Spatial => spatial; + + public bool HasClip => clips != null && clips.Length > 0 && clips[0] != null; + + public float RandomPitch => Mathf.Clamp( + UnityEngine.Random.Range(Mathf.Min(pitchRange.x, pitchRange.y), Mathf.Max(pitchRange.x, pitchRange.y)), + 0.05f, + 3f); + + public AudioClip GetRandomClip() + { + if (clips == null || clips.Length == 0) + { + return null; + } + + var firstValidClip = default(AudioClip); + for (var index = 0; index < clips.Length; index++) + { + if (clips[index] == null) + { + continue; + } + + firstValidClip ??= clips[index]; + } + + if (firstValidClip == null) + { + return null; + } + + for (var attempt = 0; attempt < clips.Length; attempt++) + { + var clip = clips[UnityEngine.Random.Range(0, clips.Length)]; + if (clip != null) + { + return clip; + } + } + + return firstValidClip; + } + } +} diff --git a/Assets/Scripts/Runtime/Audio/GameAudioClipBinding.cs.meta b/Assets/Scripts/Runtime/Audio/GameAudioClipBinding.cs.meta new file mode 100644 index 0000000..ba7e952 --- /dev/null +++ b/Assets/Scripts/Runtime/Audio/GameAudioClipBinding.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 4fdf3e3937b5969408862175d507c30d \ No newline at end of file diff --git a/Assets/Scripts/Runtime/Audio/GameAudioEmitter.cs b/Assets/Scripts/Runtime/Audio/GameAudioEmitter.cs new file mode 100644 index 0000000..4e037e6 --- /dev/null +++ b/Assets/Scripts/Runtime/Audio/GameAudioEmitter.cs @@ -0,0 +1,62 @@ +using System; +using UnityEngine; +using Zenject; + +namespace DanroJump.Audio +{ + /// + /// Универсальный мост от prefab/Animation Event к централизованной аудиосистеме. + /// + [DisallowMultipleComponent] + [AddComponentMenu("Audio/Game Audio Emitter")] + public sealed class GameAudioEmitter : MonoBehaviour + { + [SerializeField] private bool playAtTransform = true; + + private IGameAudioService audioService; + + [Inject] + public void Construct([InjectOptional] IGameAudioService injectedAudioService = null) + { + audioService = injectedAudioService; + } + + public void Play(GameAudioEvent eventId) + { + if (playAtTransform) + { + audioService?.Play(eventId, transform.position); + return; + } + + audioService?.Play(eventId); + } + + public void PlayGlobal(GameAudioEvent eventId) + { + audioService?.Play(eventId); + } + + public void PlayByName(string eventName) + { + if (string.IsNullOrWhiteSpace(eventName) || + !Enum.TryParse(eventName, true, out GameAudioEvent eventId)) + { + return; + } + + Play(eventId); + } + + public void PlayGlobalByName(string eventName) + { + if (string.IsNullOrWhiteSpace(eventName) || + !Enum.TryParse(eventName, true, out GameAudioEvent eventId)) + { + return; + } + + PlayGlobal(eventId); + } + } +} diff --git a/Assets/Scripts/Runtime/Audio/GameAudioEmitter.cs.meta b/Assets/Scripts/Runtime/Audio/GameAudioEmitter.cs.meta new file mode 100644 index 0000000..d4bf65e --- /dev/null +++ b/Assets/Scripts/Runtime/Audio/GameAudioEmitter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9b03db1b37c64e5fba8ba9742bfceac3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Runtime/Audio/GameAudioEvent.cs b/Assets/Scripts/Runtime/Audio/GameAudioEvent.cs new file mode 100644 index 0000000..e4836ba --- /dev/null +++ b/Assets/Scripts/Runtime/Audio/GameAudioEvent.cs @@ -0,0 +1,36 @@ +namespace DanroJump.Audio +{ + /// + /// Канонические события, для которых можно назначать клипы в GameAudioSettings. + /// + public enum GameAudioEvent + { + UiNavigate = 0, + UiSubmit = 1, + UiBack = 2, + UiError = 3, + GameStart = 10, + PlayerJump = 20, + PlayerDeath = 21, + PlayerRespawn = 22, + GameOver = 23, + ContinueAccepted = 24, + PlayerLand = 25, + PlayerHurt = 26, + PlayerBoostStarted = 27, + PlayerBoostEnded = 28, + CoinCollected = 30, + BoostCollected = 31, + SpringActivated = 32, + JumpPadActivated = 33, + JetpackCollected = 34, + PrizeStarted = 40, + PrizeQrStarted = 41, + PrizePhysicalStarted = 42, + EnemySpawned = 50, + EnemyMoved = 51, + EnemyAttack = 52, + EnemyHit = 53, + EnemyDefeated = 54 + } +} diff --git a/Assets/Scripts/Runtime/Audio/GameAudioEvent.cs.meta b/Assets/Scripts/Runtime/Audio/GameAudioEvent.cs.meta new file mode 100644 index 0000000..8db6539 --- /dev/null +++ b/Assets/Scripts/Runtime/Audio/GameAudioEvent.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 5f34bfc02f3100e4d8e650f3bebae100 \ No newline at end of file diff --git a/Assets/Scripts/Runtime/Audio/GameAudioService.cs b/Assets/Scripts/Runtime/Audio/GameAudioService.cs new file mode 100644 index 0000000..fbcb656 --- /dev/null +++ b/Assets/Scripts/Runtime/Audio/GameAudioService.cs @@ -0,0 +1,358 @@ +using System; +using System.Collections.Generic; +using DanroJump.Settings; +using UnityEngine; +using UnityEngine.Audio; +using Zenject; +using Object = UnityEngine.Object; + +namespace DanroJump.Audio +{ + /// + /// Централизованный проигрыватель звуков: применяет service-volume, routes events в mixer groups и держит источники звука. + /// + public sealed class GameAudioService : IGameAudioService, IInitializable, IDisposable + { + public const string MusicVolumeParameter = "MusicVolume"; + public const string SoundsVolumeParameter = "SoundsVolume"; + public const float MutedDecibels = -80f; + private const int SpatialSourcePoolSize = 8; + + private readonly GameAudioSettings settings; + private readonly IReadOnlyServiceSettings serviceSettings; + private readonly List spatialSources = new(); + private GameObject root; + private AudioSource musicSource; + private AudioSource uiSource; + private AudioSource gameplaySource; + private int nextSpatialSourceIndex; + private GameMusicCue? currentMusicCue; + private bool subscribedToSettings; + + public GameAudioService( + [InjectOptional] GameAudioSettings settings = null, + [InjectOptional] IReadOnlyServiceSettings serviceSettings = null) + { + this.settings = settings; + this.serviceSettings = serviceSettings; + } + + public bool IsReady => HasPlayableConfiguration(); + + public bool IsMusicPlaying => musicSource != null && musicSource.isPlaying; + + public GameMusicCue? CurrentMusicCue => currentMusicCue; + + public void Initialize() + { + if (!IsReady) + { + Debug.LogWarning($"{nameof(GameAudioService)} has no complete playable audio configuration."); + } + + EnsureSources(); + SubscribeToSettings(); + ApplyServiceVolumes(); + if (settings == null || settings.PlayMusicOnInitialize) + { + StartMusic(); + } + } + + public void Dispose() + { + UnsubscribeFromSettings(); + + if (root != null) + { + if (Application.isPlaying) + { + Object.Destroy(root); + } + else + { + Object.DestroyImmediate(root); + } + + root = null; + } + } + + public void Play(GameAudioEvent eventId) + { + PlayInternal(eventId, null); + } + + public void Play(GameAudioEvent eventId, Vector3 worldPosition) + { + PlayInternal(eventId, worldPosition); + } + + public void StartMusic() + { + if (settings == null) + { + return; + } + + if (settings.TryGetDefaultMusicTrack(out var track)) + { + currentMusicCue = track.Cue; + PlayMusicTrack(track); + return; + } + + StartLegacyMusicLoop(); + } + + public void PlayMusic(GameMusicCue cue) + { + if (settings == null || !settings.TryGetMusicTrack(cue, out var track)) + { + return; + } + + currentMusicCue = cue; + PlayMusicTrack(track); + } + + public void StopMusic() + { + if (musicSource != null) + { + musicSource.Stop(); + musicSource.clip = null; + currentMusicCue = null; + } + } + + public void ApplyServiceVolumes() + { + if (settings?.Mixer == null) + { + return; + } + + var musicVolume = serviceSettings != null ? serviceSettings.GetFloat(ServiceSettingsKeys.MusicVolume) : 1f; + var soundsVolume = serviceSettings != null ? serviceSettings.GetFloat(ServiceSettingsKeys.SoundsVolume) : 1f; + settings.Mixer.SetFloat(MusicVolumeParameter, LinearToDecibels(musicVolume)); + settings.Mixer.SetFloat(SoundsVolumeParameter, LinearToDecibels(soundsVolume)); + } + + public static float LinearToDecibels(float value) + { + var clamped = Mathf.Clamp01(value); + return clamped <= 0.0001f ? MutedDecibels : Mathf.Log10(clamped) * 20f; + } + + private void StartLegacyMusicLoop() + { + if (settings == null || settings.MusicLoop == null) + { + return; + } + + EnsureSources(); + musicSource.clip = settings.MusicLoop; + musicSource.loop = true; + musicSource.volume = settings.MusicLoopVolume; + musicSource.pitch = 1f; + musicSource.outputAudioMixerGroup = settings.MusicGroup; + currentMusicCue = null; + + if (!musicSource.isPlaying) + { + musicSource.Play(); + } + } + + private void PlayMusicTrack(GameMusicTrack track) + { + if (track == null || track.Clip == null) + { + return; + } + + EnsureSources(); + if (musicSource.isPlaying && musicSource.clip == track.Clip) + { + musicSource.volume = track.Volume; + musicSource.loop = track.Loop; + musicSource.outputAudioMixerGroup = track.OutputGroupOverride != null + ? track.OutputGroupOverride + : settings.MusicGroup; + return; + } + + musicSource.Stop(); + musicSource.clip = track.Clip; + musicSource.loop = track.Loop; + musicSource.volume = track.Volume; + musicSource.pitch = 1f; + musicSource.outputAudioMixerGroup = track.OutputGroupOverride != null + ? track.OutputGroupOverride + : settings.MusicGroup; + musicSource.Play(); + } + + private void PlayInternal(GameAudioEvent eventId, Vector3? worldPosition) + { + if (settings == null || !settings.TryGetBinding(eventId, out var binding)) + { + return; + } + + var clip = binding.GetRandomClip(); + if (clip == null) + { + return; + } + + EnsureSources(); + var source = ResolveSource(binding, worldPosition); + source.outputAudioMixerGroup = binding.OutputGroupOverride != null + ? binding.OutputGroupOverride + : settings.ResolveGroup(binding.Channel); + source.pitch = binding.RandomPitch; + source.spatialBlend = binding.Spatial || worldPosition.HasValue ? 1f : 0f; + + if (worldPosition.HasValue) + { + source.transform.position = worldPosition.Value; + } + + source.PlayOneShot(clip, binding.Volume); + } + + private AudioSource ResolveSource(GameAudioClipBinding binding, Vector3? worldPosition) + { + if (binding.Spatial || worldPosition.HasValue) + { + return ResolveSpatialSource(); + } + + return binding.Channel switch + { + GameAudioChannel.Music => musicSource, + GameAudioChannel.Ui => uiSource, + _ => gameplaySource + }; + } + + private void EnsureSources() + { + if (root != null) + { + return; + } + + root = new GameObject("Game Audio Service"); + if (Application.isPlaying) + { + Object.DontDestroyOnLoad(root); + } + + musicSource = CreateSource("Music", GameAudioChannel.Music); + uiSource = CreateSource("UI", GameAudioChannel.Ui); + gameplaySource = CreateSource("Gameplay", GameAudioChannel.Gameplay); + for (var index = 0; index < SpatialSourcePoolSize; index++) + { + var spatialSource = CreateSource($"Spatial {index + 1}", GameAudioChannel.Gameplay); + spatialSource.spatialBlend = 1f; + spatialSources.Add(spatialSource); + } + } + + private AudioSource ResolveSpatialSource() + { + if (spatialSources.Count == 0) + { + return gameplaySource; + } + + var source = spatialSources[nextSpatialSourceIndex % spatialSources.Count]; + nextSpatialSourceIndex = (nextSpatialSourceIndex + 1) % spatialSources.Count; + return source; + } + + private AudioSource CreateSource(string sourceName, GameAudioChannel channel) + { + var sourceObject = new GameObject(sourceName); + sourceObject.transform.SetParent(root.transform, false); + var source = sourceObject.AddComponent(); + source.playOnAwake = false; + source.loop = false; + source.outputAudioMixerGroup = settings != null ? settings.ResolveGroup(channel) : null; + return source; + } + + private bool HasPlayableConfiguration() + { + if (settings == null || + settings.Mixer == null || + settings.MusicGroup == null || + settings.ResolveGroup(GameAudioChannel.Sfx) == null || + settings.ResolveGroup(GameAudioChannel.Ui) == null || + settings.ResolveGroup(GameAudioChannel.Gameplay) == null || + settings.ResolveGroup(GameAudioChannel.Ambience) == null) + { + return false; + } + + var bindings = settings.EventBindings; + if (bindings == null) + { + return false; + } + + for (var index = 0; index < bindings.Count; index++) + { + if (bindings[index] != null && bindings[index].HasClip) + { + return true; + } + } + + return false; + } + + private void SubscribeToSettings() + { + if (subscribedToSettings || serviceSettings == null) + { + return; + } + + serviceSettings.SettingsLoaded += HandleSettingsLoaded; + serviceSettings.SettingChanged += HandleSettingChanged; + subscribedToSettings = true; + } + + private void UnsubscribeFromSettings() + { + if (!subscribedToSettings || serviceSettings == null) + { + subscribedToSettings = false; + return; + } + + serviceSettings.SettingsLoaded -= HandleSettingsLoaded; + serviceSettings.SettingChanged -= HandleSettingChanged; + subscribedToSettings = false; + } + + private void HandleSettingsLoaded() + { + ApplyServiceVolumes(); + } + + private void HandleSettingChanged(string key, ServiceSettingValue value) + { + if (string.Equals(key, ServiceSettingsKeys.MusicVolume, StringComparison.Ordinal) || + string.Equals(key, ServiceSettingsKeys.SoundsVolume, StringComparison.Ordinal)) + { + ApplyServiceVolumes(); + } + } + } +} diff --git a/Assets/Scripts/Runtime/Audio/GameAudioService.cs.meta b/Assets/Scripts/Runtime/Audio/GameAudioService.cs.meta new file mode 100644 index 0000000..bf91a3c --- /dev/null +++ b/Assets/Scripts/Runtime/Audio/GameAudioService.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 772f929cc95083c4dbc06288a2a550b4 \ No newline at end of file diff --git a/Assets/Scripts/Runtime/Audio/GameAudioSettings.cs b/Assets/Scripts/Runtime/Audio/GameAudioSettings.cs new file mode 100644 index 0000000..320a018 --- /dev/null +++ b/Assets/Scripts/Runtime/Audio/GameAudioSettings.cs @@ -0,0 +1,121 @@ +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Audio; + +namespace DanroJump.Audio +{ + /// + /// Настройки звуковой подсистемы: микшер, группы каналов, музыка и таблица событий. + /// + [CreateAssetMenu(menuName = "Danro Jump/Audio/Game Audio Settings", fileName = "GameAudioSettings")] + public sealed class GameAudioSettings : ScriptableObject + { + [Header("Mixer")] + [SerializeField] private AudioMixer mixer; + [SerializeField] private AudioMixerGroup musicGroup; + [SerializeField] private AudioMixerGroup sfxGroup; + [SerializeField] private AudioMixerGroup uiGroup; + [SerializeField] private AudioMixerGroup gameplayGroup; + [SerializeField] private AudioMixerGroup ambienceGroup; + + [Header("Music")] + [SerializeField] private AudioClip musicLoop; + [SerializeField] [Range(0f, 1f)] private float musicLoopVolume = 1f; + [SerializeField] private bool playMusicOnInitialize = true; + [SerializeField] private GameMusicCue defaultMusicCue = GameMusicCue.Menu; + [SerializeField] private List musicTracks = new(); + + [Header("Events")] + [SerializeField] private List eventBindings = new(); + + public AudioMixer Mixer => mixer; + + public AudioMixerGroup MusicGroup => musicGroup; + + public AudioClip MusicLoop => musicLoop; + + public float MusicLoopVolume => Mathf.Clamp01(musicLoopVolume); + + public bool PlayMusicOnInitialize => playMusicOnInitialize; + + public GameMusicCue DefaultMusicCue => defaultMusicCue; + + public IReadOnlyList MusicTracks => musicTracks; + + public IReadOnlyList EventBindings => eventBindings; + + public bool TryGetBinding(GameAudioEvent eventId, out GameAudioClipBinding binding) + { + if (eventBindings != null) + { + for (var index = 0; index < eventBindings.Count; index++) + { + var candidate = eventBindings[index]; + if (candidate != null && candidate.EventId == eventId) + { + binding = candidate; + return true; + } + } + } + + binding = null; + return false; + } + + public bool TryGetMusicTrack(GameMusicCue cue, out GameMusicTrack track) + { + if (musicTracks != null) + { + for (var index = 0; index < musicTracks.Count; index++) + { + var candidate = musicTracks[index]; + if (candidate != null && candidate.Cue == cue && candidate.HasClip) + { + track = candidate; + return true; + } + } + } + + track = null; + return false; + } + + public bool TryGetDefaultMusicTrack(out GameMusicTrack track) + { + if (TryGetMusicTrack(defaultMusicCue, out track)) + { + return true; + } + + if (musicTracks != null) + { + for (var index = 0; index < musicTracks.Count; index++) + { + var candidate = musicTracks[index]; + if (candidate != null && candidate.HasClip) + { + track = candidate; + return true; + } + } + } + + track = null; + return false; + } + + public AudioMixerGroup ResolveGroup(GameAudioChannel channel) + { + return channel switch + { + GameAudioChannel.Music => musicGroup, + GameAudioChannel.Ui => uiGroup != null ? uiGroup : sfxGroup, + GameAudioChannel.Gameplay => gameplayGroup != null ? gameplayGroup : sfxGroup, + GameAudioChannel.Ambience => ambienceGroup != null ? ambienceGroup : sfxGroup, + _ => sfxGroup + }; + } + } +} diff --git a/Assets/Scripts/Runtime/Audio/GameAudioSettings.cs.meta b/Assets/Scripts/Runtime/Audio/GameAudioSettings.cs.meta new file mode 100644 index 0000000..282847e --- /dev/null +++ b/Assets/Scripts/Runtime/Audio/GameAudioSettings.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: d6b6fabd3acfe76448ca16ffafdbe9f5 \ No newline at end of file diff --git a/Assets/Scripts/Runtime/Audio/GameMusicCue.cs b/Assets/Scripts/Runtime/Audio/GameMusicCue.cs new file mode 100644 index 0000000..ba00ac7 --- /dev/null +++ b/Assets/Scripts/Runtime/Audio/GameMusicCue.cs @@ -0,0 +1,14 @@ +namespace DanroJump.Audio +{ + /// + /// Канонические музыкальные состояния, к которым можно привязывать loop-треки в GameAudioSettings. + /// + public enum GameMusicCue + { + Menu = 0, + Gameplay = 1, + Prize = 2, + GameOver = 3, + Attract = 4 + } +} diff --git a/Assets/Scripts/Runtime/Audio/GameMusicCue.cs.meta b/Assets/Scripts/Runtime/Audio/GameMusicCue.cs.meta new file mode 100644 index 0000000..cebaf76 --- /dev/null +++ b/Assets/Scripts/Runtime/Audio/GameMusicCue.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 029836faa1a740aaa64361ce35f3040e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Runtime/Audio/GameMusicTrack.cs b/Assets/Scripts/Runtime/Audio/GameMusicTrack.cs new file mode 100644 index 0000000..16b0dd6 --- /dev/null +++ b/Assets/Scripts/Runtime/Audio/GameMusicTrack.cs @@ -0,0 +1,31 @@ +using System; +using UnityEngine; +using UnityEngine.Audio; + +namespace DanroJump.Audio +{ + /// + /// Описывает музыкальный трек для конкретного состояния игры. + /// + [Serializable] + public sealed class GameMusicTrack + { + [SerializeField] private GameMusicCue cue; + [SerializeField] private AudioClip clip; + [SerializeField] private AudioMixerGroup outputGroupOverride; + [SerializeField] [Range(0f, 1f)] private float volume = 1f; + [SerializeField] private bool loop = true; + + public GameMusicCue Cue => cue; + + public AudioClip Clip => clip; + + public AudioMixerGroup OutputGroupOverride => outputGroupOverride; + + public float Volume => Mathf.Clamp01(volume); + + public bool Loop => loop; + + public bool HasClip => clip != null; + } +} diff --git a/Assets/Scripts/Runtime/Audio/GameMusicTrack.cs.meta b/Assets/Scripts/Runtime/Audio/GameMusicTrack.cs.meta new file mode 100644 index 0000000..bab02c7 --- /dev/null +++ b/Assets/Scripts/Runtime/Audio/GameMusicTrack.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4144cd65469a499f895a549f611049ab +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Runtime/Audio/IGameAudioService.cs b/Assets/Scripts/Runtime/Audio/IGameAudioService.cs new file mode 100644 index 0000000..af0b877 --- /dev/null +++ b/Assets/Scripts/Runtime/Audio/IGameAudioService.cs @@ -0,0 +1,28 @@ +using UnityEngine; + +namespace DanroJump.Audio +{ + /// + /// Runtime API для проигрывания музыки и событийных звуков игры. + /// + public interface IGameAudioService + { + bool IsReady { get; } + + bool IsMusicPlaying { get; } + + GameMusicCue? CurrentMusicCue { get; } + + void Play(GameAudioEvent eventId); + + void Play(GameAudioEvent eventId, Vector3 worldPosition); + + void StartMusic(); + + void PlayMusic(GameMusicCue cue); + + void StopMusic(); + + void ApplyServiceVolumes(); + } +} diff --git a/Assets/Scripts/Runtime/Audio/IGameAudioService.cs.meta b/Assets/Scripts/Runtime/Audio/IGameAudioService.cs.meta new file mode 100644 index 0000000..7831c8e --- /dev/null +++ b/Assets/Scripts/Runtime/Audio/IGameAudioService.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 3e907280b1802b442ac21a7c1d7c9461 \ No newline at end of file diff --git a/Assets/Scripts/Runtime/Bootstrap/BootstrapEntryPoint.cs b/Assets/Scripts/Runtime/Bootstrap/BootstrapEntryPoint.cs index 639be29..bb93b4c 100644 --- a/Assets/Scripts/Runtime/Bootstrap/BootstrapEntryPoint.cs +++ b/Assets/Scripts/Runtime/Bootstrap/BootstrapEntryPoint.cs @@ -172,7 +172,8 @@ namespace DanroJump.Bootstrap private void ApplyBuildAspectResolution() { Vector2Int resolution = CalculateTargetResolution(); - Screen.SetResolution(resolution.x, resolution.y, buildFullScreenMode); + FullScreenMode mode = Debug.isDebugBuild ? buildFullScreenMode : FullScreenMode.FullScreenWindow; + Screen.SetResolution(resolution.x, resolution.y, mode); } /// diff --git a/Assets/Scripts/Runtime/Gameplay/Collectibles/BounceBoostCollectible.cs b/Assets/Scripts/Runtime/Gameplay/Collectibles/BounceBoostCollectible.cs index 3481c58..ca2f7a4 100644 --- a/Assets/Scripts/Runtime/Gameplay/Collectibles/BounceBoostCollectible.cs +++ b/Assets/Scripts/Runtime/Gameplay/Collectibles/BounceBoostCollectible.cs @@ -1,4 +1,5 @@ using UnityEngine; +using DanroJump.Audio; namespace DanroJump.Gameplay { @@ -11,14 +12,18 @@ namespace DanroJump.Gameplay [SerializeField] [Min(0)] private int scoreValue = 5; private GameplaySession session; + private IGameAudioService audioService; /// /// Получает игровую сессию для начисления очков. /// [Zenject.Inject] - public void Construct(GameplaySession injectedSession) + public void Construct( + GameplaySession injectedSession, + [Zenject.InjectOptional] IGameAudioService injectedAudioService = null) { session = injectedSession; + audioService = injectedAudioService; } /// @@ -26,6 +31,7 @@ namespace DanroJump.Gameplay /// protected override void OnCollected(JumpPlayerController player) { + audioService?.Play(GameAudioEvent.BoostCollected, transform.position); player.BounceWithEnemyPassThrough(bounceVelocity); session?.AddScore(scoreValue); } diff --git a/Assets/Scripts/Runtime/Gameplay/Collectibles/CoinCollectible.cs b/Assets/Scripts/Runtime/Gameplay/Collectibles/CoinCollectible.cs index 4585a15..dc1361f 100644 --- a/Assets/Scripts/Runtime/Gameplay/Collectibles/CoinCollectible.cs +++ b/Assets/Scripts/Runtime/Gameplay/Collectibles/CoinCollectible.cs @@ -1,4 +1,5 @@ using UnityEngine; +using DanroJump.Audio; namespace DanroJump.Gameplay { @@ -11,14 +12,18 @@ namespace DanroJump.Gameplay [SerializeField] [Min(0)] private int scoreValue = 1; private GameplaySession session; + private IGameAudioService audioService; /// /// Получает игровую сессию для записи награды. /// [Zenject.Inject] - public void Construct(GameplaySession injectedSession) + public void Construct( + GameplaySession injectedSession, + [Zenject.InjectOptional] IGameAudioService injectedAudioService = null) { session = injectedSession; + audioService = injectedAudioService; } /// @@ -26,6 +31,7 @@ namespace DanroJump.Gameplay /// protected override void OnCollected(JumpPlayerController player) { + audioService?.Play(GameAudioEvent.CoinCollected, transform.position); session?.AddCoins(coinValue); session?.AddScore(scoreValue); } diff --git a/Assets/Scripts/Runtime/Gameplay/Enemies/EnemyBase.cs b/Assets/Scripts/Runtime/Gameplay/Enemies/EnemyBase.cs index 9439ec4..a819481 100644 --- a/Assets/Scripts/Runtime/Gameplay/Enemies/EnemyBase.cs +++ b/Assets/Scripts/Runtime/Gameplay/Enemies/EnemyBase.cs @@ -1,5 +1,6 @@ using UnityEngine; using UnityEngine.U2D.Animation; +using DanroJump.Audio; namespace DanroJump.Gameplay { @@ -15,6 +16,7 @@ namespace DanroJump.Gameplay [SerializeField] [Range(0f, 1f)] private float stompMinimumHeightFactor = 0.55f; private GameplaySession session; + private IGameAudioService audioService; private Collider2D enemyCollider; private SpriteSkin[] spriteSkins; private Renderer[] visualRenderers; @@ -45,9 +47,12 @@ namespace DanroJump.Gameplay /// Получает игровую сессию для начисления очков за stomp. /// [Zenject.Inject] - public void Construct(GameplaySession injectedSession) + public void Construct( + GameplaySession injectedSession, + [Zenject.InjectOptional] IGameAudioService injectedAudioService = null) { session = injectedSession; + audioService = injectedAudioService; } /// @@ -95,6 +100,7 @@ namespace DanroJump.Gameplay public virtual void ActivateEnemy() { IsActive = true; + audioService?.Play(GameAudioEvent.EnemySpawned, transform.position); } /// @@ -135,6 +141,7 @@ namespace DanroJump.Gameplay return; } + audioService?.Play(GameAudioEvent.EnemyAttack, transform.position); player.Kill(); } @@ -145,6 +152,7 @@ namespace DanroJump.Gameplay { session?.AddScore(stompScore); player.Bounce(player.AutoJumpVelocity); + audioService?.Play(GameAudioEvent.EnemyDefeated, transform.position); DeactivateEnemy(); gameObject.SetActive(false); } diff --git a/Assets/Scripts/Runtime/Gameplay/Equipment/JetpackEquipment.cs b/Assets/Scripts/Runtime/Gameplay/Equipment/JetpackEquipment.cs index a89f98b..e170f35 100644 --- a/Assets/Scripts/Runtime/Gameplay/Equipment/JetpackEquipment.cs +++ b/Assets/Scripts/Runtime/Gameplay/Equipment/JetpackEquipment.cs @@ -1,5 +1,6 @@ using System.Threading; using Cysharp.Threading.Tasks; +using DanroJump.Audio; using DanroJump.Runtime.Gameplay.Equipment; using UnityEngine; using UnityEngine.VFX; @@ -28,11 +29,18 @@ namespace DanroJump.Gameplay private readonly System.Collections.Generic.List colliders = new(); private readonly System.Collections.Generic.List spriteRenderers = new(); private Rigidbody2D pickupBody; + private IGameAudioService audioService; private bool isCollected; private bool isAttachedToPlayer; private CancellationTokenSource lifetimeCancellation; private CancellationTokenSource destroyWhenOutsideCameraCancellation; + [Zenject.Inject] + public void Construct([Zenject.InjectOptional] IGameAudioService injectedAudioService = null) + { + audioService = injectedAudioService; + } + /// /// Сбрасывает состояние подбора при повторном спавне оборудования. /// @@ -76,6 +84,7 @@ namespace DanroJump.Gameplay return false; } + audioService?.Play(GameAudioEvent.JetpackCollected, transform.position); var attachment = player.GetComponent(); if (attachment == null) { diff --git a/Assets/Scripts/Runtime/Gameplay/Equipment/JumpPad.cs b/Assets/Scripts/Runtime/Gameplay/Equipment/JumpPad.cs index af9d03f..4851c34 100644 --- a/Assets/Scripts/Runtime/Gameplay/Equipment/JumpPad.cs +++ b/Assets/Scripts/Runtime/Gameplay/Equipment/JumpPad.cs @@ -1,6 +1,7 @@ using System; using System.Threading; using Cysharp.Threading.Tasks; +using DanroJump.Audio; using UnityEngine; namespace DanroJump.Gameplay @@ -23,6 +24,7 @@ namespace DanroJump.Gameplay [SerializeField] [Min(0f)] private float recoverDuration = 0.14f; private Collider2D jumpPadCollider; + private IGameAudioService audioService; private CancellationTokenSource stretchCancellation; private Vector3 visualBaseScale = Vector3.one; private float lastActivationTime = -1f; @@ -33,6 +35,12 @@ namespace DanroJump.Gameplay /// public float JumpHeightMultiplier => jumpHeightMultiplier; + [Zenject.Inject] + public void Construct([Zenject.InjectOptional] IGameAudioService injectedAudioService = null) + { + audioService = injectedAudioService; + } + /// /// Подготавливает trigger-коллайдер и визуальную часть пружины. /// @@ -102,6 +110,7 @@ namespace DanroJump.Gameplay } NotifyPlatformLandingHandlers(player); + audioService?.Play(GameAudioEvent.JumpPadActivated, transform.position); player.BounceWithEnemyPassThrough(CalculateBoostVelocity(player)); lastActivationTime = Time.time; PlayStretchAnimation(); diff --git a/Assets/Scripts/Runtime/Gameplay/Equipment/SpringEquipment.cs b/Assets/Scripts/Runtime/Gameplay/Equipment/SpringEquipment.cs index 12a9739..cb11cc8 100644 --- a/Assets/Scripts/Runtime/Gameplay/Equipment/SpringEquipment.cs +++ b/Assets/Scripts/Runtime/Gameplay/Equipment/SpringEquipment.cs @@ -1,4 +1,5 @@ using UnityEngine; +using DanroJump.Audio; namespace DanroJump.Gameplay { @@ -13,6 +14,7 @@ namespace DanroJump.Gameplay [SerializeField] private float activationCooldown = 0.08f; private Collider2D springCollider; + private IGameAudioService audioService; private float lastActivationTime = -1f; /// @@ -20,6 +22,12 @@ namespace DanroJump.Gameplay /// public float BounceVelocity => bounceVelocity; + [Zenject.Inject] + public void Construct([Zenject.InjectOptional] IGameAudioService injectedAudioService = null) + { + audioService = injectedAudioService; + } + /// /// Сбрасывает cooldown и кэширует trigger-коллайдер. /// @@ -53,6 +61,7 @@ namespace DanroJump.Gameplay } NotifyPlatformLandingHandlers(player); + audioService?.Play(GameAudioEvent.SpringActivated, transform.position); player.BounceWithEnemyPassThrough(bounceVelocity); lastActivationTime = Time.time; return true; diff --git a/Assets/Scripts/Runtime/Gameplay/GameplaySession.cs b/Assets/Scripts/Runtime/Gameplay/GameplaySession.cs index b2c33fc..2f34828 100644 --- a/Assets/Scripts/Runtime/Gameplay/GameplaySession.cs +++ b/Assets/Scripts/Runtime/Gameplay/GameplaySession.cs @@ -1,4 +1,5 @@ using System; +using DanroJump.Audio; using DanroJump.Hardware.Com; using DanroJump.Prizes; using DanroJump.SceneFlow; @@ -23,10 +24,13 @@ namespace DanroJump.Gameplay private readonly ISceneFlowService sceneFlow; private readonly IPrizeFlowService prizeFlow; private readonly IComCreditWallet creditWallet; + private readonly IGameAudioService audioService; private readonly int startingLives; private int baseScore; private float savedRecordHeight; + public string SessionId { get; private set; } = CreateSessionId(); + /// /// Итоговые очки текущего забега: игровые начисления плюс бонус за максимальную высоту. /// @@ -100,13 +104,15 @@ namespace DanroJump.Gameplay [Zenject.InjectOptional] IReadOnlyServiceSettings serviceSettings = null, [Zenject.InjectOptional] ISceneFlowService sceneFlow = null, [Zenject.InjectOptional] IPrizeFlowService prizeFlow = null, - [Zenject.InjectOptional] IComCreditWallet creditWallet = null) + [Zenject.InjectOptional] IComCreditWallet creditWallet = null, + [Zenject.InjectOptional] IGameAudioService audioService = null) { this.player = player; this.serviceSettings = serviceSettings; this.sceneFlow = sceneFlow; this.prizeFlow = prizeFlow; this.creditWallet = creditWallet; + this.audioService = audioService; startingLives = ResolveStartingLives(); RemainingLives = startingLives; State = GameplaySessionState.Running; @@ -153,6 +159,7 @@ namespace DanroJump.Gameplay public void ResetSession() { SaveRecordIfNeeded(); + SessionId = CreateSessionId(); baseScore = 0; Coins = 0; DeathCount = 0; @@ -175,6 +182,7 @@ namespace DanroJump.Gameplay return false; } + audioService?.Play(GameAudioEvent.ContinueAccepted); sceneFlow?.CancelGameOverReturn(); RemainingLives = ContinueGameLives; State = GameplaySessionState.Respawning; @@ -214,11 +222,14 @@ namespace DanroJump.Gameplay /// private void HandlePlayerDied(JumpPlayerController _) { + audioService?.Play(GameAudioEvent.PlayerDeath); DeathCount++; RemainingLives = Mathf.Max(0, RemainingLives - 1); State = RemainingLives > 0 ? GameplaySessionState.Respawning : GameplaySessionState.GameOver; if (State == GameplaySessionState.GameOver) { + audioService?.Play(GameAudioEvent.GameOver); + audioService?.PlayMusic(GameMusicCue.GameOver); player?.BlockPendingRespawn(); var prizeResult = prizeFlow?.StartPrizeFlow(this) ?? default; if (!prizeResult.HasPrize) @@ -243,6 +254,8 @@ namespace DanroJump.Gameplay if (State != GameplaySessionState.GameOver) { State = GameplaySessionState.Running; + audioService?.Play(GameAudioEvent.PlayerRespawn); + audioService?.PlayMusic(GameMusicCue.Gameplay); } Changed?.Invoke(); @@ -332,6 +345,11 @@ namespace DanroJump.Gameplay sceneFlow.ReturnToMainMenuAfterGameOver(delay); } + + private static string CreateSessionId() + { + return Guid.NewGuid().ToString("N"); + } } /// diff --git a/Assets/Scripts/Runtime/Gameplay/JumpPlayerController.cs b/Assets/Scripts/Runtime/Gameplay/JumpPlayerController.cs index 571732d..f5f3da1 100644 --- a/Assets/Scripts/Runtime/Gameplay/JumpPlayerController.cs +++ b/Assets/Scripts/Runtime/Gameplay/JumpPlayerController.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Threading; using Cysharp.Threading.Tasks; +using DanroJump.Audio; using UnityEngine; using Zenject; #if ENABLE_INPUT_SYSTEM @@ -51,6 +52,7 @@ namespace DanroJump.Gameplay private Rigidbody2D body; private Collider2D playerCollider; private Camera gameplayCamera; + private IGameAudioService audioService; private Vector3 startPosition; private Vector3 visualRootInitialScale; private Quaternion visualRootInitialRotation; @@ -187,9 +189,10 @@ namespace DanroJump.Gameplay /// Получает gameplay-камеру через SceneContext. /// [Inject] - public void Construct(Camera injectedGameplayCamera) + public void Construct(Camera injectedGameplayCamera, [InjectOptional] IGameAudioService injectedAudioService = null) { gameplayCamera = injectedGameplayCamera; + audioService = injectedAudioService; } /// @@ -394,6 +397,7 @@ namespace DanroJump.Gameplay { body.linearVelocity = new Vector2(body.linearVelocity.x, Mathf.Max(body.linearVelocity.y, velocity)); jumpAnimationPulseUntil = Time.time + jumpAnimationPulseDuration; + audioService?.Play(GameAudioEvent.PlayerJump, transform.position); } /// @@ -1354,6 +1358,8 @@ namespace DanroJump.Gameplay respawnBlocked = false; respawnAtTime = -1f; body.linearVelocity = Vector2.zero; + ResetMoveSpeedMultiplier(); + ResetHeightLift(); EndEnemyPassThrough(); PlayDeathAnimation(); Died?.Invoke(this); diff --git a/Assets/Scripts/Runtime/Prizes/IPrizeSessionStateRepository.cs b/Assets/Scripts/Runtime/Prizes/IPrizeSessionStateRepository.cs new file mode 100644 index 0000000..80e30c1 --- /dev/null +++ b/Assets/Scripts/Runtime/Prizes/IPrizeSessionStateRepository.cs @@ -0,0 +1,11 @@ +namespace DanroJump.Prizes +{ + /// + /// Читает и сохраняет snapshot призовых сессий для восстановления после перезапуска. + /// + public interface IPrizeSessionStateRepository + { + bool TryLoad(out PrizeSessionStateSnapshot snapshot); + bool Save(PrizeSessionStateSnapshot snapshot); + } +} diff --git a/Assets/Scripts/Runtime/Prizes/IPrizeSessionStateRepository.cs.meta b/Assets/Scripts/Runtime/Prizes/IPrizeSessionStateRepository.cs.meta new file mode 100644 index 0000000..2883d8f --- /dev/null +++ b/Assets/Scripts/Runtime/Prizes/IPrizeSessionStateRepository.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: ff5409f6efa1e4d46a3ffcf7b0451e18 \ No newline at end of file diff --git a/Assets/Scripts/Runtime/Prizes/IPrizeSessionStateService.cs b/Assets/Scripts/Runtime/Prizes/IPrizeSessionStateService.cs new file mode 100644 index 0000000..087ee1c --- /dev/null +++ b/Assets/Scripts/Runtime/Prizes/IPrizeSessionStateService.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; + +namespace DanroJump.Prizes +{ + /// + /// Хранит текущую призовую выдачу, историю решений и блокирует повторную выдачу одной сессии. + /// + public interface IPrizeSessionStateService + { + event Action Changed; + + PrizeSessionRecord ActiveSession { get; } + IReadOnlyList History { get; } + int StartedCount { get; } + int CompletedCount { get; } + int FailedCount { get; } + int DuplicateBlockedCount { get; } + + int TotalGamesPlayed { get; } + int TotalScore { get; } + int TotalCoins { get; } + int QrShows { get; } + int PhysicalDispenses { get; } + int PhysicalDispenseFailures { get; } + int ComErrors { get; } + + bool TryBeginSession(PrizeFlowResult result, out PrizeSessionRecord record); + bool MarkActiveSessionShown(); + bool CompleteActiveSession(string note = null); + bool FailActiveSession(string reason); + void RecordGameplaySession(int score, int coins); + void RecordQrShow(); + void RecordComError(); + void RecordPhysicalDispense(bool success); + string BuildSummary(); + } +} diff --git a/Assets/Scripts/Runtime/Prizes/IPrizeSessionStateService.cs.meta b/Assets/Scripts/Runtime/Prizes/IPrizeSessionStateService.cs.meta new file mode 100644 index 0000000..aa366bf --- /dev/null +++ b/Assets/Scripts/Runtime/Prizes/IPrizeSessionStateService.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: b966947b3723e6941bb7148caed3824e \ No newline at end of file diff --git a/Assets/Scripts/Runtime/Prizes/JsonPrizeSessionStateRepository.cs b/Assets/Scripts/Runtime/Prizes/JsonPrizeSessionStateRepository.cs new file mode 100644 index 0000000..3881839 --- /dev/null +++ b/Assets/Scripts/Runtime/Prizes/JsonPrizeSessionStateRepository.cs @@ -0,0 +1,268 @@ +using System; +using System.Collections.Generic; +using System.IO; +using UnityEngine; + +namespace DanroJump.Prizes +{ + /// + /// JSON-хранилище snapshot призовых сессий в Application.persistentDataPath. + /// + public sealed class JsonPrizeSessionStateRepository : IPrizeSessionStateRepository + { + private const string DefaultFileName = "prize-session-state.json"; + + public JsonPrizeSessionStateRepository(string fileName) + { + var safeFileName = GetSafeFileName(fileName); + Path = System.IO.Path.Combine(Application.persistentDataPath, safeFileName); + } + + public string Path { get; } + + private bool Exists => File.Exists(Path); + + public bool TryLoad(out PrizeSessionStateSnapshot snapshot) + { + snapshot = null; + if (!Exists) + { + return false; + } + + try + { + var json = File.ReadAllText(Path); + var data = JsonUtility.FromJson(json); + if (data == null) + { + return false; + } + + var history = new List(); + if (data.history != null) + { + foreach (var entry in data.history) + { + if (entry == null || string.IsNullOrWhiteSpace(entry.sessionId)) + { + continue; + } + + var result = new PrizeFlowResult( + entry.rewardKind, + entry.score, + entry.coins, + entry.height, + entry.resultSessionId); + history.Add(new PrizeSessionRecord( + entry.sessionId, + result, + entry.status, + FromUtcTicks(entry.startedAtUtcTicks), + FromUtcTicks(entry.updatedAtUtcTicks), + entry.note)); + } + } + + snapshot = new PrizeSessionStateSnapshot( + history, + data.issuedSessionIds ?? new List(), + data.activeSessionId, + data.startedCount, + data.completedCount, + data.failedCount, + data.duplicateBlockedCount, + data.fallbackSessionCounter, + data.totalGamesPlayed, + data.totalScore, + data.totalCoins, + data.qrShows, + data.physicalDispenses, + data.physicalDispenseFailures, + data.comErrors); + return true; + } + catch (Exception exception) + { + Debug.LogWarning($"[{nameof(JsonPrizeSessionStateRepository)}] Failed to load prize sessions from '{Path}': {exception.Message}"); + return false; + } + } + + public bool Save(PrizeSessionStateSnapshot snapshot) + { + if (snapshot == null) + { + Debug.LogWarning($"[{nameof(JsonPrizeSessionStateRepository)}] Snapshot is null. Save skipped."); + return false; + } + + try + { + var directory = System.IO.Path.GetDirectoryName(Path); + if (!string.IsNullOrWhiteSpace(directory)) + { + Directory.CreateDirectory(directory); + } + + var data = new PrizeSessionStateSaveData + { + activeSessionId = snapshot.ActiveSessionId ?? string.Empty, + startedCount = snapshot.StartedCount, + completedCount = snapshot.CompletedCount, + failedCount = snapshot.FailedCount, + duplicateBlockedCount = snapshot.DuplicateBlockedCount, + fallbackSessionCounter = snapshot.FallbackSessionCounter, + totalGamesPlayed = snapshot.TotalGamesPlayed, + totalScore = snapshot.TotalScore, + totalCoins = snapshot.TotalCoins, + qrShows = snapshot.QrShows, + physicalDispenses = snapshot.PhysicalDispenses, + physicalDispenseFailures = snapshot.PhysicalDispenseFailures, + comErrors = snapshot.ComErrors + }; + + foreach (var sessionId in snapshot.IssuedSessionIds) + { + if (!string.IsNullOrWhiteSpace(sessionId)) + { + data.issuedSessionIds.Add(sessionId); + } + } + + foreach (var record in snapshot.History) + { + if (record == null || string.IsNullOrWhiteSpace(record.SessionId)) + { + continue; + } + + data.history.Add(new PrizeSessionStateSaveData.Entry + { + sessionId = record.SessionId, + rewardKind = record.Result.RewardKind, + score = record.Result.Score, + coins = record.Result.Coins, + height = record.Result.Height, + resultSessionId = record.Result.SessionId, + status = record.Status, + startedAtUtcTicks = record.StartedAtUtc.Ticks, + updatedAtUtcTicks = record.UpdatedAtUtc.Ticks, + note = record.Note ?? string.Empty + }); + } + + WriteAllTextSafely(Path, JsonUtility.ToJson(data, true)); + return true; + } + catch (Exception exception) + { + Debug.LogWarning($"[{nameof(JsonPrizeSessionStateRepository)}] Failed to save prize sessions to '{Path}': {exception.Message}"); + return false; + } + } + + private static DateTime FromUtcTicks(long ticks) + { + if (ticks <= 0) + { + return DateTime.UtcNow; + } + + try + { + return new DateTime(ticks, DateTimeKind.Utc); + } + catch (ArgumentOutOfRangeException) + { + return DateTime.UtcNow; + } + } + + private static void WriteAllTextSafely(string path, string contents) + { + var tempPath = path + ".tmp"; + var backupPath = path + ".bak"; + + try + { + File.WriteAllText(tempPath, contents); + + if (File.Exists(path)) + { + File.Replace(tempPath, path, backupPath, true); + return; + } + + File.Move(tempPath, path); + } + finally + { + if (File.Exists(tempPath)) + { + File.Delete(tempPath); + } + } + } + + private static string GetSafeFileName(string fileName) + { + var requestedFileName = string.IsNullOrWhiteSpace(fileName) ? DefaultFileName : fileName.Trim(); + var safeFileName = System.IO.Path.GetFileName(requestedFileName); + + if (string.IsNullOrWhiteSpace(safeFileName) || + safeFileName == "." || + safeFileName == ".." || + safeFileName.IndexOfAny(System.IO.Path.GetInvalidFileNameChars()) >= 0) + { + Debug.LogWarning( + $"[{nameof(JsonPrizeSessionStateRepository)}] Unsafe file name '{fileName}' was replaced with '{DefaultFileName}'."); + return DefaultFileName; + } + + if (!string.Equals(requestedFileName, safeFileName, StringComparison.Ordinal)) + { + Debug.LogWarning( + $"[{nameof(JsonPrizeSessionStateRepository)}] Prize session path '{fileName}' was reduced to safe file name '{safeFileName}'."); + } + + return safeFileName; + } + + [Serializable] + private sealed class PrizeSessionStateSaveData + { + public string activeSessionId = string.Empty; + public int startedCount; + public int completedCount; + public int failedCount; + public int duplicateBlockedCount; + public int fallbackSessionCounter; + public int totalGamesPlayed; + public int totalScore; + public int totalCoins; + public int qrShows; + public int physicalDispenses; + public int physicalDispenseFailures; + public int comErrors; + public List issuedSessionIds = new(); + public List history = new(); + + [Serializable] + public sealed class Entry + { + public string sessionId = string.Empty; + public PrizeRewardKind rewardKind; + public int score; + public int coins; + public float height; + public string resultSessionId = string.Empty; + public PrizeSessionStatus status; + public long startedAtUtcTicks; + public long updatedAtUtcTicks; + public string note = string.Empty; + } + } + } +} diff --git a/Assets/Scripts/Runtime/Prizes/JsonPrizeSessionStateRepository.cs.meta b/Assets/Scripts/Runtime/Prizes/JsonPrizeSessionStateRepository.cs.meta new file mode 100644 index 0000000..89e3a21 --- /dev/null +++ b/Assets/Scripts/Runtime/Prizes/JsonPrizeSessionStateRepository.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 74dc024d89162894a98020a107edb45a \ No newline at end of file diff --git a/Assets/Scripts/Runtime/Prizes/PrizeFlowResult.cs b/Assets/Scripts/Runtime/Prizes/PrizeFlowResult.cs index eb89daf..7c0d9fb 100644 --- a/Assets/Scripts/Runtime/Prizes/PrizeFlowResult.cs +++ b/Assets/Scripts/Runtime/Prizes/PrizeFlowResult.cs @@ -5,18 +5,20 @@ namespace DanroJump.Prizes /// public readonly struct PrizeFlowResult { - public PrizeFlowResult(PrizeRewardKind rewardKind, int score, int coins, float height) + public PrizeFlowResult(PrizeRewardKind rewardKind, int score, int coins, float height, string sessionId = null) { RewardKind = rewardKind; Score = score; Coins = coins; Height = height; + SessionId = sessionId ?? string.Empty; } public PrizeRewardKind RewardKind { get; } public int Score { get; } public int Coins { get; } public float Height { get; } + public string SessionId { get; } public bool HasPrize => RewardKind != PrizeRewardKind.None; } } diff --git a/Assets/Scripts/Runtime/Prizes/PrizeFlowService.cs b/Assets/Scripts/Runtime/Prizes/PrizeFlowService.cs index a68db84..b06c800 100644 --- a/Assets/Scripts/Runtime/Prizes/PrizeFlowService.cs +++ b/Assets/Scripts/Runtime/Prizes/PrizeFlowService.cs @@ -11,10 +11,14 @@ namespace DanroJump.Prizes public sealed class PrizeFlowService : IPrizeFlowService { private readonly IReadOnlyServiceSettings settings; + private readonly IPrizeSessionStateService sessionState; - public PrizeFlowService([Zenject.InjectOptional] IReadOnlyServiceSettings settings = null) + public PrizeFlowService( + [Zenject.InjectOptional] IReadOnlyServiceSettings settings = null, + [Zenject.InjectOptional] IPrizeSessionStateService sessionState = null) { this.settings = settings; + this.sessionState = sessionState; } public event Action PrizeFlowStarted; @@ -29,12 +33,25 @@ namespace DanroJump.Prizes rewardKind, score, session?.Coins ?? 0, - session?.MaxRunHeight ?? 0f); + session?.MaxRunHeight ?? 0f, + session?.SessionId); } public PrizeFlowResult StartPrizeFlow(GameplaySession session) { + if (session != null && sessionState != null) + { + sessionState.RecordGameplaySession(session.Score, session.Coins); + } + LastResult = EvaluateCompletedSession(session); + if (LastResult.HasPrize && sessionState != null && + !sessionState.TryBeginSession(LastResult, out _)) + { + LastResult = default; + return LastResult; + } + PrizeFlowStarted?.Invoke(LastResult); return LastResult; } diff --git a/Assets/Scripts/Runtime/Prizes/PrizeSessionRecord.cs b/Assets/Scripts/Runtime/Prizes/PrizeSessionRecord.cs new file mode 100644 index 0000000..62509c9 --- /dev/null +++ b/Assets/Scripts/Runtime/Prizes/PrizeSessionRecord.cs @@ -0,0 +1,50 @@ +using System; + +namespace DanroJump.Prizes +{ + /// + /// Запись истории решения о призе и его выдачи. + /// + public sealed class PrizeSessionRecord + { + public PrizeSessionRecord( + string sessionId, + PrizeFlowResult result, + PrizeSessionStatus status, + DateTime startedAtUtc, + DateTime? updatedAtUtc, + string note = null) + { + SessionId = sessionId ?? string.Empty; + Result = result; + Status = status; + StartedAtUtc = startedAtUtc; + UpdatedAtUtc = updatedAtUtc ?? startedAtUtc; + Note = note ?? string.Empty; + } + + public PrizeSessionRecord( + string sessionId, + PrizeFlowResult result, + PrizeSessionStatus status, + DateTime startedAtUtc, + string note = null) + : this(sessionId, result, status, startedAtUtc, null, note) + { + } + + public string SessionId { get; } + public PrizeFlowResult Result { get; } + public PrizeSessionStatus Status { get; private set; } + public DateTime StartedAtUtc { get; } + public DateTime UpdatedAtUtc { get; private set; } + public string Note { get; private set; } + + public void SetStatus(PrizeSessionStatus status, DateTime updatedAtUtc, string note = null) + { + Status = status; + UpdatedAtUtc = updatedAtUtc; + Note = note ?? string.Empty; + } + } +} diff --git a/Assets/Scripts/Runtime/Prizes/PrizeSessionRecord.cs.meta b/Assets/Scripts/Runtime/Prizes/PrizeSessionRecord.cs.meta new file mode 100644 index 0000000..ee2eedb --- /dev/null +++ b/Assets/Scripts/Runtime/Prizes/PrizeSessionRecord.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 43a84f6fb5124b648818a77bb2629ec1 \ No newline at end of file diff --git a/Assets/Scripts/Runtime/Prizes/PrizeSessionStateService.cs b/Assets/Scripts/Runtime/Prizes/PrizeSessionStateService.cs new file mode 100644 index 0000000..7aa8167 --- /dev/null +++ b/Assets/Scripts/Runtime/Prizes/PrizeSessionStateService.cs @@ -0,0 +1,324 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using DanroJump.Hardware.Com; + +namespace DanroJump.Prizes +{ + /// + /// In-memory журнал призовых решений для сервисной статистики и защиты от повторной выдачи. + /// + public sealed class PrizeSessionStateService : IPrizeSessionStateService + { + private const string RecoveryFailureNote = "Сессия восстановлена после перезапуска до завершения выдачи."; + + private readonly List history = new(); + private readonly HashSet issuedSessionIds = new(StringComparer.Ordinal); + private readonly IPrizeSessionStateRepository repository; + private int fallbackSessionCounter; + + public PrizeSessionStateService( + [Zenject.InjectOptional] IPrizeSessionStateRepository repository = null, + [Zenject.InjectOptional] IComSystem comSystem = null) + { + this.repository = repository; + RestoreState(); + if (comSystem != null) + { + comSystem.DeviceDisconnected.AddListener(HandleDeviceDisconnected); + } + } + + private void HandleDeviceDisconnected(string deviceId) + { + RecordComError(); + } + + public event Action Changed; + + public PrizeSessionRecord ActiveSession { get; private set; } + public IReadOnlyList History => history; + public int StartedCount { get; private set; } + public int CompletedCount { get; private set; } + public int FailedCount { get; private set; } + public int DuplicateBlockedCount { get; private set; } + + public int TotalGamesPlayed { get; private set; } + public int TotalScore { get; private set; } + public int TotalCoins { get; private set; } + public int QrShows { get; private set; } + public int PhysicalDispenses { get; private set; } + public int PhysicalDispenseFailures { get; private set; } + public int ComErrors { get; private set; } + + public bool TryBeginSession(PrizeFlowResult result, out PrizeSessionRecord record) + { + record = null; + if (!result.HasPrize) + { + return false; + } + + var sessionId = ResolveSessionId(result); + if (ActiveSession != null) + { + DuplicateBlockedCount++; + record = new PrizeSessionRecord( + sessionId, + result, + PrizeSessionStatus.DuplicateBlocked, + DateTime.UtcNow, + "Новая выдача заблокирована: предыдущая призовая сессия ещё активна."); + history.Add(record); + PersistState(); + Changed?.Invoke(); + return false; + } + + if (issuedSessionIds.Contains(sessionId)) + { + DuplicateBlockedCount++; + record = new PrizeSessionRecord( + sessionId, + result, + PrizeSessionStatus.DuplicateBlocked, + DateTime.UtcNow, + "Повторная выдача этой игровой сессии заблокирована."); + history.Add(record); + PersistState(); + Changed?.Invoke(); + return false; + } + + issuedSessionIds.Add(sessionId); + record = new PrizeSessionRecord(sessionId, result, PrizeSessionStatus.Pending, DateTime.UtcNow); + ActiveSession = record; + history.Add(record); + StartedCount++; + PersistState(); + Changed?.Invoke(); + return true; + } + + public bool MarkActiveSessionShown() + { + return SetActiveStatus(PrizeSessionStatus.Shown, null, countTerminal: false); + } + + public bool CompleteActiveSession(string note = null) + { + return SetActiveStatus(PrizeSessionStatus.Completed, note, countTerminal: true); + } + + public bool FailActiveSession(string reason) + { + return SetActiveStatus(PrizeSessionStatus.Failed, reason, countTerminal: true); + } + + public string BuildSummary() + { + var activeText = ActiveSession == null + ? "Активной выдачи нет." + : $"Активная выдача: {FormatReward(ActiveSession.Result.RewardKind)}, статус {FormatStatus(ActiveSession.Status)}, очки {ActiveSession.Result.Score}."; + var last = history.LastOrDefault(); + var lastText = last == null + ? "История пуста." + : $"Последняя запись: {FormatReward(last.Result.RewardKind)}, {FormatStatus(last.Status)}, очки {last.Result.Score}."; + + return $"Игр: {TotalGamesPlayed}. Очков всего: {TotalScore}. Монет всего: {TotalCoins}. QR показов: {QrShows}. Физич. выдач: {PhysicalDispenses} (ошибок: {PhysicalDispenseFailures}). COM-ошибок: {ComErrors}. Призовые сессии: начато {StartedCount}, завершено {CompletedCount}, ошибок {FailedCount}, повторов заблокировано {DuplicateBlockedCount}. {activeText} {lastText}"; + } + + public void RecordGameplaySession(int score, int coins) + { + TotalGamesPlayed++; + TotalScore += score; + TotalCoins += coins; + PersistState(); + Changed?.Invoke(); + } + + public void RecordQrShow() + { + QrShows++; + PersistState(); + Changed?.Invoke(); + } + + public void RecordComError() + { + ComErrors++; + PersistState(); + Changed?.Invoke(); + } + + public void RecordPhysicalDispense(bool success) + { + if (success) + { + PhysicalDispenses++; + } + else + { + PhysicalDispenseFailures++; + } + PersistState(); + Changed?.Invoke(); + } + + private bool SetActiveStatus(PrizeSessionStatus status, string note, bool countTerminal) + { + if (ActiveSession == null) + { + return false; + } + + ActiveSession.SetStatus(status, DateTime.UtcNow, note); + if (countTerminal) + { + if (status == PrizeSessionStatus.Completed) + { + CompletedCount++; + } + else if (status == PrizeSessionStatus.Failed) + { + FailedCount++; + } + + ActiveSession = null; + } + + PersistState(); + Changed?.Invoke(); + return true; + } + + private void RestoreState() + { + if (repository == null || !repository.TryLoad(out var snapshot) || snapshot == null) + { + return; + } + + history.Clear(); + issuedSessionIds.Clear(); + + foreach (var record in snapshot.History) + { + if (record != null) + { + history.Add(record); + } + } + + foreach (var sessionId in snapshot.IssuedSessionIds) + { + if (!string.IsNullOrWhiteSpace(sessionId)) + { + issuedSessionIds.Add(sessionId); + } + } + + StartedCount = snapshot.StartedCount; + CompletedCount = snapshot.CompletedCount; + FailedCount = snapshot.FailedCount; + DuplicateBlockedCount = snapshot.DuplicateBlockedCount; + fallbackSessionCounter = snapshot.FallbackSessionCounter; + TotalGamesPlayed = snapshot.TotalGamesPlayed; + TotalScore = snapshot.TotalScore; + TotalCoins = snapshot.TotalCoins; + QrShows = snapshot.QrShows; + PhysicalDispenses = snapshot.PhysicalDispenses; + PhysicalDispenseFailures = snapshot.PhysicalDispenseFailures; + ComErrors = snapshot.ComErrors; + ActiveSession = null; + + var restoredActive = FindHistoryRecord(snapshot.ActiveSessionId); + if (restoredActive != null && + (restoredActive.Status == PrizeSessionStatus.Pending || restoredActive.Status == PrizeSessionStatus.Shown)) + { + restoredActive.SetStatus( + PrizeSessionStatus.Failed, + DateTime.UtcNow, + AppendRecoveryNote(restoredActive.Note)); + FailedCount++; + PersistState(); + } + } + + private void PersistState() + { + repository?.Save(CreateSnapshot()); + } + + private PrizeSessionStateSnapshot CreateSnapshot() + { + return new PrizeSessionStateSnapshot( + history.ToArray(), + issuedSessionIds.ToArray(), + ActiveSession?.SessionId, + StartedCount, + CompletedCount, + FailedCount, + DuplicateBlockedCount, + fallbackSessionCounter, + TotalGamesPlayed, + TotalScore, + TotalCoins, + QrShows, + PhysicalDispenses, + PhysicalDispenseFailures, + ComErrors); + } + + private PrizeSessionRecord FindHistoryRecord(string sessionId) + { + return string.IsNullOrWhiteSpace(sessionId) + ? null + : history.LastOrDefault(record => string.Equals(record.SessionId, sessionId, StringComparison.Ordinal)); + } + + private static string AppendRecoveryNote(string existingNote) + { + return string.IsNullOrWhiteSpace(existingNote) + ? RecoveryFailureNote + : existingNote + " " + RecoveryFailureNote; + } + + private string ResolveSessionId(PrizeFlowResult result) + { + if (!string.IsNullOrWhiteSpace(result.SessionId)) + { + return result.SessionId; + } + + fallbackSessionCounter++; + return $"prize-session-{fallbackSessionCounter}"; + } + + private static string FormatReward(PrizeRewardKind rewardKind) + { + return rewardKind switch + { + PrizeRewardKind.QRCode => "QR", + PrizeRewardKind.Hopper => "хоппер", + PrizeRewardKind.PrizeStand => "витрина", + PrizeRewardKind.Big => "большой приз", + PrizeRewardKind.Small => "малый приз", + _ => "нет приза", + }; + } + + private static string FormatStatus(PrizeSessionStatus status) + { + return status switch + { + PrizeSessionStatus.Pending => "ожидает показа", + PrizeSessionStatus.Shown => "показана", + PrizeSessionStatus.Completed => "завершена", + PrizeSessionStatus.Failed => "ошибка", + PrizeSessionStatus.DuplicateBlocked => "повтор заблокирован", + _ => status.ToString(), + }; + } + } +} diff --git a/Assets/Scripts/Runtime/Prizes/PrizeSessionStateService.cs.meta b/Assets/Scripts/Runtime/Prizes/PrizeSessionStateService.cs.meta new file mode 100644 index 0000000..477a48b --- /dev/null +++ b/Assets/Scripts/Runtime/Prizes/PrizeSessionStateService.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 4327d0c1972bb964f92e569e0085aef1 \ No newline at end of file diff --git a/Assets/Scripts/Runtime/Prizes/PrizeSessionStateSnapshot.cs b/Assets/Scripts/Runtime/Prizes/PrizeSessionStateSnapshot.cs new file mode 100644 index 0000000..a7305d7 --- /dev/null +++ b/Assets/Scripts/Runtime/Prizes/PrizeSessionStateSnapshot.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace DanroJump.Prizes +{ + /// + /// Снимок призового состояния для persistent recovery между перезапусками. + /// + public sealed class PrizeSessionStateSnapshot + { + public PrizeSessionStateSnapshot( + IReadOnlyList history, + IReadOnlyCollection issuedSessionIds, + string activeSessionId, + int startedCount, + int completedCount, + int failedCount, + int duplicateBlockedCount, + int fallbackSessionCounter, + int totalGamesPlayed = 0, + int totalScore = 0, + int totalCoins = 0, + int qrShows = 0, + int physicalDispenses = 0, + int physicalDispenseFailures = 0, + int comErrors = 0) + { + History = history?.Where(static record => record != null).ToArray() ?? Array.Empty(); + IssuedSessionIds = issuedSessionIds?.Where(static sessionId => !string.IsNullOrWhiteSpace(sessionId)).ToArray() ?? Array.Empty(); + ActiveSessionId = activeSessionId ?? string.Empty; + StartedCount = Math.Max(0, startedCount); + CompletedCount = Math.Max(0, completedCount); + FailedCount = Math.Max(0, failedCount); + DuplicateBlockedCount = Math.Max(0, duplicateBlockedCount); + FallbackSessionCounter = Math.Max(0, fallbackSessionCounter); + TotalGamesPlayed = Math.Max(0, totalGamesPlayed); + TotalScore = Math.Max(0, totalScore); + TotalCoins = Math.Max(0, totalCoins); + QrShows = Math.Max(0, qrShows); + PhysicalDispenses = Math.Max(0, physicalDispenses); + PhysicalDispenseFailures = Math.Max(0, physicalDispenseFailures); + ComErrors = Math.Max(0, comErrors); + } + + public IReadOnlyList History { get; } + public IReadOnlyCollection IssuedSessionIds { get; } + public string ActiveSessionId { get; } + public int StartedCount { get; } + public int CompletedCount { get; } + public int FailedCount { get; } + public int DuplicateBlockedCount { get; } + public int FallbackSessionCounter { get; } + public int TotalGamesPlayed { get; } + public int TotalScore { get; } + public int TotalCoins { get; } + public int QrShows { get; } + public int PhysicalDispenses { get; } + public int PhysicalDispenseFailures { get; } + public int ComErrors { get; } + } +} diff --git a/Assets/Scripts/Runtime/Prizes/PrizeSessionStateSnapshot.cs.meta b/Assets/Scripts/Runtime/Prizes/PrizeSessionStateSnapshot.cs.meta new file mode 100644 index 0000000..49c034b --- /dev/null +++ b/Assets/Scripts/Runtime/Prizes/PrizeSessionStateSnapshot.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 1d4f2407a8e65f04dbf3c4e14c2ec343 \ No newline at end of file diff --git a/Assets/Scripts/Runtime/Prizes/PrizeSessionStatus.cs b/Assets/Scripts/Runtime/Prizes/PrizeSessionStatus.cs new file mode 100644 index 0000000..32eaed1 --- /dev/null +++ b/Assets/Scripts/Runtime/Prizes/PrizeSessionStatus.cs @@ -0,0 +1,14 @@ +namespace DanroJump.Prizes +{ + /// + /// Состояние runtime-выдачи приза. + /// + public enum PrizeSessionStatus + { + Pending = 0, + Shown = 1, + Completed = 2, + Failed = 3, + DuplicateBlocked = 4, + } +} diff --git a/Assets/Scripts/Runtime/Prizes/PrizeSessionStatus.cs.meta b/Assets/Scripts/Runtime/Prizes/PrizeSessionStatus.cs.meta new file mode 100644 index 0000000..850d210 --- /dev/null +++ b/Assets/Scripts/Runtime/Prizes/PrizeSessionStatus.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: a03f2129d3badbc43ba9ea4186bc5f27 \ No newline at end of file diff --git a/Assets/Scripts/Runtime/Prizes/Qr/PrizeQrService.cs b/Assets/Scripts/Runtime/Prizes/Qr/PrizeQrService.cs index 122c835..3a832b9 100644 --- a/Assets/Scripts/Runtime/Prizes/Qr/PrizeQrService.cs +++ b/Assets/Scripts/Runtime/Prizes/Qr/PrizeQrService.cs @@ -40,13 +40,16 @@ namespace DanroJump.Prizes.Qr return false; } - var texture = textureRenderer.Render(matrix); + var texture = textureRenderer.Render( + matrix, + darkColor: QrPrizeTierPalette.GetQrColor(payload.Tier)); ticket = new PrizeQrTicket( payload.Url, payload.OriginalPhone, payload.PhoneDigits, payload.Message, - texture); + texture, + payload.Tier); error = string.Empty; return true; } diff --git a/Assets/Scripts/Runtime/Prizes/Qr/PrizeQrTicket.cs b/Assets/Scripts/Runtime/Prizes/Qr/PrizeQrTicket.cs index f25f57c..11f127d 100644 --- a/Assets/Scripts/Runtime/Prizes/Qr/PrizeQrTicket.cs +++ b/Assets/Scripts/Runtime/Prizes/Qr/PrizeQrTicket.cs @@ -12,13 +12,15 @@ namespace DanroJump.Prizes.Qr string originalPhone, string phoneDigits, string message, - Texture2D texture) + Texture2D texture, + QrPrizeTier tier) { TelegramUrl = telegramUrl ?? string.Empty; OriginalPhone = originalPhone ?? string.Empty; PhoneDigits = phoneDigits ?? string.Empty; Message = message ?? string.Empty; Texture = texture; + Tier = tier; } public string TelegramUrl { get; } @@ -26,5 +28,6 @@ namespace DanroJump.Prizes.Qr public string PhoneDigits { get; } public string Message { get; } public Texture2D Texture { get; } + public QrPrizeTier Tier { get; } } } diff --git a/Assets/Scripts/Runtime/Prizes/Qr/QrCodeTextureRenderer.cs b/Assets/Scripts/Runtime/Prizes/Qr/QrCodeTextureRenderer.cs index d4cfb83..2c33933 100644 --- a/Assets/Scripts/Runtime/Prizes/Qr/QrCodeTextureRenderer.cs +++ b/Assets/Scripts/Runtime/Prizes/Qr/QrCodeTextureRenderer.cs @@ -10,11 +10,17 @@ namespace DanroJump.Prizes.Qr private const int DefaultPixelsPerModule = 8; private const int QuietZoneModules = 4; - public Texture2D Render(QrCodeMatrix matrix, int pixelsPerModule = DefaultPixelsPerModule) + public Texture2D Render( + QrCodeMatrix matrix, + int pixelsPerModule = DefaultPixelsPerModule, + Color? darkColor = null, + Color? lightColor = null) { var modulePixels = Mathf.Max(1, pixelsPerModule); var moduleCount = matrix != null ? matrix.Size + QuietZoneModules * 2 : QuietZoneModules * 2 + 1; var textureSize = moduleCount * modulePixels; + var darkModuleColor = darkColor ?? Color.black; + var lightModuleColor = lightColor ?? Color.white; var texture = new Texture2D(textureSize, textureSize, TextureFormat.RGBA32, false) { filterMode = FilterMode.Point, @@ -28,7 +34,7 @@ namespace DanroJump.Prizes.Qr var moduleX = x / modulePixels - QuietZoneModules; var moduleY = y / modulePixels - QuietZoneModules; var dark = matrix != null && matrix.GetModule(moduleX, moduleY); - texture.SetPixel(x, textureSize - 1 - y, dark ? Color.black : Color.white); + texture.SetPixel(x, textureSize - 1 - y, dark ? darkModuleColor : lightModuleColor); } } diff --git a/Assets/Scripts/Runtime/Prizes/Qr/QrPrizeTextSettings.cs b/Assets/Scripts/Runtime/Prizes/Qr/QrPrizeTextSettings.cs new file mode 100644 index 0000000..683f6c8 --- /dev/null +++ b/Assets/Scripts/Runtime/Prizes/Qr/QrPrizeTextSettings.cs @@ -0,0 +1,144 @@ +using DanroJump.Settings; + +namespace DanroJump.Prizes.Qr +{ + /// + /// Читает короткие тексты QR-призов по рангам из сервисных настроек. + /// + public static class QrPrizeTextSettings + { + public const int MaxPrizeTextLength = 12; + + private static readonly QrPrizeTier[] PreferredTiers = + { + QrPrizeTier.Gold, + QrPrizeTier.Silver, + QrPrizeTier.Bronze + }; + + public static string GetSettingKey(QrPrizeTier tier) + { + return tier switch + { + QrPrizeTier.Bronze => ServiceSettingsKeys.QrPrizeTextBronze, + QrPrizeTier.Silver => ServiceSettingsKeys.QrPrizeTextSilver, + QrPrizeTier.Gold => ServiceSettingsKeys.QrPrizeTextGold, + _ => string.Empty + }; + } + + public static string GetDisplayName(QrPrizeTier tier) + { + return tier switch + { + QrPrizeTier.Bronze => "Бронзовый", + QrPrizeTier.Silver => "Серебряный", + QrPrizeTier.Gold => "Золотой", + _ => "Не задан" + }; + } + + public static string GetPrizeText(IReadOnlyServiceSettings settings, QrPrizeTier tier) + { + var key = GetSettingKey(tier); + return string.IsNullOrWhiteSpace(key) + ? string.Empty + : NormalizePrizeText(settings?.GetString(key)); + } + + public static string GetPreferredPrizeText(IReadOnlyServiceSettings settings) + { + foreach (var tier in PreferredTiers) + { + var text = GetPrizeText(settings, tier); + if (!string.IsNullOrWhiteSpace(text)) + { + return text; + } + } + + return string.Empty; + } + + public static string GetPrizeTextForResult(IReadOnlyServiceSettings settings, PrizeFlowResult result, out QrPrizeTier tier) + { + tier = ResolveTier(settings, result); + if (tier != QrPrizeTier.None) + { + var tierText = GetPrizeText(settings, tier); + if (!string.IsNullOrWhiteSpace(tierText)) + { + return tierText; + } + } + + return GetPreferredPrizeText(settings); + } + + public static QrPrizeTier ResolveTier(IReadOnlyServiceSettings settings, PrizeFlowResult result) + { + if (result.RewardKind != PrizeRewardKind.QRCode) + { + return QrPrizeTier.None; + } + + return ResolveTier(settings, result.Score); + } + + public static QrPrizeTier ResolveTier(IReadOnlyServiceSettings settings, int score) + { + var sanitizedScore = score < 0 ? 0 : score; + var levels = PrizeLevelTable.FromJson(settings?.GetString(ServiceSettingsKeys.PrizeLevels)); + var qrLevelIndex = -1; + + for (var index = 0; index < levels.Levels.Count; index++) + { + var level = levels.Levels[index]; + if (level.RewardKind != PrizeRewardKind.QRCode) + { + continue; + } + + if (level.Score > sanitizedScore) + { + break; + } + + qrLevelIndex++; + } + + if (qrLevelIndex >= 0) + { + return qrLevelIndex switch + { + 0 => QrPrizeTier.Bronze, + 1 => QrPrizeTier.Silver, + _ => QrPrizeTier.Gold + }; + } + + foreach (var tier in PreferredTiers) + { + if (!string.IsNullOrWhiteSpace(GetPrizeText(settings, tier))) + { + return tier; + } + } + + return QrPrizeTier.None; + } + + public static string NormalizePrizeText(string text) + { + if (string.IsNullOrWhiteSpace(text)) + { + return string.Empty; + } + + var normalized = text.Trim(); + return normalized.Length <= MaxPrizeTextLength + ? normalized + : normalized.Substring(0, MaxPrizeTextLength); + } + } +} diff --git a/Assets/Scripts/Runtime/Prizes/Qr/QrPrizeTextSettings.cs.meta b/Assets/Scripts/Runtime/Prizes/Qr/QrPrizeTextSettings.cs.meta new file mode 100644 index 0000000..17cb59b --- /dev/null +++ b/Assets/Scripts/Runtime/Prizes/Qr/QrPrizeTextSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cd7cd5b3fed54a71b2a7f586a33f22ca +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Runtime/Prizes/Qr/QrPrizeTier.cs b/Assets/Scripts/Runtime/Prizes/Qr/QrPrizeTier.cs new file mode 100644 index 0000000..bd5d31a --- /dev/null +++ b/Assets/Scripts/Runtime/Prizes/Qr/QrPrizeTier.cs @@ -0,0 +1,13 @@ +namespace DanroJump.Prizes.Qr +{ + /// + /// Ранг QR-приза, повторяющий legacy-градацию: бронзовый, серебряный, золотой. + /// + public enum QrPrizeTier + { + None = 0, + Bronze = 1, + Silver = 2, + Gold = 3 + } +} diff --git a/Assets/Scripts/Runtime/Prizes/Qr/QrPrizeTier.cs.meta b/Assets/Scripts/Runtime/Prizes/Qr/QrPrizeTier.cs.meta new file mode 100644 index 0000000..5323847 --- /dev/null +++ b/Assets/Scripts/Runtime/Prizes/Qr/QrPrizeTier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 179f01781a9d46e4a0918603c979d2e1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Runtime/Prizes/Qr/QrPrizeTierPalette.cs b/Assets/Scripts/Runtime/Prizes/Qr/QrPrizeTierPalette.cs new file mode 100644 index 0000000..7ca26f1 --- /dev/null +++ b/Assets/Scripts/Runtime/Prizes/Qr/QrPrizeTierPalette.cs @@ -0,0 +1,25 @@ +using UnityEngine; + +namespace DanroJump.Prizes.Qr +{ + /// + /// Палитра цветов для рангов QR-приза. + /// + public static class QrPrizeTierPalette + { + private static readonly Color32 BronzeQrColor = new(134, 84, 38, 255); + private static readonly Color32 SilverQrColor = new(88, 102, 120, 255); + private static readonly Color32 GoldQrColor = new(160, 124, 24, 255); + + public static Color GetQrColor(QrPrizeTier tier) + { + return tier switch + { + QrPrizeTier.Bronze => BronzeQrColor, + QrPrizeTier.Silver => SilverQrColor, + QrPrizeTier.Gold => GoldQrColor, + _ => Color.black + }; + } + } +} diff --git a/Assets/Scripts/Runtime/Prizes/Qr/QrPrizeTierPalette.cs.meta b/Assets/Scripts/Runtime/Prizes/Qr/QrPrizeTierPalette.cs.meta new file mode 100644 index 0000000..e1c4a9d --- /dev/null +++ b/Assets/Scripts/Runtime/Prizes/Qr/QrPrizeTierPalette.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 3219ccdcf7847c943ad01dc27e9ac181 \ No newline at end of file diff --git a/Assets/Scripts/Runtime/Prizes/Qr/TelegramPrizeQrPayloadBuilder.cs b/Assets/Scripts/Runtime/Prizes/Qr/TelegramPrizeQrPayloadBuilder.cs index 76f9f3e..f0f4894 100644 --- a/Assets/Scripts/Runtime/Prizes/Qr/TelegramPrizeQrPayloadBuilder.cs +++ b/Assets/Scripts/Runtime/Prizes/Qr/TelegramPrizeQrPayloadBuilder.cs @@ -6,12 +6,14 @@ using DanroJump.Settings; namespace DanroJump.Prizes.Qr { /// - /// Собирает Telegram t.me URL для QR-приза из сервисного телефона и шаблона сообщения. + /// Собирает Telegram t.me URL для QR-приза из сервисного телефона и короткого текста приза. /// public sealed class TelegramPrizeQrPayloadBuilder { public const string DefaultMessageTemplate = - "QR prize Danro Jump. Score: {score}. Height: {height} m."; + "{0}"; + + private const string DefaultPrizeText = "QR-приз"; public bool TryBuild( PrizeFlowResult result, @@ -28,16 +30,16 @@ namespace DanroJump.Prizes.Qr return false; } - var template = settings?.GetString(ServiceSettingsKeys.QrMessageTemplate); - if (string.IsNullOrWhiteSpace(template)) + var prizeText = QrPrizeTextSettings.GetPrizeTextForResult(settings, result, out var tier); + if (string.IsNullOrWhiteSpace(prizeText)) { - template = DefaultMessageTemplate; + prizeText = DefaultPrizeText; } - var message = FormatMessageTemplate(template, result, phone); + var message = FormatMessageTemplate(DefaultMessageTemplate, result, phone, prizeText); var encodedMessage = Uri.EscapeDataString(message); var url = $"https://t.me/+{phoneDigits}?text={encodedMessage}"; - payload = new TelegramPrizeQrPayload(url, phone, phoneDigits, message); + payload = new TelegramPrizeQrPayload(url, phone, phoneDigits, message, tier); error = string.Empty; return true; } @@ -61,9 +63,21 @@ namespace DanroJump.Prizes.Qr return builder.ToString(); } - public static string FormatMessageTemplate(string template, PrizeFlowResult result, string phone) + public static string FormatMessageTemplate( + string template, + PrizeFlowResult result, + string phone, + string prizeText = null) { + var normalizedPrizeText = QrPrizeTextSettings.NormalizePrizeText(prizeText); + if (!string.IsNullOrEmpty(normalizedPrizeText) && (string.IsNullOrWhiteSpace(template) || template == "{0}")) + { + return normalizedPrizeText; + } + return (template ?? string.Empty) + .Replace("{0}", normalizedPrizeText) + .Replace("{prize}", normalizedPrizeText) .Replace("{score}", result.Score.ToString(CultureInfo.InvariantCulture)) .Replace("{coins}", result.Coins.ToString(CultureInfo.InvariantCulture)) .Replace("{height}", result.Height.ToString("0", CultureInfo.InvariantCulture)) @@ -74,17 +88,19 @@ namespace DanroJump.Prizes.Qr public readonly struct TelegramPrizeQrPayload { - public TelegramPrizeQrPayload(string url, string originalPhone, string phoneDigits, string message) + public TelegramPrizeQrPayload(string url, string originalPhone, string phoneDigits, string message, QrPrizeTier tier) { Url = url ?? string.Empty; OriginalPhone = originalPhone ?? string.Empty; PhoneDigits = phoneDigits ?? string.Empty; Message = message ?? string.Empty; + Tier = tier; } public string Url { get; } public string OriginalPhone { get; } public string PhoneDigits { get; } public string Message { get; } + public QrPrizeTier Tier { get; } } } diff --git a/Assets/Scripts/Runtime/Settings/Core/ServiceSettingsActionRouter.cs b/Assets/Scripts/Runtime/Settings/Core/ServiceSettingsActionRouter.cs index 68813e0..aad3afa 100644 --- a/Assets/Scripts/Runtime/Settings/Core/ServiceSettingsActionRouter.cs +++ b/Assets/Scripts/Runtime/Settings/Core/ServiceSettingsActionRouter.cs @@ -1,7 +1,4 @@ -using System; -using System.Linq; using DanroJump.Prizes; -using DanroJump.Prizes.Qr; namespace DanroJump.Settings { @@ -12,7 +9,8 @@ namespace DanroJump.Settings { public static ServiceSettingsActionResult Execute( ServiceSettingDefinition definition, - IReadOnlyServiceSettings settings) + IReadOnlyServiceSettings settings, + IPrizeSessionStateService prizeSessionState = null) { if (definition == null) { @@ -23,7 +21,9 @@ namespace DanroJump.Settings return definition.Key switch { - ServiceSettingsKeys.StatisticsButton => BuildStatistics(settings), + ServiceSettingsKeys.StatisticsButton => ServiceSettingsStatisticsSummaryBuilder.Build( + settings, + prizeSessionState), ServiceSettingsKeys.PhoneNumberButton => OpenSettingEditor( "Номер телефона", "Открыто служебное окно номера телефона для QR-призов.", @@ -46,12 +46,12 @@ namespace DanroJump.Settings "Проверка hopper/выдачи"), ServiceSettingsKeys.LevelsPrizesButton => ServiceSettingsActionResult.Success( "Настройки призов", - BuildPrizeSummary(settings), + ServiceSettingsPrizeSummaryBuilder.Build(settings), ServiceSettingsKeys.PrizeLevels), ServiceSettingsKeys.QrSettingsButton => ServiceSettingsActionResult.Success( "Настройки QR", - BuildQrSummary(settings), - "QR-выдача"), + ServiceSettingsQrSummaryBuilder.Build(settings), + ServiceSettingsKeys.QrPrizeTextSettings), ServiceSettingsKeys.StandSettingsButton => ServiceSettingsActionResult.Success( "Настройки витрины", "Открыт раздел призовой витрины. Следующий шаг - подключить статусы ячеек и команды тестовой выдачи.", @@ -64,69 +64,10 @@ namespace DanroJump.Settings }; } - private static ServiceSettingsActionResult BuildStatistics(IReadOnlyServiceSettings settings) - { - var snapshot = settings?.Snapshot(); - var totalSettings = snapshot?.Count ?? 0; - var visibleDefinitions = settings?.Database?.Entries.Count(entry => entry.ShownInServiceMenu) ?? 0; - var startCost = settings != null ? Math.Max(0, settings.GetInt(ServiceSettingsKeys.StartGameCost)) : 0; - var freePlay = settings != null && settings.GetBool(ServiceSettingsKeys.FreePlay); - var priceText = freePlay ? "free play" : $"{startCost}"; - - return ServiceSettingsActionResult.Success( - "Статистика", - $"Настроек загружено: {totalSettings}. Видимых пунктов: {visibleDefinitions}. Стоимость старта: {priceText}.", - "Статистика"); - } - private static ServiceSettingsActionResult OpenSettingEditor(string title, string status, string settingKey) { return ServiceSettingsActionResult.Success(title, status, settingKey); } - - private static string BuildPrizeSummary(IReadOnlyServiceSettings settings) - { - if (settings == null) - { - return "Раздел призов открыт. Сервис настроек пока недоступен."; - } - - var smallPrize = settings.GetBool(ServiceSettingsKeys.GiveSmallPrize) ? "включён" : "выключен"; - var bigPrize = settings.GetBool(ServiceSettingsKeys.GiveBigPrize) ? "включён" : "выключен"; - var levels = PrizeLevelTable.FromJson(settings.GetString(ServiceSettingsKeys.PrizeLevels)); - if (levels.Count > 0) - { - return $"Раздел призов открыт. Настроено уровней: {levels.Count}."; - } - - return $"Раздел призов открыт. Таблица уровней пустая. Legacy: малый приз {smallPrize}, большой приз {bigPrize}."; - } - - private static string BuildQrSummary(IReadOnlyServiceSettings settings) - { - if (settings == null) - { - return "Раздел QR открыт. Сервис настроек пока недоступен."; - } - - var showQrErrors = settings.GetBool(ServiceSettingsKeys.ShowPrizeError) ? "показывать" : "скрывать"; - var phone = settings.GetString(ServiceSettingsKeys.PrizePhoneNumber); - var phoneDigits = TelegramPrizeQrPayloadBuilder.NormalizePhoneDigits(phone); - var phoneText = string.IsNullOrWhiteSpace(phone) ? "не задан" : phone; - var template = settings.GetString(ServiceSettingsKeys.QrMessageTemplate); - var templateText = string.IsNullOrWhiteSpace(template) ? "стандартный" : "настроен"; - var messageTemplate = string.IsNullOrWhiteSpace(template) - ? TelegramPrizeQrPayloadBuilder.DefaultMessageTemplate - : template; - var preview = TelegramPrizeQrPayloadBuilder.FormatMessageTemplate( - messageTemplate, - new PrizeFlowResult(PrizeRewardKind.QRCode, 100, 0, 50f), - phone); - var qrState = string.IsNullOrWhiteSpace(phoneDigits) - ? "QR не готов: не задан телефон." - : "QR готов к показу."; - return $"Раздел QR открыт. {qrState} Ошибки QR: {showQrErrors}. Телефон: {phoneText}. Шаблон сообщения: {templateText}. Пример сообщения: {preview}"; - } } public readonly struct ServiceSettingsActionResult diff --git a/Assets/Scripts/Runtime/Settings/Core/ServiceSettingsPrizeSummaryBuilder.cs b/Assets/Scripts/Runtime/Settings/Core/ServiceSettingsPrizeSummaryBuilder.cs new file mode 100644 index 0000000..62cc37a --- /dev/null +++ b/Assets/Scripts/Runtime/Settings/Core/ServiceSettingsPrizeSummaryBuilder.cs @@ -0,0 +1,28 @@ +using DanroJump.Prizes; + +namespace DanroJump.Settings +{ + /// + /// Формирует операторскую сводку призовых уровней и legacy-флагов. + /// + internal static class ServiceSettingsPrizeSummaryBuilder + { + public static string Build(IReadOnlyServiceSettings settings) + { + if (settings == null) + { + return "Раздел призов открыт. Сервис настроек пока недоступен."; + } + + var smallPrize = settings.GetBool(ServiceSettingsKeys.GiveSmallPrize) ? "включён" : "выключен"; + var bigPrize = settings.GetBool(ServiceSettingsKeys.GiveBigPrize) ? "включён" : "выключен"; + var levels = PrizeLevelTable.FromJson(settings.GetString(ServiceSettingsKeys.PrizeLevels)); + if (levels.Count > 0) + { + return $"Раздел призов открыт. Настроено уровней: {levels.Count}."; + } + + return $"Раздел призов открыт. Таблица уровней пустая. Legacy: малый приз {smallPrize}, большой приз {bigPrize}."; + } + } +} diff --git a/Assets/Scripts/Runtime/Settings/Core/ServiceSettingsPrizeSummaryBuilder.cs.meta b/Assets/Scripts/Runtime/Settings/Core/ServiceSettingsPrizeSummaryBuilder.cs.meta new file mode 100644 index 0000000..b4dfb93 --- /dev/null +++ b/Assets/Scripts/Runtime/Settings/Core/ServiceSettingsPrizeSummaryBuilder.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: d1f90e7c9a6308043a154b1766d39762 \ No newline at end of file diff --git a/Assets/Scripts/Runtime/Settings/Core/ServiceSettingsQrSummaryBuilder.cs b/Assets/Scripts/Runtime/Settings/Core/ServiceSettingsQrSummaryBuilder.cs new file mode 100644 index 0000000..a01e99a --- /dev/null +++ b/Assets/Scripts/Runtime/Settings/Core/ServiceSettingsQrSummaryBuilder.cs @@ -0,0 +1,37 @@ +using DanroJump.Prizes.Qr; + +namespace DanroJump.Settings +{ + /// + /// Формирует операторскую сводку QR-выдачи и коротких текстов призов. + /// + internal static class ServiceSettingsQrSummaryBuilder + { + public static string Build(IReadOnlyServiceSettings settings) + { + if (settings == null) + { + return "Раздел QR открыт. Сервис настроек пока недоступен."; + } + + var showQrErrors = settings.GetBool(ServiceSettingsKeys.ShowPrizeError) ? "показывать" : "скрывать"; + var phone = settings.GetString(ServiceSettingsKeys.PrizePhoneNumber); + var phoneDigits = TelegramPrizeQrPayloadBuilder.NormalizePhoneDigits(phone); + var phoneText = string.IsNullOrWhiteSpace(phone) ? "не задан" : phone; + var bronze = FormatTierText(settings, QrPrizeTier.Bronze); + var silver = FormatTierText(settings, QrPrizeTier.Silver); + var gold = FormatTierText(settings, QrPrizeTier.Gold); + var qrState = string.IsNullOrWhiteSpace(phoneDigits) + ? "QR не готов: не задан телефон." + : "QR готов к показу."; + + return $"Раздел QR открыт. {qrState} Ошибки QR: {showQrErrors}. Телефон: {phoneText}. Тексты призов: Бронзовый: {bronze}; Серебряный: {silver}; Золотой: {gold}."; + } + + private static string FormatTierText(IReadOnlyServiceSettings settings, QrPrizeTier tier) + { + var text = QrPrizeTextSettings.GetPrizeText(settings, tier); + return string.IsNullOrWhiteSpace(text) ? "<пусто>" : text; + } + } +} diff --git a/Assets/Scripts/Runtime/Settings/Core/ServiceSettingsQrSummaryBuilder.cs.meta b/Assets/Scripts/Runtime/Settings/Core/ServiceSettingsQrSummaryBuilder.cs.meta new file mode 100644 index 0000000..dfa9662 --- /dev/null +++ b/Assets/Scripts/Runtime/Settings/Core/ServiceSettingsQrSummaryBuilder.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: a284bbb4b62382f4ea5f6f2638ed16fc \ No newline at end of file diff --git a/Assets/Scripts/Runtime/Settings/Core/ServiceSettingsStatisticsSummaryBuilder.cs b/Assets/Scripts/Runtime/Settings/Core/ServiceSettingsStatisticsSummaryBuilder.cs new file mode 100644 index 0000000..3f688d0 --- /dev/null +++ b/Assets/Scripts/Runtime/Settings/Core/ServiceSettingsStatisticsSummaryBuilder.cs @@ -0,0 +1,80 @@ +using System; +using System.Linq; +using DanroJump.Prizes; + +namespace DanroJump.Settings +{ + /// + /// Собирает текст сервисной статистики без знания о маршрутизации кнопок. + /// + internal static class ServiceSettingsStatisticsSummaryBuilder + { + public static ServiceSettingsActionResult Build( + IReadOnlyServiceSettings settings, + IPrizeSessionStateService prizeSessionState) + { + var snapshot = settings?.Snapshot(); + var totalSettings = snapshot?.Count ?? 0; + var visibleDefinitions = settings?.Database?.Entries.Count(entry => entry.ShownInServiceMenu) ?? 0; + var startCost = settings != null ? Math.Max(0, settings.GetInt(ServiceSettingsKeys.StartGameCost)) : 0; + var freePlay = settings != null && settings.GetBool(ServiceSettingsKeys.FreePlay); + var priceText = freePlay ? "free play" : $"{startCost}"; + + var prizeSummary = string.Empty; + if (prizeSessionState != null) + { + var historyList = prizeSessionState.History; + var recentHistory = historyList != null && historyList.Count > 0 + ? string.Join("\n", historyList.Skip(Math.Max(0, historyList.Count - 5)).Select(record => + $"- [{record.StartedAtUtc:yyyy-MM-dd HH:mm:ss}] {FormatReward(record.Result.RewardKind)} ({record.Result.Score}очк) -> {FormatStatus(record.Status)}{(string.IsNullOrWhiteSpace(record.Note) ? "" : ": " + record.Note)}")) + : "История призов пуста."; + + prizeSummary = $"\n\n--- Эксплуатационная статистика ---\n" + + $"Всего сыграно игр: {prizeSessionState.TotalGamesPlayed}\n" + + $"Набрано очков всего: {prizeSessionState.TotalScore}\n" + + $"Собрано монет всего: {prizeSessionState.TotalCoins}\n" + + $"Показов QR-кодов: {prizeSessionState.QrShows}\n" + + $"Успешных физ. выдач: {prizeSessionState.PhysicalDispenses}\n" + + $"Сбоев физ. выдач: {prizeSessionState.PhysicalDispenseFailures}\n" + + $"Сбоев связи по COM: {prizeSessionState.ComErrors}\n" + + $"Призовые сессии: начато {prizeSessionState.StartedCount}, завершено {prizeSessionState.CompletedCount}, сбоев {prizeSessionState.FailedCount}, повторов заблокировано {prizeSessionState.DuplicateBlockedCount}\n" + + $"\n--- Последние Призовые сессии (до 5) ---\n{recentHistory}"; + } + else + { + prizeSummary = "\nПризовая история недоступна в текущем контексте."; + } + + return ServiceSettingsActionResult.Success( + "Статистика", + $"Настроек загружено: {totalSettings}. Видимых пунктов: {visibleDefinitions}. Стоимость старта: {priceText}.{prizeSummary}", + "Статистика"); + } + + private static string FormatReward(PrizeRewardKind rewardKind) + { + return rewardKind switch + { + PrizeRewardKind.QRCode => "QR", + PrizeRewardKind.Hopper => "Хоппер", + PrizeRewardKind.PrizeStand => "Витрина", + PrizeRewardKind.Big => "Большой приз", + PrizeRewardKind.Small => "Малый приз", + _ => "Нет приза", + }; + } + + private static string FormatStatus(PrizeSessionStatus status) + { + return status switch + { + PrizeSessionStatus.Pending => "ожидает показа", + PrizeSessionStatus.Shown => "показана", + PrizeSessionStatus.Completed => "завершена", + PrizeSessionStatus.Failed => "ошибка", + PrizeSessionStatus.DuplicateBlocked => "повтор заблокирован", + _ => status.ToString(), + }; + } + } +} diff --git a/Assets/Scripts/Runtime/Settings/Core/ServiceSettingsStatisticsSummaryBuilder.cs.meta b/Assets/Scripts/Runtime/Settings/Core/ServiceSettingsStatisticsSummaryBuilder.cs.meta new file mode 100644 index 0000000..a276a7b --- /dev/null +++ b/Assets/Scripts/Runtime/Settings/Core/ServiceSettingsStatisticsSummaryBuilder.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: bc4b0676c7f7c5c4aa5d07c69bfacbb0 \ No newline at end of file diff --git a/Assets/Scripts/Runtime/Settings/Installers/ServiceSettingsInstaller.cs b/Assets/Scripts/Runtime/Settings/Installers/ServiceSettingsInstaller.cs index cd57e22..787e58a 100644 --- a/Assets/Scripts/Runtime/Settings/Installers/ServiceSettingsInstaller.cs +++ b/Assets/Scripts/Runtime/Settings/Installers/ServiceSettingsInstaller.cs @@ -1,5 +1,7 @@ using UnityEngine; using Zenject; +using DanroJump.Audio; +using DanroJump.Prizes; using DanroJump.SceneFlow; namespace DanroJump.Settings @@ -11,7 +13,9 @@ namespace DanroJump.Settings { [SerializeField] private string databaseAddress = ServiceSettingsAddressKeys.Database; [SerializeField] private ServiceSettingsDatabase fallbackDatabase; + [SerializeField] private GameAudioSettings audioSettings; [SerializeField] private string fileName = "service-settings.json"; + [SerializeField] private string prizeSessionStateFileName = "prize-session-state.json"; [SerializeField] private bool loadImmediately = true; [SerializeField] private bool bindActionsInScene = true; @@ -32,6 +36,7 @@ namespace DanroJump.Settings } var repository = new JsonServiceSettingsRepository(fileName); + var prizeSessionRepository = new JsonPrizeSessionStateRepository(prizeSessionStateFileName); var service = new ServiceSettingsService(database, repository); if (loadImmediately) @@ -45,7 +50,15 @@ namespace DanroJump.Settings Container.Bind().FromInstance(repository).AsSingle(); Container.Bind().FromInstance(service).AsSingle(); Container.Bind().FromInstance(service).AsSingle(); + Container.Bind().FromInstance(prizeSessionRepository).AsSingle(); + Container.BindInterfacesAndSelfTo().AsSingle(); Container.BindInterfacesAndSelfTo().AsSingle(); + if (audioSettings != null) + { + Container.BindInstance(audioSettings).AsSingle(); + } + + Container.BindInterfacesAndSelfTo().AsSingle().NonLazy(); Container.BindInterfacesTo().AsSingle().WithArguments(bindActionsInScene).NonLazy(); } } diff --git a/Assets/Scripts/Runtime/Settings/Keys/ServiceSettingsKeys.cs b/Assets/Scripts/Runtime/Settings/Keys/ServiceSettingsKeys.cs index def1aa9..3eac570 100644 --- a/Assets/Scripts/Runtime/Settings/Keys/ServiceSettingsKeys.cs +++ b/Assets/Scripts/Runtime/Settings/Keys/ServiceSettingsKeys.cs @@ -24,6 +24,10 @@ namespace DanroJump.Settings public const string ShowPrizeError = "prizes.showPrizeError"; public const string PrizePhoneNumber = "prizes.phoneNumber"; public const string QrMessageTemplate = "prizes.qrMessageTemplate"; + public const string QrPrizeTextBronze = "prizes.qrTextBronze"; + public const string QrPrizeTextSilver = "prizes.qrTextSilver"; + public const string QrPrizeTextGold = "prizes.qrTextGold"; + public const string QrPrizeTextSettings = "prizes.qrTextSettings"; public const string BigPrize = "prizes.bigPrize"; public const string PrizeLevels = "prizes.levels"; diff --git a/Assets/Scripts/Runtime/UI/ArcadeInput/ArcadeStringInputState.cs b/Assets/Scripts/Runtime/UI/ArcadeInput/ArcadeStringInputState.cs index ffca863..d291e06 100644 --- a/Assets/Scripts/Runtime/UI/ArcadeInput/ArcadeStringInputState.cs +++ b/Assets/Scripts/Runtime/UI/ArcadeInput/ArcadeStringInputState.cs @@ -10,6 +10,7 @@ namespace DanroJump.UI.ArcadeInput { public const string PhoneSymbols = " +0123456789()-"; public const string ShortTextSymbols = " 0123456789+-.,:/()ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя"; + public const string TemplateSymbols = ShortTextSymbols + "{}_!?@#%&=*\"'"; public ArcadeStringInputProfile(string allowedSymbols, int maxLength) { @@ -35,6 +36,11 @@ namespace DanroJump.UI.ArcadeInput return new ArcadeStringInputProfile(ShortTextSymbols, maxLength); } + public static ArcadeStringInputProfile Template(int maxLength = 96) + { + return new ArcadeStringInputProfile(TemplateSymbols, maxLength); + } + private static string NormalizeSymbols(string symbols) { if (string.IsNullOrEmpty(symbols)) diff --git a/Assets/Scripts/Runtime/UI/Gameplay/GameplayHudController.cs b/Assets/Scripts/Runtime/UI/Gameplay/GameplayHudController.cs index d839ad9..efd5285 100644 --- a/Assets/Scripts/Runtime/UI/Gameplay/GameplayHudController.cs +++ b/Assets/Scripts/Runtime/UI/Gameplay/GameplayHudController.cs @@ -1,6 +1,9 @@ +using System; using System.Threading; using Cysharp.Threading.Tasks; +using DanroJump.Audio; using DanroJump.Gameplay; +using DanroJump.Hardware.Com; using DanroJump.Prizes; using DanroJump.Prizes.Qr; using DanroJump.SceneFlow; @@ -31,9 +34,12 @@ namespace DanroJump.UI.Gameplay private UIDocument document; private GameplaySession session; private IPrizeFlowService prizeFlow; + private IPrizeSessionStateService prizeSessionState; private IPrizeQrService prizeQrService; private ISceneFlowService sceneFlow; private IReadOnlyServiceSettings serviceSettings; + private IGameAudioService audioService; + private IComSystem comSystem; private PrizeResultOverlayWindow prizeResultOverlay; private ContinueGameOverlayWindow continueGameOverlay; private VisualElement prizeOverlayRoot; @@ -47,6 +53,8 @@ namespace DanroJump.UI.Gameplay private Label deathsLabel; private Label stateLabel; private CancellationTokenSource refreshCancellation; + private CancellationTokenSource qrTimeoutCancellation; + private CancellationTokenSource physicalDispenseCancellation; private bool isSubscribedToSession; private bool isSubscribedToPrizeFlow; @@ -57,14 +65,20 @@ namespace DanroJump.UI.Gameplay public void Construct( GameplaySession injectedSession, [InjectOptional] IPrizeFlowService injectedPrizeFlow = null, + [InjectOptional] IPrizeSessionStateService injectedPrizeSessionState = null, [InjectOptional] IPrizeQrService injectedPrizeQrService = null, [InjectOptional] ISceneFlowService injectedSceneFlow = null, - [InjectOptional] IReadOnlyServiceSettings injectedServiceSettings = null) + [InjectOptional] IReadOnlyServiceSettings injectedServiceSettings = null, + [InjectOptional] IGameAudioService injectedAudioService = null, + [InjectOptional] IComSystem injectedComSystem = null) { prizeFlow = injectedPrizeFlow; + prizeSessionState = injectedPrizeSessionState; prizeQrService = injectedPrizeQrService; sceneFlow = injectedSceneFlow; serviceSettings = injectedServiceSettings; + audioService = injectedAudioService; + comSystem = injectedComSystem; SetSession(injectedSession); SubscribeToPrizeFlow(); } @@ -108,6 +122,20 @@ namespace DanroJump.UI.Gameplay refreshCancellation = null; } + if (qrTimeoutCancellation != null) + { + qrTimeoutCancellation.Cancel(); + qrTimeoutCancellation.Dispose(); + qrTimeoutCancellation = null; + } + + if (physicalDispenseCancellation != null) + { + physicalDispenseCancellation.Cancel(); + physicalDispenseCancellation.Dispose(); + physicalDispenseCancellation = null; + } + UnsubscribeFromSession(); UnsubscribeFromPrizeFlow(); prizeResultOverlay?.Dispose(); @@ -354,6 +382,11 @@ namespace DanroJump.UI.Gameplay return; } + audioService?.Play(result.RewardKind == PrizeRewardKind.QRCode + ? GameAudioEvent.PrizeQrStarted + : GameAudioEvent.PrizePhysicalStarted); + audioService?.Play(GameAudioEvent.PrizeStarted); + audioService?.PlayMusic(GameMusicCue.Prize); EnsureDocument(); BindPrizeOverlay(); @@ -362,6 +395,12 @@ namespace DanroJump.UI.Gameplay if (result.RewardKind == PrizeRewardKind.QRCode && prizeQrService != null) { prizeQrService.TryCreateTicket(result, out qrTicket, out qrError); + if (qrTicket == null) + { + prizeSessionState?.FailActiveSession(string.IsNullOrWhiteSpace(qrError) + ? "Не удалось подготовить QR-приз." + : qrError); + } } prizeResultOverlay?.SetResult( @@ -371,10 +410,50 @@ namespace DanroJump.UI.Gameplay qrTicket, qrError); prizeResultOverlay?.Open(); + if (qrTicket != null || result.RewardKind != PrizeRewardKind.QRCode) + { + prizeSessionState?.MarkActiveSessionShown(); + } + + if (result.RewardKind == PrizeRewardKind.QRCode) + { + prizeSessionState?.RecordQrShow(); + if (qrTimeoutCancellation != null) + { + qrTimeoutCancellation.Cancel(); + qrTimeoutCancellation.Dispose(); + } + qrTimeoutCancellation = new CancellationTokenSource(); + StartQrTimeoutAsync(qrTimeoutCancellation.Token).Forget(Debug.LogException); + } + else if (result.RewardKind == PrizeRewardKind.Hopper || result.RewardKind == PrizeRewardKind.PrizeStand) + { + if (physicalDispenseCancellation != null) + { + physicalDispenseCancellation.Cancel(); + physicalDispenseCancellation.Dispose(); + } + physicalDispenseCancellation = new CancellationTokenSource(); + DispensePhysicalPrizeAsync(result, physicalDispenseCancellation.Token).Forget(Debug.LogException); + } } private void HandlePrizeReturnRequested() { + audioService?.Play(GameAudioEvent.UiBack); + if (qrTimeoutCancellation != null) + { + qrTimeoutCancellation.Cancel(); + qrTimeoutCancellation.Dispose(); + qrTimeoutCancellation = null; + } + if (physicalDispenseCancellation != null) + { + physicalDispenseCancellation.Cancel(); + physicalDispenseCancellation.Dispose(); + physicalDispenseCancellation = null; + } + prizeSessionState?.CompleteActiveSession("Оператор закрыл экран выдачи приза."); prizeResultOverlay?.Close(); sceneFlow?.OpenMainMenu(); } @@ -419,17 +498,153 @@ namespace DanroJump.UI.Gameplay { if (session != null && session.TryContinueGame()) { + audioService?.Play(GameAudioEvent.UiSubmit); continueGameOverlay?.Close(); return; } + audioService?.Play(GameAudioEvent.UiError); continueGameOverlay?.SetUnavailable(); } private void HandleContinueMenuRequested() { + audioService?.Play(GameAudioEvent.UiBack); continueGameOverlay?.Close(); sceneFlow?.OpenMainMenu(); } + + private async UniTask StartQrTimeoutAsync(CancellationToken token) + { + var timeoutSeconds = 30; + if (serviceSettings != null) + { + var val = serviceSettings.GetInt(ServiceSettingsKeys.InactivityTimeout); + if (val > 0) + { + timeoutSeconds = val; + } + } + + try + { + await UniTask.Delay(TimeSpan.FromSeconds(timeoutSeconds), cancellationToken: token); + if (prizeSessionState != null) + { + prizeSessionState.CompleteActiveSession("QR-код закрыт автоматически по таймауту неактивности."); + } + prizeResultOverlay?.Close(); + sceneFlow?.OpenMainMenu(); + } + catch (OperationCanceledException) + { + } + } + + private async UniTask DispensePhysicalPrizeAsync(PrizeFlowResult result, CancellationToken token) + { + if (prizeSessionState == null) + { + return; + } + + try + { + if (comSystem == null || !comSystem.IsRunning) + { + var err = "Ошибка: COM-система не запущена."; + prizeResultOverlay?.SetSubtitle(err); + prizeSessionState.RecordPhysicalDispense(false); + prizeSessionState.FailActiveSession(err); + return; + } + + prizeResultOverlay?.SetSubtitle("Выдача приза..."); + var success = false; + var detailMessage = string.Empty; + + if (result.RewardKind == PrizeRewardKind.Hopper) + { + success = await DispenseHopperAsync(comSystem, token); + detailMessage = success + ? "Капсула выдана успешно!" + : "Ошибка выдачи: датчик хоппера не сработал за 10 секунд."; + } + else if (result.RewardKind == PrizeRewardKind.PrizeStand) + { + var readyBoxes = await comSystem.GetReadyPrizeBoxesAsync(token); + if (readyBoxes == null || readyBoxes.Length == 0) + { + success = false; + detailMessage = "Ошибка выдачи: нет доступных ячеек на витрине."; + } + else + { + var boxNumber = readyBoxes[0]; + prizeResultOverlay?.SetSubtitle($"Открытие ячейки {boxNumber}..."); + var openResult = await comSystem.OpenPrizeBoxAsync(boxNumber, token); + success = openResult.IsSuccess; + detailMessage = success + ? $"Ячейка {boxNumber} открыта!" + : $"Ошибка открытия ячейки {boxNumber}: {openResult.Message}"; + } + } + + prizeResultOverlay?.SetSubtitle(detailMessage); + prizeSessionState.RecordPhysicalDispense(success); + if (success) + { + prizeSessionState.CompleteActiveSession(detailMessage); + } + else + { + prizeSessionState.FailActiveSession(detailMessage); + } + } + catch (OperationCanceledException) + { + prizeResultOverlay?.SetSubtitle("Выдача приза отменена."); + prizeSessionState.RecordPhysicalDispense(false); + prizeSessionState.FailActiveSession("Выдача приза отменена."); + } + catch (Exception ex) + { + var err = $"Внутренняя ошибка выдачи: {ex.Message}"; + prizeResultOverlay?.SetSubtitle(err); + prizeSessionState.RecordPhysicalDispense(false); + prizeSessionState.FailActiveSession(err); + } + } + + private async UniTask DispenseHopperAsync(IComSystem com, CancellationToken token) + { + if (com == null) + { + return false; + } + + if (!com.SendToMain("301")) + { + return false; + } + + var tcs = new UniTaskCompletionSource(); + UnityEngine.Events.UnityAction onTriggered = () => tcs.TrySetResult(); + com.HopperSensorTriggered.AddListener(onTriggered); + + try + { + await UniTask.WhenAny( + tcs.Task, + UniTask.Delay(TimeSpan.FromSeconds(10), cancellationToken: token) + ); + return tcs.Task.Status == UniTaskStatus.Succeeded; + } + finally + { + com.HopperSensorTriggered.RemoveListener(onTriggered); + com.SendToMain("300"); + } + } } } diff --git a/Assets/Scripts/Runtime/UI/Gameplay/PrizeResultOverlayWindow.cs b/Assets/Scripts/Runtime/UI/Gameplay/PrizeResultOverlayWindow.cs index bf6bbc3..b32b307 100644 --- a/Assets/Scripts/Runtime/UI/Gameplay/PrizeResultOverlayWindow.cs +++ b/Assets/Scripts/Runtime/UI/Gameplay/PrizeResultOverlayWindow.cs @@ -64,6 +64,11 @@ namespace DanroJump.UI.Gameplay RefreshQrBlock(result, qrTicket, qrError); } + public void SetSubtitle(string text) + { + SetLabel(subtitleLabel, text); + } + public void Open() { if (root == null) diff --git a/Assets/Scripts/Runtime/UI/MainMenu/MainMenuController.cs b/Assets/Scripts/Runtime/UI/MainMenu/MainMenuController.cs index 4dd7fe2..17a48a6 100644 --- a/Assets/Scripts/Runtime/UI/MainMenu/MainMenuController.cs +++ b/Assets/Scripts/Runtime/UI/MainMenu/MainMenuController.cs @@ -1,9 +1,11 @@ using System.Collections.Generic; using System.Threading; using Cysharp.Threading.Tasks; +using DanroJump.Audio; using DanroJump.Bootstrap; using DanroJump.Hardware.Com; using DanroJump.Prizes; +using DanroJump.Prizes.Qr; using DanroJump.SceneFlow; using DanroJump.Settings; using DanroJump.UI.ArcadeInput; @@ -57,6 +59,7 @@ namespace DanroJump.UI.MainMenu private SettingsModalWindow settingsModal; private ServiceInfoModalWindow serviceInfoModal; private ServiceTextInputModalWindow serviceTextInputModal; + private QrCodeSettingsModalWindow qrCodeSettingsModal; private PrizeLevelsModalWindow prizeLevelsModal; private PrizeLevelAddModalWindow prizeLevelAddModal; private readonly List private void OpenSettings() { + audioService?.Play(GameAudioEvent.UiSubmit); ResolveServiceSettingsIfNeeded(); if (settingsModal != null && settingsModal.Root != null) @@ -933,6 +1032,7 @@ namespace DanroJump.UI.MainMenu /// private void QuitApplication() { + audioService?.Play(GameAudioEvent.UiBack); #if UNITY_EDITOR UnityEditor.EditorApplication.isPlaying = false; #else diff --git a/Assets/Scripts/Runtime/UI/MainMenu/QrCodeSettingsModalWindow.cs b/Assets/Scripts/Runtime/UI/MainMenu/QrCodeSettingsModalWindow.cs new file mode 100644 index 0000000..1e70164 --- /dev/null +++ b/Assets/Scripts/Runtime/UI/MainMenu/QrCodeSettingsModalWindow.cs @@ -0,0 +1,197 @@ +using System; +using DanroJump.Prizes.Qr; +using DanroJump.Settings; +using DanroJump.UI.Modals; +using UnityEngine; +using UnityEngine.UIElements; + +namespace DanroJump.UI.MainMenu +{ + /// + /// Сервисная модалка настройки короткого текста QR-приза по рангам. + /// + public sealed class QrCodeSettingsModalWindow : ModalWindowBase, IDisposable + { + private static readonly QrPrizeTier[] EditableTiers = + { + QrPrizeTier.Bronze, + QrPrizeTier.Silver, + QrPrizeTier.Gold + }; + + private readonly Label tierLabel; + private readonly Label prizeTextLabel; + private readonly Label statusLabel; + private readonly Button previousTierButton; + private readonly Button nextTierButton; + private readonly Button editTextButton; + private readonly Button closeButton; + + private IServiceSettingsService settingsService; + private int tierIndex; + + public QrCodeSettingsModalWindow(VisualElement root, IServiceSettingsService settingsService) + : base(root) + { + this.settingsService = settingsService; + + tierLabel = root?.Q