|
NowOperateTargetMove = NowOperateTargetMove or BaseClass(NowOperateMove)
|
|
local NowOperateTargetMove = NowOperateTargetMove
|
|
function NowOperateTargetMove:__init(start_time, start_pos, end_pos, target, range,scene_obj)
|
|
NowOperateMove.__init(self, start_time, start_pos, end_pos,false,scene_obj)
|
|
|
|
self.target= target
|
|
self.range = range
|
|
self.scene_obj = scene_obj
|
|
--每隔一段时间重新检测路径
|
|
self.check_time_delta = 1
|
|
self.check_time = Status.NowTime
|
|
--print("NowOperateTargetMove:__init", self.check_time)
|
|
end
|
|
|
|
|
|
function NowOperateTargetMove:ExcuteImpl(elaspe_time)
|
|
local scene_obj = self.scene_obj or Scene.Instance:GetMainRole()
|
|
|
|
--每隔一段时间重新检测路径,所以可以停止当前路径
|
|
if Status.NowTime - self.check_time >= self.check_time_delta then
|
|
scene_obj:WaitForNextMove() --会有抖动
|
|
self.is_end = true
|
|
--print("NowOperateTargetMove:ExcuteImpl Stop Cur path 1", Status.NowTime, self.check_time)
|
|
return true
|
|
end
|
|
|
|
--如果与目标的距离达到范围内,也要停止当前路径
|
|
local x1, y1 = scene_obj:GetRealPos()
|
|
local x2, y2 = self.target:GetRealPos()
|
|
|
|
--local dir = co.Vector2(x2-x1, y2-y1)
|
|
-- local distance = dir:length()
|
|
local distance = GameMath.GetDistance(x1, y1, x2, y2, false)
|
|
--距离在可动作范围内
|
|
local d = (self.range > 5) and (self.range - 5) or self.range
|
|
if distance < d * d then
|
|
scene_obj:WaitForNextMove()
|
|
self.is_end = true
|
|
--print("NowOperateTargetMove:ExcuteImpl Stop Cur path 2", distance)
|
|
return true
|
|
end
|
|
|
|
return NowOperateMove.ExcuteImpl(self, elaspe_time)
|
|
end
|