pixi-rainman-game-engine 0.1.19 → 0.1.21
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/README.md +10 -16
- package/dist/SettingsUI/SystemSettings/SystemSettingsComponent.d.ts +0 -1
- package/dist/SettingsUI/SystemSettings/SystemSettingsComponent.jsx +7 -6
- package/dist/SettingsUI/components/AutoplaySettings/index.d.ts +0 -1
- package/dist/SettingsUI/components/AutoplaySettings/index.jsx +26 -38
- package/dist/SettingsUI/components/Bet/BetControls.d.ts +0 -1
- package/dist/SettingsUI/components/Bet/BetControls.jsx +9 -9
- package/dist/SettingsUI/components/Bet/index.d.ts +0 -1
- package/dist/SettingsUI/components/Bet/index.jsx +1 -3
- package/dist/SettingsUI/components/Button/index.d.ts +2 -0
- package/dist/SettingsUI/components/Button/index.jsx +6 -0
- package/dist/SettingsUI/components/BuyFreeSpins/index.d.ts +0 -1
- package/dist/SettingsUI/components/BuyFreeSpins/index.jsx +6 -6
- package/dist/SettingsUI/components/CloseModalButton/index.d.ts +0 -1
- package/dist/SettingsUI/components/CloseModalButton/index.jsx +3 -3
- package/dist/SettingsUI/components/GameRules/index.d.ts +0 -1
- package/dist/SettingsUI/components/GameRules/index.jsx +11 -13
- package/dist/SettingsUI/components/Modal/index.d.ts +10 -0
- package/dist/SettingsUI/components/Modal/index.jsx +24 -0
- package/dist/SettingsUI/components/OptionButton/index.jsx +1 -1
- package/dist/SettingsUI/components/RichLimitingSlider/index.d.ts +0 -1
- package/dist/SettingsUI/components/RichLimitingSlider/index.jsx +8 -8
- package/dist/SettingsUI/components/SlidingSwitch/index.d.ts +0 -1
- package/dist/SettingsUI/components/SlidingSwitch/index.jsx +4 -5
- package/dist/SettingsUI/components/SpeedSettingsPopup/index.d.ts +0 -1
- package/dist/SettingsUI/components/SpeedSettingsPopup/index.jsx +6 -6
- package/dist/SettingsUI/components/SpeedSwitchButton/index.jsx +6 -5
- package/dist/SettingsUI/components/SwitchWithHeader/index.d.ts +0 -1
- package/dist/SettingsUI/components/SwitchWithHeader/index.jsx +5 -6
- package/dist/SettingsUI/components/SymbolMultiplierPopup/index.d.ts +1 -2
- package/dist/SettingsUI/components/SymbolMultiplierPopup/index.jsx +17 -15
- package/dist/SettingsUI/components/UXSettings/index.d.ts +0 -1
- package/dist/SettingsUI/components/UXSettings/index.jsx +8 -21
- package/dist/SettingsUI/components/VolumeSettings/index.d.ts +0 -1
- package/dist/SettingsUI/components/VolumeSettings/index.jsx +4 -5
- package/dist/SettingsUI/hooks/index.d.ts +1 -0
- package/dist/SettingsUI/hooks/index.js +1 -0
- package/dist/SettingsUI/hooks/useClickOutside.d.ts +6 -0
- package/dist/SettingsUI/hooks/useClickOutside.js +20 -0
- package/dist/SettingsUI/index.css +46 -26
- package/dist/SettingsUI/index.d.ts +1 -1
- package/dist/SettingsUI/index.jsx +15 -14
- package/dist/SettingsUI/packedStyles.css +1617 -0
- package/dist/SettingsUI/utils/tw.d.ts +2 -0
- package/dist/SettingsUI/utils/tw.js +3 -0
- package/dist/application/ApiConfig/ApiConfig.d.ts +1 -1
- package/dist/application/ApiConfig/ApiConfig.js +2 -2
- package/dist/application/setup.js +1 -1
- package/dist/components/AbstractMainContainer/AbstractMainContainer.js +3 -2
- package/dist/components/dictionary/locales/en.json +2 -1
- package/dist/components/messageBox/MessageBox.js +10 -6
- package/dist/components/symbols/AbstractSymbolsColumn.js +3 -5
- package/dist/connectivity/serverData.d.ts +20 -0
- package/dist/controllers/AbstractController.d.ts +1 -0
- package/dist/controllers/AbstractController.js +12 -0
- package/dist/stores/SettingsStore.d.ts +5 -0
- package/dist/stores/SettingsStore.js +11 -0
- package/dist/utils/common/screenHelpers.js +1 -1
- package/package.json +9 -4
- package/dist/SettingsUI/SystemSettings/systemSettings.css +0 -41
- package/dist/SettingsUI/components/AutoplaySettings/autoplaySettings.css +0 -267
- package/dist/SettingsUI/components/Bet/bet.css +0 -104
- package/dist/SettingsUI/components/BuyFreeSpins/buyFreeSpin.css +0 -46
- package/dist/SettingsUI/components/CloseModalButton/closeModalButton.css +0 -20
- package/dist/SettingsUI/components/GameRules/gameRules.css +0 -96
- package/dist/SettingsUI/components/RichLimitingSlider/richLimitingSlider.css +0 -39
- package/dist/SettingsUI/components/SlidingSwitch/slidingSwitch.css +0 -126
- package/dist/SettingsUI/components/SpeedSettingsPopup/speedSettingsPopup.css +0 -119
- package/dist/SettingsUI/components/SwitchWithHeader/headerStyle.css +0 -28
- package/dist/SettingsUI/components/SymbolMultiplierPopup/symbolPopup.css +0 -101
- package/dist/SettingsUI/components/UXSettings/UXSettings.css +0 -28
- package/dist/SettingsUI/components/VolumeSettings/volume.css +0 -54
|
@@ -19,7 +19,7 @@ export declare class ApiConfig {
|
|
|
19
19
|
private transformationMap;
|
|
20
20
|
extraData: InitExtraData;
|
|
21
21
|
/**
|
|
22
|
-
* Create instance of ApiConfig, requires
|
|
22
|
+
* Create instance of ApiConfig, requires InitDataInterface
|
|
23
23
|
*
|
|
24
24
|
* @param {InitDataInterface} data
|
|
25
25
|
*/
|
|
@@ -17,7 +17,7 @@ export class ApiConfig {
|
|
|
17
17
|
transformationMap = new Map();
|
|
18
18
|
extraData;
|
|
19
19
|
/**
|
|
20
|
-
* Create instance of ApiConfig, requires
|
|
20
|
+
* Create instance of ApiConfig, requires InitDataInterface
|
|
21
21
|
*
|
|
22
22
|
* @param {InitDataInterface} data
|
|
23
23
|
*/
|
|
@@ -27,7 +27,7 @@ export class ApiConfig {
|
|
|
27
27
|
}
|
|
28
28
|
this.token = data.token;
|
|
29
29
|
this.bets = data.bets;
|
|
30
|
-
this.extraData = data.extra_data;
|
|
30
|
+
this.extraData = { ...data.extra_data, jackpotWins: data.jackpot_wins };
|
|
31
31
|
this.initSymbolMap(data);
|
|
32
32
|
this.initWinMap(data);
|
|
33
33
|
this.initStreakMap(data);
|
|
@@ -13,7 +13,6 @@ export const setup = () => {
|
|
|
13
13
|
changeResolution(RainMan.settingsStore.HiResolutionFlag);
|
|
14
14
|
resizeCanvas();
|
|
15
15
|
setupFullscreenForIOS();
|
|
16
|
-
disableMagnifyingGlassOnIOS();
|
|
17
16
|
const gameRoot = document.createElement("div");
|
|
18
17
|
gameRoot.setAttribute("class", "game-container");
|
|
19
18
|
document.body.appendChild(gameRoot);
|
|
@@ -27,5 +26,6 @@ export const setup = () => {
|
|
|
27
26
|
reactRoot.render(SettingsUI());
|
|
28
27
|
// append canvas
|
|
29
28
|
gameRoot.appendChild(RainMan.app.view);
|
|
29
|
+
disableMagnifyingGlassOnIOS();
|
|
30
30
|
return reactLayer;
|
|
31
31
|
};
|
|
@@ -189,7 +189,7 @@ export class AbstractMainContainer extends Container {
|
|
|
189
189
|
}
|
|
190
190
|
createUnderFramePanel() {
|
|
191
191
|
const underFramePanel = new Graphics();
|
|
192
|
-
underFramePanel.beginFill(0x0, 0.
|
|
192
|
+
underFramePanel.beginFill(0x0, 0.75);
|
|
193
193
|
underFramePanel.drawRect(0, 0, 800, 100);
|
|
194
194
|
return underFramePanel;
|
|
195
195
|
}
|
|
@@ -235,6 +235,7 @@ export class AbstractMainContainer extends Container {
|
|
|
235
235
|
if (this.bigWinContainer) {
|
|
236
236
|
this.removeChild(this.bigWinContainer);
|
|
237
237
|
}
|
|
238
|
+
this.messageBox.resize();
|
|
238
239
|
this.background.resize();
|
|
239
240
|
this.animatedFront?.resize();
|
|
240
241
|
if (this.freeSpinButton)
|
|
@@ -312,6 +313,7 @@ export class AbstractMainContainer extends Container {
|
|
|
312
313
|
this.logo?.resize();
|
|
313
314
|
this.leftButtons.resize();
|
|
314
315
|
this.rightButtons.resize();
|
|
316
|
+
this.messageBox.resize();
|
|
315
317
|
if (this.landscapePlayButtons !== null)
|
|
316
318
|
this.landscapePlayButtons.resize();
|
|
317
319
|
if (this.portraitPlayButtons !== null)
|
|
@@ -351,7 +353,6 @@ export class AbstractMainContainer extends Container {
|
|
|
351
353
|
this.freeSpinSummary.resize();
|
|
352
354
|
}
|
|
353
355
|
RainMan.settingsStore.popupPaytableRepositionCallback?.();
|
|
354
|
-
this.messageBox.resize();
|
|
355
356
|
}
|
|
356
357
|
refreshLayers() {
|
|
357
358
|
this.removeChild(BackgroundLayer);
|
|
@@ -32,17 +32,17 @@ export class MessageBox extends Container {
|
|
|
32
32
|
constructor() {
|
|
33
33
|
super();
|
|
34
34
|
this.name = MessageBox.registryName;
|
|
35
|
+
const fontSize = getDeviceOrientation().includes("mobile")
|
|
36
|
+
? RainMan.config.mobileFontSize
|
|
37
|
+
: RainMan.config.fontSize;
|
|
35
38
|
this.positioningFrame = new Graphics();
|
|
36
39
|
this.positioningFrame.beginFill(0xff0000, 0.0);
|
|
37
40
|
this.positioningFrame.drawRect(0, 0, 800, 100);
|
|
38
41
|
this.addChild(this.positioningFrame);
|
|
39
42
|
this.parentLayer = UXLayer;
|
|
40
|
-
this.freeSpinText = new UpdatableTextComponent(MessageBox.freeSpinTextRegistryName, i18n.t("currentFreeSpins"), UPDATABLE_MODES.int,
|
|
41
|
-
this.autoSpinText = new UpdatableTextComponent(MessageBox.autoSpinTextRegistryName, i18n.t("autoSpinsLeft"), UPDATABLE_MODES.int,
|
|
42
|
-
this.currentWinText = new UpdatableTextComponent(MessageBox.currentWinTextRegistryName, i18n.t("currentWin"), UPDATABLE_MODES.money,
|
|
43
|
-
const fontSize = getDeviceOrientation().includes("mobile")
|
|
44
|
-
? RainMan.config.mobileFontSize
|
|
45
|
-
: RainMan.config.fontSize;
|
|
43
|
+
this.freeSpinText = new UpdatableTextComponent(MessageBox.freeSpinTextRegistryName, i18n.t("currentFreeSpins"), UPDATABLE_MODES.int, fontSize, new Color(0xffffff).toHex(), () => this.centerTextOnX(this.freeSpinText));
|
|
44
|
+
this.autoSpinText = new UpdatableTextComponent(MessageBox.autoSpinTextRegistryName, i18n.t("autoSpinsLeft"), UPDATABLE_MODES.int, fontSize, new Color(0xffffff).toHex(), () => this.centerTextOnX(this.autoSpinText));
|
|
45
|
+
this.currentWinText = new UpdatableTextComponent(MessageBox.currentWinTextRegistryName, i18n.t("currentWin"), UPDATABLE_MODES.money, fontSize, undefined, () => this.centerTextOnX(this.currentWinText));
|
|
46
46
|
this.incentiveText = new Text(sample(i18n.t("idleMessages", { returnObjects: true })[RainMan.componentRegistry.getSpeedLevel()]), {
|
|
47
47
|
fontFamily: RainMan.config.fontFace,
|
|
48
48
|
fontSize,
|
|
@@ -94,6 +94,10 @@ export class MessageBox extends Container {
|
|
|
94
94
|
}
|
|
95
95
|
resize() {
|
|
96
96
|
this.scale.set(globalMinRatio());
|
|
97
|
+
if (getDeviceOrientation().includes("mobile") && this.winLineIndicatorShown && this.winLineIndicator) {
|
|
98
|
+
this.removeChild(this.winLineIndicator);
|
|
99
|
+
this.addChild(this.winLineIndicator);
|
|
100
|
+
}
|
|
97
101
|
}
|
|
98
102
|
showCurrentWinText() {
|
|
99
103
|
this.hideIncentiveText();
|
|
@@ -308,13 +308,11 @@ export class AbstractSymbolsColumn extends Container {
|
|
|
308
308
|
shouldPlaySpecialRollStopSound() {
|
|
309
309
|
for (let i = 0; i <= RainMan.config.numberOfColumns; i++) {
|
|
310
310
|
const currentColumn = this.columnsContainer.getColumnAtPosition(i);
|
|
311
|
-
|
|
311
|
+
if (currentColumn !== this)
|
|
312
|
+
continue;
|
|
313
|
+
return !!currentColumn.symbols
|
|
312
314
|
.slice(0, RainMan.config.numberOfRows)
|
|
313
315
|
.find((symbol) => symbol.id === this.bonusSymbol);
|
|
314
|
-
if (hasBonus && currentColumn === this)
|
|
315
|
-
return true;
|
|
316
|
-
if (!hasBonus)
|
|
317
|
-
return false;
|
|
318
316
|
}
|
|
319
317
|
return false;
|
|
320
318
|
}
|
|
@@ -15,8 +15,28 @@ export interface InitDataInterface {
|
|
|
15
15
|
transformations_types: Array<number>;
|
|
16
16
|
paytable: PayTableInterface;
|
|
17
17
|
extra_data: InitExtraData;
|
|
18
|
+
jackpot_wins?: JackpotWins;
|
|
18
19
|
}
|
|
20
|
+
export type JackpotType = "jackpot-mini" | "jackpot-minor" | "jackpot-major" | "jackpot-grand";
|
|
21
|
+
export type JackpotWins = {
|
|
22
|
+
"jackpot-grand": {
|
|
23
|
+
max: number;
|
|
24
|
+
};
|
|
25
|
+
"jackpot-major": {
|
|
26
|
+
max: number;
|
|
27
|
+
min: number;
|
|
28
|
+
};
|
|
29
|
+
"jackpot-minor": {
|
|
30
|
+
max: number;
|
|
31
|
+
min: number;
|
|
32
|
+
};
|
|
33
|
+
"jackpot-mini": {
|
|
34
|
+
max: number;
|
|
35
|
+
min: number;
|
|
36
|
+
};
|
|
37
|
+
};
|
|
19
38
|
export interface InitExtraData {
|
|
39
|
+
jackpotWins?: JackpotWins;
|
|
20
40
|
}
|
|
21
41
|
type FixedQuantityValue = Record<string, {
|
|
22
42
|
value: number | number[];
|
|
@@ -59,6 +59,7 @@ export declare abstract class AbstractController<T> {
|
|
|
59
59
|
private setRefreshButtonBasedOnPhase;
|
|
60
60
|
private setMessageBoxBasedOnPhase;
|
|
61
61
|
protected getReelIndexesToShowMysteryFx(spinLogic: SpinLogic): number[];
|
|
62
|
+
protected showSuperBonusWin(removeBonusWin: Promise<void>): void;
|
|
62
63
|
protected handleSpinLogic(): void;
|
|
63
64
|
protected throttledSpin(): void;
|
|
64
65
|
private getBoughtNumberOfFreeSpins;
|
|
@@ -46,6 +46,7 @@ export class AbstractController {
|
|
|
46
46
|
this.uiController = new UiController(this.config);
|
|
47
47
|
this.componentRegistry = RainMan.componentRegistry;
|
|
48
48
|
this.setupSpaceOrEnterListener();
|
|
49
|
+
RainMan.settingsStore.showSuperBonusWin = this.showSuperBonusWin.bind(this);
|
|
49
50
|
}
|
|
50
51
|
init() {
|
|
51
52
|
const initData = this.connection.initData();
|
|
@@ -259,6 +260,17 @@ export class AbstractController {
|
|
|
259
260
|
}
|
|
260
261
|
return reelsIndexesWithScatter;
|
|
261
262
|
}
|
|
263
|
+
showSuperBonusWin(removeBonusWin) {
|
|
264
|
+
this.changeGamePhase(gamePhases.BIG_WIN_INVOKED);
|
|
265
|
+
const winAmount = RainMan.settingsStore.cumulativeWinAmount > 0
|
|
266
|
+
? RainMan.settingsStore.cumulativeWinAmount
|
|
267
|
+
: this.uiController.recentWin;
|
|
268
|
+
this.countWinBigWin(winAmount).then(async () => {
|
|
269
|
+
await removeBonusWin;
|
|
270
|
+
this.changeGamePhase(gamePhases.IDLE);
|
|
271
|
+
});
|
|
272
|
+
RainMan.settingsStore.resetCumulativeWinAmount();
|
|
273
|
+
}
|
|
262
274
|
handleSpinLogic() {
|
|
263
275
|
if (this.mainContainer.freeSpinPlate) {
|
|
264
276
|
if (this.mainContainer.freeSpinPlate.shownAt === null ||
|
|
@@ -28,6 +28,7 @@ export declare class SettingsStore {
|
|
|
28
28
|
HiResolutionFlag: boolean;
|
|
29
29
|
batterySaverFlag: boolean;
|
|
30
30
|
containersWithSpines: (ResumableContainer | SpineWithResumableContainer | SpriteWithResumableContainer)[];
|
|
31
|
+
cumulativeWinAmount: number;
|
|
31
32
|
progress: number;
|
|
32
33
|
singleWinExceeds: number;
|
|
33
34
|
balancedIncreased: number;
|
|
@@ -41,6 +42,7 @@ export declare class SettingsStore {
|
|
|
41
42
|
popupPaytableRepositionCallback?: () => void;
|
|
42
43
|
updateVolumeButtonTexture?: () => void;
|
|
43
44
|
handleModalInvocation?: (layerId: string) => void;
|
|
45
|
+
showSuperBonusWin?: (callback: Promise<void>) => void;
|
|
44
46
|
private readonly initialAutoplaySettingsState;
|
|
45
47
|
private modalsAvailable;
|
|
46
48
|
private paytableMap;
|
|
@@ -48,6 +50,8 @@ export declare class SettingsStore {
|
|
|
48
50
|
updateBetText(newText: string): void;
|
|
49
51
|
get indexOfSpeedLevel(): number;
|
|
50
52
|
get isFreeSpinsPlayEnabled(): boolean;
|
|
53
|
+
addCumulativeWinAmount(amount: number): void;
|
|
54
|
+
resetCumulativeWinAmount(): void;
|
|
51
55
|
updateBet(newBet: number): void;
|
|
52
56
|
setBatteryFlag(flag: boolean): void;
|
|
53
57
|
refreshBatterySaver(): void;
|
|
@@ -65,6 +69,7 @@ export declare class SettingsStore {
|
|
|
65
69
|
setBalancedDecreased(newValue: number): void;
|
|
66
70
|
getMinimumPaytableValue(multipliers: RangeQuantityValue[keyof RangeQuantityValue]): number;
|
|
67
71
|
getMaximumPaytableValue(multipliers: RangeQuantityValue[keyof RangeQuantityValue]): number;
|
|
72
|
+
forceSuperBigWin(removeBonusWin: Promise<void>): void;
|
|
68
73
|
setDataForSymbolPaytablePopup(symbolId: SymbolId, repositionCallback: () => void): void;
|
|
69
74
|
resetDataForSymbolPaytablePopup(): void;
|
|
70
75
|
setUpdateVolumeButtonTexture(fn: () => void): void;
|
|
@@ -34,6 +34,7 @@ export class SettingsStore {
|
|
|
34
34
|
HiResolutionFlag = getFromLocalStorage(LOCAL_STORAGE.hiResolution, true);
|
|
35
35
|
batterySaverFlag = getFromLocalStorage(LOCAL_STORAGE.batterySaver, false);
|
|
36
36
|
containersWithSpines = [];
|
|
37
|
+
cumulativeWinAmount = 0;
|
|
37
38
|
progress = 0;
|
|
38
39
|
singleWinExceeds = 0;
|
|
39
40
|
balancedIncreased = 0;
|
|
@@ -47,6 +48,7 @@ export class SettingsStore {
|
|
|
47
48
|
popupPaytableRepositionCallback;
|
|
48
49
|
updateVolumeButtonTexture;
|
|
49
50
|
handleModalInvocation;
|
|
51
|
+
showSuperBonusWin;
|
|
50
52
|
initialAutoplaySettingsState = {
|
|
51
53
|
infinitySpinsEnabled: false,
|
|
52
54
|
onAnyWin: false,
|
|
@@ -105,6 +107,12 @@ export class SettingsStore {
|
|
|
105
107
|
get isFreeSpinsPlayEnabled() {
|
|
106
108
|
return this.howManyFreeSpinsLeft > 0 || this.isLastFreeSpin;
|
|
107
109
|
}
|
|
110
|
+
addCumulativeWinAmount(amount) {
|
|
111
|
+
this.cumulativeWinAmount = this.cumulativeWinAmount + amount;
|
|
112
|
+
}
|
|
113
|
+
resetCumulativeWinAmount() {
|
|
114
|
+
this.cumulativeWinAmount = 0;
|
|
115
|
+
}
|
|
108
116
|
updateBet(newBet) {
|
|
109
117
|
this.bet = newBet;
|
|
110
118
|
}
|
|
@@ -205,6 +213,9 @@ export class SettingsStore {
|
|
|
205
213
|
return last(multipliers) || 0;
|
|
206
214
|
return 0;
|
|
207
215
|
}
|
|
216
|
+
forceSuperBigWin(removeBonusWin) {
|
|
217
|
+
this.showSuperBonusWin?.(removeBonusWin);
|
|
218
|
+
}
|
|
208
219
|
setDataForSymbolPaytablePopup(symbolId, repositionCallback) {
|
|
209
220
|
this.popupPaytableRepositionCallback = repositionCallback;
|
|
210
221
|
this.popupPaytableRepositionCallback();
|
|
@@ -60,7 +60,7 @@ export const setupFullscreenForIOS = () => {
|
|
|
60
60
|
});
|
|
61
61
|
};
|
|
62
62
|
export const disableMagnifyingGlassOnIOS = () => {
|
|
63
|
-
document.
|
|
63
|
+
document.querySelector("canvas")?.addEventListener("touchend", (e) => e.preventDefault(), { passive: false });
|
|
64
64
|
};
|
|
65
65
|
export const resizeCanvas = () => {
|
|
66
66
|
const resize = () => {
|
package/package.json
CHANGED
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pixi-rainman-game-engine",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.21",
|
|
4
4
|
"description": "This repository contains all of the mechanics that used in rainman games.",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
8
8
|
"scripts": {
|
|
9
|
-
"copyCss": "copyfiles -u 1 \"src/**/*.css\" dist/",
|
|
9
|
+
"copyCss": "yarn build:tailwind && copyfiles -u 1 \"src/**/*.css\" dist/",
|
|
10
|
+
"build:tailwind": "tailwindcss -i ./src/SettingsUI/index.css -o ./src/SettingsUI/packedStyles.css",
|
|
10
11
|
"build": "rimraf dist/ && tsc && yarn copyCss",
|
|
11
12
|
"dev:build": "tsc-watch --onSuccess \"yarn copyCss\"",
|
|
12
|
-
"dev:link": "npm link && cd test-environment && npm link pixi-rainman-game-engine",
|
|
13
|
-
"dev:server": "cd test-environment && yarn dev",
|
|
14
13
|
"lint": "eslint src/** --fix",
|
|
15
14
|
"prepublishOnly": "husky && yarn build",
|
|
16
15
|
"prepare": "husky"
|
|
@@ -25,6 +24,7 @@
|
|
|
25
24
|
"@pixi/sound": "^5.2.2",
|
|
26
25
|
"@tweenjs/tween.js": "18.6.4",
|
|
27
26
|
"adaptive-scale": "^1.0.0",
|
|
27
|
+
"clsx": "^2.1.1",
|
|
28
28
|
"i18next": "^23.10.1",
|
|
29
29
|
"lodash": "^4.17.21",
|
|
30
30
|
"mobx": "^6.12.0",
|
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
"react-custom-scroll": "^5.0.0",
|
|
37
37
|
"react-dom": "^18.2.0",
|
|
38
38
|
"stats.js": "^0.17.0",
|
|
39
|
+
"tailwind-merge": "^2.3.0",
|
|
39
40
|
"ts-money": "^0.4.8",
|
|
40
41
|
"zod": "^3.22.4"
|
|
41
42
|
},
|
|
@@ -48,6 +49,7 @@
|
|
|
48
49
|
"@types/stats.js": "^0.17.3",
|
|
49
50
|
"@typescript-eslint/eslint-plugin": "^7.0.2",
|
|
50
51
|
"@typescript-eslint/parser": "^7.0.2",
|
|
52
|
+
"autoprefixer": "^10.4.19",
|
|
51
53
|
"copyfiles": "^2.4.1",
|
|
52
54
|
"eslint": "^8.57.0",
|
|
53
55
|
"eslint-config-prettier": "^9.1.0",
|
|
@@ -55,9 +57,12 @@
|
|
|
55
57
|
"eslint-plugin-sort-class-members": "^1.20.0",
|
|
56
58
|
"eslint-prettier-config": "^1.0.1",
|
|
57
59
|
"husky": "^9.0.11",
|
|
60
|
+
"postcss": "^8.4.38",
|
|
58
61
|
"prettier": "^3.2.5",
|
|
62
|
+
"prettier-plugin-tailwindcss": "^0.6.1",
|
|
59
63
|
"pretty-quick": "^4.0.0",
|
|
60
64
|
"rimraf": "^5.0.5",
|
|
65
|
+
"tailwindcss": "^3.4.4",
|
|
61
66
|
"tsc": "^2.0.4",
|
|
62
67
|
"tsc-watch": "^6.0.4",
|
|
63
68
|
"typescript": "^5.3.3"
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
.settings__title {
|
|
2
|
-
display: flex;
|
|
3
|
-
flex-direction: row;
|
|
4
|
-
justify-content: center;
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
.settings {
|
|
8
|
-
display: flex;
|
|
9
|
-
flex-direction: column;
|
|
10
|
-
height: 90%;
|
|
11
|
-
align-items: center;
|
|
12
|
-
width: 90%;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
.settings__title h2 {
|
|
16
|
-
color: #ec5e27;
|
|
17
|
-
margin: 0px;
|
|
18
|
-
text-decoration: underline;
|
|
19
|
-
text-transform: uppercase;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
.settings__column {
|
|
23
|
-
display: flex;
|
|
24
|
-
flex-direction: row;
|
|
25
|
-
overflow: auto;
|
|
26
|
-
align-items: center;
|
|
27
|
-
height: 100%;
|
|
28
|
-
width: 100%;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
@media only screen and (max-width: 900px) {
|
|
32
|
-
.settings__column {
|
|
33
|
-
flex-direction: column-reverse;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
@media only screen and (max-width: 900px) {
|
|
38
|
-
.bet-desktop__container {
|
|
39
|
-
display: none;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
@@ -1,267 +0,0 @@
|
|
|
1
|
-
.autoplay-settings {
|
|
2
|
-
display: flex;
|
|
3
|
-
flex-direction: column;
|
|
4
|
-
height: 90%;
|
|
5
|
-
align-items: center;
|
|
6
|
-
width: 70%;
|
|
7
|
-
max-width: 800px;
|
|
8
|
-
justify-content: space-between;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
.autoplay-settings__title {
|
|
12
|
-
display: flex;
|
|
13
|
-
flex-direction: row;
|
|
14
|
-
justify-content: center;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
.autoplay-settings__exit {
|
|
18
|
-
font-size: 30px;
|
|
19
|
-
color: white;
|
|
20
|
-
position: absolute;
|
|
21
|
-
right: 30px;
|
|
22
|
-
top: 15px;
|
|
23
|
-
background-color: #00000000;
|
|
24
|
-
border-style: none;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
.autoplay-settings__title h2 {
|
|
28
|
-
color: #ec5e27;
|
|
29
|
-
margin: 0px;
|
|
30
|
-
text-decoration: underline;
|
|
31
|
-
text-transform: uppercase;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
.autoplay-settings__sliders {
|
|
35
|
-
width: 100%;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
.autoplay-settings__switch {
|
|
39
|
-
width: 300px;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
.autoplay-settings__column {
|
|
43
|
-
display: flex;
|
|
44
|
-
flex-direction: row;
|
|
45
|
-
overflow: auto;
|
|
46
|
-
align-items: center;
|
|
47
|
-
height: 100%;
|
|
48
|
-
width: 100%;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
.autoplay-settings__switches {
|
|
52
|
-
display: flex;
|
|
53
|
-
flex-direction: row;
|
|
54
|
-
justify-content: space-between;
|
|
55
|
-
align-items: center;
|
|
56
|
-
width: 100%;
|
|
57
|
-
margin: 10px 0px;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
.autoplay-settings__stop-limits {
|
|
61
|
-
display: flex;
|
|
62
|
-
flex-direction: row;
|
|
63
|
-
width: 100%;
|
|
64
|
-
height: 50px;
|
|
65
|
-
justify-content: center;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
.autoplay-settings__limit {
|
|
69
|
-
width: 40px;
|
|
70
|
-
border: solid 2px white;
|
|
71
|
-
display: flex;
|
|
72
|
-
align-items: center;
|
|
73
|
-
justify-content: center;
|
|
74
|
-
font-size: 20px;
|
|
75
|
-
font-weight: bolder;
|
|
76
|
-
margin: 0px 5px;
|
|
77
|
-
color: white;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
.autoplay-settings__limit:hover {
|
|
81
|
-
background-color: #fdf42525;
|
|
82
|
-
border: 2px solid #fdf425;
|
|
83
|
-
color: #fdf425;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
.autoplay-settings__limit--active {
|
|
87
|
-
background-color: #fdf42550;
|
|
88
|
-
border: 2px solid #fdf425;
|
|
89
|
-
color: #fdf425;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
.autoplay-settings__limit--infinity {
|
|
93
|
-
border: 2px solid #5a5a5aad;
|
|
94
|
-
color: #5a5a5aad;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
.left {
|
|
98
|
-
border-radius: 34px 0px 0px 34px;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
.right {
|
|
102
|
-
border-radius: 0px 34px 34px 0px;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
.middle {
|
|
106
|
-
width: 60px;
|
|
107
|
-
border-radius: 0px 0px 0px 0px;
|
|
108
|
-
background-color: #00000000;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
.circle {
|
|
112
|
-
border-radius: 34px;
|
|
113
|
-
font-size: 40px;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
.autoplay-settings__limit.circle p {
|
|
117
|
-
position: relative;
|
|
118
|
-
top: -4px;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
.autoplay-settings__limit.left p {
|
|
122
|
-
position: relative;
|
|
123
|
-
top: -2px;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
.autoplay-settings__limit.right p {
|
|
127
|
-
position: relative;
|
|
128
|
-
top: -2px;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
.autoplay-settings__confirmation {
|
|
132
|
-
display: flex;
|
|
133
|
-
flex-direction: row;
|
|
134
|
-
justify-content: center;
|
|
135
|
-
align-items: center;
|
|
136
|
-
width: 100%;
|
|
137
|
-
margin-top: 20px;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
.autoplay-settings__confirmation-button {
|
|
141
|
-
margin: 10px 0px 10px 10px;
|
|
142
|
-
width: 100px;
|
|
143
|
-
height: 40px;
|
|
144
|
-
border: solid white 2px;
|
|
145
|
-
background-color: black;
|
|
146
|
-
border-radius: 34px;
|
|
147
|
-
font-size: large;
|
|
148
|
-
font-weight: bold;
|
|
149
|
-
color: white;
|
|
150
|
-
display: flex;
|
|
151
|
-
justify-content: center;
|
|
152
|
-
align-items: center;
|
|
153
|
-
margin: 0px 10px;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
.autoplay-settings__confirmation-button:hover {
|
|
157
|
-
background-color: #fdf42550;
|
|
158
|
-
border: 2px solid #fdf425;
|
|
159
|
-
color: #fdf425;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
@media only screen and (max-width: 900px) {
|
|
163
|
-
.autoplay-settings {
|
|
164
|
-
width: 90%;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
.autoplay-settings__column {
|
|
168
|
-
flex-direction: column-reverse;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
.autoplay-settings__switches {
|
|
172
|
-
width: 100%;
|
|
173
|
-
flex-direction: column;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
.autoplay-settings__switch {
|
|
177
|
-
width: 250px;
|
|
178
|
-
flex-direction: column;
|
|
179
|
-
margin: 5px 0px;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
.left {
|
|
183
|
-
width: 40px;
|
|
184
|
-
border-radius: 34px 0px 0px 34px;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
.right {
|
|
188
|
-
width: 40px;
|
|
189
|
-
border-radius: 0px 34px 34px 0px;
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
.middle {
|
|
193
|
-
width: 70px;
|
|
194
|
-
font-size: 12px;
|
|
195
|
-
border-radius: 0px 0px 0px 0px;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
.circle {
|
|
199
|
-
border-radius: 34px;
|
|
200
|
-
font-size: 40px;
|
|
201
|
-
width: 30px;
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
.autoplay-settings__stop-limits {
|
|
205
|
-
height: 35px;
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
.autoplay-settings__limit.circle p {
|
|
209
|
-
position: relative;
|
|
210
|
-
top: -4px;
|
|
211
|
-
font-size: 20px;
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
.autoplay-settings__limit.left p {
|
|
215
|
-
position: relative;
|
|
216
|
-
top: -2px;
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
.autoplay-settings__limit.right p {
|
|
220
|
-
position: relative;
|
|
221
|
-
top: -2px;
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
.autoplay-settings__confirmation {
|
|
225
|
-
display: flex;
|
|
226
|
-
flex-direction: row;
|
|
227
|
-
justify-content: center;
|
|
228
|
-
align-items: center;
|
|
229
|
-
width: 100%;
|
|
230
|
-
margin-top: 0px;
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
.left {
|
|
234
|
-
border-radius: 34px 0px 0px 34px;
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
.right {
|
|
238
|
-
border-radius: 0px 34px 34px 0px;
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
.middle {
|
|
242
|
-
width: 60px;
|
|
243
|
-
border-radius: 0px 0px 0px 0px;
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
.circle {
|
|
247
|
-
border-radius: 34px;
|
|
248
|
-
font-size: 40px;
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
.autoplay-settings__limit.circle p {
|
|
252
|
-
top: -2px;
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
.autoplay-settings__limit.left p {
|
|
256
|
-
top: -2px;
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
.autoplay-settings__limit.right p {
|
|
260
|
-
top: -2px;
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
.autoplay-settings__exit {
|
|
264
|
-
right: -10px;
|
|
265
|
-
top: 10px;
|
|
266
|
-
}
|
|
267
|
-
}
|