rokojori-godot/rokojori-cpp-generator/builds/cpp-creation/Variations.js

77 lines
2.1 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Variations = void 0;
class Variations {
constructor(vds) {
this._indicies = [];
this._lengths = [];
this._items = 1;
this._counter = 0;
this._map = new Map();
this._variationDefinitions = vds;
this._items = 1;
vds.forEach(vd => {
this._indicies.push(0);
let length = -1;
for (let it in vd) {
if (length != -1 || !vd.hasOwnProperty(it)) {
continue;
}
length = vd[it].length;
}
this._lengths.push(length);
this._items *= length;
});
console.log("Found items:", this._items);
this._grabCurrentMap();
}
_grabCurrentMap() {
this._map.clear();
for (let i = 0; i < this._indicies.length; i++) {
this._grabItems(i);
}
}
get hasItems() {
return this._counter <= this._items;
}
get items() {
return this._items;
}
get counter() {
return this._counter;
}
nextItem() {
this._counter++;
this._incrementCounter(0);
this._grabCurrentMap();
// RJLog.log( this._counter, this._indicies, this.currentMap );
}
_incrementCounter(position) {
let value = this._indicies[position];
if (value == (this._lengths[position] - 1)) {
this._indicies[position] = 0;
this._incrementCounter(position + 1);
}
else {
this._indicies[position]++;
}
}
_grabItems(index) {
let counter = this._indicies[index];
let vd = this._variationDefinitions[index];
let map = this._map;
for (let it in vd) {
if (!vd.hasOwnProperty(it)) {
continue;
}
let key = it;
let values = vd[it];
map.set(key, values[counter]);
}
}
get currentMap() {
return this._map;
}
}
exports.Variations = Variations;
//# sourceMappingURL=Variations.js.map