local CircleMissileShape = {} local FP = require("Common/fixedpoint") local _posTemp = FP.newV2(0, 0) local _dirTemp = FP.newV2(0, 0) local _rightTemp = FP.newV2(0, 0) local _radiusTemp = FP.newV1(0) local _innerRadiusTemp = FP.newV1(0) local FP_V2_IsDistanceSqrGreater = FP.V2.IsDistanceSqrGreater function CircleMissileShape.SetMissileTrigger(data,pos,dir) _posTemp:Reset(pos) _dirTemp:Reset(dir) _rightTemp.x:Reset(dir.z) _rightTemp.z:Reset(dir.x):Negative() local dirClone = _dirTemp:cloneV2() local rightClone = _rightTemp:cloneV2() _posTemp:Add(dirClone:Mul(data.OffsetZ)) _posTemp:Add(rightClone:Mul(data.OffsetX)) FP.releaseV2(dirClone) FP.releaseV2(rightClone) end function CircleMissileShape.CanEnterTrigger(missile, hitEntityPos,hitEntityRadius) _radiusTemp:Reset(missile.overrideShapeParam1 or missile.MissileData.ShapeParam1) --内联以节省性能,以前是 missile:GetShapeParam1 if hitEntityRadius and hitEntityRadius > 0 then _radiusTemp:Add(hitEntityRadius) end _radiusTemp:Mul(_radiusTemp) local innerRadius = missile.overrideShapeParam3 or missile.MissileData.ShapeParam3 --内联以节省性能,以前是 missile:GetShapeParam3 if innerRadius and innerRadius ~= FP.Const.Zero then _innerRadiusTemp:Reset(innerRadius):Mul(innerRadius) return not FP_V2_IsDistanceSqrGreater(_posTemp, hitEntityPos, _radiusTemp) and FP_V2_IsDistanceSqrGreater(_posTemp, hitEntityPos, _innerRadiusTemp) else return not FP_V2_IsDistanceSqrGreater(_posTemp, hitEntityPos, _radiusTemp) end end return CircleMissileShape