gameActorStateMonsterAttack.lua 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. local gameActorState = require( "actor/gameActorState")
  2. local gameActorStateMonsterAttack = class('gameActorStateMonsterAttack', gameActorState)
  3. function gameActorStateMonsterAttack:ctor()
  4. gameActorStateMonsterAttack.super.ctor(self)
  5. end
  6. function gameActorStateMonsterAttack:Tick(dt, monster)
  7. if not monster.mIsArrived then
  8. monster.mCurrentActT = monster.mCurrentActT-dt
  9. if monster.mCurrentActT <= 0.00001 then
  10. monster:SetIsArrived(true)
  11. monster.mActionHandler:handleActionCompleted( monster, global.MMO.ACTION_ATTACK )
  12. end
  13. end
  14. end
  15. function gameActorStateMonsterAttack:OnEnter( monster)
  16. local animTime = global.FrameAnimManager:GetAnimTotalDuration(monster:GetAnimationID(), global.MMO.SFANIM_TYPE_MONSTER, global.MMO.ANIM_ATTACK)
  17. monster.mCurrentActT = animTime / monster:GetAttackSpeed()
  18. monster:SetIsArrived(false)
  19. monster.mActionHandler:handleActionBegin( monster, global.MMO.ACTION_ATTACK, monster.mOrient, 0 )
  20. end
  21. function gameActorStateMonsterAttack:OnExit( actor )
  22. actor:StopAllAnimation()
  23. actor:dirtyAnimFlag()
  24. end
  25. function gameActorStateMonsterAttack:ChangeState(newState, monster, isTerminate)
  26. monster.mCurrentState = newState
  27. return true
  28. end
  29. function gameActorStateMonsterAttack:GetStateID()
  30. return global.MMO.ACTION_ATTACK
  31. end
  32. function gameActorStateMonsterAttack:OnAnimLoadCompleted(monster, animAct, elapsed)
  33. if animAct ~= global.MMO.ANIM_ATTACK then
  34. return false
  35. end
  36. local animTime = global.FrameAnimManager:GetAnimTotalDuration(monster:GetAnimationID(), global.MMO.SFANIM_TYPE_MONSTER, global.MMO.ANIM_ATTACK) - elapsed
  37. monster.mCurrentActT = animTime / monster:GetAttackSpeed()
  38. end
  39. return gameActorStateMonsterAttack