public void OccludeSegments(float sqrOccluderDistance, Vector3 rightOfLeft, Vector3 leftOfRight) { int i = 0; while (i < this.audibleSegmentCount) { int num = this.activeSegments[i]; bool flag = false; if (this.segments[num].sqrDistance >= sqrOccluderDistance) { Vector3 lhs = this.segments[num].closestPoint - LocalPlayer.Transform.position; lhs.y = 0f; if (Vector3.Dot(lhs, rightOfLeft) >= 0f && Vector3.Dot(lhs, leftOfRight) >= 0f) { List <AreaEmitter.Polygon.SegmentFlags> list; List <AreaEmitter.Polygon.SegmentFlags> expr_8A = list = this.segmentFlags; int index; int expr_8E = index = num; AreaEmitter.Polygon.SegmentFlags segmentFlags = list[index]; expr_8A[expr_8E] = (segmentFlags | AreaEmitter.Polygon.SegmentFlags.Occluded); this.audibleSegmentCount--; this.activeSegments[i] = this.activeSegments[this.audibleSegmentCount]; this.activeSegments[this.audibleSegmentCount] = num; flag = true; } } if (!flag) { i++; } } }
private void UpdateSegment(int index) { if (this.IsSegmentActive(index)) { return; } AreaEmitter.Segment value = this.segments[index]; Vector3 rhs = LocalPlayer.Transform.position - value.start; float num = Vector3.Dot(value.delta, rhs); if (num <= 0f) { value.closestT = 0f; value.closestPoint = value.start; } else { float num2 = num / value.length; if (num2 >= value.length) { value.closestT = 1f; value.closestPoint = value.start + value.delta; } else { value.closestT = num2 / value.length; value.closestPoint = value.start + value.delta * value.closestT; } } value.sqrDistance = (value.closestPoint - LocalPlayer.Transform.position).sqrMagnitude; List <AreaEmitter.Polygon.SegmentFlags> list; List <AreaEmitter.Polygon.SegmentFlags> expr_10D = list = this.segmentFlags; AreaEmitter.Polygon.SegmentFlags segmentFlags = list[index]; expr_10D[index] = (segmentFlags & ~AreaEmitter.Polygon.SegmentFlags.Occluded); if (value.sqrDistance < this.sqrMaximumDistance) { this.activeSegments.Add(index); List <AreaEmitter.Polygon.SegmentFlags> list2; List <AreaEmitter.Polygon.SegmentFlags> expr_14D = list2 = this.segmentFlags; segmentFlags = list2[index]; expr_14D[index] = (segmentFlags | AreaEmitter.Polygon.SegmentFlags.Active); } this.segments[index] = value; }
public void UpdateSegments(Func <Vector3, Vector2> InverseTransformPoint) { for (int i = 0; i < this.activeSegments.Count; i++) { List <AreaEmitter.Polygon.SegmentFlags> list; List <AreaEmitter.Polygon.SegmentFlags> expr_0D = list = this.segmentFlags; int index; int expr_1B = index = this.activeSegments[i]; AreaEmitter.Polygon.SegmentFlags segmentFlags = list[index]; expr_0D[expr_1B] = (segmentFlags & ~AreaEmitter.Polygon.SegmentFlags.Active); } this.activeSegments.Clear(); if (this.grid != null) { this.UpdateSegmentsWithGrid(InverseTransformPoint); } else { this.UpdateSegmentsWithoutGrid(); } this.audibleSegmentCount = this.activeSegments.Count; }