gameActorStateMonsterOnPush.lua 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. local gameActorState = require( "actor/gameActorState")
  2. local gameActorStateMonsterOnPush = class('gameActorStateMonsterOnPush', gameActorState)
  3. local mMin = math.min
  4. local mAbs = math.abs
  5. local mFloor = math.floor
  6. function gameActorStateMonsterOnPush:ctor()
  7. gameActorStateMonsterOnPush.super.ctor(self)
  8. end
  9. function gameActorStateMonsterOnPush:GetStateID()
  10. return global.MMO.ACTION_ONPUSH
  11. end
  12. function gameActorStateMonsterOnPush:Tick(dt, actor)
  13. actor.mCurrentActT = actor.mCurrentActT - dt
  14. if not actor.mIsArrived then
  15. -- Timing...
  16. if actor.mCurrentActT <= 0.0 then
  17. actor:SetIsArrived(true)
  18. end
  19. -- displacement
  20. local percent = (actor.mMoveTime - actor.mCurrentActT) / actor.mMoveTime
  21. percent = mMin(1, percent)
  22. local disp = percent * actor.mDistanceToTarget
  23. local dispV = cc.pAdd( cc.p(actor.originPosition), cc.pMul(actor.mMoveOrient, disp) )
  24. actor:setPosition( dispV.x, dispV.y )
  25. end
  26. if actor.mActionHandler and actor.mIsArrived then
  27. actor.mActionHandler:handleActionCompleted( actor, self:GetStateID() )
  28. end
  29. end
  30. function gameActorStateMonsterOnPush:OnEnter(actor)
  31. if actor.mActionHandler then
  32. actor.mActionHandler:handleActionBegin( actor, self:GetStateID() )
  33. end
  34. local currPos = cc.p(actor:getPosition())
  35. local targPos = global.sceneManager:MapPos2WorldPos( actor:GetMapX(), actor:GetMapY(), true )
  36. actor.mTargePos = targPos
  37. actor.mMoveOrient = cc.pSub(targPos, currPos)
  38. actor.mDistanceToTarget = cc.pGetLength(actor.mMoveOrient)
  39. actor.mMoveOrient = cc.pNormalize(actor.mMoveOrient)
  40. actor.mMoveTime = actor.mCurrentActT
  41. actor.originPosition = actor:getPosition()
  42. actor.mIsArrived = false
  43. -- reset some data
  44. actor:dirtyAnimFlag()
  45. end
  46. function gameActorStateMonsterOnPush:OnExit(actor)
  47. actor.mCurrentActT = 0
  48. end
  49. function gameActorStateMonsterOnPush:ChangeState(newState, actor, isTerminate)
  50. actor.mCurrentState = newState
  51. return true
  52. end
  53. return gameActorStateMonsterOnPush