CMain.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. function CMain(oData){
  2. var _bUpdate;
  3. var _iCurResource = 0;
  4. var RESOURCE_TO_LOAD = 0;
  5. var _iState = STATE_LOADING;
  6. var _oData;
  7. var _oPreloader;
  8. var _oMenu;
  9. var _oHelp;
  10. var _oGame;
  11. this.initContainer = function(){
  12. s_oCanvas = document.getElementById("canvas");
  13. s_oStage = new createjs.Stage(s_oCanvas);
  14. s_bMobile = isMobile();
  15. if(s_bMobile === false){
  16. s_oStage.enableMouseOver(20);
  17. $('body').on('contextmenu', '#canvas', function(e){ return false; });
  18. }
  19. createjs.Touch.enable(s_oStage, true);
  20. s_iPrevTime = new Date().getTime();
  21. createjs.Ticker.addEventListener("tick", this._update);
  22. createjs.Ticker.framerate = FPS;
  23. if(navigator.userAgent.match(/Windows Phone/i)){
  24. DISABLE_SOUND_MOBILE = true;
  25. }
  26. s_oSpriteLibrary = new CSpriteLibrary();
  27. //ADD PRELOADER
  28. _oPreloader = new CPreloader();
  29. };
  30. this.preloaderReady = function(){
  31. this._loadImages();
  32. if(DISABLE_SOUND_MOBILE === false || s_bMobile === false){
  33. this._initSounds();
  34. }
  35. _bUpdate = true;
  36. };
  37. this.soundLoaded = function(){
  38. _iCurResource++;
  39. var iPerc = Math.floor(_iCurResource/RESOURCE_TO_LOAD *100);
  40. _oPreloader.refreshLoader(iPerc);
  41. };
  42. this._initSounds = function(){
  43. Howler.mute(!s_bAudioActive);
  44. s_aSoundsInfo = new Array();
  45. s_aSoundsInfo.push({path: './sounds/',filename:'explosion',loop:false,volume:1, ingamename: 'explosion'});
  46. s_aSoundsInfo.push({path: './sounds/',filename:'click',loop:false,volume:1, ingamename: 'click'});
  47. s_aSoundsInfo.push({path: './sounds/',filename:'gameover',loop:false,volume:1, ingamename: 'gameover'});
  48. s_aSoundsInfo.push({path: './sounds/',filename:'fruit_slice_1',loop:false,volume:1, ingamename: 'fruit_slice_1'});
  49. s_aSoundsInfo.push({path: './sounds/',filename:'fruit_slice_2',loop:false,volume:1, ingamename: 'fruit_slice_2'});
  50. s_aSoundsInfo.push({path: './sounds/',filename:'fruit_slice_3',loop:false,volume:1, ingamename: 'fruit_slice_3'});
  51. s_aSoundsInfo.push({path: './sounds/',filename:'bomb_fuse',loop:false,volume:1, ingamename: 'bomb_fuse'});
  52. s_aSoundsInfo.push({path: './sounds/',filename:'boing_fruit',loop:false,volume:1, ingamename: 'boing_fruit'});
  53. s_aSoundsInfo.push({path: './sounds/',filename:'combo',loop:false,volume:1, ingamename: 'combo'});
  54. s_aSoundsInfo.push({path: './sounds/',filename:'soundtrack',loop:true,volume:1, ingamename: 'soundtrack'});
  55. RESOURCE_TO_LOAD += s_aSoundsInfo.length;
  56. s_aSounds = new Array();
  57. for(var i=0; i<s_aSoundsInfo.length; i++){
  58. this.tryToLoadSound(s_aSoundsInfo[i], false);
  59. }
  60. };
  61. this.tryToLoadSound = function(oSoundInfo, bDelay){
  62. setTimeout(function(){
  63. s_aSounds[oSoundInfo.ingamename] = new Howl({
  64. src: [oSoundInfo.path+oSoundInfo.filename+'.mp3'],
  65. autoplay: false,
  66. preload: true,
  67. loop: oSoundInfo.loop,
  68. volume: oSoundInfo.volume,
  69. onload: s_oMain.soundLoaded,
  70. onloaderror: function(szId,szMsg){
  71. for(var i=0; i < s_aSoundsInfo.length; i++){
  72. if ( szId === s_aSounds[s_aSoundsInfo[i].ingamename]._sounds[0]._id){
  73. s_oMain.tryToLoadSound(s_aSoundsInfo[i], true);
  74. break;
  75. }
  76. }
  77. },
  78. onplayerror: function(szId) {
  79. for(var i=0; i < s_aSoundsInfo.length; i++){
  80. if ( szId === s_aSounds[s_aSoundsInfo[i].ingamename]._sounds[0]._id){
  81. s_aSounds[s_aSoundsInfo[i].ingamename].once('unlock', function() {
  82. s_aSounds[s_aSoundsInfo[i].ingamename].play();
  83. if(s_aSoundsInfo[i].ingamename === "soundtrack" && s_oGame !== null){
  84. setVolume("soundtrack",SOUNDTRACK_VOLUME_IN_GAME);
  85. }
  86. });
  87. break;
  88. }
  89. }
  90. }
  91. });
  92. }, (bDelay ? 200 : 0) );
  93. };
  94. this._loadImages = function(){
  95. s_oSpriteLibrary.init( this._onImagesLoaded,this._onAllImagesLoaded, this );
  96. s_oSpriteLibrary.addSprite("but_play","./sprites/but_play.png");
  97. s_oSpriteLibrary.addSprite("but_exit","./sprites/but_exit.png");
  98. s_oSpriteLibrary.addSprite("bg_menu","./sprites/bg_menu.jpg");
  99. s_oSpriteLibrary.addSprite("bg_game","./sprites/bg_game.jpg");
  100. s_oSpriteLibrary.addSprite("gameover_bg","./sprites/gameover_bg.png");
  101. s_oSpriteLibrary.addSprite("audio_icon","./sprites/audio_icon.png");
  102. s_oSpriteLibrary.addSprite("help_bg","./sprites/help_bg.png");
  103. s_oSpriteLibrary.addSprite("hit_area","./sprites/hit_area.png");
  104. s_oSpriteLibrary.addSprite("bomb","./sprites/bomb.png");
  105. s_oSpriteLibrary.addSprite("bomb_ray","./sprites/bomb_ray.png");
  106. s_oSpriteLibrary.addSprite("life","./sprites/life.png");
  107. s_oSpriteLibrary.addSprite("miss","./sprites/miss.png");
  108. s_oSpriteLibrary.addSprite("but_credits","./sprites/but_credits.png");
  109. s_oSpriteLibrary.addSprite("but_fullscreen","./sprites/but_fullscreen.png");
  110. s_oSpriteLibrary.addSprite("logo_ctl","./sprites/logo_ctl.png");
  111. for(var i=0;i<NUM_FRUITS;i++){
  112. s_oSpriteLibrary.addSprite("fruit_"+i,"./sprites/fruit_"+i+".png");
  113. s_oSpriteLibrary.addSprite("stain_"+i,"./sprites/stain_"+i+".png");
  114. }
  115. RESOURCE_TO_LOAD += s_oSpriteLibrary.getNumSprites();
  116. s_oSpriteLibrary.loadSprites();
  117. };
  118. this._onImagesLoaded = function(){
  119. _iCurResource++;
  120. var iPerc = Math.floor(_iCurResource/RESOURCE_TO_LOAD *100);
  121. _oPreloader.refreshLoader(iPerc);
  122. };
  123. this._onAllImagesLoaded = function(){
  124. };
  125. this._onRemovePreloader = function(){
  126. _oPreloader.unload();
  127. s_oSoundTrack = playSound("soundtrack", SOUNDTRACK_VOLUME_IN_GAME,true);
  128. this.gotoMenu();
  129. };
  130. this.gotoMenu = function(){
  131. _oMenu = new CMenu();
  132. _iState = STATE_MENU;
  133. };
  134. this.gotoGame = function(){
  135. _oGame = new CGame(_oData);
  136. _iState = STATE_GAME;
  137. };
  138. this.gotoHelp = function(){
  139. _oHelp = new CHelpPanel();
  140. _iState = STATE_HELP;
  141. };
  142. this.stopUpdate = function(){
  143. _bUpdate = false;
  144. createjs.Ticker.paused = true;
  145. $("#block_game").css("display","block");
  146. if(DISABLE_SOUND_MOBILE === false || s_bMobile === false){
  147. Howler.mute(true);
  148. }
  149. };
  150. this.startUpdate = function(){
  151. s_iPrevTime = new Date().getTime();
  152. _bUpdate = true;
  153. createjs.Ticker.paused = false;
  154. $("#block_game").css("display","none");
  155. if(DISABLE_SOUND_MOBILE === false || s_bMobile === false){
  156. if(s_bAudioActive){
  157. Howler.mute(false);
  158. }
  159. }
  160. };
  161. this._update = function(event){
  162. if(_bUpdate === false){
  163. return;
  164. }
  165. var iCurTime = new Date().getTime();
  166. s_iTimeElaps = iCurTime - s_iPrevTime;
  167. s_iCntTime += s_iTimeElaps;
  168. s_iCntFps++;
  169. s_iPrevTime = iCurTime;
  170. if ( s_iCntTime >= 1000 ){
  171. s_iCurFps = s_iCntFps;
  172. s_iCntTime-=1000;
  173. s_iCntFps = 0;
  174. }
  175. if(_iState === STATE_GAME){
  176. _oGame.update();
  177. }
  178. s_oStage.update(event);
  179. };
  180. s_oMain = this;
  181. _oData = oData;
  182. ENABLE_FULLSCREEN = oData.fullscreen;
  183. ENABLE_CHECK_ORIENTATION = oData.check_orientation;
  184. s_bAudioActive = oData.audio_enable_on_startup;
  185. this.initContainer();
  186. }
  187. var s_bMobile;
  188. var s_bAudioActive = false;
  189. var s_bFullscreen = false;
  190. var s_iCntTime = 0;
  191. var s_iTimeElaps = 0;
  192. var s_iPrevTime = 0;
  193. var s_iCntFps = 0;
  194. var s_iCurFps = 0;
  195. var s_oDrawLayer;
  196. var s_oStage;
  197. var s_oMain;
  198. var s_oCanvas;
  199. var s_oSpriteLibrary;
  200. var s_oSoundTrack = null;
  201. var s_aSounds;
  202. var s_aSoundsInfo;