コード例 #1
0
ファイル: AreaEmitter.cs プロジェクト: ahvonenj/TheForest
        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++;
                }
            }
        }
コード例 #2
0
ファイル: AreaEmitter.cs プロジェクト: ahvonenj/TheForest
        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;
        }
コード例 #3
0
ファイル: AreaEmitter.cs プロジェクト: ahvonenj/TheForest
 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;
 }