CMain.js 8.8 KB

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