CMain.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  1. function CMain(oData){
  2. ERROR_MULT = oData.errorMultiplier;
  3. TIME_AVAILABLE = oData.timeAvailable;
  4. SELECTOR_SPEED = oData.selectorSpeed;
  5. POINT_FOR_BALL = oData.point_per_ball;
  6. POINT_FOR_SPECIAL_BALL = oData.point_per_special_ball;
  7. var _bUpdate = false;
  8. var _iCurResource = 0;
  9. var RESOURCE_TO_LOAD = 0;
  10. var _iState = STATE_LOADING;
  11. var _oPreloader;
  12. var _oMenu;
  13. var _oGame;
  14. this.initContainer = function(){
  15. s_oStage = new createjs.Stage("canvas");
  16. s_oStage.preventSelection = false;
  17. createjs.Touch.enable(s_oStage,true);
  18. s_bMobile = isMobile();
  19. if(s_bMobile === false){
  20. s_oStage.enableMouseOver(20);
  21. }
  22. s_iPrevTime = new Date().getTime();
  23. createjs.Ticker.framerate = 30;
  24. createjs.Ticker.addEventListener("tick", this._update);
  25. if(navigator.userAgent.match(/Windows Phone/i)){
  26. DISABLE_SOUND_MOBILE = true;
  27. }
  28. s_oSpriteLibrary = new CSpriteLibrary();
  29. //ADD PRELOADER
  30. _oPreloader = new CPreloader();
  31. _bUpdate = true;
  32. };
  33. this.soundLoaded = function(){
  34. _iCurResource++;
  35. var iPerc = Math.floor(_iCurResource/RESOURCE_TO_LOAD *100);
  36. _oPreloader.refreshLoader(iPerc);
  37. };
  38. this._initSounds = function(){
  39. Howler.mute(!s_bAudioActive);
  40. s_aSoundsInfo = new Array();
  41. s_aSoundsInfo.push({path: './sounds/',filename:'us_bounce',loop:false,volume:1, ingamename: 'us_bounce'});
  42. s_aSoundsInfo.push({path: './sounds/',filename:'click',loop:false,volume:1, ingamename: 'click'});
  43. s_aSoundsInfo.push({path: './sounds/',filename:'us_buzzer',loop:false,volume:1, ingamename: 'us_buzzer'});
  44. s_aSoundsInfo.push({path: './sounds/',filename:'us_cheer',loop:false,volume:1, ingamename: 'us_cheer'});
  45. s_aSoundsInfo.push({path: './sounds/',filename:'us_crowd',loop:true,volume:1, ingamename: 'us_crowd'});
  46. s_aSoundsInfo.push({path: './sounds/',filename:'soundtrack',loop:true,volume:1, ingamename: 'soundtrack'});
  47. RESOURCE_TO_LOAD += s_aSoundsInfo.length;
  48. s_aSounds = new Array();
  49. for(var i=0; i<s_aSoundsInfo.length; i++){
  50. this.tryToLoadSound(s_aSoundsInfo[i], false);
  51. }
  52. };
  53. this.tryToLoadSound = function(oSoundInfo, bDelay){
  54. setTimeout(function(){
  55. s_aSounds[oSoundInfo.ingamename] = new Howl({
  56. src: [oSoundInfo.path+oSoundInfo.filename+'.mp3'],
  57. autoplay: false,
  58. preload: true,
  59. loop: oSoundInfo.loop,
  60. volume: oSoundInfo.volume,
  61. onload: s_oMain.soundLoaded,
  62. onloaderror: function(szId,szMsg){
  63. for(var i=0; i < s_aSoundsInfo.length; i++){
  64. if ( szId === s_aSounds[s_aSoundsInfo[i].ingamename]._sounds[0]._id){
  65. s_oMain.tryToLoadSound(s_aSoundsInfo[i], true);
  66. break;
  67. }
  68. }
  69. },
  70. onplayerror: function(szId) {
  71. for(var i=0; i < s_aSoundsInfo.length; i++){
  72. if ( szId === s_aSounds[s_aSoundsInfo[i].ingamename]._sounds[0]._id){
  73. s_aSounds[s_aSoundsInfo[i].ingamename].once('unlock', function() {
  74. s_aSounds[s_aSoundsInfo[i].ingamename].play();
  75. if(s_aSoundsInfo[i].ingamename === "soundtrack" && s_oGame !== null){
  76. setVolume("soundtrack",SOUNDTRACK_VOLUME_IN_GAME);
  77. }
  78. });
  79. break;
  80. }
  81. }
  82. }
  83. });
  84. }, (bDelay ? 200 : 0) );
  85. };
  86. this._loadImages = function(){
  87. s_oSpriteLibrary.init( this._onImagesLoaded,this._onAllImagesLoaded, this );
  88. s_oSpriteLibrary.addSprite("audio_icon","./sprites/audio_icon.png");
  89. s_oSpriteLibrary.addSprite("ball_1","./sprites/ball_1.png");
  90. s_oSpriteLibrary.addSprite("ball_2","./sprites/ball_2.png");
  91. s_oSpriteLibrary.addSprite("bg_help","./sprites/bg_help.png");
  92. s_oSpriteLibrary.addSprite("bg_menu","./sprites/bg_menu.jpg");
  93. s_oSpriteLibrary.addSprite("but_exit","./sprites/but_exit.png");
  94. s_oSpriteLibrary.addSprite("but_play","./sprites/but_play.png");
  95. s_oSpriteLibrary.addSprite("cart_back","./sprites/cart_back.png");
  96. s_oSpriteLibrary.addSprite("cart_front","./sprites/cart_front.png");
  97. s_oSpriteLibrary.addSprite("field_camera_1","./sprites/field_camera_1.jpg");
  98. s_oSpriteLibrary.addSprite("field_camera_2","./sprites/field_camera_2.jpg");
  99. s_oSpriteLibrary.addSprite("field_camera_3","./sprites/field_camera_3.jpg");
  100. s_oSpriteLibrary.addSprite("msg_box","./sprites/msg_box.png");
  101. s_oSpriteLibrary.addSprite("shot_ball","./sprites/shot_ball.png");
  102. s_oSpriteLibrary.addSprite("shot_gui","./sprites/shot_gui.png");
  103. s_oSpriteLibrary.addSprite("time_panel","./sprites/time_panel.png");
  104. s_oSpriteLibrary.addSprite("shadow","./sprites/shadow.png");
  105. s_oSpriteLibrary.addSprite("logo_credits","./sprites/logo_credits.png");
  106. s_oSpriteLibrary.addSprite("but_credits","./sprites/but_credits.png");
  107. s_oSpriteLibrary.addSprite("but_fullscreen","./sprites/but_fullscreen.png");
  108. // player frames: pl000 to pl131
  109. for (var i = 0; i <= 131; i++) {
  110. var iSpriteNum;
  111. if (i <= 9) {
  112. iSpriteNum = "00" + i;
  113. } else if (i <= 99) {
  114. iSpriteNum = "0" + i;
  115. } else {
  116. iSpriteNum = i;
  117. };
  118. var szSprite = "pl" + i,
  119. szSpritePath = "./sprites/player_frames/new_player_0000" + iSpriteNum + ".png";
  120. s_oSpriteLibrary.addSprite(szSprite,szSpritePath);
  121. };
  122. // basket frames: bsk001 to bsk036
  123. for (var i = 1; i <= 36; i++) {
  124. var iSpriteNum;
  125. if (i <= 9) {
  126. iSpriteNum = "00" + i;
  127. } else if (i <= 99) {
  128. iSpriteNum = "0" + i;
  129. } else {
  130. iSpriteNum = i;
  131. };
  132. var szSprite = "bsk" + i,
  133. szSpritePath = "./sprites/basket/basket_0" + iSpriteNum + ".png";
  134. s_oSpriteLibrary.addSprite(szSprite,szSpritePath);
  135. };
  136. RESOURCE_TO_LOAD += s_oSpriteLibrary.getNumSprites();
  137. s_oSpriteLibrary.loadSprites();
  138. };
  139. this._onImagesLoaded = function(){
  140. _iCurResource++;
  141. var iPerc = Math.floor(_iCurResource/RESOURCE_TO_LOAD *100);
  142. _oPreloader.refreshLoader(iPerc);
  143. };
  144. this._onAllImagesLoaded = function(){
  145. };
  146. this.preloaderReady = function(){
  147. this._loadImages();
  148. if(DISABLE_SOUND_MOBILE === false || s_bMobile === false){
  149. this._initSounds();
  150. }
  151. };
  152. this._onRemovePreloader = function(){
  153. _oPreloader.unload();
  154. s_oSoundTrack = playSound("soundtrack", 1, true);
  155. this.gotoMenu();
  156. };
  157. this.gotoMenu = function(){
  158. _oMenu = new CMenu();
  159. _iState = STATE_MENU;
  160. };
  161. this.gotoGame = function(){
  162. _oGame = new CGame();
  163. _iState = STATE_GAME;
  164. };
  165. this.gotoHelp = function(){
  166. _oHelp = new CHelp();
  167. _iState = STATE_HELP;
  168. };
  169. this.stopUpdate = function(){
  170. _bUpdate = false;
  171. createjs.Ticker.paused = true;
  172. $("#block_game").css("display","block");
  173. if(DISABLE_SOUND_MOBILE === false || s_bMobile === false){
  174. Howler.mute(true);
  175. }
  176. };
  177. this.startUpdate = function(){
  178. s_iPrevTime = new Date().getTime();
  179. _bUpdate = true;
  180. createjs.Ticker.paused = false;
  181. $("#block_game").css("display","none");
  182. if(DISABLE_SOUND_MOBILE === false || s_bMobile === false){
  183. if(s_bAudioActive){
  184. Howler.mute(false);
  185. }
  186. }
  187. };
  188. this._update = function(event){
  189. if(!_bUpdate){
  190. return;
  191. }
  192. var iCurTime = new Date().getTime();
  193. s_iTimeElaps = iCurTime - s_iPrevTime;
  194. s_iCntTime += s_iTimeElaps;
  195. s_iCntFps++;
  196. s_iPrevTime = iCurTime;
  197. if ( s_iCntTime >= 1000 ){
  198. s_iCurFps = s_iCntFps;
  199. s_iCntTime-=1000;
  200. s_iCntFps = 0;
  201. }
  202. if(_iState === STATE_GAME){
  203. _oGame.update(iCurTime);
  204. }
  205. s_oStage.update(event);
  206. };
  207. s_oMain = this;
  208. ENABLE_FULLSCREEN = oData.fullscreen;
  209. ENABLE_CHECK_ORIENTATION = oData.check_orientation;
  210. s_bAudioActive = oData.audio_enable_on_startup;
  211. this.initContainer();
  212. }
  213. var s_bMobile;
  214. var s_bAudioActive = true;
  215. var s_iCntTime = 0;
  216. var s_iTimeElaps = 0;
  217. var s_iPrevTime = 0;
  218. var s_iCntFps = 0;
  219. var s_iCurFps = 0;
  220. var s_oDrawLayer;
  221. var s_oStage;
  222. var s_oMain;
  223. var s_oSpriteLibrary;
  224. var s_oGameSettings;
  225. var s_oSoundTrack = null;
  226. var s_bFullscreen = false;
  227. var s_aSounds;
  228. var s_aSoundsInfo;