| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- local gameActorState = require( "actor/gameActorState")
- local gameActorStatePlayerOnPush = class('gameActorStatePlayerOnPush', gameActorState)
- local mMin = math.min
- local mAbs = math.abs
- local mFloor = math.floor
- local mRound = math.round
- function gameActorStatePlayerOnPush:ctor()
- gameActorStatePlayerOnPush.super.ctor(self)
- end
- function gameActorStatePlayerOnPush:GetStateID()
- return global.MMO.ACTION_ONPUSH
- end
- function gameActorStatePlayerOnPush:Tick(dt, actor)
- actor.mCurrentActT = actor.mCurrentActT - dt
- actor.mOnPushIdleT = actor.mOnPushIdleT - dt
- if not actor.mIsArrived then
- -- Timing...
- if actor.mCurrentActT <= 0.0 then
- actor:SetIsArrived(true)
- end
- -- displacement
- local percent = (actor.mMoveTime - actor.mCurrentActT) / actor.mMoveTime
- percent = mMin(1, percent)
- local disp = percent * actor.mDistanceToTarget
- local dispV = cc.pAdd( cc.p(actor.originPosition), cc.pMul(actor.mMoveOrient, disp) )
- if global.isWinPlayMode and actor:IsPlayer() and actor:IsMainPlayer() then
- dispV.x = mRound(dispV.x)
- dispV.y = mRound(dispV.y)
- end
-
- actor:setPosition( dispV.x, dispV.y )
- -- idle anim
- if actor.mIsArrived and actor.mOnPushIdleT > 0 then
- actor:SetAnimAct(global.MMO.ANIM_IDLE)
- actor:dirtyAnimFlag()
- end
- end
- if actor.mActionHandler then
- if actor.mIsArrived and actor.mOnPushIdleT <= 0 then
- actor.mActionHandler:handleActionCompleted( actor, self:GetStateID() )
- else
- actor.mActionHandler:handleActionProcess( actor, self:GetStateID(), dt )
- end
- end
- end
- function gameActorStatePlayerOnPush:OnEnter(actor)
- if actor.mActionHandler then
- actor.mActionHandler:handleActionBegin( actor, self:GetStateID() )
- end
- local currPos = cc.p(actor:getPosition())
- local targPos = global.sceneManager:MapPos2WorldPos( actor:GetMapX(), actor:GetMapY(), true )
- actor.mTargePos = targPos
- actor.mMoveOrient = cc.pSub(targPos, currPos)
- actor.mDistanceToTarget = cc.pGetLength(actor.mMoveOrient)
- actor.mMoveOrient = cc.pNormalize(actor.mMoveOrient)
- actor.mMoveTime = actor.mCurrentActT
- actor.originPosition = actor:getPosition()
- actor.mIsArrived = false
- actor.mOnPushIdleT = actor.mOnPushIdleT + actor.mCurrentActT
- -- reset some data
- actor:SetAnimPrepare( 0.0 )
- actor:dirtyAnimFlag()
- end
- function gameActorStatePlayerOnPush:OnExit(actor)
- actor.mCurrentActT = 0
- actor.mOnPushIdleT = 0
- -- reset some data
- actor:SetAnimPrepare( 0.0 )
- actor:dirtyAnimFlag()
- end
- function gameActorStatePlayerOnPush:ChangeState(newState, actor, isTerminate)
- actor.mCurrentState = newState
- return true
- end
- return gameActorStatePlayerOnPush
|