CFruit.js 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. function CFruit(iX,iY,oSpriteSheet,oDim,iSpeed,iType,oAttachContainer){
  2. var _bSliced;
  3. var _iRadius;
  4. var _iShiftx;
  5. var _iShiftLeftX;
  6. var _iShiftRightX;
  7. var _iSpeed;
  8. var _iRunTime = 0;
  9. var _iRunFactor;
  10. var _iRotFactor;
  11. var _iRotFactorSlice1;
  12. var _iRotFactorSlice2;
  13. var _iRunTimeSlice1 = 0;
  14. var _iRunTimeSlice2 = 0;
  15. var _iSliceLenOffset;
  16. var _iType;
  17. var _oDim;
  18. var _vStartDir;
  19. var _oSprite;
  20. var _oSlice1;
  21. var _oSlice2;
  22. var _oThisFruit;
  23. var _oAttachContainer;
  24. this._init = function(iX,iY,oSpriteSheet,oDim,iSpeed,iType,oAttachContainer){
  25. _oAttachContainer = oAttachContainer;
  26. _oSprite = createSprite(oSpriteSheet, "idle",oDim.regX,oDim.regY,oDim.width,oDim.height);
  27. _oSprite.x = iX;
  28. _oSprite.y = iY;
  29. _oAttachContainer.addChild(_oSprite);
  30. _bSliced= false;
  31. _oDim = oDim;
  32. if(_oDim.width < _oDim.height){
  33. _iRadius = Math.floor(_oDim.width/2);
  34. }else{
  35. _iRadius = Math.floor(_oDim.height/2);
  36. }
  37. _iSliceLenOffset = Math.floor((_iRadius * 2) * 0.5);
  38. _iSliceLenOffset = Math.pow(_iSliceLenOffset,2);
  39. _iSpeed = iSpeed;
  40. _iRunFactor = _iSpeed/9;
  41. if(iX > (CANVAS_WIDTH/2) ){
  42. _iShiftx = randomFloatBetween(-0.5,0,2);
  43. }else{
  44. _iShiftx = randomFloatBetween(0,0.5,2);
  45. }
  46. _iRotFactor = randomFloatBetween(-MAX_FRUIT_ROT_SPEED,MAX_FRUIT_ROT_SPEED,2);
  47. _vStartDir = new CVector2(0,-1);
  48. _iType = iType;
  49. };
  50. this.unload = function(){
  51. _oAttachContainer.removeChild(_oSprite);
  52. };
  53. this.setInfoAfterSlice = function(){
  54. _bSliced = true;
  55. if(_oSprite.rotation > 90){
  56. _iRunTimeSlice1 = _iRunTime + (_iRunFactor*2);
  57. _iRunTimeSlice2 = _iRunTime - (_iRunFactor*2);
  58. _iShiftLeftX = _iShiftx + 0.1;
  59. _iShiftRightX = _iShiftx - 0.1;
  60. _iRotFactorSlice1 = _iRotFactor * 1.2;
  61. _iRotFactorSlice2 = -_iRotFactor * 1.2;
  62. }else{
  63. _iRunTimeSlice1 = _iRunTime - (_iRunFactor*2);
  64. _iRunTimeSlice2 = _iRunTime + (_iRunFactor*2);
  65. _iShiftLeftX = _iShiftx - 0.1;
  66. _iShiftRightX = _iShiftx + 0.1;
  67. _iRotFactorSlice1 = -_iRotFactor * 1.2;
  68. _iRotFactorSlice2 = _iRotFactor * 1.2;
  69. }
  70. if(DISABLE_SOUND_MOBILE === false || s_bMobile === false){
  71. playSound(s_aFruitSpliceSound[_iType],1,false);
  72. }
  73. };
  74. this.sliceDiagonalRight = function(){
  75. this.setInfoAfterSlice();
  76. _oSlice1 = createSprite(oSpriteSheet, "slice_1",oDim.regX,oDim.regY,oDim.width,oDim.height);
  77. _oSlice1.x = _oSprite.x;
  78. _oSlice1.y = _oSprite.y;
  79. _oSlice1.rotation =_oSprite.rotation;
  80. _oAttachContainer.addChild(_oSlice1);
  81. _oSlice2 = createSprite(oSpriteSheet, "slice_2",oDim.regX,oDim.regY,oDim.width,oDim.height);
  82. _oSlice2.x = _oSprite.x;
  83. _oSlice2.y = _oSprite.y;
  84. _oSlice2.rotation =_oSprite.rotation;
  85. _oAttachContainer.addChild(_oSlice2);
  86. _oThisFruit.unload();
  87. };
  88. this.sliceDiagonalLeft = function(){
  89. this.setInfoAfterSlice();
  90. _oSlice1 = createSprite(oSpriteSheet, "slice_3",oDim.regX,oDim.regY,oDim.width,oDim.height);
  91. _oSlice1.x = _oSprite.x;
  92. _oSlice1.y = _oSprite.y;
  93. _oSlice1.rotation =_oSprite.rotation;
  94. _oAttachContainer.addChild(_oSlice1);
  95. _oSlice2 = createSprite(oSpriteSheet, "slice_4",oDim.regX,oDim.regY,oDim.width,oDim.height);
  96. _oSlice2.x = _oSprite.x;
  97. _oSlice2.y = _oSprite.y;
  98. _oSlice2.rotation =_oSprite.rotation;
  99. _oAttachContainer.addChild(_oSlice2);
  100. _oThisFruit.unload();
  101. };
  102. this.sliceVertical = function(){
  103. this.setInfoAfterSlice();
  104. _oSlice1 = createSprite(oSpriteSheet, "slice_5",oDim.regX,oDim.regY,oDim.width,oDim.height);
  105. _oSlice1.x = _oSprite.x;
  106. _oSlice1.y = _oSprite.y;
  107. _oSlice1.rotation =_oSprite.rotation;
  108. _oAttachContainer.addChild(_oSlice1);
  109. _oSlice2 = createSprite(oSpriteSheet, "slice_6",oDim.regX,oDim.regY,oDim.width,oDim.height);
  110. _oSlice2.x = _oSprite.x;
  111. _oSlice2.y = _oSprite.y;
  112. _oSlice2.rotation =_oSprite.rotation;
  113. _oAttachContainer.addChild(_oSlice2);
  114. _oThisFruit.unload();
  115. };
  116. this.sliceHorizontal = function(){
  117. this.setInfoAfterSlice();
  118. _oSlice1 = createSprite(oSpriteSheet, "slice_7",oDim.regX,oDim.regY,oDim.width,oDim.height);
  119. _oSlice1.x = _oSprite.x;
  120. _oSlice1.y = _oSprite.y;
  121. _oSlice1.rotation =_oSprite.rotation;
  122. _oAttachContainer.addChild(_oSlice1);
  123. _oSlice2 = createSprite(oSpriteSheet, "slice_8",oDim.regX,oDim.regY,oDim.width,oDim.height);
  124. _oSlice2.x = _oSprite.x;
  125. _oSlice2.y = _oSprite.y;
  126. _oSlice2.rotation =_oSprite.rotation;
  127. _oAttachContainer.addChild(_oSlice2);
  128. _oThisFruit.unload();
  129. };
  130. this.getCenter = function(){
  131. return new CVector2(_oSprite.x,_oSprite.y);
  132. };
  133. this.getRadius = function(){
  134. return _iRadius;
  135. };
  136. this.getSliceOffset = function(){
  137. return _iSliceLenOffset;
  138. };
  139. this.getX = function(){
  140. return _oSprite.x;
  141. };
  142. this.getY = function(){
  143. return _oSprite.y;
  144. };
  145. this.getSprite = function(){
  146. return _oSprite;
  147. };
  148. this.getRotation = function(){
  149. return _oSprite.rotation;
  150. };
  151. this.getVectorDir = function(){
  152. return rotateVector2D(toRadian(-_oSprite.rotation),_vStartDir);
  153. };
  154. this.isSliced = function(){
  155. return _bSliced;
  156. };
  157. this.getType = function(){
  158. return _iType;
  159. };
  160. this.update = function(){
  161. _iRunTime += _iRunFactor;
  162. if(_bSliced === false){
  163. _oSprite.y = _oSprite.y - _iSpeed + _iRunTime * _iRunTime/1000;
  164. _oSprite.x = _oSprite.x + _iRunTime*0.1*_iShiftx;
  165. _oSprite.rotation += _iRotFactor;
  166. }else{
  167. _iRunTimeSlice1 += _iRunFactor;
  168. _oSlice1.y = _oSlice1.y - _iSpeed + _iRunTimeSlice1 * _iRunTimeSlice1/1000;
  169. _oSlice1.x = _oSlice1.x + _iRunTime*0.1*_iShiftLeftX;
  170. _oSlice1.rotation += _iRotFactorSlice1;
  171. _iRunTimeSlice2 += _iRunFactor;
  172. _oSlice2.y = _oSlice2.y - _iSpeed + _iRunTimeSlice2 * _iRunTimeSlice2/1000;
  173. _oSlice2.x = _oSlice2.x + _iRunTime*0.1*_iShiftRightX;
  174. _oSlice2.rotation += _iRotFactorSlice2;
  175. var iRemove = 0;
  176. if(_oSlice1.y > Y_START_FRUIT){
  177. _oAttachContainer.removeChild(_oSlice1);
  178. iRemove++;
  179. }
  180. if(_oSlice2.y > Y_START_FRUIT){
  181. _oAttachContainer.removeChild(_oSlice1);
  182. iRemove++;
  183. }
  184. if(iRemove === 2){
  185. s_oGame.removeSlices(this);
  186. }
  187. }
  188. };
  189. _oThisFruit = this;
  190. this._init(iX,iY,oSpriteSheet,oDim,iSpeed,iType,oAttachContainer);
  191. }