gameActorStatePlayerZXC.lua 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. local gameActorState = require( "actor/gameActorState")
  2. local gameActorStatePlayerZXC = class('gameActorStatePlayerZXC', gameActorState)
  3. local mRound = math.round
  4. function gameActorStatePlayerZXC:ctor()
  5. gameActorStatePlayerZXC.super.ctor(self)
  6. end
  7. function gameActorStatePlayerZXC:GetStateID()
  8. return global.MMO.ACTION_ZXC
  9. end
  10. -----------------------------------------------------------------------------
  11. function gameActorStatePlayerZXC:Tick(dt, player)
  12. player.mCurrentActT = player.mCurrentActT - dt
  13. if not player.mIsArrived then
  14. -- Timing...
  15. if player.mCurrentActT <= 0.0 then
  16. player:SetIsArrived(true)
  17. end
  18. -- displacement
  19. local percent = (player.mMoveTime - player.mCurrentActT) / player.mMoveTime
  20. percent = math.min(1, percent)
  21. local disp = percent * player.mDistanceToTarget
  22. local dispV = cc.pAdd( cc.p(player.originPosition), cc.pMul(player.mMoveOrient, disp) )
  23. if global.isWinPlayMode and player:IsPlayer() and player:IsMainPlayer() then
  24. dispV.x = mRound(dispV.x)
  25. dispV.y = mRound(dispV.y)
  26. end
  27. player:setPosition( dispV.x, dispV.y )
  28. end
  29. if player.mActionHandler then
  30. if player.mIsArrived then
  31. print("施法动作完成。。。。。。。。。。。。。。。。。。。。")
  32. player.mActionHandler:handleActionCompleted( player, self:GetStateID() )
  33. else
  34. player.mActionHandler:handleActionProcess( player, self:GetStateID(), dt )
  35. end
  36. end
  37. end
  38. -----------------------------------------------------------------------------
  39. function gameActorStatePlayerZXC:OnEnter(player)
  40. if player.mActionHandler then
  41. player.mActionHandler:handleActionBegin( player, self:GetStateID() )
  42. end
  43. print("开始施法动作。。。。。。。。。。。。。")
  44. local clothID = player:GetAnimationID()
  45. local SkillPoxy = global.Facade:retrieveProxy(global.ProxyTable.Skill)
  46. local sex = player:GetValueByKey( global.MMO.BUFF_PLAYER_AVATAR_SEX ) or player:GetSexID()
  47. local defaultTime = SkillPoxy:GetSkillActionTime(global.MMO.ACTION_ZXC, clothID, sex) or global.MMO.DEFAULT_ZXC_TIME
  48. local attackSpeed = player:GetAttackSpeed()
  49. if SkillPoxy:GetSkillActionSpeed(global.MMO.ANIM_ZXC) == 1 then
  50. attackSpeed = player:GetMagicSpeed()
  51. end
  52. local animTime = defaultTime / attackSpeed
  53. player.mCurrentActT = animTime
  54. local currPos = cc.p(player:getPosition())
  55. local targPos = global.sceneManager:MapPos2WorldPos( player:GetMapX(), player:GetMapY(), true )
  56. player.mTargePos = targPos
  57. player.mMoveOrient = cc.pSub(targPos, currPos)
  58. player.mDistanceToTarget = cc.pGetLength(player.mMoveOrient)
  59. player.mMoveOrient = cc.pNormalize(player.mMoveOrient)
  60. player.mMoveTime = player.mCurrentActT
  61. player.originPosition = player:getPosition()
  62. player.mIsArrived = false
  63. -- reset some data
  64. player:SetAnimPrepare( 0.0 )
  65. player:dirtyAnimFlag()
  66. end
  67. -----------------------------------------------------------------------------
  68. function gameActorStatePlayerZXC:OnExit(player)
  69. player.mCurrentActT = 0
  70. -- reset prepare time
  71. player:SetAnimPrepare( 0.0 )
  72. player:dirtyAnimFlag()
  73. end
  74. -----------------------------------------------------------------------------
  75. function gameActorStatePlayerZXC:ChangeState(newState, player, isTerminate)
  76. player.mCurrentState = newState
  77. return true
  78. end
  79. return gameActorStatePlayerZXC
  80. -----------------------------------------------------------------------------