javascript(clever-dots): Make rendering loop async
Signed-off-by: prescientmoon <git@moonythm.dev>
This commit is contained in:
parent
9bdc46e524
commit
43beb60e21
|
@ -1,40 +1,61 @@
|
|||
function game(){
|
||||
this.size = [500,500];
|
||||
function game() {
|
||||
this.size = [500, 500];
|
||||
|
||||
this.clear = function(){
|
||||
setTimeout(function(){
|
||||
this.clear = function () {
|
||||
var c = document.getElementById("can");
|
||||
var ctx = c.getContext("2d");
|
||||
ctx.fillStyle="#000000";
|
||||
ctx.fillRect(0,0,1000,1000);
|
||||
ctx.fillStyle = "#000000";
|
||||
ctx.fillRect(0, 0, 1000, 1000);
|
||||
//console.log("clearing");
|
||||
},1);
|
||||
}
|
||||
};
|
||||
|
||||
this.draw = function(x,y){
|
||||
setTimeout(function(){
|
||||
this.draw = function (x, y) {
|
||||
var c = document.getElementById("can");
|
||||
var ctx = c.getContext("2d");
|
||||
ctx.fillStyle="#FFFFFF";
|
||||
ctx.fillRect(x,y,1,1);
|
||||
ctx.fillStyle = "#FFFFFF";
|
||||
ctx.fillRect(x, y, 1, 1);
|
||||
//console.log(y+"drawing"+x);
|
||||
},1);
|
||||
//console.log("finished drawing");
|
||||
}
|
||||
};
|
||||
}
|
||||
var a = new game();
|
||||
a.clear();
|
||||
var b = new population(a);
|
||||
b.reset();
|
||||
b.create_population();
|
||||
for (var k = 0;k < 20;k++){
|
||||
a.clear();
|
||||
console.log("thinking");
|
||||
for (var i = 0;i < 500;i++){
|
||||
for (var j = 0;j < b.Population.length;j++){
|
||||
b.think(b.Population[j]);
|
||||
a.draw(b.Population[j].x,b.Population[j].y);
|
||||
}
|
||||
}
|
||||
b.evolve();
|
||||
|
||||
function redraw() {
|
||||
let done = false;
|
||||
let callback = null;
|
||||
requestAnimationFrame(() => {
|
||||
done = true;
|
||||
if (callback !== null) callback();
|
||||
});
|
||||
|
||||
return new Promise((res) => {
|
||||
if (done) res();
|
||||
else callback = () => res();
|
||||
});
|
||||
}
|
||||
|
||||
const iterationsPerFrame = 10;
|
||||
|
||||
async function main() {
|
||||
for (let k = 0; k < 1000; k++) {
|
||||
await redraw();
|
||||
a.clear();
|
||||
console.log(`thinking: ${k}`);
|
||||
for (let i = 0; i < 500; i++) {
|
||||
if (i % iterationsPerFrame === 0) await redraw();
|
||||
for (let j = 0; j < b.Population.length; j++) {
|
||||
b.think(b.Population[j]);
|
||||
a.draw(b.Population[j].x, b.Population[j].y);
|
||||
}
|
||||
}
|
||||
|
||||
b.evolve();
|
||||
}
|
||||
}
|
||||
|
||||
main();
|
||||
|
||||
|
|
Loading…
Reference in a new issue