local FuncNode_ForwardWallDistCompare = class("FuncNode_ForwardWallDistCompare") --[[ 初始化 --]] function FuncNode_ForwardWallDistCompare:initialize(entity) self.LimitChildCount = 2 self.Type = LuaConst.ConditionFuncType.ForwardWallDistCompare end local _tempV1CompareToValue = FP.newV1(0) local _tempV2Probe = FP.newV2(0,0) local _tempV2Dir = FP.newV2(1,0) local _tempV1WallDist = FP.newV1(0) --[[ 执行 --]] function FuncNode_ForwardWallDistCompare:Run(conditionDataNode, entity, missile) _tempV1CompareToValue:Reset(conditionDataNode.FirstNode:Run(entity, missile)) _tempV2Dir:Reset(entity.components.move.LogicRotateDir) _tempV2Dir:Normalize() _tempV1WallDist:Reset(999999) --先设置一个极大的值 local const_entityPos = entity:GetLogicPos() --只用检测_tempV1CompareToValue + 1以内的格子有没有墙, +1是为了多搜寻一格,防止边界情况 for i=1, FP.tonumberV1(_tempV1CompareToValue) + 1 do _tempV2Probe:Reset(_tempV2Dir):Mul(i):Add(const_entityPos) if not LuaShoveManager.IsMovablePos(_tempV2Probe) then _tempV1WallDist:Reset(i) break end end local relationType = FP.tonumberV1(conditionDataNode.SecondNode:Run(entity, missile)) local ConditionAnalysis = require "Battle/Logic/AI/Condition/ConditionAnalysis" return ConditionAnalysis.CommonValueCompare(relationType, _tempV1WallDist, _tempV1CompareToValue) end return FuncNode_ForwardWallDistCompare