Compare commits

...

2 commits

Author SHA1 Message Date
2a67ab40ee added optional grid 2020-04-05 18:23:11 +02:00
7dd95f262c fixed input 2020-04-05 18:22:37 +02:00
5 changed files with 42 additions and 4 deletions

View file

@ -13,5 +13,8 @@
"enabled": true, "enabled": true,
"deadzone": 0.5, "deadzone": 0.5,
"buffer": true "buffer": true
},
"appearance": {
"grid": "none"
} }
} }

View file

@ -15,5 +15,12 @@
"min": 0, "min": 0,
"max": 1 "max": 1
} }
},
"appearance": {
"grid": [
"grid",
"checkerboard",
"none"
]
} }
} }

View file

@ -13,6 +13,7 @@ const handleAngleMagnitude=(x, y, threshold=0, fn=null, clearBuffer=false) => {
const {angle, magnitude}=toAngleMagnitude(x, y); const {angle, magnitude}=toAngleMagnitude(x, y);
if(magnitude>threshold) { if(magnitude>threshold) {
let inputs=currentInputs;
if(angle>.25 && angle <.75) inputs.right=true; if(angle>.25 && angle <.75) inputs.right=true;
else if(angle>.75 && angle<1.25) inputs.up=true; else if(angle>.75 && angle<1.25) inputs.up=true;
else if(angle>1.25 && angle<1.75) inputs.left=true; else if(angle>1.25 && angle<1.75) inputs.left=true;
@ -69,7 +70,7 @@ const handleJoystick=(() => {
!config.touchscreen.buffer !config.touchscreen.buffer
) )
} }
}); })();
const handleSwipe=(() => { const handleSwipe=(() => {
let center={ let center={
@ -91,7 +92,7 @@ const handleSwipe=(() => {
!config.touchscreen.buffer !config.touchscreen.buffer
) )
} }
}); })();
const handleGamepads={ const handleGamepads={
frame: () => { frame: () => {
@ -111,6 +112,7 @@ const handleGamepads={
const handleEvent=(type, evt) => { const handleEvent=(type, evt) => {
for(let handler of handlers) { for(let handler of handlers) {
console.log(type, handler);
let fn=handler[type]; let fn=handler[type];
if(fn) fn(evt); if(fn) fn(evt);
} }

View file

@ -102,7 +102,7 @@
const rules=levelList[category].rules || {}; const rules=levelList[category].rules || {};
const level=await levels.get(filename); const level=await levels.get(filename);
// create the game and attach the callbacks // create the game and attach the callbacks and config
const snek=currentGame=new SnekGame(level, canvas, rules); const snek=currentGame=new SnekGame(level, canvas, rules);
snek.callback=evt => { snek.callback=evt => {
if(evt=='tick') { if(evt=='tick') {
@ -114,6 +114,7 @@
handleDeath(snek); handleDeath(snek);
} }
}; };
snek.config=config;
// setup the DOM // setup the DOM
nav.classList.add('hidden'); nav.classList.add('hidden');

View file

@ -104,6 +104,7 @@ class SnekGame {
draw() { draw() {
const assets=require('assets'); const assets=require('assets');
const config=this.config;
// clear the canvas, because it's easier than having to deal with everything // clear the canvas, because it's easier than having to deal with everything
this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
@ -123,7 +124,31 @@ class SnekGame {
this.ctx.fillRect(offsetX+cellSize*this.dimensions[0], 0, offsetX, this.canvas.height); this.ctx.fillRect(offsetX+cellSize*this.dimensions[0], 0, offsetX, this.canvas.height);
this.ctx.fillRect(0, offsetY+cellSize*this.dimensions[1], this.canvas.width, offsetY); this.ctx.fillRect(0, offsetY+cellSize*this.dimensions[1], this.canvas.width, offsetY);
// draw our walls // draw a grid/checkerboard if requested
if(config.appearance.grid=='grid') {
this.ctx.strokeStyle='rgba(0, 0, 0, 50%)';
this.ctx.lineCap='square';
this.ctx.lineWidth=1;
this.ctx.beginPath();
for(let x=1; x<this.dimensions[0]; x++) {
this.ctx.moveTo(offsetX+x*cellSize, offsetY);
this.ctx.lineTo(offsetX+x*cellSize, this.canvas.height-offsetY);
}
for(let y=1; y<this.dimensions[1]; y++) {
this.ctx.moveTo(offsetX, offsetY+y*cellSize);
this.ctx.lineTo(this.canvas.width-offsetX, offsetY+y*cellSize);
}
this.ctx.stroke();
} else if(config.appearance.grid=='checkerboard') {
this.ctx.fillStyle='rgba(0, 0, 0, 10%)';
for(let x=0; x<this.dimensions[0]; x++) {
for(let y=(x+1)%2; y<this.dimensions[1]; y+=2) {
this.ctx.fillRect(offsetX+x*cellSize, offsetY+y*cellSize, cellSize, cellSize);
}
}
}
// draw our tiles
const wall=assets.get('wall'); const wall=assets.get('wall');
const hole=assets.get('hole'); const hole=assets.get('hole');
const fire=assets.get('fire'); const fire=assets.get('fire');