|
|
|
function loadImage(url) {
|
|
|
|
var img = new Image();
|
|
|
|
img.src = url;
|
|
|
|
return img;
|
|
|
|
}
|
|
|
|
|
|
|
|
function key_is_pressed(a) {
|
|
|
|
return keysDown.indexOf(a)!=-1;
|
|
|
|
}
|
|
|
|
|
|
|
|
function mouse_button_is_pressed(a) {
|
|
|
|
/*
|
|
|
|
"LEFT"
|
|
|
|
"RIGHT"
|
|
|
|
"MIDDLE"
|
|
|
|
"MOUSE4"
|
|
|
|
"MOUSE5"
|
|
|
|
*/
|
|
|
|
return mouseDown.indexOf(a)!=-1;
|
|
|
|
}
|
|
|
|
|
|
|
|
function instance_create(object) {
|
|
|
|
gameObjs.push(object);
|
|
|
|
}
|
|
|
|
|
|
|
|
function setGameSpeed(fps) {
|
|
|
|
setInterval(onGameUpdate,1000/fps);
|
|
|
|
}
|
|
|
|
|
|
|
|
function resetTransform() {
|
|
|
|
con.setTransform(1,0,0,1,0,0);
|
|
|
|
}
|
|
|
|
|
|
|
|
function transformScale(w,h) {
|
|
|
|
con.scale(w,h);
|
|
|
|
}
|
|
|
|
|
|
|
|
function transformRotate(degrees) {
|
|
|
|
con.rotate(degrees*Math.PI/180);
|
|
|
|
}
|
|
|
|
|
|
|
|
function transformTranslate(x,y) {
|
|
|
|
con.translate(x,y);
|
|
|
|
}
|
|
|
|
|
|
|
|
function getStringWidth(text) {
|
|
|
|
return con.measureText(text).width;
|
|
|
|
}
|
|
|
|
|
|
|
|
function drawSprite(x,y,sprite) {
|
|
|
|
con.drawImage(sprite,x,y);
|
|
|
|
}
|
|
|
|
|
|
|
|
function drawSpriteExt(x,y,sprite,w,h,image_angle) {
|
|
|
|
transformTranslate(x,y);
|
|
|
|
transformRotate(image_angle);
|
|
|
|
//con.globalCompositeOperation = 'multiply';
|
|
|
|
con.drawImage(sprite,-(w*sprite.width)/2,-(h*sprite.height)/2,w*sprite.width,h*sprite.height);
|
|
|
|
/*con.fillStyle = image_blend;
|
|
|
|
con.fillRect(0,0, w*sprite.width, h*sprite.height);
|
|
|
|
con.globalCompositeOperation = 'destination-atop';
|
|
|
|
con.drawImage(sprite,-(w*sprite.width)/2,-(h*sprite.height)/2,w*sprite.width,h*sprite.height);
|
|
|
|
con.globalCompositeOperation = 'normal';*/
|
|
|
|
resetTransform();
|
|
|
|
}
|
|
|
|
|
|
|
|
function drawSpritePart(x,y,sprite,spritex,spritey,spritew,spriteh,w,h,image_angle) {
|
|
|
|
transformTranslate(x,y);
|
|
|
|
transformRotate(image_angle);
|
|
|
|
con.drawImage(sprite,spritex,spritey,spritew,spriteh,-(w*spritew)/2,-(h*spriteh)/2,spritew*w,spriteh*h);
|
|
|
|
resetTransform();
|
|
|
|
}
|
|
|
|
|
|
|
|
function drawText(x,y,text) {
|
|
|
|
con.fillText(text,x,y);
|
|
|
|
}
|
|
|
|
|
|
|
|
function setBackgroundColor(color) {
|
|
|
|
drawSetColor(color);
|
|
|
|
con.fillRect(0,0,canvas.width,canvas.height);
|
|
|
|
}
|
|
|
|
|
|
|
|
function drawSetAlpha(alpha) {
|
|
|
|
con.globalAlpha = alpha;
|
|
|
|
}
|
|
|
|
|
|
|
|
function drawSetFont(font) {
|
|
|
|
//font should be in JS style: "30px Arial"
|
|
|
|
//https://www.w3schools.com/tags/canvas_font.asp
|
|
|
|
con.font = font;
|
|
|
|
}
|
|
|
|
|
|
|
|
function drawSetHAlign(align) {
|
|
|
|
//left,center,right
|
|
|
|
con.textAlign = align;
|
|
|
|
}
|
|
|
|
function drawSetVAlign(align) {
|
|
|
|
//top,bottom,middle,alphabetic,hanging,ideographic
|
|
|
|
con.textBaseline = align;
|
|
|
|
}
|
|
|
|
|
|
|
|
function drawSetColor(color) {
|
|
|
|
con.strokeStyle = color;
|
|
|
|
con.fillStyle = color;
|
|
|
|
}
|
|
|
|
|
|
|
|
function drawLine(x1,y1,x2,y2) {
|
|
|
|
con.moveTo(x1,y1);
|
|
|
|
con.lineTo(x2,y2);
|
|
|
|
con.stroke();
|
|
|
|
}
|
|
|
|
|
|
|
|
function drawRectangle(x1,y1,x2,y2,outline) {
|
|
|
|
con.beginPath();
|
|
|
|
con.rect(x1,y1,x2,y2);
|
|
|
|
if (outline) {
|
|
|
|
con.stroke();
|
|
|
|
} else {
|
|
|
|
con.fill();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function drawCircle(x,y,r,outline) {
|
|
|
|
con.beginPath();
|
|
|
|
con.arc(x,y,r,0,2*Math.PI);
|
|
|
|
if (outline) {
|
|
|
|
con.stroke();
|
|
|
|
} else {
|
|
|
|
con.fill();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function toDataURL(url, callback) {
|
|
|
|
var xhr = new XMLHttpRequest();
|
|
|
|
xhr.onload = function() {
|
|
|
|
var reader = new FileReader();
|
|
|
|
reader.onloadend = function() {
|
|
|
|
callback(reader.result);
|
|
|
|
}
|
|
|
|
reader.readAsDataURL(xhr.response);
|
|
|
|
};
|
|
|
|
xhr.open('GET', url);
|
|
|
|
xhr.responseType = 'blob';
|
|
|
|
xhr.send();
|
|
|
|
}
|