Ejemplo n.º 1
0
            public void Update(bool checkGroup, float breakGroupExpandDuration)
            {
                bool flag  = LocalPlayer.Inventory && LocalPlayer.Inventory.CurrentView == PlayerInventory.PlayerViews.World && Scene.Atmosphere;
                bool flag2 = PlayerPreferences.ShowOverlayIcons && flag;

                for (int i = 0; i < this._iconGroups.Count; i++)
                {
                    if (this._iconGroups[i].BreakGroupAlpha < 1f)
                    {
                        this._iconGroups[i].BreakGroupAlpha = Mathf.Clamp01(this._iconGroups[i].BreakGroupAlpha + Time.deltaTime / breakGroupExpandDuration);
                    }
                }
                for (int j = 0; j < this._iconSuperGroups.Count; j++)
                {
                    if (this._iconSuperGroups[j].BreakSuperGroupAlpha < 1f)
                    {
                        this._iconSuperGroups[j].BreakSuperGroupAlpha = Mathf.Clamp01(this._iconSuperGroups[j].BreakSuperGroupAlpha + Time.deltaTime / breakGroupExpandDuration);
                    }
                }
                for (int k = 0; k < this._icons.Count; k++)
                {
                    OverlayIcon overlayIcon = this._icons[k];
                    bool        flag3       = flag2;
                    if (flag2)
                    {
                        flag3 = (overlayIcon.IgnoreInCaveStatus || LocalPlayer.IsInCaves == overlayIcon.IsInCaves);
                    }
                    if (checkGroup && flag3)
                    {
                        if (overlayIcon.GroupDisplay)
                        {
                            flag3 = (overlayIcon.SuperGroupDisplay || overlayIcon.CurrentSuperGroup.BreakSuperGroup);
                        }
                        else if (overlayIcon.CurrentGroup.SuperGroupDisplay)
                        {
                            flag3 = (overlayIcon.CurrentGroup.BreakSuperGroup && overlayIcon.CurrentGroup.BreakGroup);
                        }
                        else
                        {
                            flag3 = (overlayIcon.CurrentGroup.CurrentSuperGroup.BreakSuperGroup && overlayIcon.CurrentGroup.BreakGroup);
                        }
                    }
                    if (flag3 && overlayIcon.ShouldRefreshTargetPosition)
                    {
                        if (!overlayIcon.target)
                        {
                            OverlayIconManager.Unregister(overlayIcon);
                            return;
                        }
                        overlayIcon.FinalTargetPosition = overlayIcon.target.position;
                    }
                    if (flag3 || overlayIcon._showing != flag3)
                    {
                        overlayIcon.DoUpdate(flag3, checkGroup);
                    }
                }
            }
Ejemplo n.º 2
0
        public void SetupIcon()
        {
            OverlayIcon component = this._iconGo.GetComponent <OverlayIcon>();

            if (component)
            {
                component.SetSubType(this._color);
            }
            bool flag = this._color > 0 && !base.enabled;

            if (this._iconGo.activeSelf != flag)
            {
                this._iconGo.SetActive(flag);
            }
            this._guiTex.color = this.CurrentColor;
        }
Ejemplo n.º 3
0
 public static void Unregister(OverlayIcon oi)
 {
     if (OverlayIconManager._instance)
     {
         if (OverlayIconManager._instance._icons.Count > oi.Type && OverlayIconManager._instance._icons[oi.Type] != null && OverlayIconManager._instance._icons[oi.Type]._icons.Contains(oi))
         {
             for (int i = 0; i < OverlayIconManager._instance._icons[oi.Type]._icons.Count; i++)
             {
                 float num;
                 if (OverlayIconManager._instance._icons[oi.Type]._icons[i].DistanceToOtherIcons.TryGetValue(oi.ID, out num))
                 {
                     if (num < OverlayIconManager._instance._groupingRange)
                     {
                         OverlayIconManager._instance._icons[oi.Type]._icons[i].InGroupingRangeIcons--;
                     }
                     if (num < OverlayIconManager._instance._superGroupingRange)
                     {
                         OverlayIconManager._instance._icons[oi.Type]._icons[i].InSuperGroupingRangeIcons--;
                     }
                 }
                 if (OverlayIconManager._instance._icons[oi.Type]._icons[i].DistanceToOtherIcons.ContainsKey(oi.ID))
                 {
                     OverlayIconManager._instance._icons[oi.Type]._icons[i].DistanceToOtherIcons.Remove(oi.ID);
                 }
             }
             oi.DistanceToOtherIcons.Clear();
             OverlayIconManager._instance._icons[oi.Type]._icons.Remove(oi);
             if (oi.GroupDisplay)
             {
                 OverlayIconManager._instance._icons[oi.Type].ProcessGroups(OverlayIconManager._instance._groupingRange, OverlayIconManager._instance._superGroupingRange);
             }
         }
         else if (OverlayIconManager._instance._dynamicIcons._icons.Contains(oi))
         {
             OverlayIconManager._instance._dynamicIcons._icons.Remove(oi);
         }
     }
 }
Ejemplo n.º 4
0
 public static void Register(OverlayIcon oi)
 {
     if (!CoopPeerStarter.DedicatedHost)
     {
         if (OverlayIconManager.Instance)
         {
             if (!oi.GetComponentInParent <Rigidbody>())
             {
                 if (oi.ID == 0)
                 {
                     oi.ID = OverlayIconManager.GetNewId();
                 }
                 while (OverlayIconManager._instance._icons.Count <= oi.Type)
                 {
                     OverlayIconManager._instance._icons.Add(null);
                 }
                 if (OverlayIconManager._instance._icons[oi.Type] == null)
                 {
                     OverlayIconManager._instance._icons[oi.Type] = new OverlayIconManager.OverlayIconType();
                 }
                 if (oi.DistanceToOtherIcons == null)
                 {
                     oi.DistanceToOtherIcons = new Dictionary <int, float>();
                     oi.TargetPosition       = oi.target.position;
                 }
                 if (oi.Type != 0 && oi.Type != 6)
                 {
                     for (int i = 0; i < OverlayIconManager._instance._icons[oi.Type]._icons.Count; i++)
                     {
                         OverlayIcon overlayIcon = OverlayIconManager._instance._icons[oi.Type]._icons[i];
                         float       num         = Vector3.Distance(oi.TargetPosition, overlayIcon.TargetPosition);
                         oi.DistanceToOtherIcons.Add(overlayIcon.ID, num);
                         overlayIcon.DistanceToOtherIcons.Add(oi.ID, num);
                         if (num < OverlayIconManager._instance._groupingRange)
                         {
                             oi.InGroupingRangeIcons++;
                             overlayIcon.InGroupingRangeIcons++;
                         }
                         if (num < OverlayIconManager._instance._superGroupingRange)
                         {
                             oi.InSuperGroupingRangeIcons++;
                             overlayIcon.InSuperGroupingRangeIcons++;
                         }
                     }
                     OverlayIconManager._instance._icons[oi.Type]._icons.Add(oi);
                     OverlayIconManager._instance._icons[oi.Type].ProcessGroups(OverlayIconManager._instance._groupingRange, OverlayIconManager._instance._superGroupingRange);
                 }
                 else
                 {
                     OverlayIconManager._instance._icons[oi.Type]._icons.Add(oi);
                 }
             }
             else
             {
                 OverlayIconManager._instance._dynamicIcons._icons.Add(oi);
                 oi.ShouldRefreshTargetPosition = true;
                 oi.BreakGroupAlpha             = 1f;
                 oi.BreakSuperGroupAlpha        = 1f;
                 oi.CurrentGroup = oi;
                 if (oi.target == oi.transform)
                 {
                     oi.target = oi.transform.parent;
                 }
             }
         }
     }
     else
     {
         oi.DoUpdate(false, false);
     }
 }
Ejemplo n.º 5
0
 public void ProcessGroups(float groupRange, float superGroupRange)
 {
     this._iconGroups.Clear();
     this._unprocessedIcons.Clear();
     for (int i = 0; i < this._icons.Count; i++)
     {
         this._unprocessedIcons.Add(this._icons[i]);
     }
     this._unprocessedIcons.Sort(this._inRangeIconsSorting);
     while (this._unprocessedIcons.Count > 0)
     {
         OverlayIcon overlayIcon = this._unprocessedIcons[0];
         this._unprocessedIcons.RemoveAt(0);
         if (overlayIcon)
         {
             Vector3 vector = overlayIcon.TargetPosition;
             int     num    = 1;
             float   num2   = 0f;
             if (this._unprocessedIcons.Count > 0 && overlayIcon.InGroupingRangeIcons > 0)
             {
                 foreach (KeyValuePair <int, float> keyValuePair in overlayIcon.DistanceToOtherIcons)
                 {
                     if (keyValuePair.Value < groupRange)
                     {
                         for (int j = 0; j < this._unprocessedIcons.Count; j++)
                         {
                             if (this._unprocessedIcons[j].ID == keyValuePair.Key)
                             {
                                 if (keyValuePair.Value > num2)
                                 {
                                     num2 = keyValuePair.Value;
                                 }
                                 this._unprocessedIcons[j].CurrentGroup        = overlayIcon;
                                 this._unprocessedIcons[j].CurrentSuperGroup   = overlayIcon;
                                 this._unprocessedIcons[j].FinalTargetPosition = this._unprocessedIcons[j].TargetPosition;
                                 vector += this._unprocessedIcons[j].TargetPosition;
                                 num++;
                                 this._unprocessedIcons.RemoveAt(j);
                                 break;
                             }
                         }
                         if (num > overlayIcon.InGroupingRangeIcons)
                         {
                             break;
                         }
                     }
                 }
             }
             if (num > 1)
             {
                 vector /= (float)num;
                 if (Terrain.activeTerrain && !overlayIcon.IsInCaves)
                 {
                     vector.y = Terrain.activeTerrain.SampleHeight(vector) + 5f;
                 }
             }
             overlayIcon.GroupTargetPosition = vector;
             overlayIcon.GroupMinBreakRange  = num2;
             overlayIcon.CurrentGroup        = null;
             this._iconGroups.Add(overlayIcon);
         }
     }
     this._iconSuperGroups.Clear();
     this._unprocessedIcons.Clear();
     for (int k = 0; k < this._iconGroups.Count; k++)
     {
         this._unprocessedIcons.Add(this._iconGroups[k]);
     }
     this._unprocessedIcons.Sort(this._inSuperRangeIconsSorting);
     while (this._unprocessedIcons.Count > 0)
     {
         OverlayIcon overlayIcon2 = this._unprocessedIcons[0];
         this._unprocessedIcons.RemoveAt(0);
         if (overlayIcon2)
         {
             int     num3 = 1;
             Vector3 a    = overlayIcon2.GroupTargetPosition + new Vector3(-overlayIcon2.GroupMinBreakRange, 0f, -overlayIcon2.GroupMinBreakRange);
             Vector3 b    = overlayIcon2.GroupTargetPosition + new Vector3(overlayIcon2.GroupMinBreakRange, 0f, overlayIcon2.GroupMinBreakRange);
             if (this._unprocessedIcons.Count > 0 && overlayIcon2.InSuperGroupingRangeIcons > 0)
             {
                 foreach (KeyValuePair <int, float> keyValuePair2 in overlayIcon2.DistanceToOtherIcons)
                 {
                     if (keyValuePair2.Value < superGroupRange)
                     {
                         for (int l = 0; l < this._unprocessedIcons.Count; l++)
                         {
                             if (this._unprocessedIcons[l].ID == keyValuePair2.Key)
                             {
                                 float num4 = this._unprocessedIcons[l].GroupTargetPosition.x - this._unprocessedIcons[l].GroupMinBreakRange;
                                 float num5 = this._unprocessedIcons[l].GroupTargetPosition.x + this._unprocessedIcons[l].GroupMinBreakRange;
                                 float y    = this._unprocessedIcons[l].GroupTargetPosition.y;
                                 float y2   = this._unprocessedIcons[l].GroupTargetPosition.y;
                                 float num6 = this._unprocessedIcons[l].GroupTargetPosition.z - this._unprocessedIcons[l].GroupMinBreakRange;
                                 float num7 = this._unprocessedIcons[l].GroupTargetPosition.z + this._unprocessedIcons[l].GroupMinBreakRange;
                                 if (num4 < a.x)
                                 {
                                     a.x = num4;
                                 }
                                 if (y < a.y)
                                 {
                                     a.y = y;
                                 }
                                 if (num6 < a.z)
                                 {
                                     a.z = num6;
                                 }
                                 if (num5 > b.x)
                                 {
                                     b.x = num5;
                                 }
                                 if (y2 > b.y)
                                 {
                                     b.y = y2;
                                 }
                                 if (num7 > b.z)
                                 {
                                     b.z = num7;
                                 }
                                 this._unprocessedIcons[l].CurrentSuperGroup = overlayIcon2;
                                 num3++;
                                 this._unprocessedIcons.RemoveAt(l);
                                 break;
                             }
                         }
                         if (num3 > overlayIcon2.InSuperGroupingRangeIcons)
                         {
                             break;
                         }
                     }
                 }
             }
             if (num3 > 1)
             {
                 Vector3 vector2 = (a + b) / 2f;
                 if (Terrain.activeTerrain && !overlayIcon2.IsInCaves)
                 {
                     vector2.y = Terrain.activeTerrain.SampleHeight(vector2) + 10f;
                 }
                 overlayIcon2.SuperGroupTargetPosition = vector2;
                 overlayIcon2.SuperGroupMinBreakRange  = Vector3.Distance(a, b) / 2f;
                 overlayIcon2.CurrentSuperGroup        = null;
                 this._iconSuperGroups.Add(overlayIcon2);
             }
             else
             {
                 overlayIcon2.CurrentSuperGroup    = null;
                 overlayIcon2.BreakSuperGroupAlpha = 1f;
                 overlayIcon2.BreakSuperGroup      = true;
             }
         }
     }
 }