gameActorStatePlayerDashFail.lua 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. local gameActorStateMoveBase = require( "actor/gameActorStateMoveBase")
  2. local gameActorStatePlayerDashFail = class('gameActorStatePlayerWalk', gameActorStateMoveBase)
  3. function gameActorStatePlayerDashFail:ctor()
  4. self.super.ctor(self)
  5. end
  6. function gameActorStatePlayerDashFail:GetStateID()
  7. return global.MMO.ACTION_DASH_FAIL
  8. end
  9. function gameActorStatePlayerDashFail:Tick(dt, actor)
  10. gameActorStatePlayerDashFail.super.Tick(self, dt, actor)
  11. if not self.mReBoundFinsh and actor.mIsArrived then
  12. local targPos = global.sceneManager:MapPos2WorldPos( actor:GetMapX(), actor:GetMapY(), true )
  13. actor:setPosition( targPos.x, targPos.y )
  14. self.mReBoundFinsh = true
  15. actor:SetConfirmed(true)
  16. end
  17. end
  18. function gameActorStatePlayerDashFail:OnEnter( actor )
  19. local currPos = cc.p(actor:getPosition())
  20. local targPos = global.sceneManager:MapPos2WorldPos( actor:GetMapX(), actor:GetMapY(), true )
  21. local actorDir = actor:GetDirection()
  22. local gridFactor = 0.5
  23. if actorDir == global.MMO.ORIENT_U then
  24. targPos.y = targPos.y + global.MMO.MapGridHeight * gridFactor
  25. elseif actorDir == global.MMO.ORIENT_RU then
  26. targPos.x = targPos.x + global.MMO.MapGridWidth * gridFactor
  27. targPos.y = targPos.y + global.MMO.MapGridHeight * gridFactor
  28. elseif actorDir == global.MMO.ORIENT_R then
  29. targPos.x = targPos.x + global.MMO.MapGridWidth * gridFactor
  30. elseif actorDir == global.MMO.ORIENT_RB then
  31. targPos.x = targPos.x + global.MMO.MapGridWidth * gridFactor
  32. targPos.y = targPos.y - global.MMO.MapGridHeight * gridFactor
  33. elseif actorDir == global.MMO.ORIENT_B then
  34. targPos.y = targPos.y - global.MMO.MapGridHeight * gridFactor
  35. elseif actorDir == global.MMO.ORIENT_LB then
  36. targPos.x = targPos.x - global.MMO.MapGridWidth * gridFactor
  37. targPos.y = targPos.y - global.MMO.MapGridHeight * gridFactor
  38. elseif actorDir == global.MMO.ORIENT_L then
  39. targPos.x = targPos.x - global.MMO.MapGridWidth * gridFactor
  40. elseif actorDir == global.MMO.ORIENT_LU then
  41. targPos.x = targPos.x - global.MMO.MapGridWidth * gridFactor
  42. targPos.y = targPos.y + global.MMO.MapGridHeight * gridFactor
  43. end
  44. local animTime = actor:GetRunStepTime() / actor:GetRunSpeed() / 4
  45. actor.mTargePos = targPos
  46. actor.mMoveOrient = cc.pSub(targPos, currPos)
  47. actor.mDistanceToTarget = cc.pGetLength( actor.mMoveOrient )
  48. actor.mMoveOrient = cc.pNormalize(actor.mMoveOrient)
  49. actor.mIsArrived = false
  50. actor.mCurrentActT = animTime
  51. actor.mMoveTime = animTime
  52. actor.originPosition = actor:getPosition()
  53. self.mReBoundFinsh = false
  54. if actor.mActionHandler then
  55. actor.mActionHandler:handleActionBegin( actor, self:GetStateID() )
  56. end
  57. -- reset some data
  58. actor:SetConfirmed(false)
  59. actor:SetAnimPrepare( 0.0 )
  60. actor:dirtyAnimFlag()
  61. end
  62. function gameActorStatePlayerDashFail:OnExit( actor )
  63. actor:SetAnimPrepare(0.1)
  64. actor:StopAllAnimation(6)
  65. end
  66. return gameActorStatePlayerDashFail