update to pc

This commit is contained in:
silas
2018-05-31 15:44:13 +02:00
parent 5cc52cf062
commit d022f183c8
5 changed files with 514 additions and 60 deletions

View File

@@ -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 = {

View File

@@ -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);
}
}
}

View File

@@ -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 = {};

View File

@@ -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);