pixi-rainman-game-engine 0.1.21 → 0.1.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/SettingsUI/SystemSettings/SystemSettingsComponent.d.ts +1 -0
  2. package/dist/SettingsUI/SystemSettings/SystemSettingsComponent.jsx +6 -7
  3. package/dist/SettingsUI/SystemSettings/systemSettings.css +41 -0
  4. package/dist/SettingsUI/components/AutoplaySettings/autoplaySettings.css +267 -0
  5. package/dist/SettingsUI/components/AutoplaySettings/index.d.ts +1 -0
  6. package/dist/SettingsUI/components/AutoplaySettings/index.jsx +38 -26
  7. package/dist/SettingsUI/components/Bet/BetControls.d.ts +1 -0
  8. package/dist/SettingsUI/components/Bet/BetControls.jsx +9 -9
  9. package/dist/SettingsUI/components/Bet/bet.css +115 -0
  10. package/dist/SettingsUI/components/Bet/index.d.ts +1 -0
  11. package/dist/SettingsUI/components/Bet/index.jsx +3 -1
  12. package/dist/SettingsUI/components/BuyFreeSpins/buyFreeSpin.css +46 -0
  13. package/dist/SettingsUI/components/BuyFreeSpins/index.d.ts +1 -0
  14. package/dist/SettingsUI/components/BuyFreeSpins/index.jsx +6 -6
  15. package/dist/SettingsUI/components/CloseModalButton/closeModalButton.css +20 -0
  16. package/dist/SettingsUI/components/CloseModalButton/index.d.ts +1 -0
  17. package/dist/SettingsUI/components/CloseModalButton/index.jsx +3 -3
  18. package/dist/SettingsUI/components/GameRules/gameRules.css +96 -0
  19. package/dist/SettingsUI/components/GameRules/index.d.ts +1 -0
  20. package/dist/SettingsUI/components/GameRules/index.jsx +13 -11
  21. package/dist/SettingsUI/components/OptionButton/index.jsx +1 -1
  22. package/dist/SettingsUI/components/RichLimitingSlider/index.d.ts +1 -0
  23. package/dist/SettingsUI/components/RichLimitingSlider/index.jsx +8 -8
  24. package/dist/SettingsUI/components/RichLimitingSlider/richLimitingSlider.css +39 -0
  25. package/dist/SettingsUI/components/SlidingSwitch/index.d.ts +1 -0
  26. package/dist/SettingsUI/components/SlidingSwitch/index.jsx +5 -4
  27. package/dist/SettingsUI/components/SlidingSwitch/slidingSwitch.css +126 -0
  28. package/dist/SettingsUI/components/SpeedSettingsPopup/index.d.ts +1 -0
  29. package/dist/SettingsUI/components/SpeedSettingsPopup/index.jsx +6 -6
  30. package/dist/SettingsUI/components/SpeedSettingsPopup/speedSettingsPopup.css +119 -0
  31. package/dist/SettingsUI/components/SpeedSwitchButton/index.jsx +5 -6
  32. package/dist/SettingsUI/components/SwitchWithHeader/headerStyle.css +28 -0
  33. package/dist/SettingsUI/components/SwitchWithHeader/index.d.ts +1 -0
  34. package/dist/SettingsUI/components/SwitchWithHeader/index.jsx +6 -5
  35. package/dist/SettingsUI/components/SymbolMultiplierPopup/index.d.ts +2 -1
  36. package/dist/SettingsUI/components/SymbolMultiplierPopup/index.jsx +15 -17
  37. package/dist/SettingsUI/components/SymbolMultiplierPopup/symbolPopup.css +101 -0
  38. package/dist/SettingsUI/components/UXSettings/UXSettings.css +28 -0
  39. package/dist/SettingsUI/components/UXSettings/index.d.ts +1 -0
  40. package/dist/SettingsUI/components/UXSettings/index.jsx +21 -8
  41. package/dist/SettingsUI/components/VolumeSettings/index.d.ts +1 -0
  42. package/dist/SettingsUI/components/VolumeSettings/index.jsx +5 -4
  43. package/dist/SettingsUI/components/VolumeSettings/volume.css +54 -0
  44. package/dist/SettingsUI/hooks/index.d.ts +0 -1
  45. package/dist/SettingsUI/hooks/index.js +0 -1
  46. package/dist/SettingsUI/index.css +26 -46
  47. package/dist/SettingsUI/index.d.ts +1 -1
  48. package/dist/SettingsUI/index.jsx +14 -15
  49. package/dist/components/AbstractMainContainer/AbstractMainContainer.js +0 -3
  50. package/dist/components/symbols/AbstractSymbolsColumn.js +9 -9
  51. package/dist/connectivity/ConnectionWrapper.js +2 -0
  52. package/dist/connectivity/serverConnection.d.ts +1 -0
  53. package/dist/utils/common/functions.js +2 -2
  54. package/package.json +4 -9
  55. package/dist/SettingsUI/components/Button/index.d.ts +0 -2
  56. package/dist/SettingsUI/components/Button/index.jsx +0 -6
  57. package/dist/SettingsUI/components/Modal/index.d.ts +0 -10
  58. package/dist/SettingsUI/components/Modal/index.jsx +0 -24
  59. package/dist/SettingsUI/hooks/useClickOutside.d.ts +0 -6
  60. package/dist/SettingsUI/hooks/useClickOutside.js +0 -20
  61. package/dist/SettingsUI/packedStyles.css +0 -1617
  62. package/dist/SettingsUI/utils/tw.d.ts +0 -2
  63. package/dist/SettingsUI/utils/tw.js +0 -3
@@ -0,0 +1,28 @@
1
+ .header-description {
2
+ max-width: 200px;
3
+ }
4
+
5
+ .header-description__title {
6
+ min-width: 200px;
7
+ margin: 0px;
8
+ text-transform: uppercase;
9
+ }
10
+
11
+ .header-description__text {
12
+ max-width: 170px;
13
+ margin: 0px;
14
+ }
15
+
16
+ @media only screen and (max-width: 900px) {
17
+ .header-description {
18
+ max-width: 150px;
19
+ }
20
+
21
+ .header-description h2 {
22
+ font-size: 20px;
23
+ }
24
+
25
+ .header-description h6 {
26
+ font-size: 10px;
27
+ }
28
+ }
@@ -1,3 +1,4 @@
1
+ import "./headerStyle.css";
1
2
  import React from "react";
2
3
  import { HeaderWithDescriptionProps, SpeedButtonWithHeaderProps, SwitchHeaderProps } from "./types";
3
4
  export declare const HeaderWithDescription: ({ header, description }: HeaderWithDescriptionProps) => React.JSX.Element;
@@ -1,21 +1,22 @@
1
+ import "./headerStyle.css";
1
2
  import { observer } from "mobx-react-lite";
2
3
  import React from "react";
3
4
  import { SlidingSwitch } from "../SlidingSwitch";
4
5
  import { SpeedButtonSwitch } from "../SpeedSwitchButton";
5
6
  export const HeaderWithDescription = ({ header, description }) => {
6
- return (<div className="flex flex-col gap-2">
7
- <h2 className="text-xl font-bold uppercase">{header}</h2>
8
- {description && <span>{description}</span>}
7
+ return (<div className="header-description">
8
+ <h2 className="header-description__title">{header}</h2>
9
+ {description && <h6 className="header-description__text">{description}</h6>}
9
10
  </div>);
10
11
  };
11
12
  export const SwitchWithHeader = observer(({ header, description, flag, setFlag }) => {
12
- return (<div className="flex w-full items-center justify-between">
13
+ return (<div className="flex-containers-stretched">
13
14
  <HeaderWithDescription header={header} description={description}/>
14
15
  <SlidingSwitch flag={flag} setFlag={setFlag}/>
15
16
  </div>);
16
17
  });
17
18
  export const SpeedButtonWithHeader = observer(({ header, description }) => {
18
- return (<div className="flex w-full items-center justify-between">
19
+ return (<div className="flex-containers-stretched">
19
20
  <HeaderWithDescription header={header} description={description}/>
20
21
  <SpeedButtonSwitch />
21
22
  </div>);
@@ -1,4 +1,5 @@
1
+ import "./symbolPopup.css";
1
2
  import React from "react";
2
- export declare const SymbolMultiplierPopup: (() => React.JSX.Element | null) & {
3
+ export declare const SymbolMultiplierPopup: (() => React.JSX.Element) & {
3
4
  displayName: string;
4
5
  };
@@ -1,40 +1,38 @@
1
+ import "./symbolPopup.css";
1
2
  import { observer } from "mobx-react-lite";
2
3
  import React from "react";
3
4
  import { MoneyText } from "../../../Money";
4
5
  import { RainMan } from "../../../Rainman";
5
6
  import { useStores } from "../../hooks";
6
- import { cn } from "../../utils/tw";
7
7
  const getPaytableValueDetails = (paytableValue, bet) => {
8
8
  if (typeof paytableValue === "number") {
9
- return (<div className="whitespace-nowrap text-xs text-white sm:ml-5 sm:text-2xl">
10
- {new MoneyText(paytableValue * bet).toString()}
11
- </div>);
9
+ return <div className="symbol-popup__value">{new MoneyText(paytableValue * bet).toString()}</div>;
12
10
  }
13
11
  const min = Array.isArray(paytableValue) ? paytableValue[0] : paytableValue.min;
14
12
  const max = Array.isArray(paytableValue) ? paytableValue.at(-1) || 0 : paytableValue.max;
15
- return (<div className="text-md flex flex-col whitespace-nowrap sm:text-xs">
16
- <div>min: {new MoneyText(min * bet).toString()}</div>
17
- <div>max: {new MoneyText(max * bet).toString()}</div>
13
+ return (<div className="symbol-popup__value--range">
14
+ <div>{`min: ${new MoneyText(min * bet).toString()}`}</div>
15
+ <div>{`max: ${new MoneyText(max * bet).toString()}`}</div>
18
16
  </div>);
19
17
  };
20
18
  export const SymbolMultiplierPopup = observer(() => {
21
19
  const { settingStore } = useStores();
22
20
  const { popupPaytablePosition, popupPaytableData } = settingStore;
23
21
  if (popupPaytablePosition && popupPaytableData) {
24
- const arrowDirection = popupPaytablePosition.x > RainMan.app.screen.width / 2 ? "arrow-on-right" : "arrow-on-left ";
25
- return (<div className={cn("text-md absolute flex h-fit flex-col items-center justify-center rounded-lg bg-zinc-800 p-2 shadow-lg sm:text-2xl", arrowDirection)} style={{
22
+ const arrowDirection = popupPaytablePosition.x > RainMan.app.screen.width / 2 ? "arrow-on-right" : "arrow-on-left";
23
+ return (<div className={`symbol-multiplier-popup-modal modal-style ${arrowDirection}`} style={{
26
24
  left: popupPaytablePosition.x,
27
25
  top: popupPaytablePosition.y,
28
26
  }}>
29
- <div className="flex h-full w-fit flex-col items-center justify-center sm:w-full">
30
- {popupPaytableData.map((popupPaytableRow) => (<div key={popupPaytableRow.prefix} className="flex gap-1 text-xs sm:text-2xl">
31
- <div className="text-xs font-bold text-primary-500 sm:text-2xl">
32
- {popupPaytableRow.prefix}x
33
- </div>
34
- {getPaytableValueDetails(popupPaytableRow.value, settingStore.bet)}
35
- </div>))}
27
+ <div className={`symbol-popup ${arrowDirection}`}>
28
+ {popupPaytableData.map((popupPaytableRow) => {
29
+ return (<div key={popupPaytableRow.prefix} className="symbol-popup__row">
30
+ <div className="symbol-popup__prefix">{popupPaytableRow.prefix}x</div>
31
+ {getPaytableValueDetails(popupPaytableRow.value, settingStore.bet)}
32
+ </div>);
33
+ })}
36
34
  </div>
37
35
  </div>);
38
36
  }
39
- return null;
37
+ return <div></div>;
40
38
  });
@@ -0,0 +1,101 @@
1
+ .symbol-multiplier-popup-modal {
2
+ align-items: center;
3
+ justify-content: center;
4
+ padding: 20px 25px;
5
+ }
6
+
7
+ .symbol-multiplier-popup-modal.arrow-on-left {
8
+ transform: translate(75px, -50%);
9
+ }
10
+
11
+ .symbol-multiplier-popup-modal.arrow-on-right {
12
+ transform: translate(calc(-100% - 75px), -50%);
13
+ }
14
+
15
+ .symbol-popup {
16
+ display: flex;
17
+ flex-direction: column;
18
+ width: 100%;
19
+ height: 100%;
20
+ justify-content: center;
21
+ align-items: center;
22
+ }
23
+
24
+ .symbol-popup.arrow-on-left::after {
25
+ content: "";
26
+ position: absolute;
27
+ display: block;
28
+ background: url("/assets/settings/symbol-pointer.png");
29
+ top: 50%;
30
+ right: 100%;
31
+ height: 25px;
32
+ width: 25px;
33
+ transform: translateY(-50%);
34
+ }
35
+
36
+ .symbol-popup.arrow-on-right::after {
37
+ content: "";
38
+ position: absolute;
39
+ display: block;
40
+ background: url("/assets/settings/symbol-pointer.png");
41
+ top: 50%;
42
+ left: 100%;
43
+ height: 25px;
44
+ width: 25px;
45
+ transform: translate(0, -50%) rotate(180deg);
46
+ }
47
+
48
+ .symbol-popup__row {
49
+ display: flex;
50
+ flex-direction: row;
51
+ justify-content: center;
52
+ align-items: center;
53
+ width: 80%;
54
+ }
55
+
56
+ .symbol-popup__prefix {
57
+ font-size: 25px;
58
+ color: #ec5e27;
59
+ margin: 0;
60
+ font-weight: 500;
61
+ }
62
+
63
+ .symbol-popup__value {
64
+ font-size: 25px;
65
+ font-weight: 500;
66
+ text-align: left;
67
+ margin-left: 20px;
68
+ white-space: nowrap;
69
+ }
70
+
71
+ .symbol-popup__value--range {
72
+ display: flex;
73
+ flex-direction: column;
74
+ font-size: 0.8em;
75
+ font-weight: 400;
76
+ margin-left: 20px;
77
+ margin-bottom: 10px;
78
+ text-align: left;
79
+ }
80
+
81
+ .symbol-popup__value--range > div {
82
+ white-space: nowrap;
83
+ }
84
+
85
+ @media only screen and (max-width: 900px) {
86
+ .symbol-popup__prefix {
87
+ font-size: 15px;
88
+ }
89
+
90
+ .symbol-popup__value {
91
+ font-size: 15px;
92
+ }
93
+
94
+ .symbol-multiplier-popup-modal.arrow-on-left {
95
+ transform: translate(50px, -50%);
96
+ }
97
+
98
+ .symbol-multiplier-popup-modal.arrow-on-right {
99
+ transform: translate(calc(-100% - 50px), -50%);
100
+ }
101
+ }
@@ -0,0 +1,28 @@
1
+ .ux-settings {
2
+ display: flex;
3
+ flex-direction: column;
4
+ align-items: center;
5
+ justify-content: space-evenly;
6
+ width: 50%;
7
+ height: 100%;
8
+ margin: 0px 30px;
9
+ }
10
+
11
+ .ux-settings__switch {
12
+ width: 500px;
13
+ }
14
+
15
+ .ux-settings__switch-container {
16
+ display: flex;
17
+ flex-direction: column;
18
+ align-items: center;
19
+ justify-content: space-evenly;
20
+ height: 80%;
21
+ width: 100%;
22
+ }
23
+
24
+ @media only screen and (max-width: 1125px) {
25
+ .ux-settings__switch {
26
+ width: 250px;
27
+ }
28
+ }
@@ -1,3 +1,4 @@
1
+ import "./UXSettings.css";
1
2
  import React from "react";
2
3
  export declare const UXSettings: (() => React.JSX.Element) & {
3
4
  displayName: string;
@@ -1,17 +1,30 @@
1
+ import "./UXSettings.css";
1
2
  import { observer } from "mobx-react-lite";
2
3
  import React from "react";
3
4
  import { useStores } from "../../hooks";
4
5
  import { SpeedButtonWithHeader, SwitchWithHeader } from "../SwitchWithHeader";
5
6
  export const UXSettings = observer(() => {
6
7
  const { settingStore } = useStores();
7
- return (<div className="flex w-full max-w-xl flex-col">
8
- <div className="flex flex-col gap-4">
9
- <SpeedButtonWithHeader header="Quick Spin" description="Play faster by reducing total spin time"/>
10
- <SwitchWithHeader header="Battery saver" description="Safe battery life by reducing animation speed" flag={settingStore.batterySaverFlag} setFlag={settingStore.setBatteryFlag}/>
11
- <SwitchWithHeader header="Ambient music" description="Turn on or off the game music" flag={settingStore.ambientMusicFlag} setFlag={settingStore.setAmbientMusicFlag}/>
12
- <SwitchWithHeader header="Sound fx" description="Turn on or off the game sounds" flag={settingStore.soundFxFlag} setFlag={settingStore.setSoundFxFlag}/>
13
- <SwitchWithHeader header="Full screen mode" description="Turn on or off game fullscreen" flag={settingStore.fullScreenFlag} setFlag={settingStore.setFullScreenFlag}/>
14
- <SwitchWithHeader header="HI resolution" description="Enable high resolution files" flag={settingStore.HiResolutionFlag} setFlag={settingStore.setHiResolutionFlag}/>
8
+ return (<div className="ux-settings">
9
+ <div className="ux-settings__switch-container">
10
+ <div className="ux-settings__switch">
11
+ <SpeedButtonWithHeader header="Quick Spin" description="Play faster by reducing total spin time"/>
12
+ </div>
13
+ <div className="ux-settings__switch">
14
+ <SwitchWithHeader header="Battery saver" description="Safe battery life by reducing animation speed" flag={settingStore.batterySaverFlag} setFlag={settingStore.setBatteryFlag}/>
15
+ </div>
16
+ <div className="ux-settings__switch">
17
+ <SwitchWithHeader header="Ambient music" description="Turn on or off the game music" flag={settingStore.ambientMusicFlag} setFlag={settingStore.setAmbientMusicFlag}/>
18
+ </div>
19
+ <div className="ux-settings__switch">
20
+ <SwitchWithHeader header="Sound fx" description="Turn on or off the game sounds" flag={settingStore.soundFxFlag} setFlag={settingStore.setSoundFxFlag}/>
21
+ </div>
22
+ <div className="ux-settings__switch">
23
+ <SwitchWithHeader header="Full screen mode" description="Turn on or off game fullscreen" flag={settingStore.fullScreenFlag} setFlag={settingStore.setFullScreenFlag}/>
24
+ </div>
25
+ <div className="ux-settings__switch">
26
+ <SwitchWithHeader header="HI resolution" description="Enable high resolution files" flag={settingStore.HiResolutionFlag} setFlag={settingStore.setHiResolutionFlag}/>
27
+ </div>
15
28
  </div>
16
29
  </div>);
17
30
  });
@@ -1,4 +1,5 @@
1
1
  import "rc-slider/assets/index.css";
2
+ import "./volume.css";
2
3
  import React from "react";
3
4
  export declare const VolumeSettings: (() => React.JSX.Element) & {
4
5
  displayName: string;
@@ -1,4 +1,5 @@
1
1
  import "rc-slider/assets/index.css";
2
+ import "./volume.css";
2
3
  import { observer } from "mobx-react-lite";
3
4
  import Slider from "rc-slider";
4
5
  import React from "react";
@@ -11,9 +12,9 @@ const onChange = (newVolumeLevel) => {
11
12
  export const VolumeSettings = observer(() => {
12
13
  const { settingStore } = useStores();
13
14
  const COLOR = settingStore.isSoundEnabled() ? "#2FC408" : "#FA5F27";
14
- return (<div className="relative -right-10 top-2 flex h-full w-4/5 items-center">
15
- <div className="relative -left-5 bottom-2 h-[30px] w-[30px] bg-[url('/assets/settings/sound-icon.png')] bg-contain bg-center bg-no-repeat"/>
16
- <Slider className="relative bottom-2" step={1} min={0} max={100} value={settingStore.volumeLevel} handleStyle={{
15
+ return (<div className="volume-control">
16
+ <div className="volume-control__volume-icon"></div>
17
+ <Slider className="volume-control__slider" step={1} min={0} max={100} value={settingStore.volumeLevel} handleStyle={{
17
18
  backgroundColor: COLOR,
18
19
  borderColor: COLOR,
19
20
  width: "7px",
@@ -27,7 +28,7 @@ export const VolumeSettings = observer(() => {
27
28
  height: "5px",
28
29
  borderRadius: "1px",
29
30
  }} onChange={onChange}/>
30
- <p className="text-md relative bottom-2 left-4 w-9 pl-2 font-bold" style={{
31
+ <p className="volume-control__text" style={{
31
32
  color: COLOR,
32
33
  }}>
33
34
  {settingStore.volumeLevel}
@@ -0,0 +1,54 @@
1
+ .volume-modal {
2
+ width: 40vh;
3
+ height: 50px;
4
+ left: 1vw;
5
+ bottom: 5vh;
6
+ }
7
+
8
+ .volume-control {
9
+ display: flex;
10
+ flex-direction: row;
11
+ height: 100%;
12
+ position: relative;
13
+ align-items: center;
14
+ top: 6px;
15
+ right: -30px;
16
+ width: 80%;
17
+ }
18
+
19
+ .volume-control__text {
20
+ margin: 0px 0px 10px 0px;
21
+ padding: 10px 0px;
22
+ position: relative;
23
+ font-size: 20px;
24
+ left: 10px;
25
+ width: 32px;
26
+ }
27
+
28
+ .volume-control__slider {
29
+ position: relative;
30
+ bottom: 5px;
31
+ }
32
+
33
+ .volume-control__volume-icon {
34
+ position: relative;
35
+ left: -20px;
36
+ bottom: 5px;
37
+ width: 30px;
38
+ height: 30px;
39
+ background-image: url("/assets/settings/sound-icon.png");
40
+ background-position: center;
41
+ background-size: contain;
42
+ background-repeat: no-repeat;
43
+ }
44
+
45
+ .volume-control__volume-icon:after {
46
+ content: "";
47
+ display: block;
48
+ width: 2px;
49
+ height: 25px;
50
+ position: relative;
51
+ top: 2px;
52
+ left: 30px;
53
+ background-image: linear-gradient(to top, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.5), rgba(255, 255, 255, 0));
54
+ }
@@ -1,4 +1,3 @@
1
1
  export * from "./useBuyFreeSpins";
2
- export * from "./useClickOutside";
3
2
  export * from "./useDeviceOrientations";
4
3
  export * from "./useStore";
@@ -1,4 +1,3 @@
1
1
  export * from "./useBuyFreeSpins";
2
- export * from "./useClickOutside";
3
2
  export * from "./useDeviceOrientations";
4
3
  export * from "./useStore";
@@ -1,7 +1,3 @@
1
- @tailwind base;
2
- @tailwind components;
3
- @tailwind utilities;
4
-
5
1
  html {
6
2
  height: 100vh;
7
3
  }
@@ -84,6 +80,32 @@ body {
84
80
  display: none;
85
81
  }
86
82
 
83
+ .modal-style {
84
+ display: flex;
85
+ position: absolute;
86
+ background-color: rgba(0, 0, 0, 0.85);
87
+ border-radius: 20px;
88
+ border: 2px #423f42;
89
+ border-style: solid;
90
+ box-shadow: 0px 0px 6px 1px white;
91
+ }
92
+
93
+ .modal {
94
+ width: 80vw;
95
+ height: 80vh;
96
+ top: 5vh;
97
+ left: 10vw;
98
+ align-items: center;
99
+ justify-content: center;
100
+ }
101
+
102
+ .flex-containers-stretched {
103
+ display: flex;
104
+ flex-direction: row;
105
+ justify-content: space-between;
106
+ align-items: center;
107
+ }
108
+
87
109
  @keyframes iosAnimMove {
88
110
  0% {
89
111
  background-position-y: 75%;
@@ -130,45 +152,3 @@ html.is-locked .ios-scroller-animation {
130
152
  opacity: 0;
131
153
  z-index: -9999;
132
154
  }
133
-
134
- .arrow-on-left {
135
- transform: translate(75px, -50%);
136
- }
137
-
138
- .arrow-on-right {
139
- transform: translate(calc(-100% - 75px), -50%);
140
- }
141
-
142
- .arrow-on-left::after {
143
- content: "";
144
- position: absolute;
145
- display: block;
146
- background: url("/assets/settings/symbol-pointer.png");
147
- top: 50%;
148
- right: 100%;
149
- height: 25px;
150
- width: 25px;
151
- transform: translateY(-50%);
152
- }
153
-
154
- .arrow-on-right::after {
155
- content: "";
156
- position: absolute;
157
- display: block;
158
- background: url("/assets/settings/symbol-pointer.png");
159
- top: 50%;
160
- left: 100%;
161
- height: 25px;
162
- width: 25px;
163
- transform: translate(0, -50%) rotate(180deg);
164
- }
165
-
166
- @media only screen and (max-width: 900px) {
167
- .arrow-on-left {
168
- transform: translate(50px, -50%);
169
- }
170
-
171
- .arrow-on-right {
172
- transform: translate(calc(-100% - 50px), -50%);
173
- }
174
- }
@@ -1,3 +1,3 @@
1
- import "./packedStyles.css";
1
+ import "./index.css";
2
2
  import React from "react";
3
3
  export declare const SettingsUI: () => React.JSX.Element;
@@ -1,34 +1,33 @@
1
- import "./packedStyles.css";
1
+ import "./index.css";
2
2
  import React from "react";
3
3
  import { UI_ITEMS } from "../utils";
4
4
  import { AutoplaySettings, BetSettings, BuyFreeSpinModal, GameRules, SpeedSettingsPopup, SymbolMultiplierPopup, VolumeSettings, } from "./components";
5
- import { Modal } from "./components/Modal";
6
5
  import { SystemSettingsComponent } from "./SystemSettings/SystemSettingsComponent";
7
6
  export const SettingsUI = () => {
8
7
  return (<>
9
- <Modal layerId={UI_ITEMS.settings}>
8
+ <div id={UI_ITEMS.settings} className="modal modal-style">
10
9
  <SystemSettingsComponent />
11
- </Modal>
12
- <Modal layerId={UI_ITEMS.gameRules}>
10
+ </div>
11
+ <div id={UI_ITEMS.gameRules} className="modal modal-style">
13
12
  <GameRules />
14
- </Modal>
15
- <div id={UI_ITEMS.volume} className="absolute bottom-[5vh] left-[1vw] h-[50px] w-[40vh] rounded-xl bg-zinc-900 shadow shadow-primary-500/30">
13
+ </div>
14
+ <div id={UI_ITEMS.volume} className="volume-modal modal-style">
16
15
  <VolumeSettings />
17
16
  </div>
18
- <Modal layerId={UI_ITEMS.autoplay}>
17
+ <div id={UI_ITEMS.autoplay} className="modal modal-style">
19
18
  <AutoplaySettings />
20
- </Modal>
21
- <Modal layerId={UI_ITEMS.speedSettings} className="absolute flex h-fit items-center justify-center rounded-xl bg-zinc-900 p-4 shadow-primary-500/30 sm:left-auto sm:top-auto portrait:left-auto portrait:top-auto portrait:items-center">
19
+ </div>
20
+ <div id={UI_ITEMS.speedSettings} className="speed-settings-modal modal-style">
22
21
  <SpeedSettingsPopup />
23
- </Modal>
22
+ </div>
24
23
  <div id={UI_ITEMS.symbolPayTable}>
25
24
  <SymbolMultiplierPopup />
26
25
  </div>
27
- <Modal layerId={UI_ITEMS.freeSpin}>
26
+ <div id={UI_ITEMS.freeSpin} className="modal modal-style">
28
27
  <BuyFreeSpinModal />
29
- </Modal>
30
- <Modal layerId={UI_ITEMS.bet}>
28
+ </div>
29
+ <div id={UI_ITEMS.bet} className="modal modal-style">
31
30
  <BetSettings />
32
- </Modal>
31
+ </div>
33
32
  </>);
34
33
  };
@@ -39,9 +39,6 @@ export class AbstractMainContainer extends Container {
39
39
  }
40
40
  triggerStoreInitState(...containersWithSpines) {
41
41
  RainMan.settingsStore.containersWithSpines.push(...containersWithSpines);
42
- RainMan.settingsStore.containersWithSpines.forEach((spine) => {
43
- spine.setAnimationTimescale(RainMan.settingsStore.batterySaverFlag);
44
- });
45
42
  RainMan.settingsStore.refreshBatterySaver();
46
43
  }
47
44
  get freeSpinPlate() {
@@ -306,15 +306,15 @@ export class AbstractSymbolsColumn extends Container {
306
306
  this.swapSymbolFace(symbol);
307
307
  }
308
308
  shouldPlaySpecialRollStopSound() {
309
- for (let i = 0; i <= RainMan.config.numberOfColumns; i++) {
310
- const currentColumn = this.columnsContainer.getColumnAtPosition(i);
311
- if (currentColumn !== this)
312
- continue;
313
- return !!currentColumn.symbols
314
- .slice(0, RainMan.config.numberOfRows)
315
- .find((symbol) => symbol.id === this.bonusSymbol);
316
- }
317
- return false;
309
+ return (Array.from({ length: RainMan.config.numberOfColumns }, (_, i) => i)
310
+ .map((i) => {
311
+ const column = this.columnsContainer.getColumnAtPosition(i);
312
+ if (column !== this)
313
+ return null;
314
+ return column.symbols.slice(0, RainMan.config.numberOfRows);
315
+ })
316
+ .flat()
317
+ .filter((symbol) => symbol && symbol.id === this.bonusSymbol).length >= 1);
318
318
  }
319
319
  handleStopping() {
320
320
  if (!this.topMostSymbol || this.phase === Phase.END)
@@ -1,3 +1,4 @@
1
+ import i18next from "i18next";
1
2
  import { Currencies } from "ts-money";
2
3
  import { ApiConfig } from "../application";
3
4
  import { SpinData, } from "../connectivity";
@@ -69,6 +70,7 @@ export class ConnectionWrapper {
69
70
  landscape: true,
70
71
  matched_ratio: "16:9",
71
72
  },
73
+ locale: i18next.language,
72
74
  vendor_id: RainMan.config.gameInitVendorId,
73
75
  }));
74
76
  RainMan.globals.currency = Currencies[this._initData.currency];
@@ -26,6 +26,7 @@ export type InitServerRequest = BaseServerRequest & {
26
26
  landscape: boolean;
27
27
  matched_ratio: string;
28
28
  };
29
+ locale: string;
29
30
  };
30
31
  export type SpinServerRequest = BaseServerRequest & {
31
32
  action: "spin";
@@ -60,11 +60,11 @@ export const waitForAnimationToEnd = async (spine, animationName, loopAnimationN
60
60
  };
61
61
  export const setTimeScale = (spine, flag) => {
62
62
  spine.state.originalTimeScale ||= spine.state.timeScale;
63
- if (flag)
63
+ if (flag) {
64
64
  spine.state.timeScale = spine.state.originalTimeScale;
65
+ }
65
66
  else {
66
67
  spine.state.originalTimeScale = spine.state.timeScale;
67
- spine.state.timeScale = 0;
68
68
  }
69
69
  };
70
70
  export const changeResolution = (high) => {