update to pc

This commit is contained in:
silas
2018-07-02 18:47:21 +02:00
parent f4ce1d54ee
commit ba579e3bdf
15 changed files with 201 additions and 74 deletions

View File

@@ -0,0 +1,3 @@
<div>
<div data-translation="game-ended"></div>
</div>

View File

@@ -38,13 +38,23 @@ export class WordRotatorDb extends MyDb {
async loadNextLevel(rendererTypes) {
const levels = await this.loadMany("difficulty", IDBKeyRange.lowerBound(0), WordRotatorDb.OBJECT_STORE.LEVEL);
let wrongLevels = [];
let newLevels = [];
let difficulty = -1;
for (let i = 0, n = levels.length; i < n; i++) {
if (!levels[i]["deleted"] && !levels[i]["played"] && rendererTypes.indexOf(levels[i]["rendererType"]) !== -1) {
if ((difficulty < 0 || difficulty === levels[i]["difficulty"]) && !levels[i]["deleted"] && !levels[i]["played"] && rendererTypes.indexOf(levels[i]["rendererType"]) !== -1) {
newLevels.push(levels[i]);
difficulty = levels[i]["difficulty"];
}
else if (levels[i]["difficulty"] !== 0 && !levels[i]["deleted"] && !levels[i]["played"] ) {
wrongLevels.push(levels[i]);
}
}
console.log("levels count:", newLevels.length);
console.log("new levels:", newLevels);
console.log("wrong levels:", wrongLevels);
if (newLevels.length === 0) {
return null;
}
@@ -52,8 +62,7 @@ export class WordRotatorDb extends MyDb {
return newLevels[Math.round(Math.random() * newLevels.length) % newLevels.length];
}
async saveLevelPlayed(levelId)
{
async saveLevelPlayed(levelId) {
const level = await this.loadLevel(levelId);
level.played = true;
return await this.saveObj(level, WordRotatorDb.OBJECT_STORE.LEVEL);

View File

@@ -0,0 +1,7 @@
import {AbstractSite} from "../../../../../js/lib/pwa-lib";
export class EndSite extends AbstractSite{
constructor(siteManager) {
super(siteManager, "html/application/end.html");
}
}

View File

@@ -6,16 +6,18 @@ import {SimpleLevel} from "../wordrotator/Level/SimpleLevel";
import {LevelHelper} from "../wordrotator/Level/LevelHelper";
import {WordRotatorDb} from "../WordRotatorDb";
import {ScaleHelper} from "../../../../../js/lib/pwa-assets";
import {EndSite} from "./EndSite";
export class LevelSite extends AbstractSite {
constructor(siteManager) {
super(siteManager, "html/application/level.html", "level");
super(siteManager, "html/application/level.html");
}
createActionBarMenu(menu) {
menu = super.createActionBarMenu(menu);
this.levelCounterAction = new MenuAction("", function(){}, Menu.SHOW_ALWAYS, 0);
this.levelCounterAction = new MenuAction("", function () {
}, Menu.SHOW_ALWAYS, 0);
this.levelCounterAction.setShouldTranslate(false);
menu.addAction(this.levelCounterAction);
@@ -23,10 +25,7 @@ export class LevelSite extends AbstractSite {
}
onConstruct(args) {
this.setTitle("Level");
this.levelCounter = Helper.nonNull(localStorage.getItem("levelCounter"), 1);
return super.onConstruct(args);
}
@@ -47,7 +46,7 @@ export class LevelSite extends AbstractSite {
let self = this;
let continueButton = this.findBy("#continue-button");
continueButton.addEventListener("click", ()=> {
continueButton.addEventListener("click", () => {
self.nextLevel();
});
@@ -67,7 +66,13 @@ export class LevelSite extends AbstractSite {
this._siteContent.classList.remove('won');
const db = WordRotatorDb.getInstance();
const nextLevelJson = await db.loadNextLevel([20]);
// const nextLevelJson = await db.loadNextLevel([20,40,60]);
const nextLevelJson = await db.loadNextLevel([40]);
if (nextLevelJson === null)
{
this.startSite(EndSite);
return;
}
const level = LevelHelper.inflateLevel(nextLevelJson, this.templateContainer);
const self = this;
@@ -81,7 +86,7 @@ export class LevelSite extends AbstractSite {
let levelSegment = this.findBy("#level");
levelSegment.removeAllChildren().appendChild(level.getRootSegment().getElement());
let scaleHelper = new ScaleHelper();
scaleHelper.scaleToFull(levelSegment, levelSegment.parentElement, false, false, 2,level.words[0].length * 2);
scaleHelper.scaleToFull(levelSegment, levelSegment.parentElement, false, false, 2, level.words[0].length * 2);
this.level = level;
}
@@ -90,15 +95,21 @@ export class LevelSite extends AbstractSite {
}
}
async levelWon(level){
const db = WordRotatorDb.getInstance();
// db.saveLevelPlayed(level);
async levelWon(level) {
try {
const db = WordRotatorDb.getInstance();
const savePromise = db.saveLevelPlayed(level.getId());
this.levelCounter++;
localStorage.setItem("levelCounter", this.levelCounter);
this.levelCounterAction.setTitle(this.levelCounter);
this.levelCounterAction.redraw();
this.levelCounter++;
localStorage.setItem("levelCounter", this.levelCounter);
this.levelCounterAction.setTitle(this.levelCounter);
this.levelCounterAction.redraw();
this._siteContent.classList.add('won');
this._siteContent.classList.add('won');
await savePromise;
}
catch (e) {
console.error(e);
}
}
}

View File

@@ -1,3 +1,7 @@
import {SimpleLevel} from "./SimpleLevel";
import {RowLevel8} from "./RowLevel8";
import {RowLevel10} from "./RowLevel10";
export class LevelHelper {
static setLevelType(typeId, level) {
LevelHelper.types[typeId] = level;
@@ -23,4 +27,8 @@ export class LevelHelper {
}
}
LevelHelper.types = {};
LevelHelper.types = {
20: SimpleLevel,
40: RowLevel8,
60: RowLevel10,
};

View File

@@ -0,0 +1,7 @@
import {RowLevel} from "./RowLevel";
export class RowLevel10 extends RowLevel{
constructor(container) {
super(container, 10);
}
}

View File

@@ -0,0 +1,7 @@
import {RowLevel} from "./RowLevel";
export class RowLevel8 extends RowLevel{
constructor(container) {
super(container, 8);
}
}

View File

@@ -1,11 +1,7 @@
import {RowLevel} from "./RowLevel";
import {LevelHelper} from "./LevelHelper";
export class SimpleLevel extends RowLevel{
constructor(container) {
super(container, 6);
}
}
LevelHelper.setLevelType(20, SimpleLevel);
}

View File

@@ -1,19 +1,21 @@
import {Segment} from "./Segment";
import {Helper} from "../../../../../../js/lib/pwa-lib";
export class LeafSegment extends Segment{
export class LeafSegment extends Segment {
constructor(element, leaf) {
super(element);
this.leaf = 'A';
if (Helper.isNotNull(leaf))
{
if (Helper.isNotNull(leaf)) {
this.setLeaf(leaf);
}
}
setLeaf(leaf)
{
sameAs(otherSegment) {
return (otherSegment instanceof LeafSegment && otherSegment.leaf === this.leaf);
}
setLeaf(leaf) {
this.leaf = leaf;
}

View File

@@ -14,16 +14,28 @@ export class ParentSegment extends Segment {
this.rotation %= 360;
this._updateRotationClass();
this.getLevel().checkHasWon(new Promise((resolve, reject)=>{
this.getLevel().checkHasWon(new Promise((resolve, reject) => {
this.element.addEventListener("animationend", resolve);
}));
// return new DelayPromise(250);
return new Promise(function(resolve) {
return new Promise(function (resolve) {
setTimeout(resolve, 250);
});
}
}
sameAs(otherSegment) {
if (!(otherSegment instanceof ParentSegment) || otherSegment.children.length !== this.children.length) {
return false;
}
for (let i = 0; i < this.children.length; i++) {
if (!this.children[i].sameAs(otherSegment.children[i])) {
return false;
}
}
return true;
}
applyRotations(rotations) {
// debugger;
this.rotation = rotations[0];
@@ -40,7 +52,9 @@ export class ParentSegment extends Segment {
return false;
}
}
return super.isSolved();
return (this.rotation === 0 || (
this.children[0].sameAs(this.children[2]) && this.children[1].sameAs(this.children[3]) && (
this.rotation === 2 || this.children[0].sameAs(this.children[1]))))
}
setChildren(children) {

View File

@@ -7,6 +7,10 @@ export class Segment{
this.parent = null;
}
sameAs(otherSegment){
return false;
}
setParent(parent)
{
this.parent = parent;