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.
- package/dist/SettingsUI/SystemSettings/SystemSettingsComponent.d.ts +1 -0
- package/dist/SettingsUI/SystemSettings/SystemSettingsComponent.jsx +6 -7
- package/dist/SettingsUI/SystemSettings/systemSettings.css +41 -0
- package/dist/SettingsUI/components/AutoplaySettings/autoplaySettings.css +267 -0
- package/dist/SettingsUI/components/AutoplaySettings/index.d.ts +1 -0
- package/dist/SettingsUI/components/AutoplaySettings/index.jsx +38 -26
- package/dist/SettingsUI/components/Bet/BetControls.d.ts +1 -0
- package/dist/SettingsUI/components/Bet/BetControls.jsx +9 -9
- package/dist/SettingsUI/components/Bet/bet.css +115 -0
- package/dist/SettingsUI/components/Bet/index.d.ts +1 -0
- package/dist/SettingsUI/components/Bet/index.jsx +3 -1
- package/dist/SettingsUI/components/BuyFreeSpins/buyFreeSpin.css +46 -0
- package/dist/SettingsUI/components/BuyFreeSpins/index.d.ts +1 -0
- package/dist/SettingsUI/components/BuyFreeSpins/index.jsx +6 -6
- package/dist/SettingsUI/components/CloseModalButton/closeModalButton.css +20 -0
- package/dist/SettingsUI/components/CloseModalButton/index.d.ts +1 -0
- package/dist/SettingsUI/components/CloseModalButton/index.jsx +3 -3
- package/dist/SettingsUI/components/GameRules/gameRules.css +96 -0
- package/dist/SettingsUI/components/GameRules/index.d.ts +1 -0
- package/dist/SettingsUI/components/GameRules/index.jsx +13 -11
- package/dist/SettingsUI/components/OptionButton/index.jsx +1 -1
- package/dist/SettingsUI/components/RichLimitingSlider/index.d.ts +1 -0
- package/dist/SettingsUI/components/RichLimitingSlider/index.jsx +8 -8
- package/dist/SettingsUI/components/RichLimitingSlider/richLimitingSlider.css +39 -0
- package/dist/SettingsUI/components/SlidingSwitch/index.d.ts +1 -0
- package/dist/SettingsUI/components/SlidingSwitch/index.jsx +5 -4
- package/dist/SettingsUI/components/SlidingSwitch/slidingSwitch.css +126 -0
- package/dist/SettingsUI/components/SpeedSettingsPopup/index.d.ts +1 -0
- package/dist/SettingsUI/components/SpeedSettingsPopup/index.jsx +6 -6
- package/dist/SettingsUI/components/SpeedSettingsPopup/speedSettingsPopup.css +119 -0
- package/dist/SettingsUI/components/SpeedSwitchButton/index.jsx +5 -6
- package/dist/SettingsUI/components/SwitchWithHeader/headerStyle.css +28 -0
- package/dist/SettingsUI/components/SwitchWithHeader/index.d.ts +1 -0
- package/dist/SettingsUI/components/SwitchWithHeader/index.jsx +6 -5
- package/dist/SettingsUI/components/SymbolMultiplierPopup/index.d.ts +2 -1
- package/dist/SettingsUI/components/SymbolMultiplierPopup/index.jsx +15 -17
- package/dist/SettingsUI/components/SymbolMultiplierPopup/symbolPopup.css +101 -0
- package/dist/SettingsUI/components/UXSettings/UXSettings.css +28 -0
- package/dist/SettingsUI/components/UXSettings/index.d.ts +1 -0
- package/dist/SettingsUI/components/UXSettings/index.jsx +21 -8
- package/dist/SettingsUI/components/VolumeSettings/index.d.ts +1 -0
- package/dist/SettingsUI/components/VolumeSettings/index.jsx +5 -4
- package/dist/SettingsUI/components/VolumeSettings/volume.css +54 -0
- package/dist/SettingsUI/hooks/index.d.ts +0 -1
- package/dist/SettingsUI/hooks/index.js +0 -1
- package/dist/SettingsUI/index.css +26 -46
- package/dist/SettingsUI/index.d.ts +1 -1
- package/dist/SettingsUI/index.jsx +14 -15
- package/dist/components/AbstractMainContainer/AbstractMainContainer.js +0 -3
- package/dist/components/symbols/AbstractSymbolsColumn.js +9 -9
- package/dist/connectivity/ConnectionWrapper.js +2 -0
- package/dist/connectivity/serverConnection.d.ts +1 -0
- package/dist/utils/common/functions.js +2 -2
- package/package.json +4 -9
- package/dist/SettingsUI/components/Button/index.d.ts +0 -2
- package/dist/SettingsUI/components/Button/index.jsx +0 -6
- package/dist/SettingsUI/components/Modal/index.d.ts +0 -10
- package/dist/SettingsUI/components/Modal/index.jsx +0 -24
- package/dist/SettingsUI/hooks/useClickOutside.d.ts +0 -6
- package/dist/SettingsUI/hooks/useClickOutside.js +0 -20
- package/dist/SettingsUI/packedStyles.css +0 -1617
- package/dist/SettingsUI/utils/tw.d.ts +0 -2
- 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="
|
|
7
|
-
<h2 className="
|
|
8
|
-
{description && <
|
|
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
|
|
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
|
|
19
|
+
return (<div className="flex-containers-stretched">
|
|
19
20
|
<HeaderWithDescription header={header} description={description}/>
|
|
20
21
|
<SpeedButtonSwitch />
|
|
21
22
|
</div>);
|
|
@@ -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
|
|
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="
|
|
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={
|
|
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=
|
|
30
|
-
{popupPaytableData.map((popupPaytableRow) =>
|
|
31
|
-
|
|
32
|
-
{popupPaytableRow.prefix}x
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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
|
|
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,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="
|
|
8
|
-
<div className="
|
|
9
|
-
<
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
<
|
|
13
|
-
|
|
14
|
-
|
|
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 { 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="
|
|
15
|
-
<div className="
|
|
16
|
-
<Slider className="
|
|
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="
|
|
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,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,34 +1,33 @@
|
|
|
1
|
-
import "./
|
|
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
|
-
<
|
|
8
|
+
<div id={UI_ITEMS.settings} className="modal modal-style">
|
|
10
9
|
<SystemSettingsComponent />
|
|
11
|
-
</
|
|
12
|
-
<
|
|
10
|
+
</div>
|
|
11
|
+
<div id={UI_ITEMS.gameRules} className="modal modal-style">
|
|
13
12
|
<GameRules />
|
|
14
|
-
</
|
|
15
|
-
<div id={UI_ITEMS.volume} className="
|
|
13
|
+
</div>
|
|
14
|
+
<div id={UI_ITEMS.volume} className="volume-modal modal-style">
|
|
16
15
|
<VolumeSettings />
|
|
17
16
|
</div>
|
|
18
|
-
<
|
|
17
|
+
<div id={UI_ITEMS.autoplay} className="modal modal-style">
|
|
19
18
|
<AutoplaySettings />
|
|
20
|
-
</
|
|
21
|
-
<
|
|
19
|
+
</div>
|
|
20
|
+
<div id={UI_ITEMS.speedSettings} className="speed-settings-modal modal-style">
|
|
22
21
|
<SpeedSettingsPopup />
|
|
23
|
-
</
|
|
22
|
+
</div>
|
|
24
23
|
<div id={UI_ITEMS.symbolPayTable}>
|
|
25
24
|
<SymbolMultiplierPopup />
|
|
26
25
|
</div>
|
|
27
|
-
<
|
|
26
|
+
<div id={UI_ITEMS.freeSpin} className="modal modal-style">
|
|
28
27
|
<BuyFreeSpinModal />
|
|
29
|
-
</
|
|
30
|
-
<
|
|
28
|
+
</div>
|
|
29
|
+
<div id={UI_ITEMS.bet} className="modal modal-style">
|
|
31
30
|
<BetSettings />
|
|
32
|
-
</
|
|
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
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
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];
|
|
@@ -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) => {
|