From c02d04073f0376c669ccc7dfaa51465ace36da24 Mon Sep 17 00:00:00 2001 From: Andrey Sharshov Date: Sun, 16 Nov 2025 18:48:06 +0100 Subject: [PATCH] initial --- .babelrc | 6 + .barrelsby.json | 6 + .editorconfig | 12 + .eslintignore | 8 + .eslintrc.json | 51 + .gitattributes | 7 + .gitignore | 43 + .gitlab-ci.yml | 6 + .storybook/main.js | 37 + .storybook/preview.js | 26 + README.md | 263 + art/SGKUI/.gitignore | 2 + art/SGKUI/SGKUI.fairy | 2 + .../assets/ErrorPopups/DepositButton.xml | 22 + art/SGKUI/assets/ErrorPopups/ErrorPopup.xml | 21 + .../assets/ErrorPopups/ErrorPopupWindow.xml | 14 + art/SGKUI/assets/ErrorPopups/OkButton.xml | 23 + art/SGKUI/assets/ErrorPopups/Opensans.ttf | Bin 0 -> 529700 bytes art/SGKUI/assets/ErrorPopups/Overlay.xml | 8 + art/SGKUI/assets/ErrorPopups/Oxanium.ttf | Bin 0 -> 43108 bytes art/SGKUI/assets/ErrorPopups/package.xml | 13 + art/SGKUI/export/ErrorPopups/package.xml | Bin 0 -> 3056 bytes art/SGKUI/settings/Adaptation.json | 8 + art/SGKUI/settings/Publish.json | 35 + art/replay-ui/area-buttons/buttons.spine | Bin 0 -> 1920 bytes .../images/bet-select-btn-disabled.png | Bin 0 -> 802 bytes .../images/bet-select-btn-hover.png | Bin 0 -> 800 bytes .../images/bet-select-btn-press.png | Bin 0 -> 802 bytes .../area-buttons/images/bet-select-btn.png | Bin 0 -> 799 bytes .../area-buttons/images/check-box-hover.png | Bin 0 -> 513 bytes .../area-buttons/images/check-box.png | Bin 0 -> 516 bytes .../area-buttons/images/close-btn.png | Bin 0 -> 776 bytes .../autospin_settings/autospin_settings.psd | Bin 0 -> 748257 bytes .../autospin_settings/autospin_settings.spine | Bin 0 -> 9880 bytes .../images/AS_bg_advanced_expanded.png | Bin 0 -> 10017 bytes .../images/AS_bg_basic_collapsed.png | Bin 0 -> 6517 bytes .../images/Autospin settings_prv.png | Bin 0 -> 6844 bytes .../autospin_settings/images/I_prv.png | Bin 0 -> 3491 bytes .../images/as_top_bgTriangle.png | Bin 0 -> 2553 bytes .../autospin_settings/images/btn_AS_bg.png | Bin 0 -> 2906 bytes .../images/btn_bg_advanced.png | Bin 0 -> 3443 bytes .../autospin_settings/images/btn_bg_basic.png | Bin 0 -> 3438 bytes .../images/btn_checkboxOff_bg.png | Bin 0 -> 2997 bytes .../images/btn_checkboxOn.png | Bin 0 -> 2750 bytes .../images/btn_checkboxOn_bg.png | Bin 0 -> 3003 bytes .../autospin_settings/images/btn_i10.png | Bin 0 -> 2897 bytes .../autospin_settings/images/btn_i100.png | Bin 0 -> 2897 bytes .../autospin_settings/images/btn_i25.png | Bin 0 -> 2897 bytes .../autospin_settings/images/btn_i250.png | Bin 0 -> 2897 bytes .../autospin_settings/images/btn_i50.png | Bin 0 -> 2897 bytes .../autospin_settings/images/btn_i500.png | Bin 0 -> 2897 bytes .../autospin_settings/images/btn_i750.png | Bin 0 -> 2897 bytes .../autospin_settings/images/btn_i_1000.png | Bin 0 -> 2897 bytes .../autospin_settings/images/btn_infinity.png | Bin 0 -> 2897 bytes .../autospin_settings/images/checkbox_prv.png | Bin 0 -> 4264 bytes .../autospin_settings/images/close-btn.png | Bin 0 -> 776 bytes .../autospin_settings/images/close_btn_.png | Bin 0 -> 516 bytes .../images/close_btn_hover.png | Bin 0 -> 513 bytes .../images/tx_tNumbers of rounds.png | Bin 0 -> 3943 bytes .../images/txt_Autospin settings.png | Bin 0 -> 4329 bytes .../autospin_settings/images/txt_I.png | Bin 0 -> 2448 bytes .../images/txt_If bonus game is won.png | Bin 0 -> 3988 bytes .../txt_If cash balance decreases by.png | Bin 0 -> 4104 bytes .../txt_If cash balance increases by.png | Bin 0 -> 4057 bytes .../images/txt_If single win exceeds.png | Bin 0 -> 4104 bytes .../images/txt_On any win.png | Bin 0 -> 3532 bytes .../images/txt_Stop_autospin.png | Bin 0 -> 3823 bytes .../autospin_settings/images/txt_btn_10.png | Bin 0 -> 2670 bytes .../autospin_settings/images/txt_btn_100.png | Bin 0 -> 2713 bytes .../autospin_settings/images/txt_btn_1000.png | Bin 0 -> 2736 bytes .../autospin_settings/images/txt_btn_25.png | Bin 0 -> 2765 bytes .../autospin_settings/images/txt_btn_250.png | Bin 0 -> 2858 bytes .../autospin_settings/images/txt_btn_50.png | Bin 0 -> 2731 bytes .../autospin_settings/images/txt_btn_500.png | Bin 0 -> 2770 bytes .../autospin_settings/images/txt_btn_750.png | Bin 0 -> 2857 bytes .../images/txt_btn_Advanced.png | Bin 0 -> 3350 bytes .../images/txt_btn_Basic.png | Bin 0 -> 3041 bytes .../images/txt_btn_infinity.png | Bin 0 -> 4724 bytes .../keyboard/images/autospin_btn.png | Bin 0 -> 8963 bytes .../keyboard/images/autospin_infinity.png | Bin 0 -> 3447 bytes .../keyboard/images/autospin_stop_btn.png | Bin 0 -> 12242 bytes .../keyboard/images/autospins_back.png | Bin 0 -> 1934 bytes art/replay-ui/keyboard/images/bet_btn.png | Bin 0 -> 5721 bytes .../keyboard/images/bonus_active_btn.png | Bin 0 -> 2435 bytes .../keyboard/images/btn_circle_orange.png | Bin 0 -> 5227 bytes .../keyboard/images/btn_circle_yellow.png | Bin 0 -> 4754 bytes .../keyboard/images/buy_bonus_btn.png | Bin 0 -> 2450 bytes art/replay-ui/keyboard/images/desktop_bg.png | Bin 0 -> 40637 bytes art/replay-ui/keyboard/images/fr_back.png | Bin 0 -> 1477 bytes art/replay-ui/keyboard/images/home_btn.png | Bin 0 -> 4993 bytes art/replay-ui/keyboard/images/info_btn.png | Bin 0 -> 5618 bytes art/replay-ui/keyboard/images/max_btn.png | Bin 0 -> 780 bytes art/replay-ui/keyboard/images/max_btn_mob.png | Bin 0 -> 2003 bytes art/replay-ui/keyboard/images/menu_btn.png | Bin 0 -> 3280 bytes art/replay-ui/keyboard/images/minus_btn.png | Bin 0 -> 1782 bytes .../keyboard/images/paytable_btn.png | Bin 0 -> 6396 bytes art/replay-ui/keyboard/images/placeholder.png | Bin 0 -> 1973 bytes art/replay-ui/keyboard/images/plus_btn.png | Bin 0 -> 1565 bytes art/replay-ui/keyboard/images/popiplay.png | Bin 0 -> 5346 bytes art/replay-ui/keyboard/images/quick_btn.png | Bin 0 -> 4510 bytes art/replay-ui/keyboard/images/quick_icon.png | Bin 0 -> 1034 bytes art/replay-ui/keyboard/images/replay_btn.png | Bin 0 -> 11224 bytes .../keyboard/images/settings_btn.png | Bin 0 -> 6688 bytes .../keyboard/images/sound_off_btn.png | Bin 0 -> 1988 bytes .../keyboard/images/sound_on_btn.png | Bin 0 -> 2214 bytes art/replay-ui/keyboard/images/spin_btn.png | Bin 0 -> 22650 bytes .../keyboard/images/wild_spin_btn.png | Bin 0 -> 2698 bytes .../settings_ui/images/btn_AudioToggle.png | Bin 0 -> 3232 bytes .../images/btn_bar_AudioToggle 2.png | Bin 0 -> 763 bytes .../images/btn_bar_AudioToggle.png | Bin 0 -> 3102 bytes art/replay-ui/settings_ui/images/btn_x.png | Bin 0 -> 2728 bytes art/replay-ui/settings_ui/images/btn_x_bg.png | Bin 0 -> 3130 bytes .../settings_ui/images/checkboxOff_1.png | Bin 0 -> 3211 bytes .../settings_ui/images/checkboxOn_1.png | Bin 0 -> 3211 bytes .../settings_ui/images/checkboxOn_V_1.png | Bin 0 -> 2804 bytes .../settings_ui/images/checkbox_prvw.png | Bin 0 -> 7619 bytes .../settings_ui/images/settings_bg.png | Bin 0 -> 9777 bytes .../settings_ui/images/txt_Audio.png | Bin 0 -> 3397 bytes .../settings_ui/images/txt_Music.png | Bin 0 -> 3289 bytes .../settings_ui/images/txt_Settings.png | Bin 0 -> 4474 bytes .../settings_ui/images/txt_Sound FX.png | Bin 0 -> 3613 bytes .../images/txt_Spacebar to spin.png | Bin 0 -> 3966 bytes .../settings_ui/images/txt_Turbospin.png | Bin 0 -> 3328 bytes .../settings_ui/images/txt_Volume.png | Bin 0 -> 3348 bytes art/replay-ui/start_page_sound.spine | Bin 0 -> 3293 bytes art/replay-ui/ui.spine | Bin 0 -> 39003 bytes art/ui/area-buttons/buttons.spine | Bin 0 -> 1920 bytes .../images/bet-select-btn-disabled.png | Bin 0 -> 802 bytes .../images/bet-select-btn-hover.png | Bin 0 -> 800 bytes .../images/bet-select-btn-press.png | Bin 0 -> 802 bytes art/ui/area-buttons/images/bet-select-btn.png | Bin 0 -> 799 bytes .../area-buttons/images/check-box-hover.png | Bin 0 -> 513 bytes art/ui/area-buttons/images/check-box.png | Bin 0 -> 516 bytes art/ui/area-buttons/images/close-btn.png | Bin 0 -> 776 bytes .../autospin_settings/autospin_settings.psd | Bin 0 -> 748257 bytes .../autospin_settings/autospin_settings.spine | Bin 0 -> 9880 bytes .../images/AS_bg_advanced_expanded.png | Bin 0 -> 10017 bytes .../images/AS_bg_basic_collapsed.png | Bin 0 -> 6517 bytes .../images/Autospin settings_prv.png | Bin 0 -> 6844 bytes art/ui/autospin_settings/images/I_prv.png | Bin 0 -> 3491 bytes .../images/as_top_bgTriangle.png | Bin 0 -> 2553 bytes art/ui/autospin_settings/images/btn_AS_bg.png | Bin 0 -> 2906 bytes .../images/btn_bg_advanced.png | Bin 0 -> 3443 bytes .../autospin_settings/images/btn_bg_basic.png | Bin 0 -> 3438 bytes .../images/btn_checkboxOff_bg.png | Bin 0 -> 2997 bytes .../images/btn_checkboxOn.png | Bin 0 -> 2750 bytes .../images/btn_checkboxOn_bg.png | Bin 0 -> 3003 bytes art/ui/autospin_settings/images/btn_i10.png | Bin 0 -> 2897 bytes art/ui/autospin_settings/images/btn_i100.png | Bin 0 -> 2897 bytes art/ui/autospin_settings/images/btn_i25.png | Bin 0 -> 2897 bytes art/ui/autospin_settings/images/btn_i250.png | Bin 0 -> 2897 bytes art/ui/autospin_settings/images/btn_i50.png | Bin 0 -> 2897 bytes art/ui/autospin_settings/images/btn_i500.png | Bin 0 -> 2897 bytes art/ui/autospin_settings/images/btn_i750.png | Bin 0 -> 2897 bytes .../autospin_settings/images/btn_i_1000.png | Bin 0 -> 2897 bytes .../autospin_settings/images/btn_infinity.png | Bin 0 -> 2897 bytes .../autospin_settings/images/checkbox_prv.png | Bin 0 -> 4264 bytes art/ui/autospin_settings/images/close-btn.png | Bin 0 -> 776 bytes .../autospin_settings/images/close_btn_.png | Bin 0 -> 516 bytes .../images/close_btn_hover.png | Bin 0 -> 513 bytes .../images/tx_tNumbers of rounds.png | Bin 0 -> 3943 bytes .../images/txt_Autospin settings.png | Bin 0 -> 4329 bytes art/ui/autospin_settings/images/txt_I.png | Bin 0 -> 2448 bytes .../images/txt_If bonus game is won.png | Bin 0 -> 3988 bytes .../txt_If cash balance decreases by.png | Bin 0 -> 4104 bytes .../txt_If cash balance increases by.png | Bin 0 -> 4057 bytes .../images/txt_If single win exceeds.png | Bin 0 -> 4104 bytes .../images/txt_On any win.png | Bin 0 -> 3532 bytes .../images/txt_Stop_autospin.png | Bin 0 -> 3823 bytes .../autospin_settings/images/txt_btn_10.png | Bin 0 -> 2670 bytes .../autospin_settings/images/txt_btn_100.png | Bin 0 -> 2713 bytes .../autospin_settings/images/txt_btn_1000.png | Bin 0 -> 2736 bytes .../autospin_settings/images/txt_btn_25.png | Bin 0 -> 2765 bytes .../autospin_settings/images/txt_btn_250.png | Bin 0 -> 2858 bytes .../autospin_settings/images/txt_btn_50.png | Bin 0 -> 2731 bytes .../autospin_settings/images/txt_btn_500.png | Bin 0 -> 2770 bytes .../autospin_settings/images/txt_btn_750.png | Bin 0 -> 2857 bytes .../images/txt_btn_Advanced.png | Bin 0 -> 3350 bytes .../images/txt_btn_Basic.png | Bin 0 -> 3041 bytes .../images/txt_btn_infinity.png | Bin 0 -> 4724 bytes .../Снимок экрана 2024-02-15 в 14.07.16.png | Bin 0 -> 104753 bytes art/ui/keyboard/images/autospin_btn.png | Bin 0 -> 8963 bytes art/ui/keyboard/images/autospin_infinity.png | Bin 0 -> 3447 bytes art/ui/keyboard/images/autospin_stop_btn.png | Bin 0 -> 12242 bytes art/ui/keyboard/images/autospins_back.png | Bin 0 -> 1934 bytes art/ui/keyboard/images/bet_btn.png | Bin 0 -> 5721 bytes art/ui/keyboard/images/bonus_active_btn.png | Bin 0 -> 2435 bytes art/ui/keyboard/images/btn_circle_orange.png | Bin 0 -> 5227 bytes art/ui/keyboard/images/btn_circle_yellow.png | Bin 0 -> 4754 bytes art/ui/keyboard/images/buy_bonus_btn.png | Bin 0 -> 2450 bytes art/ui/keyboard/images/desktop_bg.png | Bin 0 -> 40637 bytes art/ui/keyboard/images/fr_back.png | Bin 0 -> 1477 bytes art/ui/keyboard/images/home_btn.png | Bin 0 -> 4993 bytes art/ui/keyboard/images/info_btn.png | Bin 0 -> 5618 bytes art/ui/keyboard/images/max_btn.png | Bin 0 -> 780 bytes art/ui/keyboard/images/max_btn_mob.png | Bin 0 -> 2003 bytes art/ui/keyboard/images/menu_btn.png | Bin 0 -> 3280 bytes art/ui/keyboard/images/minus_btn.png | Bin 0 -> 1782 bytes art/ui/keyboard/images/paytable_btn.png | Bin 0 -> 4530 bytes art/ui/keyboard/images/placeholder.png | Bin 0 -> 1973 bytes art/ui/keyboard/images/plus_btn.png | Bin 0 -> 1565 bytes art/ui/keyboard/images/popiplay.png | Bin 0 -> 5346 bytes art/ui/keyboard/images/quick_btn.png | Bin 0 -> 4510 bytes art/ui/keyboard/images/quick_icon.png | Bin 0 -> 1034 bytes art/ui/keyboard/images/settings_btn.png | Bin 0 -> 6688 bytes art/ui/keyboard/images/sound_off_btn.png | Bin 0 -> 1988 bytes art/ui/keyboard/images/sound_on_btn.png | Bin 0 -> 2214 bytes art/ui/keyboard/images/spin_btn.png | Bin 0 -> 22650 bytes art/ui/keyboard/images/wild_spin_btn.png | Bin 0 -> 2698 bytes art/ui/settings_ui/images/btn_AudioToggle.png | Bin 0 -> 3232 bytes .../images/btn_bar_AudioToggle 2.png | Bin 0 -> 763 bytes .../images/btn_bar_AudioToggle.png | Bin 0 -> 3102 bytes art/ui/settings_ui/images/btn_x.png | Bin 0 -> 2728 bytes art/ui/settings_ui/images/btn_x_bg.png | Bin 0 -> 3130 bytes art/ui/settings_ui/images/checkboxOff_1.png | Bin 0 -> 3211 bytes art/ui/settings_ui/images/checkboxOn_1.png | Bin 0 -> 3211 bytes art/ui/settings_ui/images/checkboxOn_V_1.png | Bin 0 -> 2804 bytes art/ui/settings_ui/images/checkbox_prvw.png | Bin 0 -> 7619 bytes art/ui/settings_ui/images/settings_bg.png | Bin 0 -> 9777 bytes art/ui/settings_ui/images/txt_Audio.png | Bin 0 -> 3397 bytes art/ui/settings_ui/images/txt_Music.png | Bin 0 -> 3289 bytes art/ui/settings_ui/images/txt_Settings.png | Bin 0 -> 4474 bytes art/ui/settings_ui/images/txt_Sound FX.png | Bin 0 -> 3613 bytes .../images/txt_Spacebar to spin.png | Bin 0 -> 3966 bytes art/ui/settings_ui/images/txt_Turbospin.png | Bin 0 -> 3328 bytes art/ui/settings_ui/images/txt_Volume.png | Bin 0 -> 3348 bytes art/ui/start_page_sound.spine | Bin 0 -> 3293 bytes art/ui/ui.spine | Bin 0 -> 39036 bytes assets/replays-manifest.json | 45 + assets/shared-translations/locales/de.json | 81 + .../locales/en-SOCIAL.json | 81 + assets/shared-translations/locales/en.json | 76 + assets/shared-translations/locales/es.json | 81 + assets/shared-translations/locales/fi.json | 81 + assets/shared-translations/locales/fr-CA.json | 81 + assets/shared-translations/locales/ja.json | 81 + assets/shared-translations/locales/ko.json | 81 + assets/shared-translations/locales/nl.json | 81 + assets/shared-translations/locales/no.json | 81 + assets/shared-translations/locales/pt-BR.json | 81 + assets/shared-translations/locales/ru.json | 81 + assets/shared-translations/locales/sv.json | 81 + assets/shared-translations/locales/th.json | 81 + assets/shared-translations/locales/tr.json | 81 + assets/shared-translations/locales/zh-CN.json | 81 + assets/shared-translations/translations.json | 81 + assets/sys-manifest.json | 52 + assets/system/ErrorPopups/package.xml | Bin 0 -> 3056 bytes .../system/replay-ui/autospin_settings.skel | Bin 0 -> 26716 bytes assets/system/replay-ui/keyboard.skel | Bin 0 -> 39058 bytes assets/system/replay-ui/settings.skel | Bin 0 -> 10166 bytes assets/system/replay-ui/ui.atlas | 252 + assets/system/replay-ui/ui.webp | Bin 0 -> 111450 bytes assets/system/ui/autospin_settings.skel | Bin 0 -> 26716 bytes assets/system/ui/buttons.atlas | 20 + assets/system/ui/buttons.skel | Bin 0 -> 1194 bytes assets/system/ui/buttons.webp | Bin 0 -> 3618 bytes assets/system/ui/keyboard.skel | Bin 0 -> 39064 bytes assets/system/ui/settings.skel | Bin 0 -> 10166 bytes assets/system/ui/start_page_ui.skel | Bin 0 -> 5072 bytes assets/system/ui/ui.atlas | 255 + assets/system/ui/ui.webp | Bin 0 -> 124828 bytes bundler/webpack.common.js | 119 + bundler/webpack.dev.js | 72 + bundler/webpack.prod.js | 46 + bundler/webpack.staging.js | 46 + crowdin.yml | 5 + loader/loader.js | 1 + loader/readme.md | 2 + package-lock.json | 26248 ++++++++++++++++ package.json | 184 + scripts/slotgamekit.js | 45 + src/activities/Activity.ts | 23 + src/activities/ActivityRunner.ts | 88 + src/activities/ClearStorage.ts | 18 + .../GatherClientSessionEnvironmentInfo.ts | 71 + src/activities/LoadSystemAssets.ts | 20 + src/activities/PauseClock.ts | 18 + src/activities/ResumeClock.ts | 18 + src/activities/ShowBalanceErrorPopup.ts | 83 + src/activities/ShowCanvasOverlay.ts | 10 + src/activities/ShowErrorPopup.ts | 71 + src/activities/ShowLoadingError.ts | 71 + src/activities/StopAllScenes.ts | 18 + src/activities/SwitchToCasinoRounds.ts | 24 + src/activities/TrackOrientationActivity.ts | 45 + src/activities/index.ts | 14 + src/components/BitmapTextAttachment.js | 13 + src/components/Dimmer.js | 8 + src/components/HTMLContainer.js | 79 + src/components/HackAttachment.js | 101 + src/components/SpineButton.js | 80 + src/components/SpineScene.js | 28 + src/components/TextAttachment.js | 133 + src/components/index.ts | 7 + src/components/ui/AutoSpinsSettings.js | 494 + src/components/ui/AutospinsIndicator.js | 48 + src/components/ui/BalanceIndicator.js | 60 + src/components/ui/BetPicker.js | 403 + src/components/ui/Button.js | 218 + src/components/ui/CasinoFreespinsPopup.js | 47 + src/components/ui/EmbeddedSpineButton.js | 63 + src/components/ui/EmbeddedSpineCheckbox.js | 60 + src/components/ui/EmbeddedSpineSlider.js | 73 + src/components/ui/EmbeddedTextField.js | 191 + src/components/ui/ErrorPopup.js | 96 + src/components/ui/FreeroundsIndicator.js | 58 + src/components/ui/FreespinsIndicator.js | 62 + src/components/ui/GameSettings.js | 254 + src/components/ui/InfoBar/InfoBar.js | 902 + src/components/ui/ModalBackground.js | 51 + src/components/ui/PopupHtmlContainer.js | 34 + src/components/ui/ScrollBar.js | 147 + src/components/ui/StatusBar.js | 70 + src/components/ui/TotalBetIndicator.js | 46 + src/components/ui/WinIndicator.js | 42 + src/components/ui/WinText.js | 47 + src/components/ui/index.ts | 22 + src/components/utils/TextHelper.js | 32 + src/constants/constants.ts | 54 + src/controllers/BaseGameController.ts | 186 + src/controllers/FullScreenController.ts | 52 + src/devtools/DevViewModel.ts | 98 + src/devtools/ModelDevPanel.ts | 39 + src/devtools/backPanel/BackPanel.ts | 158 + .../backPanelPlugIns/AudioControls.ts | 495 + .../backPanelPlugIns/AudioSpritesControls.ts | 515 + .../backPanelPlugIns/BackPanelPlugIns.ts | 44 + .../backPanelPlugIns/CheatControls.ts | 109 + .../backPanelPlugIns/ClockControls.ts | 149 + .../backPanelPlugIns/LanguageControls.ts | 56 + .../backPanelPlugIns/UserControls.ts | 294 + .../backPanel/backPanelPlugIns/utils.ts | 32 + .../backPanel/interfaces/PaneExtended.ts | 25 + src/devtools/index.ts | 2 + src/errors/BackendError.ts | 21 + src/errors/ErrorProcessor.ts | 138 + src/errors/LobbyLinkNotFoundError.ts | 9 + src/errors/index.ts | 2 + src/extensions/AudioSpriteLoader.ts | 65 + src/extensions/BasePathInjector.ts | 72 + src/extensions/GlobalPointerEvents.ts | 118 + src/extensions/index.ts | 4 + src/extensions/loadHtml.ts | 31 + src/fairyScenes/FairyScene.ts | 29 + src/game/BaseGame.ts | 52 + src/helpers/TextScaler.ts | 63 + src/index.ts | 27 + src/models/AutoGameModel.test.ts | 233 + src/models/AutoGameModel.ts | 257 + src/models/BalanceModel.test.ts | 99 + src/models/BalanceModel.ts | 142 + src/models/BaseGameData.ts | 412 + src/models/BetModel.test.ts | 135 + src/models/BetModel.ts | 200 + src/models/Currency.ts | 83 + src/models/EndRoundModel.ts | 539 + src/models/GameModes/CasinoRoundsMode.ts | 152 + src/models/GameModes/FreeSpinsMode.ts | 133 + src/models/GameModes/MainMode.ts | 167 + src/models/GameModes/Mode.ts | 500 + src/models/GameModes/RespinsMode.ts | 133 + src/models/GameModes/TransCasinoRoundsMode.js | 85 + src/models/GameModes/TransCasinoRoundsMode.ts | 79 + src/models/Lines.test.ts | 59 + src/models/Lines.ts | 67 + src/models/ModeStack.ts | 57 + src/models/Model.ts | 1215 + src/models/PaytableModel.test.ts | 111 + src/models/PaytableModel.ts | 203 + src/models/VolumeModel.ts | 389 + src/models/helpers/OutcomesView.js | 51 + src/models/index.ts | 18 + src/models/modelInit/BalancePolicy.ts | 22 + src/models/modelInit/BetService.ts | 40 + .../modelInit/FeatureMultiplierCalculator.ts | 67 + src/models/modelInit/GameDataFactory.ts | 14 + src/models/modelInit/ModelBootstrap.ts | 206 + src/models/modelInit/ModelDataInitializer.ts | 35 + src/models/modelInit/ModesFactory.ts | 29 + src/models/modelInit/OutcomeRestorer.ts | 164 + src/models/modelInit/buildBootstrap.ts | 34 + src/scene/Scene.ts | 84 + src/scene/StartScreenUI.js | 134 + src/scene/UI.js | 184 + src/scene/index.ts | 4 + src/services/Analytics/AmplitudeAnalytics.ts | 32 + src/services/Analytics/Analytics.ts | 30 + src/services/Analytics/Events.ts | 217 + src/services/Analytics/LogAnalytics.ts | 18 + src/services/Analytics/NullAnalytics.ts | 7 + src/services/Analytics/analytics.md | 138 + src/services/Analytics/index.ts | 6 + src/services/Audio/Audio.ts | 296 + src/services/Audio/AudioSprites.ts | 417 + src/services/Audio/LogAudio.ts | 105 + src/services/Audio/MixerAudio.ts | 8 + src/services/Audio/MixerAudioSprites.ts | 8 + src/services/Audio/NullAudio.ts | 14 + src/services/Audio/index.ts | 6 + src/services/Clock/Clock.ts | 105 + src/services/Clock/DevClock.ts | 107 + src/services/Clock/NullClock.ts | 42 + src/services/Clock/index.ts | 3 + src/services/Events/Events.ts | 15 + src/services/Events/LoggedEvents.ts | 39 + src/services/Events/index.ts | 4 + src/services/GRoot/GRoot.ts | 39 + src/services/GRoot/NullGRoot.ts | 13 + src/services/GRoot/index.ts | 2 + src/services/Locales/DevLocales.ts | 94 + src/services/Locales/Locales.ts | 112 + src/services/Locales/NullLocales.ts | 53 + src/services/Locales/index.ts | 3 + src/services/Locator.ts | 179 + src/services/Manifest/ManifestService.ts | 463 + src/services/Manifest/NullManifestService.ts | 40 + src/services/Manifest/index.ts | 11 + src/services/Network/LocalNetwork.ts | 135 + src/services/Network/MockNetwork.ts | 68 + src/services/Network/Network.ts | 32 + src/services/Network/NullNetwork.ts | 96 + src/services/Network/ReplayNetwork.ts | 176 + src/services/Network/index.ts | 5 + src/services/Renderer/NullRenderer.ts | 16 + src/services/Renderer/Renderer2D.ts | 13 + src/services/Renderer/index.ts | 2 + src/services/Scenes/DevScenes.ts | 79 + src/services/Scenes/NullScenes.ts | 74 + src/services/Scenes/Scenes.ts | 285 + src/services/Scenes/index.ts | 3 + src/services/Storage/NullStorageService.ts | 42 + src/services/Storage/StorageService.ts | 98 + src/services/Storage/index.ts | 2 + src/services/User/DevUser.ts | 8 + src/services/User/NullDevUser.ts | 10 + src/services/User/index.ts | 2 + src/services/Viewport/DebugViewport.ts | 86 + src/services/Viewport/NullViewport.ts | 65 + src/services/Viewport/Viewport.ts | 163 + src/services/Viewport/index.ts | 3 + src/services/index.ts | 13 + src/services/types.ts | 82 + src/types/api/InitResp.ts | 26 + src/types/api/SpinResp.ts | 24 + src/types/api/common.ts | 347 + src/types/api/index.ts | 4 + src/types/eventemitter3.d.ts | 11 + src/types/fairygui-dom-fork.d.ts | 26 + src/types/index.d.ts | 80 + src/types/pixi__sound.d.ts | 72 + src/utils/AdvancedText.ts | 155 + src/utils/GameErrors.ts | 101 + src/utils/MultiStyleText.js | 1102 + src/utils/Numbers.ts | 41 + src/utils/PixiHtmlContainer.ts | 46 + src/utils/SeededRandom.ts | 28 + src/utils/create.ts | 174 + src/utils/createCasinoRoundsMode.js | 18 + src/utils/createCasinoRoundsMode.ts | 25 + src/utils/createDeferredPromise.ts | 29 + src/utils/freeRounds.ts | 40 + src/utils/handleShowRTPInRulesOption.ts | 17 + src/utils/htmlUtils.ts | 29 + src/utils/index.ts | 16 + src/utils/isIframe.ts | 12 + src/utils/isSafariOnIOS.ts | 16 + src/utils/sentry.ts | 34 + src/utils/setupDom.ts | 29 + src/utils/styles.ts | 41 + src/utils/utils.ts | 424 + src/viewmodels/BuyBonusViewModel.ts | 138 + src/viewmodels/GameplayViewModel.ts | 88 + src/viewmodels/PaytableViewModel.ts | 54 + src/viewmodels/UIViewModel.ts | 725 + src/viewmodels/index.ts | 4 + src/viewmodels/types.ts | 140 + styles/casinoFreespinsPopup.css | 42 + styles/main.css | 263 + tsconfig.json | 37 + typedoc.json | 11 + 481 files changed, 52066 insertions(+) create mode 100644 .babelrc create mode 100644 .barrelsby.json create mode 100644 .editorconfig create mode 100644 .eslintignore create mode 100644 .eslintrc.json create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .gitlab-ci.yml create mode 100644 .storybook/main.js create mode 100644 .storybook/preview.js create mode 100644 README.md create mode 100644 art/SGKUI/.gitignore create mode 100644 art/SGKUI/SGKUI.fairy create mode 100644 art/SGKUI/assets/ErrorPopups/DepositButton.xml create mode 100644 art/SGKUI/assets/ErrorPopups/ErrorPopup.xml create mode 100644 art/SGKUI/assets/ErrorPopups/ErrorPopupWindow.xml create mode 100644 art/SGKUI/assets/ErrorPopups/OkButton.xml create mode 100644 art/SGKUI/assets/ErrorPopups/Opensans.ttf create mode 100644 art/SGKUI/assets/ErrorPopups/Overlay.xml create mode 100644 art/SGKUI/assets/ErrorPopups/Oxanium.ttf create mode 100644 art/SGKUI/assets/ErrorPopups/package.xml create mode 100644 art/SGKUI/export/ErrorPopups/package.xml create mode 100644 art/SGKUI/settings/Adaptation.json create mode 100644 art/SGKUI/settings/Publish.json create mode 100644 art/replay-ui/area-buttons/buttons.spine create mode 100644 art/replay-ui/area-buttons/images/bet-select-btn-disabled.png create mode 100644 art/replay-ui/area-buttons/images/bet-select-btn-hover.png create mode 100644 art/replay-ui/area-buttons/images/bet-select-btn-press.png create mode 100644 art/replay-ui/area-buttons/images/bet-select-btn.png create mode 100644 art/replay-ui/area-buttons/images/check-box-hover.png create mode 100644 art/replay-ui/area-buttons/images/check-box.png create mode 100644 art/replay-ui/area-buttons/images/close-btn.png create mode 100644 art/replay-ui/autospin_settings/autospin_settings.psd create mode 100644 art/replay-ui/autospin_settings/autospin_settings.spine create mode 100644 art/replay-ui/autospin_settings/images/AS_bg_advanced_expanded.png create mode 100644 art/replay-ui/autospin_settings/images/AS_bg_basic_collapsed.png create mode 100644 art/replay-ui/autospin_settings/images/Autospin settings_prv.png create mode 100644 art/replay-ui/autospin_settings/images/I_prv.png create mode 100644 art/replay-ui/autospin_settings/images/as_top_bgTriangle.png create mode 100644 art/replay-ui/autospin_settings/images/btn_AS_bg.png create mode 100644 art/replay-ui/autospin_settings/images/btn_bg_advanced.png create mode 100644 art/replay-ui/autospin_settings/images/btn_bg_basic.png create mode 100644 art/replay-ui/autospin_settings/images/btn_checkboxOff_bg.png create mode 100644 art/replay-ui/autospin_settings/images/btn_checkboxOn.png create mode 100644 art/replay-ui/autospin_settings/images/btn_checkboxOn_bg.png create mode 100644 art/replay-ui/autospin_settings/images/btn_i10.png create mode 100644 art/replay-ui/autospin_settings/images/btn_i100.png create mode 100644 art/replay-ui/autospin_settings/images/btn_i25.png create mode 100644 art/replay-ui/autospin_settings/images/btn_i250.png create mode 100644 art/replay-ui/autospin_settings/images/btn_i50.png create mode 100644 art/replay-ui/autospin_settings/images/btn_i500.png create mode 100644 art/replay-ui/autospin_settings/images/btn_i750.png create mode 100644 art/replay-ui/autospin_settings/images/btn_i_1000.png create mode 100644 art/replay-ui/autospin_settings/images/btn_infinity.png create mode 100644 art/replay-ui/autospin_settings/images/checkbox_prv.png create mode 100644 art/replay-ui/autospin_settings/images/close-btn.png create mode 100644 art/replay-ui/autospin_settings/images/close_btn_.png create mode 100644 art/replay-ui/autospin_settings/images/close_btn_hover.png create mode 100644 art/replay-ui/autospin_settings/images/tx_tNumbers of rounds.png create mode 100644 art/replay-ui/autospin_settings/images/txt_Autospin settings.png create mode 100644 art/replay-ui/autospin_settings/images/txt_I.png create mode 100644 art/replay-ui/autospin_settings/images/txt_If bonus game is won.png create mode 100644 art/replay-ui/autospin_settings/images/txt_If cash balance decreases by.png create mode 100644 art/replay-ui/autospin_settings/images/txt_If cash balance increases by.png create mode 100644 art/replay-ui/autospin_settings/images/txt_If single win exceeds.png create mode 100644 art/replay-ui/autospin_settings/images/txt_On any win.png create mode 100644 art/replay-ui/autospin_settings/images/txt_Stop_autospin.png create mode 100644 art/replay-ui/autospin_settings/images/txt_btn_10.png create mode 100644 art/replay-ui/autospin_settings/images/txt_btn_100.png create mode 100644 art/replay-ui/autospin_settings/images/txt_btn_1000.png create mode 100644 art/replay-ui/autospin_settings/images/txt_btn_25.png create mode 100644 art/replay-ui/autospin_settings/images/txt_btn_250.png create mode 100644 art/replay-ui/autospin_settings/images/txt_btn_50.png create mode 100644 art/replay-ui/autospin_settings/images/txt_btn_500.png create mode 100644 art/replay-ui/autospin_settings/images/txt_btn_750.png create mode 100644 art/replay-ui/autospin_settings/images/txt_btn_Advanced.png create mode 100644 art/replay-ui/autospin_settings/images/txt_btn_Basic.png create mode 100644 art/replay-ui/autospin_settings/images/txt_btn_infinity.png create mode 100644 art/replay-ui/keyboard/images/autospin_btn.png create mode 100644 art/replay-ui/keyboard/images/autospin_infinity.png create mode 100644 art/replay-ui/keyboard/images/autospin_stop_btn.png create mode 100644 art/replay-ui/keyboard/images/autospins_back.png create mode 100644 art/replay-ui/keyboard/images/bet_btn.png create mode 100644 art/replay-ui/keyboard/images/bonus_active_btn.png create mode 100644 art/replay-ui/keyboard/images/btn_circle_orange.png create mode 100644 art/replay-ui/keyboard/images/btn_circle_yellow.png create mode 100644 art/replay-ui/keyboard/images/buy_bonus_btn.png create mode 100644 art/replay-ui/keyboard/images/desktop_bg.png create mode 100644 art/replay-ui/keyboard/images/fr_back.png create mode 100644 art/replay-ui/keyboard/images/home_btn.png create mode 100644 art/replay-ui/keyboard/images/info_btn.png create mode 100644 art/replay-ui/keyboard/images/max_btn.png create mode 100644 art/replay-ui/keyboard/images/max_btn_mob.png create mode 100644 art/replay-ui/keyboard/images/menu_btn.png create mode 100644 art/replay-ui/keyboard/images/minus_btn.png create mode 100644 art/replay-ui/keyboard/images/paytable_btn.png create mode 100644 art/replay-ui/keyboard/images/placeholder.png create mode 100644 art/replay-ui/keyboard/images/plus_btn.png create mode 100644 art/replay-ui/keyboard/images/popiplay.png create mode 100644 art/replay-ui/keyboard/images/quick_btn.png create mode 100644 art/replay-ui/keyboard/images/quick_icon.png create mode 100644 art/replay-ui/keyboard/images/replay_btn.png create mode 100644 art/replay-ui/keyboard/images/settings_btn.png create mode 100644 art/replay-ui/keyboard/images/sound_off_btn.png create mode 100644 art/replay-ui/keyboard/images/sound_on_btn.png create mode 100644 art/replay-ui/keyboard/images/spin_btn.png create mode 100644 art/replay-ui/keyboard/images/wild_spin_btn.png create mode 100644 art/replay-ui/settings_ui/images/btn_AudioToggle.png create mode 100644 art/replay-ui/settings_ui/images/btn_bar_AudioToggle 2.png create mode 100644 art/replay-ui/settings_ui/images/btn_bar_AudioToggle.png create mode 100644 art/replay-ui/settings_ui/images/btn_x.png create mode 100644 art/replay-ui/settings_ui/images/btn_x_bg.png create mode 100644 art/replay-ui/settings_ui/images/checkboxOff_1.png create mode 100644 art/replay-ui/settings_ui/images/checkboxOn_1.png create mode 100644 art/replay-ui/settings_ui/images/checkboxOn_V_1.png create mode 100644 art/replay-ui/settings_ui/images/checkbox_prvw.png create mode 100644 art/replay-ui/settings_ui/images/settings_bg.png create mode 100644 art/replay-ui/settings_ui/images/txt_Audio.png create mode 100644 art/replay-ui/settings_ui/images/txt_Music.png create mode 100644 art/replay-ui/settings_ui/images/txt_Settings.png create mode 100644 art/replay-ui/settings_ui/images/txt_Sound FX.png create mode 100644 art/replay-ui/settings_ui/images/txt_Spacebar to spin.png create mode 100644 art/replay-ui/settings_ui/images/txt_Turbospin.png create mode 100644 art/replay-ui/settings_ui/images/txt_Volume.png create mode 100644 art/replay-ui/start_page_sound.spine create mode 100644 art/replay-ui/ui.spine create mode 100644 art/ui/area-buttons/buttons.spine create mode 100644 art/ui/area-buttons/images/bet-select-btn-disabled.png create mode 100644 art/ui/area-buttons/images/bet-select-btn-hover.png create mode 100644 art/ui/area-buttons/images/bet-select-btn-press.png create mode 100644 art/ui/area-buttons/images/bet-select-btn.png create mode 100644 art/ui/area-buttons/images/check-box-hover.png create mode 100644 art/ui/area-buttons/images/check-box.png create mode 100644 art/ui/area-buttons/images/close-btn.png create mode 100644 art/ui/autospin_settings/autospin_settings.psd create mode 100644 art/ui/autospin_settings/autospin_settings.spine create mode 100644 art/ui/autospin_settings/images/AS_bg_advanced_expanded.png create mode 100644 art/ui/autospin_settings/images/AS_bg_basic_collapsed.png create mode 100644 art/ui/autospin_settings/images/Autospin settings_prv.png create mode 100644 art/ui/autospin_settings/images/I_prv.png create mode 100644 art/ui/autospin_settings/images/as_top_bgTriangle.png create mode 100644 art/ui/autospin_settings/images/btn_AS_bg.png create mode 100644 art/ui/autospin_settings/images/btn_bg_advanced.png create mode 100644 art/ui/autospin_settings/images/btn_bg_basic.png create mode 100644 art/ui/autospin_settings/images/btn_checkboxOff_bg.png create mode 100644 art/ui/autospin_settings/images/btn_checkboxOn.png create mode 100644 art/ui/autospin_settings/images/btn_checkboxOn_bg.png create mode 100644 art/ui/autospin_settings/images/btn_i10.png create mode 100644 art/ui/autospin_settings/images/btn_i100.png create mode 100644 art/ui/autospin_settings/images/btn_i25.png create mode 100644 art/ui/autospin_settings/images/btn_i250.png create mode 100644 art/ui/autospin_settings/images/btn_i50.png create mode 100644 art/ui/autospin_settings/images/btn_i500.png create mode 100644 art/ui/autospin_settings/images/btn_i750.png create mode 100644 art/ui/autospin_settings/images/btn_i_1000.png create mode 100644 art/ui/autospin_settings/images/btn_infinity.png create mode 100644 art/ui/autospin_settings/images/checkbox_prv.png create mode 100644 art/ui/autospin_settings/images/close-btn.png create mode 100644 art/ui/autospin_settings/images/close_btn_.png create mode 100644 art/ui/autospin_settings/images/close_btn_hover.png create mode 100644 art/ui/autospin_settings/images/tx_tNumbers of rounds.png create mode 100644 art/ui/autospin_settings/images/txt_Autospin settings.png create mode 100644 art/ui/autospin_settings/images/txt_I.png create mode 100644 art/ui/autospin_settings/images/txt_If bonus game is won.png create mode 100644 art/ui/autospin_settings/images/txt_If cash balance decreases by.png create mode 100644 art/ui/autospin_settings/images/txt_If cash balance increases by.png create mode 100644 art/ui/autospin_settings/images/txt_If single win exceeds.png create mode 100644 art/ui/autospin_settings/images/txt_On any win.png create mode 100644 art/ui/autospin_settings/images/txt_Stop_autospin.png create mode 100644 art/ui/autospin_settings/images/txt_btn_10.png create mode 100644 art/ui/autospin_settings/images/txt_btn_100.png create mode 100644 art/ui/autospin_settings/images/txt_btn_1000.png create mode 100644 art/ui/autospin_settings/images/txt_btn_25.png create mode 100644 art/ui/autospin_settings/images/txt_btn_250.png create mode 100644 art/ui/autospin_settings/images/txt_btn_50.png create mode 100644 art/ui/autospin_settings/images/txt_btn_500.png create mode 100644 art/ui/autospin_settings/images/txt_btn_750.png create mode 100644 art/ui/autospin_settings/images/txt_btn_Advanced.png create mode 100644 art/ui/autospin_settings/images/txt_btn_Basic.png create mode 100644 art/ui/autospin_settings/images/txt_btn_infinity.png create mode 100644 art/ui/autospin_settings/images/Снимок экрана 2024-02-15 в 14.07.16.png create mode 100644 art/ui/keyboard/images/autospin_btn.png create mode 100644 art/ui/keyboard/images/autospin_infinity.png create mode 100644 art/ui/keyboard/images/autospin_stop_btn.png create mode 100644 art/ui/keyboard/images/autospins_back.png create mode 100644 art/ui/keyboard/images/bet_btn.png create mode 100644 art/ui/keyboard/images/bonus_active_btn.png create mode 100644 art/ui/keyboard/images/btn_circle_orange.png create mode 100644 art/ui/keyboard/images/btn_circle_yellow.png create mode 100644 art/ui/keyboard/images/buy_bonus_btn.png create mode 100644 art/ui/keyboard/images/desktop_bg.png create mode 100644 art/ui/keyboard/images/fr_back.png create mode 100644 art/ui/keyboard/images/home_btn.png create mode 100644 art/ui/keyboard/images/info_btn.png create mode 100644 art/ui/keyboard/images/max_btn.png create mode 100644 art/ui/keyboard/images/max_btn_mob.png create mode 100644 art/ui/keyboard/images/menu_btn.png create mode 100644 art/ui/keyboard/images/minus_btn.png create mode 100644 art/ui/keyboard/images/paytable_btn.png create mode 100644 art/ui/keyboard/images/placeholder.png create mode 100644 art/ui/keyboard/images/plus_btn.png create mode 100644 art/ui/keyboard/images/popiplay.png create mode 100644 art/ui/keyboard/images/quick_btn.png create mode 100644 art/ui/keyboard/images/quick_icon.png create mode 100644 art/ui/keyboard/images/settings_btn.png create mode 100644 art/ui/keyboard/images/sound_off_btn.png create mode 100644 art/ui/keyboard/images/sound_on_btn.png create mode 100644 art/ui/keyboard/images/spin_btn.png create mode 100644 art/ui/keyboard/images/wild_spin_btn.png create mode 100644 art/ui/settings_ui/images/btn_AudioToggle.png create mode 100644 art/ui/settings_ui/images/btn_bar_AudioToggle 2.png create mode 100644 art/ui/settings_ui/images/btn_bar_AudioToggle.png create mode 100644 art/ui/settings_ui/images/btn_x.png create mode 100644 art/ui/settings_ui/images/btn_x_bg.png create mode 100644 art/ui/settings_ui/images/checkboxOff_1.png create mode 100644 art/ui/settings_ui/images/checkboxOn_1.png create mode 100644 art/ui/settings_ui/images/checkboxOn_V_1.png create mode 100644 art/ui/settings_ui/images/checkbox_prvw.png create mode 100644 art/ui/settings_ui/images/settings_bg.png create mode 100644 art/ui/settings_ui/images/txt_Audio.png create mode 100644 art/ui/settings_ui/images/txt_Music.png create mode 100644 art/ui/settings_ui/images/txt_Settings.png create mode 100644 art/ui/settings_ui/images/txt_Sound FX.png create mode 100644 art/ui/settings_ui/images/txt_Spacebar to spin.png create mode 100644 art/ui/settings_ui/images/txt_Turbospin.png create mode 100644 art/ui/settings_ui/images/txt_Volume.png create mode 100644 art/ui/start_page_sound.spine create mode 100644 art/ui/ui.spine create mode 100644 assets/replays-manifest.json create mode 100644 assets/shared-translations/locales/de.json create mode 100644 assets/shared-translations/locales/en-SOCIAL.json create mode 100644 assets/shared-translations/locales/en.json create mode 100644 assets/shared-translations/locales/es.json create mode 100644 assets/shared-translations/locales/fi.json create mode 100644 assets/shared-translations/locales/fr-CA.json create mode 100644 assets/shared-translations/locales/ja.json create mode 100644 assets/shared-translations/locales/ko.json create mode 100644 assets/shared-translations/locales/nl.json create mode 100644 assets/shared-translations/locales/no.json create mode 100644 assets/shared-translations/locales/pt-BR.json create mode 100644 assets/shared-translations/locales/ru.json create mode 100644 assets/shared-translations/locales/sv.json create mode 100644 assets/shared-translations/locales/th.json create mode 100644 assets/shared-translations/locales/tr.json create mode 100644 assets/shared-translations/locales/zh-CN.json create mode 100644 assets/shared-translations/translations.json create mode 100644 assets/sys-manifest.json create mode 100644 assets/system/ErrorPopups/package.xml create mode 100644 assets/system/replay-ui/autospin_settings.skel create mode 100644 assets/system/replay-ui/keyboard.skel create mode 100644 assets/system/replay-ui/settings.skel create mode 100644 assets/system/replay-ui/ui.atlas create mode 100644 assets/system/replay-ui/ui.webp create mode 100644 assets/system/ui/autospin_settings.skel create mode 100644 assets/system/ui/buttons.atlas create mode 100644 assets/system/ui/buttons.skel create mode 100644 assets/system/ui/buttons.webp create mode 100644 assets/system/ui/keyboard.skel create mode 100644 assets/system/ui/settings.skel create mode 100644 assets/system/ui/start_page_ui.skel create mode 100644 assets/system/ui/ui.atlas create mode 100644 assets/system/ui/ui.webp create mode 100644 bundler/webpack.common.js create mode 100644 bundler/webpack.dev.js create mode 100644 bundler/webpack.prod.js create mode 100644 bundler/webpack.staging.js create mode 100644 crowdin.yml create mode 100644 loader/loader.js create mode 100644 loader/readme.md create mode 100644 package-lock.json create mode 100644 package.json create mode 100755 scripts/slotgamekit.js create mode 100644 src/activities/Activity.ts create mode 100644 src/activities/ActivityRunner.ts create mode 100644 src/activities/ClearStorage.ts create mode 100644 src/activities/GatherClientSessionEnvironmentInfo.ts create mode 100644 src/activities/LoadSystemAssets.ts create mode 100644 src/activities/PauseClock.ts create mode 100644 src/activities/ResumeClock.ts create mode 100644 src/activities/ShowBalanceErrorPopup.ts create mode 100644 src/activities/ShowCanvasOverlay.ts create mode 100644 src/activities/ShowErrorPopup.ts create mode 100644 src/activities/ShowLoadingError.ts create mode 100644 src/activities/StopAllScenes.ts create mode 100644 src/activities/SwitchToCasinoRounds.ts create mode 100644 src/activities/TrackOrientationActivity.ts create mode 100644 src/activities/index.ts create mode 100644 src/components/BitmapTextAttachment.js create mode 100644 src/components/Dimmer.js create mode 100644 src/components/HTMLContainer.js create mode 100644 src/components/HackAttachment.js create mode 100644 src/components/SpineButton.js create mode 100644 src/components/SpineScene.js create mode 100644 src/components/TextAttachment.js create mode 100644 src/components/index.ts create mode 100644 src/components/ui/AutoSpinsSettings.js create mode 100644 src/components/ui/AutospinsIndicator.js create mode 100644 src/components/ui/BalanceIndicator.js create mode 100644 src/components/ui/BetPicker.js create mode 100644 src/components/ui/Button.js create mode 100644 src/components/ui/CasinoFreespinsPopup.js create mode 100644 src/components/ui/EmbeddedSpineButton.js create mode 100644 src/components/ui/EmbeddedSpineCheckbox.js create mode 100644 src/components/ui/EmbeddedSpineSlider.js create mode 100644 src/components/ui/EmbeddedTextField.js create mode 100644 src/components/ui/ErrorPopup.js create mode 100644 src/components/ui/FreeroundsIndicator.js create mode 100644 src/components/ui/FreespinsIndicator.js create mode 100644 src/components/ui/GameSettings.js create mode 100644 src/components/ui/InfoBar/InfoBar.js create mode 100644 src/components/ui/ModalBackground.js create mode 100644 src/components/ui/PopupHtmlContainer.js create mode 100644 src/components/ui/ScrollBar.js create mode 100644 src/components/ui/StatusBar.js create mode 100644 src/components/ui/TotalBetIndicator.js create mode 100644 src/components/ui/WinIndicator.js create mode 100644 src/components/ui/WinText.js create mode 100644 src/components/ui/index.ts create mode 100644 src/components/utils/TextHelper.js create mode 100644 src/constants/constants.ts create mode 100644 src/controllers/BaseGameController.ts create mode 100644 src/controllers/FullScreenController.ts create mode 100644 src/devtools/DevViewModel.ts create mode 100644 src/devtools/ModelDevPanel.ts create mode 100644 src/devtools/backPanel/BackPanel.ts create mode 100644 src/devtools/backPanel/backPanelPlugIns/AudioControls.ts create mode 100644 src/devtools/backPanel/backPanelPlugIns/AudioSpritesControls.ts create mode 100644 src/devtools/backPanel/backPanelPlugIns/BackPanelPlugIns.ts create mode 100644 src/devtools/backPanel/backPanelPlugIns/CheatControls.ts create mode 100644 src/devtools/backPanel/backPanelPlugIns/ClockControls.ts create mode 100644 src/devtools/backPanel/backPanelPlugIns/LanguageControls.ts create mode 100644 src/devtools/backPanel/backPanelPlugIns/UserControls.ts create mode 100644 src/devtools/backPanel/backPanelPlugIns/utils.ts create mode 100644 src/devtools/backPanel/interfaces/PaneExtended.ts create mode 100644 src/devtools/index.ts create mode 100644 src/errors/BackendError.ts create mode 100644 src/errors/ErrorProcessor.ts create mode 100644 src/errors/LobbyLinkNotFoundError.ts create mode 100644 src/errors/index.ts create mode 100644 src/extensions/AudioSpriteLoader.ts create mode 100644 src/extensions/BasePathInjector.ts create mode 100644 src/extensions/GlobalPointerEvents.ts create mode 100644 src/extensions/index.ts create mode 100644 src/extensions/loadHtml.ts create mode 100644 src/fairyScenes/FairyScene.ts create mode 100644 src/game/BaseGame.ts create mode 100644 src/helpers/TextScaler.ts create mode 100644 src/index.ts create mode 100644 src/models/AutoGameModel.test.ts create mode 100644 src/models/AutoGameModel.ts create mode 100644 src/models/BalanceModel.test.ts create mode 100644 src/models/BalanceModel.ts create mode 100644 src/models/BaseGameData.ts create mode 100644 src/models/BetModel.test.ts create mode 100644 src/models/BetModel.ts create mode 100644 src/models/Currency.ts create mode 100644 src/models/EndRoundModel.ts create mode 100644 src/models/GameModes/CasinoRoundsMode.ts create mode 100644 src/models/GameModes/FreeSpinsMode.ts create mode 100644 src/models/GameModes/MainMode.ts create mode 100644 src/models/GameModes/Mode.ts create mode 100644 src/models/GameModes/RespinsMode.ts create mode 100644 src/models/GameModes/TransCasinoRoundsMode.js create mode 100644 src/models/GameModes/TransCasinoRoundsMode.ts create mode 100644 src/models/Lines.test.ts create mode 100644 src/models/Lines.ts create mode 100644 src/models/ModeStack.ts create mode 100644 src/models/Model.ts create mode 100644 src/models/PaytableModel.test.ts create mode 100644 src/models/PaytableModel.ts create mode 100644 src/models/VolumeModel.ts create mode 100644 src/models/helpers/OutcomesView.js create mode 100644 src/models/index.ts create mode 100644 src/models/modelInit/BalancePolicy.ts create mode 100644 src/models/modelInit/BetService.ts create mode 100644 src/models/modelInit/FeatureMultiplierCalculator.ts create mode 100644 src/models/modelInit/GameDataFactory.ts create mode 100644 src/models/modelInit/ModelBootstrap.ts create mode 100644 src/models/modelInit/ModelDataInitializer.ts create mode 100644 src/models/modelInit/ModesFactory.ts create mode 100644 src/models/modelInit/OutcomeRestorer.ts create mode 100644 src/models/modelInit/buildBootstrap.ts create mode 100644 src/scene/Scene.ts create mode 100644 src/scene/StartScreenUI.js create mode 100644 src/scene/UI.js create mode 100644 src/scene/index.ts create mode 100644 src/services/Analytics/AmplitudeAnalytics.ts create mode 100644 src/services/Analytics/Analytics.ts create mode 100644 src/services/Analytics/Events.ts create mode 100644 src/services/Analytics/LogAnalytics.ts create mode 100644 src/services/Analytics/NullAnalytics.ts create mode 100644 src/services/Analytics/analytics.md create mode 100644 src/services/Analytics/index.ts create mode 100644 src/services/Audio/Audio.ts create mode 100644 src/services/Audio/AudioSprites.ts create mode 100644 src/services/Audio/LogAudio.ts create mode 100644 src/services/Audio/MixerAudio.ts create mode 100644 src/services/Audio/MixerAudioSprites.ts create mode 100644 src/services/Audio/NullAudio.ts create mode 100644 src/services/Audio/index.ts create mode 100644 src/services/Clock/Clock.ts create mode 100644 src/services/Clock/DevClock.ts create mode 100644 src/services/Clock/NullClock.ts create mode 100644 src/services/Clock/index.ts create mode 100644 src/services/Events/Events.ts create mode 100644 src/services/Events/LoggedEvents.ts create mode 100644 src/services/Events/index.ts create mode 100644 src/services/GRoot/GRoot.ts create mode 100644 src/services/GRoot/NullGRoot.ts create mode 100644 src/services/GRoot/index.ts create mode 100644 src/services/Locales/DevLocales.ts create mode 100644 src/services/Locales/Locales.ts create mode 100644 src/services/Locales/NullLocales.ts create mode 100644 src/services/Locales/index.ts create mode 100644 src/services/Locator.ts create mode 100644 src/services/Manifest/ManifestService.ts create mode 100644 src/services/Manifest/NullManifestService.ts create mode 100644 src/services/Manifest/index.ts create mode 100644 src/services/Network/LocalNetwork.ts create mode 100644 src/services/Network/MockNetwork.ts create mode 100644 src/services/Network/Network.ts create mode 100644 src/services/Network/NullNetwork.ts create mode 100644 src/services/Network/ReplayNetwork.ts create mode 100644 src/services/Network/index.ts create mode 100644 src/services/Renderer/NullRenderer.ts create mode 100644 src/services/Renderer/Renderer2D.ts create mode 100644 src/services/Renderer/index.ts create mode 100644 src/services/Scenes/DevScenes.ts create mode 100644 src/services/Scenes/NullScenes.ts create mode 100644 src/services/Scenes/Scenes.ts create mode 100644 src/services/Scenes/index.ts create mode 100644 src/services/Storage/NullStorageService.ts create mode 100644 src/services/Storage/StorageService.ts create mode 100644 src/services/Storage/index.ts create mode 100644 src/services/User/DevUser.ts create mode 100644 src/services/User/NullDevUser.ts create mode 100644 src/services/User/index.ts create mode 100644 src/services/Viewport/DebugViewport.ts create mode 100644 src/services/Viewport/NullViewport.ts create mode 100644 src/services/Viewport/Viewport.ts create mode 100644 src/services/Viewport/index.ts create mode 100644 src/services/index.ts create mode 100644 src/services/types.ts create mode 100644 src/types/api/InitResp.ts create mode 100644 src/types/api/SpinResp.ts create mode 100644 src/types/api/common.ts create mode 100644 src/types/api/index.ts create mode 100644 src/types/eventemitter3.d.ts create mode 100644 src/types/fairygui-dom-fork.d.ts create mode 100644 src/types/index.d.ts create mode 100644 src/types/pixi__sound.d.ts create mode 100644 src/utils/AdvancedText.ts create mode 100644 src/utils/GameErrors.ts create mode 100644 src/utils/MultiStyleText.js create mode 100644 src/utils/Numbers.ts create mode 100644 src/utils/PixiHtmlContainer.ts create mode 100644 src/utils/SeededRandom.ts create mode 100644 src/utils/create.ts create mode 100644 src/utils/createCasinoRoundsMode.js create mode 100644 src/utils/createCasinoRoundsMode.ts create mode 100644 src/utils/createDeferredPromise.ts create mode 100644 src/utils/freeRounds.ts create mode 100644 src/utils/handleShowRTPInRulesOption.ts create mode 100644 src/utils/htmlUtils.ts create mode 100644 src/utils/index.ts create mode 100644 src/utils/isIframe.ts create mode 100644 src/utils/isSafariOnIOS.ts create mode 100644 src/utils/sentry.ts create mode 100644 src/utils/setupDom.ts create mode 100644 src/utils/styles.ts create mode 100644 src/utils/utils.ts create mode 100644 src/viewmodels/BuyBonusViewModel.ts create mode 100644 src/viewmodels/GameplayViewModel.ts create mode 100644 src/viewmodels/PaytableViewModel.ts create mode 100644 src/viewmodels/UIViewModel.ts create mode 100644 src/viewmodels/index.ts create mode 100644 src/viewmodels/types.ts create mode 100644 styles/casinoFreespinsPopup.css create mode 100644 styles/main.css create mode 100644 tsconfig.json create mode 100644 typedoc.json diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..5df7e20 --- /dev/null +++ b/.babelrc @@ -0,0 +1,6 @@ +{ + "presets": [ + "@babel/preset-env", + "@babel/preset-typescript" + ] +} diff --git a/.barrelsby.json b/.barrelsby.json new file mode 100644 index 0000000..6588255 --- /dev/null +++ b/.barrelsby.json @@ -0,0 +1,6 @@ +{ + "directory": "./src", + "exclude": ["index.ts","**/stories/**"], + "delete": true, + "exportDefault": false +} diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..c96df1e --- /dev/null +++ b/.editorconfig @@ -0,0 +1,12 @@ +# This file is for unifying the coding style for different editors and IDEs. +# More information at http://EditorConfig.org +root = true + +[*] +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +indent_style = space +indent_size = 4 + +[{*.json,bower.json,.travis.yml}] \ No newline at end of file diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..a207eb2 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,8 @@ +/docs/** +**/dist/** +**/lib/** +**/types/** +temp +docs +dist +node_modules diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..a5b4074 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,51 @@ +{ + "extends": ["@pixi/eslint-config"], + "plugins": ["jsdoc", "no-mixed-operators"], + "settings": { + "jsdoc": { + "mode": "typescript", + "tagNamePreference": { + "method": "method", + "function": "function", + "extends": "extends", + "typeParam": "typeParam", + "api": "api" + } + } + }, + "rules": { + "@typescript-eslint/no-unused-expressions": [1, {"allowShortCircuit": true, "allowTernary": true}], + "no-mixed-operators": "off", + "no-mixed-operators/no-mixed-operators": 1, + "@typescript-eslint/type-annotation-spacing": 1, + "jsdoc/multiline-blocks": [ + 1, + { "noMultilineBlocks": true, "minimumLengthForMultiline": 115 } + ], + "jsdoc/check-access": 1, + "jsdoc/check-alignment": 1, + "jsdoc/check-param-names": 1, + "jsdoc/check-property-names": 1, + "jsdoc/check-tag-names": 1, + "jsdoc/check-types": 1, + "jsdoc/check-values": 1, + "jsdoc/empty-tags": 1, + "jsdoc/implements-on-classes": 1, + "jsdoc/no-multi-asterisks": [1, { "allowWhitespace": true }], + "jsdoc/require-param": 1, + "jsdoc/require-param-description": 0, + "jsdoc/require-param-name": 1, + "jsdoc/require-param-type": [ + "warn", + { "contexts": ["TSMethodSignature"] } + ], + "jsdoc/require-property": 1, + "jsdoc/require-property-description": 1, + "jsdoc/require-property-name": 1, + "jsdoc/require-property-type": 1, + "jsdoc/require-returns-description": 1, + "jsdoc/tag-lines": 1, + "jsdoc/valid-types": 1, + "max-len": ["warn", { "code": 150 }] + } +} diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..ef53b35 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,7 @@ + +*.js text eol=lf +*.ts text eol=lf +*.json text eol=lf +*.yml text eol=lf +*.md text eol=lf +*.txt text eol=lf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8f7655d --- /dev/null +++ b/.gitignore @@ -0,0 +1,43 @@ +# sublime text files +*.sublime* +*.vscode* +*.*~*.TMP +test/lib + + +# temp files +.DS_Store +Thumbs.db +Desktop.ini +npm-debug.log + +# project files +.project + +# vim swap files +*.sw* + +# emacs temp files +*~ +\#*# + +# project ignores +!.gitkeep +*__temp +node_modules +bin/ +lib/ +dist/ +coverage/ +temp +yarn.lock +pnpm-lock.yaml + +# jetBrains IDE ignores +.idea +.vs-code +.eslintcache +docs/ +example.api.json* + +.npmrc diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..32fe898 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,6 @@ + +include: + - project: infrastructure/gitlab_ci_templates + file: entrypoints/front/npm-entrypoint.gitlab-ci.yml + ref: main + diff --git a/.storybook/main.js b/.storybook/main.js new file mode 100644 index 0000000..c98f470 --- /dev/null +++ b/.storybook/main.js @@ -0,0 +1,37 @@ +const path = require('path'); + +module.exports = { + stories: ['../src/stories/**/*.stories.@(ts|tsx|js|jsx|mdx)'], + staticDirs: ['../src/stories/assets'], + output: '../docs/', + logLevel: 'debug', + addons: [ + '@storybook/addon-docs', + '@storybook/addon-actions', + '@storybook/addon-backgrounds', + '@storybook/addon-controls', + '@storybook/addon-viewport', + '@storybook/addon-links', + '@storybook/addon-highlight', + '@storybook/addon-storysource', + '@storybook/addon-webpack5-compiler-babel', + '@chromatic-com/storybook' + ], + core: { + channelOptions: { allowFunction: false, maxDepth: 10 }, + disableTelemetry: true, + }, + features: { + buildStoriesJson: true, + breakingChangesV7: true, + babelModeV7: true, + }, + framework: '@pixi/storybook-webpack5', + webpackFinal: async (config) => { + config.resolve.alias = { + ...config.resolve.alias, + src: path.resolve(__dirname, '../src'), + }; + return config; + }, +}; diff --git a/.storybook/preview.js b/.storybook/preview.js new file mode 100644 index 0000000..b8f2672 --- /dev/null +++ b/.storybook/preview.js @@ -0,0 +1,26 @@ +export const parameters = { + layout: 'fullscreen', + pixi: { + applicationOptions: { + backgroundAlpha: 0, + resolution: 2, + antialias: true, + }, + }, + backgrounds: { + default: 'Dark', + values: [ + { + name: 'Dark', + value: '#1b1c1d', + }, + { + name: 'Light', + value: '#dddddd', + }, + ], + }, + docs: { + iframeHeight: 600, // Устанавливает высоту для всех историй в документации + }, +}; diff --git a/README.md b/README.md new file mode 100644 index 0000000..16b8745 --- /dev/null +++ b/README.md @@ -0,0 +1,263 @@ + +# Slot Game Kit CLI + +This CLI provides tools to simplify the development and building of HTML5 games. It is based on Webpack and offers pre-configured commands for development, building, and testing projects. + +## Installation + +1. Install the package via npm: + ```bash + npm install @popiplay/slot-game-kit --save-dev + ``` + +2. Ensure Webpack and its dependencies are installed in your project: + ```bash + npm install webpack webpack-cli webpack-dev-server --save-dev + ``` + +## Commands + +The CLI provides the following commands: + +### 1. **Start Development** + +Launches the development server (using `webpack-dev-server`) and automatically updates the project when files are changed. + +```bash +npx slotgamekit watch +``` + +Or add it to your project's `package.json`: + +```json +"scripts": { + "watch": "slotgamekit watch" +} +``` + +Run: +```bash +npm run watch +``` + +--- + +### 2. **Build for Development** + +Creates a build in development mode using `webpack.dev.js`. Suitable for local testing. + +```bash +npx slotgamekit dev +``` + +Or add it to your project's `package.json`: + +```json +"scripts": { + "dev": "slotgamekit dev" +} +``` + +Run: +```bash +npm run dev +``` + +--- + +### 3. **Build for Production** + +Creates an optimized build for production using `webpack.prod.js`. + +```bash +npx slotgamekit prod +``` + +Or add it to your project's `package.json`: + +```json +"scripts": { + "prod": "slotgamekit prod" +} +``` + +Run: +```bash +npm run prod +``` + +--- + +### 4. **Build for Staging** + +Creates a build for testing in staging environments using `webpack.staging.js`. + +```bash +npx slotgamekit staging +``` + +Or add it to your project's `package.json`: + +```json +"scripts": { + "staging": "slotgamekit staging" +} +``` + +Run: +```bash +npm run staging +``` + +--- + +## Webpack Configuration + +### Supported Configurations: +1. `webpack.common.js` – shared settings. +2. `webpack.dev.js` – development configuration. +3. `webpack.prod.js` – production configuration. +4. `webpack.staging.js` – staging configuration. + +## Feature multipliers + +The CLI ships with a default set of feature multipliers (`bonusBuy`, `freespinBuy`, `bonusChance`). +When backend pricing is unavailable for Bonus Chance the runtime keeps the multiplier at `1` so the +stake displayed to players remains unchanged while the feature is temporarily disabled. + +Call `Model.resolveFeatureStake(bet)` whenever the UI needs to present the wager with Bonus Chance +enabled—the helper automatically applies the active multiplier so Wild Spin toggles stay in sync. + +All configurations are located in the `bundler/` folder inside the package. + +### Optional line configuration + +Cluster and ways titles are no longer required to ship a `lines` array in the init payload or machine configuration. When both values are missing the runtime now boots with an empty definition and keeps `Mode.lines` consistent. Provide a line matrix only for payline-based games. + +--- + +## Additional Settings + +### Babel +The `.babelrc` configuration file is provided with the package. Make sure it is used in your project. + +### Browserslist +The `.browserslistrc` file defines browser support and is also included in the package. + +To use it, specify its path via the environment variable: + +```bash +BROWSERSLIST_CONFIG=node_modules/@popiplay/slot-game-kit/.browserslistrc +``` + +--- + +## Overview + +The project is organized into the following key folders: + +- **`activities/`**: Manages a queue of activities to be executed sequentially. Activities are added to the queue and automatically processed when the runner is idle. Each activity should be an object with a `name` property and an asynchronous `execute` method. + Besides the main `ActivityRunner` and `Activity` classes implementing this functionality, there are also commands for pausing and resuming the game clock, displaying error popups, and similar actions. + +- **`constants/`**: Contains fixed values used throughout the project to enhance readability and maintainability. These include viewport and renderer settings, and scene names. + +- **`controllers/`**: Houses the `BaseGameController`, which is intended to be extended by the game-specific controller. This class is designed to handle all user interactions, such as opening the game rules or paytable, and launching the buy bonus screen. Additionally, it includes methods responsible for displaying big win, max win, and similar in-game screens or animations. + +- **`devtools/`**: + +- **`errors/`**: Contains the `ErrorProcessor`, used by controllers to display corresponding error popups. + +- **`extensions/`**: Includes PixiJS extensions that add features beyond the core library. The `extensions` object from PixiJS manages these additions. Specific extensions include: + - `AudioSpriteLoader`: A simple loader plugin for audio sprite files. + - `BasePathInjector`: Modifies asset paths by adding the `baseAssetsUrl` fetched from the backend. + - `GlobalPointerEvents`: A class representing the global events system, emitting pointer events through `Locator.events`. + - `loadHtml`: A simple loader plugin for loading rules content from HTML files. + +- **`fairyScenes/`**: + +- **`game/`**: Contains the `BaseGame` class, which is intended to be extended by the game-specific class. It is responsible for creating scenes, models, and the controller. The `start` method initiates the game clock, and the `update` and `resize` methods handle rendering and adjusting the game's dimensions. + +- **`helpers/`**: Contains simple `scaleToFit` methods used to resize text to fit within given bounds. + +- **`models/`**: Defines the data representation of various elements within the game world. Models store the state and properties of game objects, characters, environments, and game rules, independent of their visual rendering or behavior. Specific models include: + - `AutoGameModel`: Manages auto-spin functionality, including spin limits, balance tracking, and stop conditions. + - `BalanceModel`: Manages the player's in-game balance, handling updates, validation, and affordability checks. Its `add` + method now accepts zero so callers can record settled rounds without mutating the balance. + - `BetModel`: Manages available bet options, allowing for increasing, decreasing, and setting specific bet values, with support for locking betting actions. + - `EndRoundModel`: Determines the next game state after a round ends (e.g., big win, max win, free spins trigger, bonus exit). + - `Model`: Base class for models, providing methods for initialization and loading data from the backend using `Locator.network` and `ModelDataInitializer`. + - Space-bar spin preferences persist through `Locator.storage`, mirroring the legacy runtime so toggles survive reloads. + - `ModelDataInitializer`: Used by the `Model` class to parse raw data received from the backend. + - `PaytableModel`: Represents a collection of paytables. + - `VolumeModel`: Controls the volume levels for sound and music, including muting. + - `Currency`: Provides formatting utilities for currency values. + - `Lines`: Represents a collection of line configurations. The model now accepts empty definitions so cluster and ways games can omit lines entirely without breaking initialization. + - `ModeStack`: Manages a stack of game modes for handling nested game states. + +- **`scene/`**: Contains the `Scene` class, which serves as the base class for all scenes within the game. + +- **`services/`**: Contains classes that provide various services accessible through the `Locator` service locator: + - `Locator`: A service locator class providing access to all registered services. + - `audio`: + - `AudioSprites`: Responsible for playing sounds, accessible via `Locator.audio.play()`. + - `LogAudio`: A simple audio logger. + - `clock`: + - `Clock`: Represents the game ticker, driven by `requestAnimationFrame`. + - `DevClock`: Extends the `Clock` class for development purposes. + - `events`: + - `Events`: Extends `EventEmitter` from the `eventemitter3` library, used for inter-component communication. + - `locales`: + - Handles loading translation files and retrieving translations for given string IDs (e.g., `Locator.locales.get("total_win")`). + - `manifest`: + - `ManifestService`: Merges PixiJS manifests and can prepend a `basePath` and append `defaultSearchParams` to every remote manifest source, mirroring the `Assets.init` configuration. + - `network`: + - `LocalNetwork`: A class for handling network requests, with `createRequest` calling the `fetch` API. + - `ReplayNetwork`: Replays recorded backend responses from a static `replayUrl` for deterministic sessions. + - `renderer`: + - `Renderer2D`: Extends PixiJS's `Renderer`, created in the main game file (`index.js`) and used for rendering the game (`Locator.renderer.render()`). + - `scenes`: + - `Scenes`: A class representing a collection of scenes, implementing the `IScenes` interface. + - `storage`: + - `StorageService`: Uses `localStorage` to read and write flags (e.g., `Locator.storage.set('introHasBeenShown', true)`). `localStorage` is a persistent client-side storage API for key/value pairs within the user's browser. + - `user`: + - `DevUser`: + - `viewport`: + - `Viewport`: Extends PixiJS's `Container` (also known as `Viewport`), responsible for holding all game elements and managing game resizing. + +- **`types/`**: Contains TypeScript definition files (e.g., `ViewportOptions`). + +- **`utils/`**: Contains reusable helper functions and utility classes for common tasks like data manipulation, formatting, and mathematical operations. `waitForEventOnce` is used throughout the project to block the execution flow until a specific event occurs. + +- **`viewmodels/`**: Contains classes that prepare and manage data for the views: + - `BuyBonusViewModel`: Manages data and logic for the buy bonus/buy free spins feature, coercing undefined bonus toggle values to disabled, clearing cached bet lists whenever the bonus chance toggle changes, and re-evaluating availability with `resolveFeatureStake` so the `BetPicker` reflects the latest stakes and balance guardrails. + - `GameplayViewModel`: Provides various getters from the game models that are important for gameplay, such as currency, round start/end status, and turbo mode activation. + +## Usage +This section provides guidance on how to integrate and use the various components and features of the framework within your game project. + +### Devtools Feature: Back Panel +The `BackPanel` creates a customizable back panel with user and service controls +that can be added dynamically. + - Manages user controls for server URL, shared player, custom player, and user switching with options stored in local storage. + - Provides functionality for managing audio settings and inspecting sounds in a web application. + - Creates a user interface for controlling the timescale and pause functionality of a clock. + *- Adds cheat controls to a pane and allows for testing cheats by making POST requests to a specified URL.* WIP? + + + +To utilize the `BackPanel` in your game project, you need to instantiate its primary class and integrate it into your game logic. + +**Instantiation:** +```javascript +// In your game project's index.js file +import {BackPanel} from "@popiplay/slot-game-kit"; +const backPanel = new BackPanel(); +backPanel.addUserControls(); +// after Locator.provide() calls add this line +backPanel.addOtherControls(); +``` +You can toggle the visibility of the back panel by pressing H or h on your keyboard. + +## Support + +If you have any questions or issues using this CLI, refer to the documentation or create an issue in the package's repository. diff --git a/art/SGKUI/.gitignore b/art/SGKUI/.gitignore new file mode 100644 index 0000000..ec9c400 --- /dev/null +++ b/art/SGKUI/.gitignore @@ -0,0 +1,2 @@ +.DS_Store +.objs/ diff --git a/art/SGKUI/SGKUI.fairy b/art/SGKUI/SGKUI.fairy new file mode 100644 index 0000000..34d7c15 --- /dev/null +++ b/art/SGKUI/SGKUI.fairy @@ -0,0 +1,2 @@ + + diff --git a/art/SGKUI/assets/ErrorPopups/DepositButton.xml b/art/SGKUI/assets/ErrorPopups/DepositButton.xml new file mode 100644 index 0000000..1997156 --- /dev/null +++ b/art/SGKUI/assets/ErrorPopups/DepositButton.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + +