CMain.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377
  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 _oGame;
  10. var _oLevelMenu;
  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. }else{
  18. createjs.Touch.enable(s_oStage,true);
  19. }
  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.setLocalStorageLevel = function(iLevel){
  31. var iSavedLevel = getItem(GAME_NAME+"_level");
  32. if(iSavedLevel === null || iSavedLevel < iLevel){
  33. s_iLastLevel = iLevel;
  34. saveItem(GAME_NAME+"_level", s_iLastLevel);
  35. }
  36. };
  37. this.setLocalStorageScore = function(iCurScore,iLevel){
  38. saveItem(GAME_NAME+"_score_level_"+iLevel, iCurScore);
  39. };
  40. this.clearLocalStorage = function(){
  41. s_iLastLevel = 1;
  42. if(s_bStorageAvailable){
  43. var iCont = 0;
  44. while(iCont < localStorage.length){
  45. var szKey = localStorage.key(iCont);
  46. if(szKey.indexOf(GAME_NAME) !== -1){
  47. localStorage.removeItem(szKey);
  48. }else{
  49. iCont++;
  50. }
  51. }
  52. }
  53. };
  54. this.getScoreTillLevel = function(iLevel){
  55. if(!s_bStorageAvailable){
  56. return 0;
  57. }
  58. var iScore = 0;
  59. // for(var i=0;i<iLevel-1;i++){
  60. // iScore += parseInt(getItem(GAME_NAME+"_score_level_"+(i+1) ));
  61. // }
  62. return iScore;
  63. };
  64. this.getScoreLevel = function(iLevel){
  65. return getItem(GAME_NAME+"_score_level_"+(iLevel+1) );
  66. };
  67. this.getSavedLevel = function(){
  68. if(!s_bStorageAvailable){
  69. return 1;
  70. }
  71. var iSavedLevel = getItem(GAME_NAME+"_level");
  72. if(iSavedLevel === null){
  73. return 1;
  74. }else{
  75. return iSavedLevel;
  76. }
  77. };
  78. this.preloaderReady = function () {
  79. this._loadImages();
  80. if (DISABLE_SOUND_MOBILE === false || s_bMobile === false) {
  81. this._initSounds();
  82. }
  83. _bUpdate = true;
  84. };
  85. this.soundLoaded = function () {
  86. _iCurResource++;
  87. var iPerc = Math.floor(_iCurResource / RESOURCE_TO_LOAD * 100);
  88. _oPreloader.refreshLoader(iPerc);
  89. };
  90. this._initSounds = function(){
  91. Howler.mute(!s_bAudioActive);
  92. s_aSoundsInfo = new Array();
  93. s_aSoundsInfo.push({path: './sounds/',filename:'game_completed',loop:false,volume:1, ingamename: 'game_completed'});
  94. s_aSoundsInfo.push({path: './sounds/',filename:'click',loop:false,volume:1, ingamename: 'click'});
  95. s_aSoundsInfo.push({path: './sounds/',filename:'game_over',loop:false,volume:1, ingamename: 'game_over'});
  96. s_aSoundsInfo.push({path: './sounds/',filename:'boing',loop:false,volume:1, ingamename: 'boing'});
  97. s_aSoundsInfo.push({path: './sounds/',filename:'ball_lose',loop:false,volume:1, ingamename: 'ball_lose'});
  98. s_aSoundsInfo.push({path: './sounds/',filename:'fireball',loop:true,volume:1, ingamename: 'fireball'});
  99. s_aSoundsInfo.push({path: './sounds/',filename:'brick_crack',loop:false,volume:1, ingamename: 'brick_crack'});
  100. s_aSoundsInfo.push({path: './sounds/',filename:'brick_explosion',loop:false,volume:1, ingamename: 'brick_explosion'});
  101. s_aSoundsInfo.push({path: './sounds/',filename:'brick_metal',loop:false,volume:1, ingamename: 'brick_metal'});
  102. s_aSoundsInfo.push({path: './sounds/',filename:'power_up_bonus',loop:false,volume:1, ingamename: 'power_up_bonus'});
  103. s_aSoundsInfo.push({path: './sounds/',filename:'power_up_malus',loop:false,volume:1, ingamename: 'power_up_malus'});
  104. s_aSoundsInfo.push({path: './sounds/',filename:'stage_clear',loop:false,volume:1, ingamename: 'stage_clear'});
  105. s_aSoundsInfo.push({path: './sounds/',filename:'bullet',loop:false,volume:1, ingamename: 'bullet'});
  106. s_aSoundsInfo.push({path: './sounds/',filename:'soundtrack',loop:true,volume:1, ingamename: 'soundtrack'});
  107. RESOURCE_TO_LOAD += s_aSoundsInfo.length;
  108. s_aSounds = new Array();
  109. for(var i=0; i<s_aSoundsInfo.length; i++){
  110. this.tryToLoadSound(s_aSoundsInfo[i], false);
  111. }
  112. };
  113. this.tryToLoadSound = function(oSoundInfo, bDelay){
  114. setTimeout(function(){
  115. s_aSounds[oSoundInfo.ingamename] = new Howl({
  116. src: [oSoundInfo.path+oSoundInfo.filename+'.mp3'],
  117. autoplay: false,
  118. preload: true,
  119. loop: oSoundInfo.loop,
  120. volume: oSoundInfo.volume,
  121. onload: s_oMain.soundLoaded,
  122. onloaderror: function(szId,szMsg){
  123. for(var i=0; i < s_aSoundsInfo.length; i++){
  124. if ( szId === s_aSounds[s_aSoundsInfo[i].ingamename]._sounds[0]._id){
  125. s_oMain.tryToLoadSound(s_aSoundsInfo[i], true);
  126. break;
  127. }
  128. }
  129. },
  130. onplayerror: function(szId) {
  131. for(var i=0; i < s_aSoundsInfo.length; i++){
  132. if ( szId === s_aSounds[s_aSoundsInfo[i].ingamename]._sounds[0]._id){
  133. s_aSounds[s_aSoundsInfo[i].ingamename].once('unlock', function() {
  134. s_aSounds[s_aSoundsInfo[i].ingamename].play();
  135. if(s_aSoundsInfo[i].ingamename === "soundtrack" && s_oGame !== null){
  136. setVolume("soundtrack",SOUNDTRACK_VOLUME_IN_GAME);
  137. }
  138. });
  139. break;
  140. }
  141. }
  142. }
  143. });
  144. }, (bDelay ? 200 : 0) );
  145. };
  146. this._loadImages = function () {
  147. s_oSpriteLibrary.init(this._onImagesLoaded, this._onAllImagesLoaded, this);
  148. s_oSpriteLibrary.addSprite("bg_menu", "./sprites/bg_menu.jpg");
  149. s_oSpriteLibrary.addSprite("msg_box", "./sprites/msg_box.png");
  150. s_oSpriteLibrary.addSprite("bg_level_1", "./sprites/bg_level_1.jpg");
  151. s_oSpriteLibrary.addSprite("paddle", "./sprites/paddle.png");
  152. s_oSpriteLibrary.addSprite("paddle_magnet", "./sprites/paddle_magnet.png");
  153. s_oSpriteLibrary.addSprite("cannons", "./sprites/cannons.png");
  154. s_oSpriteLibrary.addSprite("but_exit", "./sprites/but_exit.png");
  155. s_oSpriteLibrary.addSprite("but_pause", "./sprites/but_pause.png");
  156. s_oSpriteLibrary.addSprite("icon_audio", "./sprites/icon_audio.png");
  157. s_oSpriteLibrary.addSprite("but_play", "./sprites/but_play.png");
  158. s_oSpriteLibrary.addSprite("but_restart", "./sprites/but_restart.png");
  159. s_oSpriteLibrary.addSprite("but_continue", "./sprites/but_continue.png");
  160. s_oSpriteLibrary.addSprite("but_level", "./sprites/but_level.png");
  161. s_oSpriteLibrary.addSprite("powerup_edge", "./sprites/powerup_edge.png");
  162. s_oSpriteLibrary.addSprite("up_edges", "./sprites/up_edges.png");
  163. s_oSpriteLibrary.addSprite("normal_ball", "./sprites/normal_ball.png");
  164. s_oSpriteLibrary.addSprite("fire_ball", "./sprites/fire_ball.png");
  165. s_oSpriteLibrary.addSprite("iron_ball", "./sprites/iron_ball.png");
  166. s_oSpriteLibrary.addSprite("bullet", "./sprites/bullet.png");
  167. s_oSpriteLibrary.addSprite("but_yes", "./sprites/but_yes.png");
  168. s_oSpriteLibrary.addSprite("but_no", "./sprites/but_no.png");
  169. s_oSpriteLibrary.addSprite("life", "./sprites/life.png");
  170. s_oSpriteLibrary.addSprite("ctl_logo", "./sprites/ctl_logo.png");
  171. s_oSpriteLibrary.addSprite("but_credits", "./sprites/but_credits.png");
  172. s_oSpriteLibrary.addSprite("but_fullscreen", "./sprites/but_fullscreen.png");
  173. s_oSpriteLibrary.addSprite("but_clear_save", "./sprites/but_clear_save.png");
  174. for (var i = 0; i < TYPES_OF_BRICK; i++) {
  175. s_oSpriteLibrary.addSprite("brick" + i, "./sprites/brick" + i + ".png");
  176. }
  177. for (var i = 0; i < TYPES_OF_BONUS; i++) {
  178. s_oSpriteLibrary.addSprite("bonus" + i, "./sprites/bonus" + i + ".png");
  179. ;
  180. }
  181. RESOURCE_TO_LOAD += s_oSpriteLibrary.getNumSprites();
  182. s_oSpriteLibrary.loadSprites();
  183. };
  184. this._onImagesLoaded = function () {
  185. _iCurResource++;
  186. var iPerc = Math.floor(_iCurResource / RESOURCE_TO_LOAD * 100);
  187. _oPreloader.refreshLoader(iPerc);
  188. };
  189. this._onAllImagesLoaded = function () {
  190. };
  191. this._onRemovePreloader = function(){
  192. _oPreloader.unload();
  193. try{
  194. saveItem("ls_available","ok");
  195. s_iLastLevel = this.getSavedLevel();
  196. }catch(evt){
  197. // localStorage not defined
  198. s_bStorageAvailable = false;
  199. }
  200. playSound("soundtrack", 1,true);
  201. this.gotoMenu();
  202. };
  203. this.gotoMenu = function () {
  204. _oMenu = new CMenu();
  205. _iState = STATE_MENU;
  206. };
  207. this.levelSelected = function(iLevel){
  208. s_iLevelSelected = iLevel;
  209. _oLevelMenu.unload();
  210. if(iLevel >= s_iLastLevel){
  211. s_iLastLevel = iLevel;
  212. }
  213. s_oMain.gotoGame(iLevel);
  214. };
  215. this.gotoGame = function (iLevel) {
  216. _oGame = new CGame(_oData, iLevel);
  217. _iState = STATE_GAME;
  218. };
  219. this.gotoLevelMenu = function () {
  220. _oLevelMenu = new CLevelMenu(_oData);
  221. _iState = STATE_MENU;
  222. };
  223. this.stopUpdate = function(){
  224. _bUpdate = false;
  225. createjs.Ticker.paused = true;
  226. document.querySelector("#block_game").style.display = "block";
  227. if(DISABLE_SOUND_MOBILE === false || s_bMobile === false){
  228. Howler.mute(true);
  229. }
  230. };
  231. this.startUpdate = function(){
  232. s_iPrevTime = new Date().getTime();
  233. _bUpdate = true;
  234. createjs.Ticker.paused = false;
  235. document.querySelector("#block_game").style.display = "none";
  236. if(DISABLE_SOUND_MOBILE === false || s_bMobile === false){
  237. if(s_bAudioActive){
  238. Howler.mute(false);
  239. }
  240. }
  241. };
  242. this.stopUpdateNoBlock = function(){
  243. _bUpdate = false;
  244. createjs.Ticker.paused = true;
  245. };
  246. this.startUpdateNoBlock = function(){
  247. s_iPrevTime = new Date().getTime();
  248. _bUpdate = true;
  249. createjs.Ticker.paused = false;
  250. };
  251. this._update = function (event) {
  252. if (_bUpdate === false) {
  253. return;
  254. }
  255. var iCurTime = new Date().getTime();
  256. s_iTimeElaps = iCurTime - s_iPrevTime;
  257. s_iCntTime += s_iTimeElaps;
  258. s_iCntFps++;
  259. s_iPrevTime = iCurTime;
  260. if (s_iCntTime >= 1000) {
  261. s_iCurFps = s_iCntFps;
  262. s_iCntTime -= 1000;
  263. s_iCntFps = 0;
  264. }
  265. if (_iState === STATE_GAME) {
  266. _oGame.update();
  267. }
  268. s_oStage.update(event);
  269. };
  270. s_oMain = this;
  271. _oData = oData;
  272. ENABLE_FULLSCREEN = oData.fullscreen;
  273. ENABLE_CHECK_ORIENTATION = oData.check_orientation;
  274. s_bAudioActive = oData.audio_enable_on_startup;
  275. this.initContainer();
  276. }
  277. var s_bMobile;
  278. var s_bAudioActive = true;
  279. var s_iCntTime = 0;
  280. var s_iTimeElaps = 0;
  281. var s_iPrevTime = 0;
  282. var s_iCntFps = 0;
  283. var s_iCurFps = 0;
  284. var s_iLastLevel = 1;
  285. var s_oStage;
  286. var s_oMain;
  287. var s_oSpriteLibrary;
  288. var s_oCanvas;
  289. var s_bFullscreen = false;
  290. var s_aSounds;
  291. var s_bStorageAvailable = true;
  292. var s_aSoundsInfo;