slotify.js
Version:
A video slot game session framework for JavaScript
202 lines (201 loc) • 7.69 kB
JavaScript
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ReelGameSessionConfig = void 0;
var GameSessionConfig_1 = require("../../GameSessionConfig");
var ReelGameSessionConfig = /** @class */ (function (_super) {
__extends(ReelGameSessionConfig, _super);
function ReelGameSessionConfig(reelsNumber, reelsItemsNumber) {
if (reelsNumber === void 0) { reelsNumber = 5; }
if (reelsItemsNumber === void 0) { reelsItemsNumber = 3; }
var _this = _super.call(this) || this;
_this._availableItems = [
"A",
"K",
"Q",
"J",
"10",
"9",
"W",
"S",
];
_this._wildItemId = "W";
_this._scatters = [
["S", 3],
];
_this._wildsMultipliers = {};
var j = 2;
for (var i = 1; i < reelsNumber; i++) {
_this._wildsMultipliers[i] = j;
j += 2;
}
_this._reelsNumber = reelsNumber;
_this._reelsItemsNumber = reelsItemsNumber;
_this._linesDirections = ReelGameSessionConfig.createLinesDirections(_this._reelsNumber, _this._reelsItemsNumber);
_this._reelsItemsSequences = ReelGameSessionConfig.createReelsItemsSequences(_this._reelsNumber, _this._availableItems);
_this._paytable = ReelGameSessionConfig.createPaytable(_this.availableBets, _this._availableItems, _this._reelsNumber, _this._wildItemId);
return _this;
}
ReelGameSessionConfig.createLinesDirections = function (reelsNumber, reelsItemsNumber) {
var r = {};
for (var i = 0; i < reelsItemsNumber; i++) {
for (var j = 0; j < reelsNumber; j++) {
if (!r[i]) {
r[i] = [];
}
r[i].push(i);
}
}
return r;
};
ReelGameSessionConfig.createReelsItemsSequences = function (reelsNumber, availableItems) {
var r = [];
for (var i = 0; i < reelsNumber; i++) {
r[i] = availableItems.reduce(function (ob) { return __spreadArrays(ob, availableItems); }, availableItems).sort(function () { return Math.random() - 0.5; });
}
return r;
};
ReelGameSessionConfig.createPaytable = function (availableBets, availableItems, reelsNumber, wildItemId) {
var r = {};
for (var _i = 0, availableBets_1 = availableBets; _i < availableBets_1.length; _i++) {
var bet = availableBets_1[_i];
r[bet] = {};
for (var _a = 0, availableItems_1 = availableItems; _a < availableItems_1.length; _a++) {
var itemId = availableItems_1[_a];
if (itemId !== wildItemId) {
r[bet][itemId] = {};
for (var k = 3; k <= reelsNumber; k++) {
r[bet][itemId][k] = (k - 2) * bet;
}
}
}
}
return r;
};
Object.defineProperty(ReelGameSessionConfig.prototype, "linesDirections", {
get: function () {
return this._linesDirections;
},
set: function (value) {
this._linesDirections = value;
},
enumerable: false,
configurable: true
});
Object.defineProperty(ReelGameSessionConfig.prototype, "reelsItemsSequences", {
get: function () {
return this._reelsItemsSequences;
},
set: function (value) {
this._reelsItemsSequences = value;
},
enumerable: false,
configurable: true
});
Object.defineProperty(ReelGameSessionConfig.prototype, "reelsItemsNumber", {
get: function () {
return this._reelsItemsNumber;
},
set: function (value) {
this._reelsItemsNumber = value;
this._linesDirections = ReelGameSessionConfig.createLinesDirections(this._reelsNumber, this._reelsItemsNumber);
},
enumerable: false,
configurable: true
});
Object.defineProperty(ReelGameSessionConfig.prototype, "reelsNumber", {
get: function () {
return this._reelsNumber;
},
set: function (value) {
this._reelsNumber = value;
this._linesDirections = ReelGameSessionConfig.createLinesDirections(this._reelsNumber, this._reelsItemsNumber);
},
enumerable: false,
configurable: true
});
Object.defineProperty(ReelGameSessionConfig.prototype, "scatters", {
get: function () {
return this._scatters;
},
set: function (value) {
this._scatters = value;
},
enumerable: false,
configurable: true
});
Object.defineProperty(ReelGameSessionConfig.prototype, "wildItemId", {
get: function () {
return this._wildItemId;
},
set: function (value) {
this._wildItemId = value;
},
enumerable: false,
configurable: true
});
Object.defineProperty(ReelGameSessionConfig.prototype, "availableItems", {
get: function () {
return this._availableItems;
},
set: function (value) {
this._availableItems = value;
this._reelsItemsSequences = ReelGameSessionConfig.createReelsItemsSequences(this._reelsNumber, this._availableItems);
this._paytable = ReelGameSessionConfig.createPaytable(this.availableBets, this._availableItems, this._reelsNumber, this._wildItemId);
},
enumerable: false,
configurable: true
});
Object.defineProperty(ReelGameSessionConfig.prototype, "paytable", {
get: function () {
return this._paytable;
},
set: function (value) {
this._paytable = value;
},
enumerable: false,
configurable: true
});
Object.defineProperty(ReelGameSessionConfig.prototype, "wildsMultipliers", {
get: function () {
return this._wildsMultipliers;
},
set: function (value) {
this._wildsMultipliers = value;
},
enumerable: false,
configurable: true
});
ReelGameSessionConfig.prototype.isItemScatter = function (itemId) {
return this._scatters && this._scatters.reduce(function (flag, entry) {
if (!flag && itemId === entry[0]) {
flag = true;
}
return flag;
}, false);
};
ReelGameSessionConfig.prototype.isItemWild = function (itemId) {
return itemId === this._wildItemId;
};
return ReelGameSessionConfig;
}(GameSessionConfig_1.GameSessionConfig));
exports.ReelGameSessionConfig = ReelGameSessionConfig;