public void InsertBefore([NotNull] IEnumerable <IHasSortOrder> elements, [NotNull] IHasSortOrder anchor, [NotNull] IEnumerable <IHasSortOrder> insertItems) { Assert.ArgumentNotNull(elements, nameof(elements)); Assert.ArgumentNotNull(anchor, nameof(anchor)); Assert.ArgumentNotNull(insertItems, nameof(insertItems)); var list = elements.Where(e => !insertItems.Contains(e)); if (!list.Contains(anchor)) { throw Exceptions.InvalidOperation(Resources.Sorter_InsertBefore_Anchor_is_not_a_part_of_elements); } var previous = list.Previous(anchor); if (previous != null) { InsertAfter(elements, previous, insertItems); return; } if (IsUnsorted(list)) { ApplyDefaultSorting(list); } var value = anchor.SortOrder - insertItems.Count() * 100; foreach (var item in insertItems) { item.SortOrder = value; value += 100; } }
private void Resort([NotNull] IEnumerable <IHasSortOrder> list, [NotNull] IHasSortOrder anchor, int value) { Assert.ArgumentNotNull(list, nameof(list)); Assert.ArgumentNotNull(anchor, nameof(anchor)); list.Following(anchor, delegate(IHasSortOrder order) { order.SortOrder = value; value += 100; }); }
private void AppendToEnd([NotNull] IEnumerable <IHasSortOrder> insertItems, [NotNull] IHasSortOrder last) { Assert.ArgumentNotNull(insertItems, nameof(insertItems)); Assert.ArgumentNotNull(last, nameof(last)); var value = last.SortOrder + 100; foreach (var item in insertItems) { item.SortOrder = value; value += 100; } }
public void InsertAfter([NotNull] IEnumerable <IHasSortOrder> elements, [NotNull] IHasSortOrder anchor, [NotNull] IEnumerable <IHasSortOrder> insertItems) { Assert.ArgumentNotNull(elements, nameof(elements)); Assert.ArgumentNotNull(anchor, nameof(anchor)); Assert.ArgumentNotNull(insertItems, nameof(insertItems)); var list = elements.Where(e => !insertItems.Contains(e)); if (!list.Contains(anchor)) { throw Exceptions.InvalidOperation(Resources.Sorter_InsertAfter_Anchor_is_not_a_part_of_elements); } var next = list.Next(anchor); if (next == null) { AppendToEnd(insertItems, anchor); return; } if (IsUnsorted(list)) { ApplyDefaultSorting(list); } var delta = (next.SortOrder - anchor.SortOrder) / (insertItems.Count() + 1); if (delta == 0) { Resort(list, anchor, next.SortOrder + insertItems.Count() * 100 + 200); delta = 100; } var value = anchor.SortOrder + delta; foreach (var item in insertItems) { item.SortOrder = value; value += delta; } }
private int ElementSorter(Tag at, Tag bt) { GameObject gameObject = Assets.TryGetPrefab(at); IHasSortOrder hasSortOrder = (!((Object)gameObject != (Object)null)) ? null : gameObject.GetComponent <IHasSortOrder>(); GameObject gameObject2 = Assets.TryGetPrefab(bt); IHasSortOrder hasSortOrder2 = (!((Object)gameObject2 != (Object)null)) ? null : gameObject2.GetComponent <IHasSortOrder>(); if (hasSortOrder == null || hasSortOrder2 == null) { return(0); } Element element = ElementLoader.GetElement(at); Element element2 = ElementLoader.GetElement(bt); if (element != null && element2 != null && element.buildMenuSort == element2.buildMenuSort) { return(element.idx.CompareTo(element2.idx)); } return(hasSortOrder.sortOrder.CompareTo(hasSortOrder2.sortOrder)); }
public void Initialize(SingleEntityReceptacle target) { if ((Object)target == (Object)null) { Debug.LogError("SingleObjectReceptacle provided was null."); } else { targetReceptacle = target; base.gameObject.SetActive(true); depositObjectMap = new Dictionary <ReceptacleToggle, SelectableEntity>(); entityToggles.ForEach(delegate(ReceptacleToggle rbi) { Object.Destroy(rbi.gameObject); }); entityToggles.Clear(); Tag[] possibleDepositObjectTags = target.possibleDepositObjectTags; ReceptacleToggle newToggle; foreach (Tag tag in possibleDepositObjectTags) { List <GameObject> prefabsWithTag = Assets.GetPrefabsWithTag(tag); if ((Object)targetReceptacle.rotatable == (Object)null) { prefabsWithTag.RemoveAll(delegate(GameObject go) { IReceptacleDirection component3 = go.GetComponent <IReceptacleDirection>(); return(component3 != null && component3.Direction != targetReceptacle.Direction); }); } List <IHasSortOrder> list = new List <IHasSortOrder>(); foreach (GameObject item in prefabsWithTag) { IHasSortOrder component = item.GetComponent <IHasSortOrder>(); if (component != null) { list.Add(component); } } Debug.Assert(list.Count == prefabsWithTag.Count, "Not all entities in this receptacle implement IHasSortOrder!"); list.Sort((IHasSortOrder a, IHasSortOrder b) => a.sortOrder - b.sortOrder); foreach (IHasSortOrder item2 in list) { GameObject gameObject = (item2 as MonoBehaviour).gameObject; GameObject gameObject2 = Util.KInstantiateUI(entityToggle, requestObjectList, false); gameObject2.SetActive(true); newToggle = gameObject2.GetComponent <ReceptacleToggle>(); IReceptacleDirection component2 = gameObject.GetComponent <IReceptacleDirection>(); string properName = gameObject.GetProperName(); newToggle.title.text = properName; Sprite entityIcon = GetEntityIcon(gameObject.PrefabID()); if ((Object)entityIcon == (Object)null) { entityIcon = elementPlaceholderSpr; } newToggle.image.sprite = entityIcon; newToggle.toggle.onClick += delegate { ToggleClicked(newToggle); }; newToggle.toggle.onPointerEnter += delegate { CheckAmountsAndUpdate(null); }; depositObjectMap.Add(newToggle, new SelectableEntity { tag = gameObject.PrefabID(), direction = (component2?.Direction ?? SingleEntityReceptacle.ReceptacleDirection.Top), asset = gameObject }); entityToggles.Add(newToggle); } } selectedEntityToggle = null; if (entityToggles.Count > 0) { if (entityPreviousSelectionMap.ContainsKey(targetReceptacle)) { int index = entityPreviousSelectionMap[targetReceptacle]; ToggleClicked(entityToggles[index]); } else { subtitleLabel.SetText(Strings.Get(subtitleStringSelect).ToString()); requestSelectedEntityBtn.isInteractable = false; descriptionLabel.SetText(Strings.Get(subtitleStringSelectDescription).ToString()); HideAllDescriptorPanels(); } } onStorageChangedHandle = targetReceptacle.gameObject.Subscribe(-1697596308, CheckAmountsAndUpdate); onOccupantValidChangedHandle = targetReceptacle.gameObject.Subscribe(-1820564715, OnOccupantValidChanged); UpdateState(null); SimAndRenderScheduler.instance.Add(this, false); } }