CGame.js 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625
  1. function CGame(oData){
  2. var _bUpdate = false;
  3. var _bExit = false;
  4. var _bMouseIsDown;
  5. var _bLineRemoving;
  6. var _iScore;
  7. var _iMouseX;
  8. var _iMouseY;
  9. var _iLives;
  10. var _iMaxSimultaneousFruits;
  11. var _iNumFruitsSpawn;
  12. var _iTimeFruitOccurence;
  13. var _iTimeElaps;
  14. var _iTimeDrawElaps;
  15. var _iTimeComboElaps;
  16. var _iFruitsSliced;
  17. var _iFruitSlicedInCombo;
  18. var _aActiveFruits = new Array();
  19. var _aFruitsToRemove = new Array();
  20. var _aLinesDraw;
  21. var _aStartX;
  22. var _oFirstPoint;
  23. var _oLastPt;
  24. var _oComboPt;
  25. var _oAttachMatrix;
  26. var _oAttachStain;
  27. var _oAttachFruit;
  28. var _oGameOverSfx;
  29. var _oLineShape = null;
  30. var _oBg;
  31. var _oHitArea;
  32. var _oInterface;
  33. var _oEndPanel = null;
  34. var _oHelp;
  35. this._init = function(){
  36. _iScore = 0;
  37. _iFruitsSliced = 0;
  38. _iFruitSlicedInCombo = 0;
  39. _iNumFruitsSpawn = 0;
  40. _iLives = NUM_LIVES;
  41. _iTimeElaps = _iTimeFruitOccurence = OCCURENCE_FRUIT;
  42. _iMaxSimultaneousFruits = STARTING_SIMULTANEOUS_FRUITS;
  43. _iTimeComboElaps = 0;
  44. _oBg = new createBitmap(s_oSpriteLibrary.getSprite('bg_game'));
  45. s_oStage.addChild(_oBg);
  46. _oAttachStain = new createjs.Container();
  47. s_oStage.addChild(_oAttachStain);
  48. _oAttachFruit = new createjs.Container();
  49. s_oStage.addChild(_oAttachFruit);
  50. _oAttachMatrix = new createjs.Container();
  51. s_oStage.addChild(_oAttachMatrix);
  52. _oLineShape = new createjs.Shape();
  53. _oAttachMatrix.addChild(_oLineShape);
  54. _oHitArea = new CHitArea(CANVAS_WIDTH/2,CANVAS_HEIGHT/2,s_oSpriteLibrary.getSprite('hit_area'));
  55. _oHitArea.addEventListener(ON_MOUSE_DOWN, this._onMouseDown, this);
  56. _oHitArea.addEventListener(ON_MOUSE_UP, this._onMouseUp, this);
  57. _oHitArea.addEventListener(ON_MOUSE_OUT, this._onMouseOut, this);
  58. _oHitArea.addEventListener(ON_PRESS_MOVE, this._onMouseMoving, this);
  59. _oInterface = new CInterface();
  60. _oEndPanel = CEndPanel();
  61. _oHelp = new CHelpPanel();
  62. _aStartX = new Array();
  63. var iRange = Math.floor(CANVAS_WIDTH/30);
  64. var iCurX = EDGEBOARD_X+20;
  65. while(iCurX < CANVAS_WIDTH-EDGEBOARD_X-20){
  66. _aStartX.push(iCurX);
  67. iCurX += iRange;
  68. }
  69. _aLinesDraw = new Array();
  70. _bMouseIsDown = false;
  71. _bLineRemoving = false;
  72. $(s_oMain).trigger("start_level",1);
  73. };
  74. this.unload = function(){
  75. _bExit=true;
  76. if(DISABLE_SOUND_MOBILE === false || s_bMobile === false){
  77. stopSound("bomb_fuse");
  78. s_oSoundTrack = null;
  79. }
  80. _oHitArea.unload();
  81. if(_oEndPanel){
  82. _oEndPanel.unload();
  83. }
  84. _oInterface.unload();
  85. s_oStage.removeAllChildren();
  86. };
  87. this.exitFromHelp = function(){
  88. _bUpdate=true;
  89. };
  90. this.loseLife = function(oFruitMissed){
  91. var oSprite = s_oSpriteLibrary.getSprite('miss');
  92. var oMiss = createBitmap(oSprite);
  93. oMiss.alpha = 0;
  94. if(oFruitMissed.getX() < s_iOffsetX){
  95. oMiss.x = s_iOffsetX + oSprite.width/2;
  96. }else if(oFruitMissed.getX() > (CANVAS_WIDTH - s_iOffsetX) ){
  97. oMiss.x = CANVAS_WIDTH - s_iOffsetX - oSprite.width/2;
  98. }else{
  99. oMiss.x = oFruitMissed.getX();
  100. }
  101. oMiss.y = CANVAS_HEIGHT - oSprite.height -s_iOffsetY;
  102. oMiss.regX = oSprite.width/2;
  103. _oAttachMatrix.addChild(oMiss);
  104. if(oMiss.x < 0 ){
  105. oMiss.x = oSprite.width/2;
  106. }else if(oMiss.x > CANVAS_WIDTH){
  107. oMiss.x = CANVAS_WIDTH - oSprite.width/2;
  108. }
  109. createjs.Tween.get(oMiss).to({alpha:1}, 500).call(function(){
  110. createjs.Tween.get(oMiss).wait(1500).to({alpha:0}, 500);
  111. });
  112. _iLives--;
  113. _oInterface.loseLife(_iLives);
  114. if(_iLives === 0){
  115. this.gameOver();
  116. }
  117. };
  118. this.gameOver = function(){
  119. if(_bExit){
  120. return;
  121. }
  122. _bUpdate=false;
  123. $(s_oMain).trigger("end_level",1);
  124. if(DISABLE_SOUND_MOBILE === false || s_bMobile === false){
  125. var oParent = this;
  126. _oGameOverSfx = playSound("gameover", 1,false);
  127. _oGameOverSfx.on("end", oParent.gameOVerSfxComplete);
  128. setVolume("soundtrack",0);
  129. }
  130. this.removeAllLines();
  131. _oEndPanel.show(_iScore);
  132. };
  133. this.gameOVerSfxComplete = function(){
  134. setVolume("soundtrack",SOUNDTRACK_VOLUME_IN_GAME);
  135. };
  136. this.showCombo = function(){
  137. playSound("combo", 1,false);
  138. var iAmount = COMBO_TWO_FRUIT*_iFruitSlicedInCombo;
  139. _iScore += iAmount;
  140. _oInterface.refreshScore(_iScore);
  141. var oFade = new createjs.Shape();
  142. oFade.alpha = 0;
  143. oFade.graphics.beginFill("#fffC00").drawRect(0,0,CANVAS_WIDTH,CANVAS_HEIGHT);
  144. _oAttachMatrix.addChild(oFade);
  145. createjs.Tween.get(oFade).to({alpha:0.8}, 200).call(function(){
  146. createjs.Tween.get(oFade).to({alpha:0}, 200).call(function(){_oAttachMatrix.removeChild(oFade);});
  147. });
  148. var iRand = Math.floor(Math.random() * s_aFruitColors.length) ;
  149. var iWidth = 200;
  150. var iHeight = 130;
  151. var iX = _oComboPt.x;
  152. var iY = _oComboPt.y;
  153. var oComboText = new CTLText(_oAttachFruit,
  154. iX-iWidth/2, iY-iHeight/2, iWidth, iHeight,
  155. 60, "center", s_aFruitColors[iRand], FONT_GAME, 1,
  156. 2, 2,
  157. sprintf(TEXT_COMBO, iAmount),
  158. true, true, true,
  159. false );
  160. oComboText.setShadow("#000", 2,2,2);
  161. createjs.Tween.get(oComboText.getText()).to({alpha:1}, 500).wait(1500).to({alpha:0}, 500).call(function(){
  162. oComboText.unload();
  163. });
  164. };
  165. this.launchFruit = function(){
  166. var iRandNum = Math.random() * (_iMaxSimultaneousFruits - 1) + 1;
  167. for(var i=0;i<iRandNum;i++){
  168. var iRandX = Math.floor(Math.random() * _aStartX.length);
  169. var iRandFruit = Math.floor(Math.random() * s_aFruitSpriteSheet.length) ;
  170. var oObject;
  171. if(iRandFruit === BOMB_SYMBOL){
  172. if(_iNumFruitsSpawn < 6){
  173. do{
  174. var iRandFruit = Math.floor(Math.random() * s_aFruitSpriteSheet.length) ;
  175. }while(iRandFruit === BOMB_SYMBOL);
  176. //ATTACH FRUIT
  177. oObject = new CFruit(_aStartX[iRandX],Y_START_FRUIT,s_aFruitSpriteSheet[iRandFruit],s_aFruitSize[iRandFruit],s_aFruitSpeed[iRandFruit],iRandFruit,_oAttachFruit);
  178. }else{
  179. //ATTACH BOMB
  180. oObject = new CBomb(_aStartX[iRandX],Y_START_FRUIT,s_aFruitSpriteSheet[iRandFruit],s_aFruitSize[iRandFruit],s_aFruitSpeed[iRandFruit],iRandFruit,_oAttachFruit);
  181. }
  182. }else{
  183. //ATTACH FRUIT
  184. oObject = new CFruit(_aStartX[iRandX],Y_START_FRUIT,s_aFruitSpriteSheet[iRandFruit],s_aFruitSize[iRandFruit],s_aFruitSpeed[iRandFruit],iRandFruit,_oAttachFruit);
  185. }
  186. _aActiveFruits.push(oObject);
  187. _iNumFruitsSpawn++;
  188. }
  189. playSound("boing_fruit", 1,false);
  190. };
  191. this.onExit = function(){
  192. this.unload();
  193. $(s_oMain).trigger("share_event",_iScore);
  194. $(s_oMain).trigger("end_level",1);
  195. $(s_oMain).trigger("end_session");
  196. s_oMain.gotoMenu();
  197. };
  198. //start drawing
  199. this._onMouseDown = function(oParam) {
  200. if ( _bMouseIsDown === true ){
  201. return;
  202. }
  203. _bMouseIsDown = true;
  204. _iTimeDrawElaps = 0;
  205. var e = oParam.event;
  206. if(!e){ e = window.event; }
  207. _iMouseX = e.stageX
  208. _iMouseY = e.stageY
  209. if( !(s_bMobile && isIOS() === false)){
  210. _iMouseX /= s_iScaleFactor;
  211. _iMouseY /= s_iScaleFactor;
  212. // set up the first point in the new draw
  213. _oLastPt = _oFirstPoint = {x:e.stageX/s_iScaleFactor,y:e.stageY/s_iScaleFactor};
  214. }else{
  215. // set up the first point in the new draw
  216. _oLastPt = _oFirstPoint = {x:e.stageX,y:e.stageY};
  217. }
  218. // clear the cache, so the vector data is drawn each tick:
  219. _oLineShape.uncache();
  220. _oLineShape.graphics.setStrokeStyle(10,"round",0,0,true).beginStroke("#fff");
  221. _oLineShape.graphics.moveTo(_oLastPt.x,_oLastPt.y);
  222. };
  223. //stop drawing
  224. this._onMouseUp = function() {
  225. _bMouseIsDown = false;
  226. _bLineRemoving = false;
  227. _oLineShape.graphics.clear();
  228. _oLineShape.cache(0,0,CANVAS_WIDTH,CANVAS_HEIGHT);
  229. };
  230. //update mouse positions
  231. this._onMouseMoving = function(oParam) {
  232. var e = oParam.event;
  233. if(!e){ e = window.event; }
  234. _iMouseX = e.stageX;
  235. _iMouseY = e.stageY;
  236. if( !(s_bMobile && isIOS() === false)){
  237. _iMouseX /= s_iScaleFactor;
  238. _iMouseY /= s_iScaleFactor;
  239. }
  240. };
  241. this._onMouseOut = function(){
  242. if(_bMouseIsDown){
  243. this._onMouseUp();
  244. }
  245. };
  246. this.showExplosion = function(){
  247. var oFade = new createjs.Shape();
  248. oFade.alpha = 0;
  249. oFade.graphics.beginFill("#fff").drawRect(0,0,CANVAS_WIDTH,CANVAS_HEIGHT);
  250. _oAttachMatrix.addChild(oFade);
  251. createjs.Tween.get(oFade).to({alpha:1}, 1000).call(function(){
  252. s_oGame.gameOver();
  253. _oAttachFruit.removeAllChildren();
  254. createjs.Tween.get(oFade).to({alpha:0}, 1500).call(function(){_oAttachMatrix.removeChild(oFade);});
  255. });
  256. };
  257. this.bombExplosion = function(iIndex){
  258. _aActiveFruits[iIndex].explode();
  259. };
  260. this.assignScore = function(vPos,iType){
  261. new CStain(vPos.getX(),vPos.getY(),iType,_oAttachStain);
  262. new CWinText(vPos.getX(),vPos.getY(),s_aFruitScore[iType],s_aFruitColors[iType]);
  263. _iScore += s_aFruitScore[iType];
  264. _oInterface.refreshScore(_iScore);
  265. _iFruitsSliced++;
  266. if((_iFruitsSliced%FRUIT_TO_CUT_FOR_LEVEL_UP) === 0){
  267. //INCREASE DIFFICULTY
  268. _iMaxSimultaneousFruits++;
  269. if(_iMaxSimultaneousFruits > MAX_SIMULTANEOUS_FRUITS){
  270. _iMaxSimultaneousFruits = MAX_SIMULTANEOUS_FRUITS;
  271. }
  272. }
  273. _iFruitSlicedInCombo++;
  274. _oComboPt = {x:vPos.getX(),y:vPos.getY()};
  275. };
  276. this.removeSlices = function(oFruit){
  277. for(var i=0;i<_aActiveFruits.length;i++){
  278. if(_aActiveFruits[i] === oFruit){
  279. _aFruitsToRemove.push(oFruit);
  280. }
  281. }
  282. };
  283. this.removeAllLines = function(){
  284. for(var iCont=0;iCont<_aLinesDraw.length;iCont++){
  285. _oAttachMatrix.removeChild(_aLinesDraw[iCont].line);
  286. }
  287. _aLinesDraw = new Array();
  288. };
  289. this.dotProductV2 = function(v1,v2){
  290. return ( v1.getX()*v2.getX()+ v1.getY()*v2.getY() );
  291. };
  292. this.distanceV2 = function( v1, v2 ){
  293. return Math.sqrt( ( (v2.getX()-v1.getX())*(v2.getX()-v1.getX()) ) + ( (v2.getY()-v1.getY())*(v2.getY()-v1.getY()) ) );
  294. };
  295. this.distance = function( v1, v2 ){
  296. return ( (v2.getX()-v1.getX())*(v2.getX()-v1.getX()) ) + ( (v2.getY()-v1.getY())*(v2.getY()-v1.getY()) ) ;
  297. };
  298. this.closestPointOnLine = function( vA, vB, vPoint ){
  299. var v1 = new CVector2();
  300. v1.setV(vPoint);
  301. v1.subV(vA);
  302. var v2 = new CVector2();
  303. v2.setV(vB);
  304. v2.subV(vA);
  305. v2.normalize();
  306. var t = this.dotProductV2(v2,v1);
  307. if ( t <= 0){
  308. return vA;
  309. }
  310. if ( t >= this.distanceV2(vA,vB) ){
  311. return vB;
  312. }
  313. v2.scalarProduct(t);
  314. v2.addV(vA);
  315. return v2;
  316. };
  317. this.collideEdgeWithCircle = function( oPointA, oPointB, oCenter,iRadius ){
  318. var oPt = this.closestPointOnLine( oPointA, oPointB, oCenter );
  319. var iDist = this.distanceV2( oCenter, oPt );
  320. if(iRadius < iDist){
  321. return false;
  322. }else{
  323. return true;
  324. }
  325. };
  326. this.getCircleLineIntersectionPoint = function(pointA,pointB, center, radius) {
  327. var baX = pointB.getX() - pointA.getX();
  328. var baY = pointB.getY() - pointA.getY();
  329. var caX = center.getX() - pointA.getX();
  330. var caY = center.getY() - pointA.getY();
  331. var a = baX * baX + baY * baY;
  332. var bBy2 = baX * caX + baY * caY;
  333. var c = caX * caX + caY * caY - radius * radius;
  334. var pBy2 = bBy2 / a;
  335. var q = c / a;
  336. var disc = pBy2 * pBy2 - q;
  337. if (disc < 0) {
  338. return null;
  339. }
  340. // if disc == 0 ... dealt with later
  341. var tmpSqrt = Math.sqrt(disc);
  342. var abScalingFactor1 = -pBy2 + tmpSqrt;
  343. var abScalingFactor2 = -pBy2 - tmpSqrt;
  344. var p1 = new CVector2(pointA.getX() - baX * abScalingFactor1, pointA.getY() - baY * abScalingFactor1);
  345. if (disc === 0) {
  346. // abScalingFactor1 == abScalingFactor2
  347. return new Array(p1);
  348. }
  349. var p2 = new CVector2(pointA.getX() - baX * abScalingFactor2, pointA.getY() - baY * abScalingFactor2);
  350. return new Array(p1, p2);
  351. };
  352. this.angleBetweenVectors = function( v1, v2 ){
  353. var iAngle = Math.acos( this.dotProductV2( v1, v2 ) / (v1.length() * v2.length()) );
  354. if ( isNaN( iAngle ) === true ){
  355. return 0;
  356. }else{
  357. return iAngle;
  358. }
  359. };
  360. this.checkCollisionWithFruit = function(){
  361. if(_aLinesDraw.length === 0){
  362. return;
  363. }
  364. for(var i=0;i<_aActiveFruits.length;i++){
  365. if(_aActiveFruits[i].isSliced() === false){
  366. for(var j=0;j<_aLinesDraw.length;j++){
  367. if(this.collideEdgeWithCircle(_aLinesDraw[j].start_point,_aLinesDraw[j].end_point,_aActiveFruits[i].getCenter(),_aActiveFruits[i].getRadius()) ){
  368. var aRes = this.getCircleLineIntersectionPoint(_aLinesDraw[j].start_point,_aLinesDraw[j].end_point,_aActiveFruits[i].getCenter(),
  369. _aActiveFruits[i].getRadius());
  370. var bContinue = true;
  371. if(aRes !== null && aRes.length > 1){
  372. var oFirstPoint = aRes[0];
  373. for(var k=1;k<aRes.length;k++){
  374. if(this.distance(oFirstPoint,aRes[k]) > _aActiveFruits[i].getSliceOffset()){
  375. //CHECK IF IS A BOMB
  376. if(_aActiveFruits[i].getType() === BOMB_SYMBOL){
  377. _bUpdate = false;
  378. this.bombExplosion(i);
  379. return;
  380. }else{
  381. var vDir = new CVector2(aRes[k].getX(),aRes[k].getY());
  382. vDir.subV(oFirstPoint);
  383. var vDirFruit = _aActiveFruits[i].getVectorDir();
  384. var iAngle = this.angleBetweenVectors(vDir,vDirFruit);
  385. iAngle = toDegree(iAngle);
  386. var vFruitCenter = _aActiveFruits[i].getCenter();
  387. if(iAngle < 30){
  388. _aActiveFruits[i].sliceVertical();
  389. }else if(iAngle <60){
  390. if(vFruitCenter.getX() > aRes[k].getX()){
  391. _aActiveFruits[i].sliceDiagonalLeft();
  392. }else{
  393. _aActiveFruits[i].sliceDiagonalRight();
  394. }
  395. }else if(iAngle < 120){
  396. _aActiveFruits[i].sliceHorizontal();
  397. }else if(iAngle < 150){
  398. if(vFruitCenter.getX() > aRes[k].getX()){
  399. _aActiveFruits[i].sliceDiagonalRight();
  400. }else{
  401. _aActiveFruits[i].sliceDiagonalLeft();
  402. }
  403. }else{
  404. _aActiveFruits[i].sliceVertical();
  405. }
  406. this.assignScore(_aActiveFruits[i].getCenter(),_aActiveFruits[i].getType());
  407. bContinue = false;
  408. }
  409. break;
  410. }
  411. }
  412. }
  413. if(bContinue === false){
  414. break;
  415. }
  416. }
  417. }
  418. }
  419. }
  420. };
  421. this.update = function(){
  422. if(_bUpdate === false){
  423. return;
  424. }
  425. _iTimeElaps += s_iTimeElaps;
  426. if(_iTimeElaps > _iTimeFruitOccurence){
  427. _iTimeElaps = 0;
  428. this.launchFruit();
  429. };
  430. _aFruitsToRemove = new Array();
  431. for(var i=0;i<_aActiveFruits.length;i++){
  432. _aActiveFruits[i].update();
  433. if(_aActiveFruits[i].isSliced() === false && _aActiveFruits[i].getY() > Y_START_FRUIT ){
  434. _aFruitsToRemove.push(_aActiveFruits[i]);
  435. if(_aActiveFruits[i].getType() !== BOMB_SYMBOL){
  436. this.loseLife(_aActiveFruits[i]);
  437. }
  438. }
  439. }
  440. for(var k=0;k<_aFruitsToRemove.length;k++){
  441. for(var s=0;s<_aActiveFruits.length;s++){
  442. if(_aFruitsToRemove[k] === _aActiveFruits[s]){
  443. _aFruitsToRemove[k].unload();
  444. _aActiveFruits.splice(s,1);
  445. break;
  446. }
  447. }
  448. }
  449. if(_bMouseIsDown) {
  450. if(_oLastPt.x !== _iMouseX || _oLastPt.y !== _iMouseY){
  451. _iTimeDrawElaps += s_iTimeElaps;
  452. if(_iTimeDrawElaps > LINE_DRAW_INTERVAL){
  453. _iTimeDrawElaps = 0;
  454. _aLinesDraw.push({line:_oLineShape,start_point:new CVector2(_oFirstPoint.x,_oFirstPoint.y),end_point:new CVector2( _oLastPt.x,_oLastPt.y) });
  455. _oLineShape = new createjs.Shape();
  456. _oAttachMatrix.addChild(_oLineShape);
  457. _oLineShape.graphics.setStrokeStyle(10,"round",0,0,true).beginStroke("#fff");
  458. _oLineShape.graphics.moveTo(_oLastPt.x,_oLastPt.y);
  459. _oFirstPoint = {x:_oLastPt.x,y:_oLastPt.y};
  460. }
  461. }
  462. //REMOVE LINES DRAWN
  463. if(_aLinesDraw.length >0){
  464. if(_bLineRemoving === false){
  465. _bLineRemoving = true;
  466. createjs.Tween.get(_aLinesDraw[0].line).to({alpha:0}, LINE_DRAW_INTERVAL).call(function(){
  467. if(_aLinesDraw.length > 0){
  468. _oAttachMatrix.removeChild(_aLinesDraw[0].line);
  469. _aLinesDraw.splice(0,1);
  470. }
  471. _bLineRemoving = false
  472. });
  473. }
  474. }
  475. // calculate the new position in the shape's local coordinate space:
  476. _oLastPt = {x:_iMouseX,y:_iMouseY};
  477. // draw the line, and close the path:
  478. _oLineShape.graphics.lineTo(_oLastPt.x,_oLastPt.y);
  479. }else{
  480. if(_aLinesDraw.length >0 && _bLineRemoving === false){
  481. _bLineRemoving = true;
  482. var oParent = this;
  483. for(var iCont=0;iCont<_aLinesDraw.length;iCont++){
  484. createjs.Tween.get(_aLinesDraw[iCont].line).wait(120).to({alpha:0}, 200).call(function(){
  485. oParent.removeAllLines();
  486. });
  487. }
  488. }
  489. }
  490. this.checkCollisionWithFruit();
  491. _iTimeComboElaps += s_iTimeElaps;
  492. if(_iTimeComboElaps > TIME_FOR_COMBO){
  493. if(_iFruitSlicedInCombo > 1){
  494. //WE HAVE A COMBO!
  495. this.showCombo();
  496. }
  497. _iFruitSlicedInCombo = 0;
  498. _iTimeComboElaps = 0;
  499. }
  500. };
  501. s_oGame=this;
  502. OCCURENCE_FRUIT = oData.occurence_fruit;
  503. MAX_FRUIT_ROT_SPEED = oData.max_fruit_rot_speed;
  504. NUM_LIVES = oData.num_lives;
  505. STARTING_SIMULTANEOUS_FRUITS = oData.start_sim_fruit;
  506. MAX_SIMULTANEOUS_FRUITS = oData.max_sim_fruits;
  507. FRUIT_TO_CUT_FOR_LEVEL_UP = oData.fruits_for_level_up;
  508. TIME_FOR_COMBO = oData.time_for_combo;
  509. COMBO_TWO_FRUIT = oData.combo_points;
  510. new CFruitSettings();
  511. this._init();
  512. }
  513. var s_oGame;