HTML5 Canvas [199]
tempEnemy.col==tempEnemy2.col && eCtr != eCtr2){
tempEnemy.hit = true;
tempEnemy2.hit = true;
}
}
}
switchGameState(GAME_STATE_EVALUATE_OUTCOME);
}
function gameStateEvaluateOutcome(){
if (player.hit){
player.dead = true;
createExplode(player);
}
for (var eCtr=enemy.length-1;eCtr>=0;eCtr--){
var tempEnemy = enemy[eCtr];
if (tempEnemy.hit){
score += enemyScore;
tempEnemy.dead = true;
createExplode(tempEnemy)
enemy.splice(eCtr,1);
tempEnemy = null;
}
}
switchGameState(GAME_STATE_ANIMATE_EXPLODE);
}
function createExplode(object){
var newExplode = {};
newExplode.currentTile = 0;
newExplode.row = object.row;
newExplode.col = object.com;
newExplode.x = object.x;
newExplode.y = object.y;
newExplode.rotation = 0;
explosions.push(newExplode);
}
function gameStateAnimateExplode(){
for (var eCtr=explosions.length-1;eCtr>=0;eCtr--){
var tempExplosion = explosions[eCtr];
renderPlayField();
tempExplosion.currentTile++;
if (tempExplosion.currentTile == explodeTiles.length){
explosions.splice(eCtr,1);
tempExplode = null;
}
}
if (explosions.length==0){
switchGameState(GAME_STATE_CHECK_FOR_GAME_OVER);
}
}
function gameStateCheckForGameOver() {
if (player.dead){
switchGameState(GAME_STATE_PLAYER_LOSE);
}else if (player.win){
switchGameState(GAME_STATE_PLAYER_WIN)
}else{
switchGameState(GAME_STATE_WAIT_FOR_PLAYER_MOVE);
}
}
function drawPlayField(){
for (rowCtr=0;rowCtr<15;rowCtr++){
for (colCtr=0;colCtr<15;colCtr++) {
var sourceX = Math.floor((playField[rowCtr][colCtr]) % 8) * 32;
var sourceY = Math.floor((playField[rowCtr][colCtr]) /8) *32;
if (playField[rowCtr][colCtr] != roadTile){
context.drawImage(tileSheet, 0, 0,32,32, colCtr*32,
rowCtr*32,32,32);
}
context.drawImage(tileSheet, sourceX, sourceY,32,32,
colCtr*32,rowCtr*32,32,32);
}
}
}
function drawPlayer(){
if (!player.dead){
context.save();
context.setTransform(1,0,0,1,0,0);
context.translate(player.x+16, player.y+16);
var angleInRadians = player.rotation * Math.PI / 180;
context.rotate(angleInRadians);
var sourceX = Math.floor(playerTiles[player.currentTile] % 8) * 32;
var sourceY = Math.floor(playerTiles[player.currentTile] /8) *32;
context.drawImage(tileSheet, sourceX, sourceY,32,32,-16,-16,32,32);
context.restore();
}
}
function drawEnemy(){
for (var eCtr=enemy.length-1;eCtr>=0;eCtr--){
tempEnemy = enemy[eCtr];
if (!tempEnemy.dead){
context.save();
context.setTransform(1,0,0,1,0,0);
context.translate(tempEnemy.x+16, tempEnemy.y+16);
var angleInRadians = tempEnemy.rotation * Math.PI / 180;
context.rotate(angleInRadians);
var sourceX = Math.floor(enemyTiles[tempEnemy.currentTile] % 8) * 32;
var sourceY = Math.floor(enemyTiles[tempEnemy.currentTile] /8) *32;
context.drawImage(tileSheet, sourceX, sourceY,32,32,-16,-16,32,32);
context.restore();
}
}
}
function drawExplosions(){
for (var eCtr=explosions.length-1;eCtr>=0;eCtr--){
tempExplosion = explosions[eCtr];
context.save();
var sourceX = Math.floor(explodeTiles[tempExplosion.currentTile]
% 8) * 32;
var sourceY = Math.floor(explodeTiles[tempExplosion.currentTile] /8) *32;
context.drawImage(tileSheet, sourceX, sourceY,32,32,
tempExplosion.x,tempExplosion.y,32,32);
context.restore();
}
}
function fillBackground() {
// draw background and text
context.fillStyle = '#000000';
context.fillRect(xMin, yMin, xMax, yMax);
}
function setTextStyleTitle() {
context.fillStyle = '#54ebeb';
context.font = '20px _sans';
context.textBaseline = 'top';
}
function renderPlayField() {
fillBackground();
drawPlayField();
drawPlayer();
drawEnemy();
drawExplosions();
}
document.onkeydown = function(e){
e = e?e:window.event;
keyPressList[e.keyCode]=true;
}
document.onkeyup = function(e){
//document.body.onkeyup = function(e){
e = e?e:window.event;
keyPressList[e.keyCode] = false;
};
//*** application start
switchGameState(GAME_STATE_INIT);
const FRAME_RATE = 40;
frameRateCounter = new FrameRateCounter(FRAME_RATE);
//**** application loop