예제 #1
0
        private void OnUIUpdate()
        {
            RecyclingData recyclingData = this._recyclingUI.RecyclingData;

            if (recyclingData == null)
            {
                return;
            }
            float countLimit = this._recyclingUI.DecidedItemSlotUI.CountLimit;

            if (!recyclingData.CreateCountEnabled)
            {
                Vector3 localScale = ((Component)this._countBarImage).get_transform().get_localScale();
                localScale.x = (__Null)0.0;
                ((Component)this._countBarImage).get_transform().set_localScale(localScale);
            }
            else if ((double)countLimit <= 0.0)
            {
                Vector3 localScale = ((Component)this._countBarImage).get_transform().get_localScale();
                localScale.x = (__Null)1.0;
                ((Component)this._countBarImage).get_transform().set_localScale(localScale);
            }
            else
            {
                Vector3 localScale = ((Component)this._countBarImage).get_transform().get_localScale();
                localScale.x = (__Null)(double)Mathf.Clamp01(recyclingData.CreateCounter / countLimit);
                ((Component)this._countBarImage).get_transform().set_localScale(localScale);
            }
        }
        public void RefreshCreatePanelUI()
        {
            RecyclingData recyclingData = this._recyclingUI.RecyclingData;

            if (recyclingData != null)
            {
                if (recyclingData.CreateCountEnabled)
                {
                    recyclingData.CreateCountEnabled = this.CheckCreateable(recyclingData);
                }
                if (!recyclingData.CreateCountEnabled)
                {
                    recyclingData.CreateCounter = 0.0f;
                }
                if (this.NeedNumber <= this.ItemCount(recyclingData))
                {
                    this._createPanelUI.DoOpen();
                }
                else
                {
                    this._createPanelUI.DoClose();
                }
                ((ReactiveProperty <bool>) this.IsCreate).set_Value(recyclingData.CreateCountEnabled);
            }
            else
            {
                this._createPanelUI.DoForceClose();
                ((ReactiveProperty <bool>) this.IsCreate).set_Value(false);
            }
        }
 private void CreateItem(int pointID, RecyclingData data)
 {
     if (data == null)
     {
         return;
     }
     data.CreateCounter = 0.0f;
     if (this.CheckCreateable(data))
     {
         this.RemoveItem(pointID, data);
         StuffItem randomCreate = this.GetRandomCreate();
         if (randomCreate != null)
         {
             if (this._recyclingUI.CraftPointID == pointID)
             {
                 this.CreateEvent.OnNext(randomCreate);
             }
             else
             {
                 data.CreatedItemList.AddItem(randomCreate);
             }
         }
     }
     if (data.CreateCountEnabled)
     {
         data.CreateCountEnabled = this.CheckCreateable(data);
     }
     if (this._recyclingUI.CraftPointID != pointID)
     {
         return;
     }
     ((ReactiveProperty <bool>) this.IsCreate).set_Value(data.CreateCountEnabled);
 }
        private void OnRecyclingDataUpdate()
        {
            if (!Singleton <Game> .IsInstance())
            {
                return;
            }
            AIProject.SaveData.Environment  environment = Singleton <Game> .Instance.Environment;
            Dictionary <int, RecyclingData> source      = environment == null ? (Dictionary <int, RecyclingData>)null : environment.RecyclingDataTable;

            if (source.IsNullOrEmpty <int, RecyclingData>())
            {
                return;
            }
            foreach (KeyValuePair <int, RecyclingData> keyValuePair in source)
            {
                RecyclingData data = keyValuePair.Value;
                if (data != null)
                {
                    if (!data.CreateCountEnabled)
                    {
                        data.CreateCounter = 0.0f;
                    }
                    else if ((double)this.CountLimit <= (double)data.CreateCounter)
                    {
                        this.CreateItem(keyValuePair.Key, data);
                    }
                }
            }
        }
예제 #5
0
            public static void PaintNodeColorAnimated(uGUI_CraftNode node)
            {
#if SUBNAUTICA
                var frontColor = RecyclingData.IsBlackListed(node.techType0) ? Color.black : GUIFormatter.frontColor;
#elif BELOWZERO
                var frontColor = RecyclingData.IsBlackListed(node.techType) ? Color.black : GUIFormatter.frontColor;
#endif
                AnimateIconColor(node.icon, frontColor, backColor);
            }
        private void OnCancelClick()
        {
            RecyclingData recyclingData = this._recyclingUI.RecyclingData;

            if (recyclingData == null)
            {
                return;
            }
            ((ReactiveProperty <bool>) this.IsCreate).set_Value(false);
            recyclingData.CreateCountEnabled = false;
            recyclingData.CreateCounter      = 0.0f;
        }
        private void OnStartClick()
        {
            RecyclingData recyclingData = this._recyclingUI.RecyclingData;

            if (recyclingData == null || this.ItemCount(recyclingData) < this.NeedNumber || !this._recyclingUI.CreateItemStockUI.IsCreateable)
            {
                return;
            }
            ((ReactiveProperty <bool>) this.IsCreate).set_Value(true);
            recyclingData.CreateCountEnabled = true;
            recyclingData.CreateCounter      = 0.0f;
        }
        public void SettingUI(List <StuffItem> itemList)
        {
            this.ItemList = itemList;
            this.ListController.SetItemList(itemList);
            this.ListController.Create((IReadOnlyCollection <StuffItem>)itemList);
            this._maxCountText.set_text(string.Format("{0}", (object)this.SlotMaxNum));
            RecyclingData recyclingData = this._recyclingUI.RecyclingData;

            if (recyclingData == null)
            {
                return;
            }
            ((ReactiveProperty <bool>) this.IsCreate).set_Value(recyclingData.CreateCountEnabled);
        }
예제 #9
0
파일: Main.cs 프로젝트: snoopybeegle/Agony
        private static void ReplaceNodeTech(uGUI_CraftNode node)
        {
            if (node.action != TreeAction.Craft)
            {
                return;
            }

            TechType recyclingTech;

            if (RecyclingData.TryGet(node.techType0, out recyclingTech))
            {
                replacedNodeTechs[node] = node.techType0;
                node.techType0          = recyclingTech;
            }
        }
예제 #10
0
 private static void Postfix(uGUI_CraftingMenu __instance, ref bool __result, uGUI_CraftNode sender)
 {
     if (!Active)
     {
         return;
     }
     if (CurrentMenu != __instance)
     {
         return;
     }
     if (sender.action != TreeAction.Craft)
     {
         return;
     }
     __result &= !RecyclingData.IsBlackListed(sender.techType0);
 }
        public int ItemCount(RecyclingData data)
        {
            if (data == null || data.DecidedItemList.IsNullOrEmpty <StuffItem>())
            {
                return(0);
            }
            int num = 0;

            foreach (StuffItem decidedItem in data.DecidedItemList)
            {
                if (decidedItem != null)
                {
                    num += decidedItem.Count;
                }
            }
            return(num);
        }
        public void RefreshButtonUI()
        {
            RecyclingData recyclingData = this._recyclingUI.RecyclingData;

            if (recyclingData == null)
            {
                return;
            }
            bool createCountEnabled = recyclingData.CreateCountEnabled;

            this.SetActive((Component)this._createButton, !createCountEnabled);
            this.SetActive((Component)this._cancelButton, createCountEnabled);
            if (!createCountEnabled)
            {
                recyclingData.CreateCounter = 0.0f;
            }
            ((Selectable)this._createButton).set_interactable(this.IsCreateable);
        }
예제 #13
0
            public static void Postfix()
            {
                foreach (TechType techType in Enum.GetValues(typeof(TechType)))
                {
#if SUBNAUTICA
                    if (SMLHelper.V2.Handlers.CraftDataHandler.GetTechData(techType) != null)
#elif BELOWZERO
                    if (SMLHelper.V2.Handlers.CraftDataHandler.GetRecipeData(techType) != null)
#endif
                    {
                        RecyclingData.TryGet(techType, out TechType recyclingTech, true);
                    }
                }

#if BELOWZERO
                TechData.Cache();
#endif
                CraftData.RebuildDatabase();
                Language.main.LoadLanguageFile(Language.main.GetCurrentLanguage());
            }
예제 #14
0
파일: Main.cs 프로젝트: MrPurple6411/Agony
        private static void ReplaceNodeTech(uGUI_CraftNode node)
        {
            if (node.action != TreeAction.Craft)
            {
                return;
            }

            if (!node.techType0.ToString().StartsWith("Defabricated") && RecyclingData.TryGet(node.techType0, out TechType recyclingTech))
            {
                node.techType0 = recyclingTech;
            }
            else if (node.techType0.ToString().StartsWith("Defabricated"))
            {
                TechTypeExtensions.FromString(node.techType0.ToString().Replace("Defabricated", ""), out TechType original, true);
                node.techType0 = original;
            }
            else
            {
                ErrorMessage.AddMessage($"Failed to change {node.techType0}");
            }
        }
 private void RemoveItem(int pointID, RecyclingData data)
 {
     if (data == null || data.DecidedItemList.IsNullOrEmpty <StuffItem>())
     {
         return;
     }
     if (pointID == this._recyclingUI.CraftPointID)
     {
         this.RemoveItem();
     }
     else
     {
         int needNumber = this.NeedNumber;
         for (int index = 0; index < data.DecidedItemList.Count; ++index)
         {
             StuffItem element = data.DecidedItemList.GetElement <StuffItem>(index);
             if (element == null)
             {
                 data.DecidedItemList.RemoveAt(index);
                 --index;
             }
             else
             {
                 int num = Mathf.Min(element.Count, needNumber);
                 needNumber    -= num;
                 element.Count -= num;
                 if (element.Count <= 0)
                 {
                     data.DecidedItemList.RemoveAt(index);
                     --index;
                 }
                 if (needNumber <= 0)
                 {
                     break;
                 }
             }
         }
     }
 }
예제 #16
0
        private void SetRecyclingData()
        {
            this.RecyclingData = (RecyclingData)null;
            int num = -1;

            this.CraftPointID  = num;
            this._craftPointID = num;
            CraftPoint currentCraftPoint = Manager.Map.GetPlayer()?.CurrentCraftPoint;

            if (!Object.op_Inequality((Object)currentCraftPoint, (Object)null))
            {
                return;
            }
            int       key       = this._craftPointID = currentCraftPoint.RegisterID;
            WorldData worldData = !Singleton <Game> .IsInstance() ? (WorldData)null : Singleton <Game> .Instance.WorldData;

            AIProject.SaveData.Environment  environment = worldData == null ? (AIProject.SaveData.Environment)null : worldData.Environment;
            Dictionary <int, RecyclingData> dictionary  = environment == null ? (Dictionary <int, RecyclingData>)null : environment.RecyclingDataTable;

            if (dictionary == null)
            {
                return;
            }
            RecyclingData recyclingData1 = (RecyclingData)null;

            if (dictionary.TryGetValue(key, out recyclingData1) && recyclingData1 != null)
            {
                this.RecyclingData = recyclingData1;
            }
            else
            {
                RecyclingData recyclingData2 = new RecyclingData();
                dictionary[key]    = recyclingData2;
                this.RecyclingData = recyclingData2;
            }
        }
예제 #17
0
            public static void PaintNodeColorAnimated(uGUI_CraftNode node)
            {
                var frontColor = RecyclingData.IsBlackListed(node.techType0) ? Color.black : GUIFormatter.frontColor;

                AnimateIconColor(node.icon, frontColor, backColor);
            }
 public bool CheckCreateable(RecyclingData data)
 {
     return(data != null && data.CreatedItemList.Count < this.CreatedItemSlotMaxNum && this.NeedNumber <= this.ItemCount(data));
 }
예제 #19
0
        public bool CanDelete()
        {
            if (this._kind != CraftPoint.CraftKind.Recycling || !Singleton <Manager.Map> .IsInstance() || !Singleton <Game> .IsInstance())
            {
                return(true);
            }
            WorldData worldData = Singleton <Game> .Instance.WorldData;

            AIProject.SaveData.Environment environment = worldData == null ? (AIProject.SaveData.Environment)null : worldData.Environment;
            if (environment == null)
            {
                return(true);
            }
            RecyclingData recyclingData = (RecyclingData)null;

            if (!environment.RecyclingDataTable.TryGetValue(this.RegisterID, out recyclingData) || recyclingData == null)
            {
                return(true);
            }
            recyclingData.DecidedItemList.RemoveAll((Predicate <StuffItem>)(x => x == null || x.Count <= 0));
            recyclingData.CreatedItemList.RemoveAll((Predicate <StuffItem>)(x => x == null || x.Count <= 0));
            if (recyclingData.DecidedItemList.IsNullOrEmpty <StuffItem>() && recyclingData.CreatedItemList.IsNullOrEmpty <StuffItem>())
            {
                return(true);
            }
            List <StuffItem> stuffItemList1 = ListPool <StuffItem> .Get();

            foreach (StuffItem decidedItem in recyclingData.DecidedItemList)
            {
                StuffItem itemInstance = CraftPoint.GetItemInstance();
                CraftPoint.CopyItem(decidedItem, itemInstance);
                stuffItemList1.AddItem(itemInstance);
            }
            foreach (StuffItem createdItem in recyclingData.CreatedItemList)
            {
                StuffItem itemInstance = CraftPoint.GetItemInstance();
                CraftPoint.CopyItem(createdItem, itemInstance);
                stuffItemList1.AddItem(itemInstance);
            }
            Manager.Map instance = Singleton <Manager.Map> .Instance;
            List <ValueTuple <int, List <StuffItem> > > inventoryList  = instance.GetInventoryList();
            List <ValueTuple <int, List <StuffItem> > > valueTupleList = ListPool <ValueTuple <int, List <StuffItem> > > .Get();

            using (List <ValueTuple <int, List <StuffItem> > > .Enumerator enumerator = inventoryList.GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    ValueTuple <int, List <StuffItem> > current = enumerator.Current;
                    int num = (int)current.Item1;
                    List <StuffItem> source         = (List <StuffItem>)current.Item2;
                    List <StuffItem> stuffItemList2 = ListPool <StuffItem> .Get();

                    valueTupleList.Add(new ValueTuple <int, List <StuffItem> >(num, stuffItemList2));
                    if (!source.IsNullOrEmpty <StuffItem>())
                    {
                        foreach (StuffItem from in source)
                        {
                            StuffItem itemInstance = CraftPoint.GetItemInstance();
                            CraftPoint.CopyItem(from, itemInstance);
                            stuffItemList2.Add(itemInstance);
                        }
                    }
                }
            }
            using (List <ValueTuple <int, List <StuffItem> > > .Enumerator enumerator = valueTupleList.GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    ValueTuple <int, List <StuffItem> > current = enumerator.Current;
                    int num = (int)current.Item1;
                    List <StuffItem> self = (List <StuffItem>)current.Item2;
                    for (int index = 0; index < stuffItemList1.Count; ++index)
                    {
                        StuffItem element = stuffItemList1.GetElement <StuffItem>(index);
                        if (element == null || element.Count <= 0)
                        {
                            stuffItemList1.RemoveAt(index);
                            --index;
                        }
                        else
                        {
                            StuffItem itemInstance = CraftPoint.GetItemInstance();
                            CraftPoint.CopyItem(element, itemInstance);
                            int possible = 0;
                            StuffItemExtensions.CanAddItem((IReadOnlyCollection <StuffItem>)self, num, itemInstance, out possible);
                            if (0 < possible)
                            {
                                possible = Mathf.Min(possible, itemInstance.Count);
                                self.AddItem(itemInstance, possible, num);
                            }
                            element.Count -= possible;
                            if (element.Count <= 0)
                            {
                                stuffItemList1.RemoveAt(index);
                                --index;
                            }
                        }
                    }
                }
            }
            stuffItemList1.RemoveAll((Predicate <StuffItem>)(x => x == null || x.Count <= 0));
            bool flag = stuffItemList1.IsNullOrEmpty <StuffItem>();

            if (flag)
            {
                using (List <ValueTuple <int, List <StuffItem> > > .Enumerator enumerator = inventoryList.GetEnumerator())
                {
                    while (enumerator.MoveNext())
                    {
                        ValueTuple <int, List <StuffItem> > current = enumerator.Current;
                        int slotMax = (int)current.Item1;
                        List <StuffItem> receiver = (List <StuffItem>)current.Item2;
                        instance.SendItemListToList(slotMax, recyclingData.DecidedItemList, receiver);
                        instance.SendItemListToList(slotMax, recyclingData.CreatedItemList, receiver);
                    }
                }
            }
            using (List <ValueTuple <int, List <StuffItem> > > .Enumerator enumerator = valueTupleList.GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    ValueTuple <int, List <StuffItem> > current = enumerator.Current;
                    if (current.Item2 != null)
                    {
                        foreach (StuffItem stuffItem in (List <StuffItem>)current.Item2)
                        {
                            CraftPoint.ReturnItemInstance(stuffItem);
                        }
                        ListPool <StuffItem> .Release((List <StuffItem>) current.Item2);
                    }
                }
            }
            foreach (StuffItem stuffItem in stuffItemList1)
            {
                CraftPoint.ReturnItemInstance(stuffItem);
            }
            ListPool <StuffItem> .Release(stuffItemList1);

            instance.ReturnInventoryList(inventoryList);
            return(flag);
        }