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); } } }
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; }
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); } } }
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); } }
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; } } } }