예제 #1
0
        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;
            }
        }
예제 #2
0
        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;
            });
        }
예제 #3
0
        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;
            }
        }
예제 #4
0
        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;
            }
        }
예제 #5
0
    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);
     }
 }