update to pc
This commit is contained in:
@@ -10,7 +10,7 @@ export class WordRotatorDb extends MyDb {
|
||||
}
|
||||
|
||||
constructor() {
|
||||
super("wordRotator", 2);
|
||||
super("wordRotator", 3);
|
||||
}
|
||||
|
||||
upgrade(db, oldVersion, newVersion, e) {
|
||||
@@ -19,7 +19,11 @@ export class WordRotatorDb extends MyDb {
|
||||
}
|
||||
if (Helper.isNull(oldVersion) || oldVersion < 2 && newVersion >= 2) {
|
||||
let levelObjectStore = e.target.transaction.objectStore(WordRotatorDb.OBJECT_STORE.LEVEL);
|
||||
levelObjectStore.createIndex("played", ["played", "difficulty", "id"], {"unique": false});
|
||||
levelObjectStore.createIndex("played", ["deleted", "played", "difficulty", "id"], {"unique": false});
|
||||
}
|
||||
if (Helper.isNull(oldVersion) || oldVersion < 3 && newVersion >= 3) {
|
||||
let levelObjectStore = e.target.transaction.objectStore(WordRotatorDb.OBJECT_STORE.LEVEL);
|
||||
levelObjectStore.createIndex("difficulty", "difficulty", {"unique": false});
|
||||
}
|
||||
};
|
||||
|
||||
@@ -30,6 +34,23 @@ export class WordRotatorDb extends MyDb {
|
||||
async loadLevel(levelId) {
|
||||
return this.load(levelId, WordRotatorDb.OBJECT_STORE.LEVEL);
|
||||
}
|
||||
|
||||
async loadNextLevel() {
|
||||
const levels = await this.loadMany("difficulty", IDBKeyRange.lowerBound(0), WordRotatorDb.OBJECT_STORE.LEVEL);
|
||||
|
||||
let newLevels = [];
|
||||
for (let i = 0, n = levels.length; i < n; i++) {
|
||||
if (!levels[i].deleted && !levels[i].played) {
|
||||
newLevels.push(levels[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if (newLevels.length === 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return newLevels[Math.round(Math.random() * newLevels.length) % newLevels.length];
|
||||
}
|
||||
}
|
||||
|
||||
WordRotatorDb.OBJECT_STORE = {
|
||||
|
||||
@@ -3,8 +3,10 @@ import {ParentSegment} from "../wordrotator/Segment/ParentSegment";
|
||||
import {LeafSegment} from "../wordrotator/Segment/LeafSegment";
|
||||
import {TemplateContainer} from "../wordrotator/Segment/TemplateContainer";
|
||||
import {SimpleLevel} from "../wordrotator/Level/SimpleLevel";
|
||||
import {LevelHelper} from "../wordrotator/Level/LevelHelper";
|
||||
import {WordRotatorDb} from "../WordRotatorDb";
|
||||
|
||||
export class LevelSite extends AbstractSite{
|
||||
export class LevelSite extends AbstractSite {
|
||||
constructor(siteManager) {
|
||||
super(siteManager, "html/application/level.html", "level");
|
||||
}
|
||||
@@ -29,26 +31,29 @@ export class LevelSite extends AbstractSite{
|
||||
parentSegmentTemplate.remove();
|
||||
rowSegmentTemplate.remove();
|
||||
|
||||
let templateContainer = new TemplateContainer(leafSegmentTemplate, parentSegmentTemplate, rowSegmentTemplate);
|
||||
|
||||
let level = new SimpleLevel(templateContainer);
|
||||
level.setWords([
|
||||
"Dynamo",
|
||||
"Abhang"
|
||||
]);
|
||||
level.setStartRotations([0,90,180]);
|
||||
|
||||
level.getWonPromise().then(()=>{
|
||||
console.log("has won");
|
||||
});
|
||||
|
||||
level.createSegments();
|
||||
level.getRootSegment()._updateElement();
|
||||
this.findBy("#level").appendChild(level.getRootSegment().getElement());
|
||||
this.templateContainer = new TemplateContainer(leafSegmentTemplate, parentSegmentTemplate, rowSegmentTemplate);
|
||||
this.nextLevel();
|
||||
}
|
||||
|
||||
async nextLevel()
|
||||
{
|
||||
async nextLevel() {
|
||||
try {
|
||||
const db = WordRotatorDb.getInstance();
|
||||
const nextLevelJson = await db.loadNextLevel();
|
||||
const level = LevelHelper.inflateLevel(nextLevelJson, this.templateContainer);
|
||||
|
||||
const self = this;
|
||||
level.getWonPromise().then(() => {
|
||||
self.nextLevel();
|
||||
});
|
||||
|
||||
level.createSegments();
|
||||
level.getRootSegment()._updateElement();
|
||||
this.findBy("#level").appendChild(level.getRootSegment().getElement());
|
||||
|
||||
this.level = level;
|
||||
}
|
||||
catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
export class LevelHelper{
|
||||
static setLevelType(typeId, level)
|
||||
{
|
||||
LevelHelper.types[typeId] = level;
|
||||
}
|
||||
|
||||
static getLevelClass(type)
|
||||
{
|
||||
return LevelHelper.types[type];
|
||||
}
|
||||
|
||||
static inflateLevel(jsonLevel, templateContainer)
|
||||
{
|
||||
let level = new (LevelHelper.types[jsonLevel["rendererType"]])(templateContainer);
|
||||
level.setWords(jsonLevel["words"]);
|
||||
level.setStartRotations(jsonLevel["rotations"]);
|
||||
return level;
|
||||
}
|
||||
}
|
||||
|
||||
LevelHelper.types = {};
|
||||
@@ -1,8 +1,11 @@
|
||||
import {RowLevel} from "./RowLevel";
|
||||
import {LevelHelper} from "./LevelHelper";
|
||||
|
||||
export class SimpleLevel extends RowLevel{
|
||||
|
||||
constructor(container) {
|
||||
super(container, 6);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LevelHelper.setLevelType(20, SimpleLevel);
|
||||
Reference in New Issue
Block a user