CHook.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. function CHook(oSpriteHookClosed){
  2. var _iRotSpeed;
  3. var _iRotFactor;
  4. var _iXPos;
  5. var _iYPos;
  6. var _iDir;
  7. var _iMinRopeLen = 50;
  8. var _fRopeSpeed = HOOK_SPEED;
  9. var _iRopeLen = 0;
  10. var _vDir = {x:0,y:1};
  11. var _oLine;
  12. var _oLineGfx;
  13. var _oHookSprite;
  14. this._init = function(oSpriteHookClosed){
  15. _iRotFactor = 0;
  16. _iRotSpeed = 2;
  17. _oLineGfx = new createjs.Graphics();
  18. _oLineGfx.setStrokeStyle(2);
  19. _oLineGfx.beginStroke("#000");
  20. _oLineGfx.moveTo(HOOK_START_X,HOOK_START_Y);
  21. _oLineGfx.lineTo(HOOK_START_X,HOOK_START_Y+_iMinRopeLen);
  22. _oLine = new createjs.Shape(_oLineGfx);
  23. s_oStage.addChild(_oLine);
  24. _oHookSprite = createBitmap(oSpriteHookClosed);
  25. _oHookSprite.x = HOOK_START_X;
  26. _oHookSprite.y = HOOK_START_Y;
  27. _oHookSprite.regX = oSpriteHookClosed.width/2;
  28. _oHookSprite.regY = 0;
  29. s_oStage.addChild(_oHookSprite);
  30. this._drawLine();
  31. };
  32. this.reset = function(){
  33. _iRopeLen = 0;
  34. _iXPos = HOOK_START_X;
  35. _iYPos = HOOK_START_Y+_iMinRopeLen;
  36. };
  37. this.normalize = function(v){
  38. var len = Math.sqrt( v.x*v.x+v.y*v.y );
  39. if (len > 0 ){
  40. v.x/= len; v.y/=len;
  41. }
  42. };
  43. this.rotateVector2D = function( iAngle, v ) {
  44. var iX = v.x * Math.cos( iAngle ) + v.y * Math.sin( iAngle );
  45. var iY = v.x * (-Math.sin( iAngle )) + v.y * Math.cos( iAngle );
  46. v.x = iX;
  47. v.y = iY ;
  48. };
  49. this.toDegree = function(iAngleRad){
  50. return iAngleRad * (180/Math.PI);
  51. };
  52. this._drawLine = function(){
  53. var fLerp = Math.sin(_iRotFactor);
  54. _vDir.x = 0;
  55. _vDir.y = 1;
  56. var fCurAngle = ((Math.PI/2)*0.8) *fLerp;
  57. this.rotateVector2D( fCurAngle,_vDir);
  58. this.normalize(_vDir);
  59. var iNewX = _vDir.x * ( _iMinRopeLen + _iRopeLen);
  60. var iNewY = _vDir.y * ( _iMinRopeLen + _iRopeLen);
  61. _iXPos = HOOK_START_X+iNewX;
  62. _iYPos = HOOK_START_Y+iNewY;
  63. _oLineGfx.clear();
  64. _oLineGfx.setStrokeStyle(1);
  65. _oLineGfx.beginStroke("#000");
  66. _oLineGfx.moveTo(HOOK_START_X,HOOK_START_Y);
  67. _oLineGfx.lineTo(_iXPos,_iYPos);
  68. _oHookSprite.x = _iXPos;
  69. _oHookSprite.y = _iYPos;
  70. _oHookSprite.rotation = -(this.toDegree(fCurAngle));
  71. };
  72. this.updateRotation = function(iSpeed){
  73. _iRotFactor += iSpeed;
  74. this._drawLine();
  75. };
  76. this.updateMove = function(){
  77. _iRopeLen += _fRopeSpeed;
  78. this._drawLine();
  79. if(_oHookSprite.y > CANVAS_HEIGHT || _oHookSprite.x < 0 || _oHookSprite.x>CANVAS_WIDTH){
  80. s_oGame.hookOutOfBounds();
  81. }
  82. };
  83. this.updateMoveBack = function(iSlowDown){
  84. _iRopeLen -= (_fRopeSpeed-iSlowDown);
  85. this._drawLine();
  86. if( _iRopeLen < 0 ){
  87. s_oGame.changeState(STATE_HOOK_ROTATE);
  88. }
  89. };
  90. this.getPos = function(){
  91. return { x: _iXPos,
  92. y: _iYPos};
  93. };
  94. this.getCurDir = function(){
  95. return _iDir;
  96. };
  97. this.getRotationDeg = function(){
  98. return _oHookSprite.rotation;
  99. };
  100. this._init(oSpriteHookClosed);
  101. }