static public float GetCornerDistanceExt(this Cover cover, bool rightSide, float testedCollisionDistance) { float testedCornerDistanceLeftRight = 1.2f; float testedCornerDistanceForward = 1.0f; // TODO : we can compute this calue using distance to the wall Vector3 fromPos, forward, rightPos, leftPos, right; cover.GetMetricsExt(out fromPos, out right, out forward, out rightPos, out leftPos); // new approach Vector3 fromPosRFrom = rightPos + right * testedCornerDistanceLeftRight; Vector3 fromPosRTo = fromPosRFrom + forward * testedCornerDistanceForward; Vector3 fromPosLFrom = leftPos - right * testedCornerDistanceLeftRight; Vector3 fromPosLTo = fromPosLFrom + forward * testedCornerDistanceForward; MinMaxPair tmp = new MinMaxPair(); tmp.Reset(); if (rightSide) { CoverUtils.LineDistanceCast(fromPosRFrom, fromPosRTo, -right, testedCollisionDistance, ref tmp, testedCornerDistanceLeftRight); } else // left { CoverUtils.LineDistanceCast(fromPosLFrom, fromPosLTo, right, testedCollisionDistance, ref tmp, testedCornerDistanceLeftRight); } return(tmp.m_MaxValue); }
static public MinMaxPair GetWallDistanceExt(this Cover cover, float testedWallDistance) { float testedDistance = testedWallDistance + 0.05f; Vector3 fromPos, forward, rightPos, leftPos, right; cover.GetMetricsExt(out fromPos, out right, out forward, out rightPos, out leftPos); MinMaxPair tmp = new MinMaxPair(); tmp.Reset(); CoverUtils.LineDistanceCast(rightPos, leftPos, forward, testedDistance, ref tmp); return(tmp); }