display tiles, pips, and mines along with FPS

This commit is contained in:
Gavin McDonald
2018-09-25 22:04:54 -04:00
parent 0fcd1e7639
commit cef5f8d011
3 changed files with 40 additions and 11 deletions

View File

@@ -1,5 +1,8 @@
import {createDomNode} from './utils.js';
const reportTemplate = report => `<div class="report">${ report }</div>`;
const reportsTemplate = reports => reports.reduce((reportsHTML, report) => `${ reportsHTML }${ reportTemplate(report) }`, '');
const DEFAULTS = {
sampleSize: 60,
};
@@ -10,15 +13,26 @@ export default class FPS {
this.settings = Object.assign({}, DEFAULTS, config);
this.framesPerSecond = [];
this.reports = [[]];
this.fps = this.settings.element;
}
frame (now, lastNow) {
this.framesPerSecond.push(1 / ((now - lastNow) / 1000));
if (this.framesPerSecond.length === this.settings.sampleSize) {
this.fps.innerHTML = parseInt(this.framesPerSecond.reduce((acc, fps) => acc + fps, 0) / this.settings.sampleSize);
this.framesPerSecond = [];
calculate () {
return this.reports.map(report => parseInt(report.reduce((acc, val) => acc + val, 0) / this.settings.sampleSize));
}
frame (now, lastNow, reports) {
this.reports[0].push(1 / ((now - lastNow) / 1000));
reports.forEach((report, index) => {
const i = index + 1;
this.reports[i] = this.reports[i] || [];
this.reports[i].push(report);
});
if (this.reports[0].length === this.settings.sampleSize) {
this.fps.innerHTML = reportsTemplate(this.calculate());
this.reports = [[]];
}
}
}

View File

@@ -202,6 +202,8 @@ class Demo {
}
drawTile({x, y, z}, context, scale) {
this.counts[0] += 1;
const key = `${ x },${ z != null ? z : y }`;
this.map[key] = this.map[key] || this.createTile({
@@ -218,11 +220,19 @@ class Demo {
tile = this.gray ? this.fadeToGray(tile, fadeFactor) : tile;
Tessellate.TILES[tile.tileStyle][tile.drawStyle](context, scale, pixelPoint.getX(), pixelPoint.getY(), tile);
Tessellate.Shapes.pips(context, scale, pixelPoint.getX(), pixelPoint.getY(), tile);
if (tile.pips) {
this.counts[1] += tile.pips;
Tessellate.Shapes.pips(context, scale, pixelPoint.getX(), pixelPoint.getY(), tile);
}
}
draw({context, height, width, scale, tilePoints, now, lastNow}) {
this.fps.frame(now, lastNow);
this.counts = [
0, // tiles
0, // pips
0, // mines
];
Tessellate.Shapes.background(context, height, width, {
red: 64,
@@ -249,9 +259,12 @@ class Demo {
});
Tessellate.funky.forEach(this.mines, cell => {
this.counts[2] += 1;
const pixelPoint = this.tessellate.tileToPixel(cell.x, cell.y);
Tessellate.Shapes.mine(context, scale, pixelPoint.getX(), pixelPoint.getY());
});
this.fps.frame(now, lastNow, this.counts);
}
}