wyrian/js/GameClass.js

198 lines
No EOL
4.5 KiB
JavaScript

// Init Global vars
var FPS = 30;
var Stages = {} ;
var Level = 1 ;
var Layouts = {} ;
var timers = {} ;
var Game = null ;
// -- Init scene prototype
var app = function(opts) {
this.name = "Wyrian - A Tyrian Arcade Game Clone" ;
this.version = '0.2a' ;
// Init uniqId
this.uniqId = 0 ;
// Default settings
var settings = {
libs: {}
} ;
$.extend(true, settings, opts);
this.settings = settings ;
// Set Scene size
this.width = $(document).width() ;
this.height = $(document).height() ;
// Listen for inputs
this.input = new this.Input() ;
// Return object
return this;
} ;
// -- Bind init call
app.prototype.init = function() {
var self = this ;
require({
baseUrl: "js/",
urlArgs: "bust=" + GameVersion
},
// -- Layout to load
self.settings.layers,
// -- All objects are loaded => can run
function() {
$(document).trigger('gameLoaded') ;
}
);
if ( typeof this.settings.init == 'function') {
this.settings.init() ;
}
} ;
// -- A log function
app.prototype.log = function(txt) {
try {
console.log(txt);
} catch(e) {} ;
}
// -- Call all canvas updates if declared as 'running'
app.prototype.loopAnimation = function() {
// -- Search for elements that have to be updated
Game.activeElements = 0 ;
for ( var i in Layouts ) {
var _layout = Layouts[i] ;
if ( _layout && _layout.running ) {
_layout.update() ;
}
}
// -- Get level
Level = Math.floor((Game.score||0)/1000) ;
// -- Create ennemies if needed
var numEnnemies = 0 ;
if ( Layouts.Ennemies ) {
for ( var i in Layouts.Ennemies.els ) {
var _el = Layouts.Ennemies.els[i] ;
if ( ! _el.deleteAfter ) numEnnemies++ ;
}
for ( var i = numEnnemies-1 ; i < Level + 3 ; i++ ) {
Layouts.Ennemies.createRandom() ;
}
}
// -- Init loops counter
Game.loops = Game.loops||0 ;
// -- Init vars
if ( Game.loops == 0 ) {
this.frameCount = 0;
this.fps = 0;
this.maxfps = 1 / (FPS / 1000);
this.lastTime = new Date();
}
// -- Calculate time deltas and find fps value
var nowTime = new Date();
var diffTime = Math.ceil((nowTime.getTime() - this.lastTime.getTime()));
if (diffTime >= 1000) {
this.fps = this.frameCount;
this.frameCount = 0;
this.lastTime = nowTime;
}
this.frameCount++;
// -- Increase loop counter
Game.loops++ ;
// -- Refresh Scores and HUD informations
$('#score span').html(Game.score) ;
$('#activeElements span').html(Game.activeElements) ;
$('#fpsCounter span').html(this.fps) ;
}
// -- Bind Inputs
app.prototype.Input = function() {
this.keyboard = {};
var that = this;
this.mousedown = false;
this.keydown = true;
// this is handling WASD, and arrows keys
function update_keyboard(e, val) {
if(e.keyCode==40 || e.keyCode==83)
that.keyboard['down'] = val;
if(e.keyCode==38 || e.keyCode==87)
that.keyboard['up'] = val;
if(e.keyCode==39 || e.keyCode==68)
that.keyboard['right'] = val;
if(e.keyCode==37 || e.keyCode==65)
that.keyboard['left'] = val;
if(e.keyCode==32) {
that.keyboard['space'] = val;
e.preventDefault() ;
e.stopPropagation() ;
}
if(e.keyCode==17)
that.keyboard['ctrl'] = val;
if(e.keyCode==13)
that.keyboard['enter'] = val;
};
document.ontouchstart = function(event) {
that.mousedown = true;
}
document.ontouchend = function(event) {
that.mousedown = false;
}
document.ontouchmove = function(event) {}
document.onmousedown = function(event) {
that.mousedown = true;
}
document.onmouseup = function(event) {
that.mousedown = false;
}
document.onclick = function(event) {
//that.click(event);
}
/*
document.onmousemove = function(event) {
that.xmouse = event.clientX;
that.ymouse = event.clientY;
}
*/
document.onkeydown = function(e) {
that.keydown = true;
update_keyboard(e, true);
};
document.onkeyup = function(e) {
that.keydown = false;
update_keyboard(e, false);
};
// can be used to avoid key jamming
document.onkeypress = function(e) {
if ( that.keyboard.space ) {
e.preventDefault() ;
e.stopPropagation() ;
}
};
// make sure that the keyboard is rested when
// the user leave the page
window.onblur = function (e) {
that.keyboard = {}
that.keydown = false;
that.mousedown = false;
}
}