示例#1
0
            private static void LoadRecyclingPrefab(TechType originTech, TechType recyclingTech)
            {
                string originPrefab, originFile;
                var    prefabID = prefabIDPrefix + (int)recyclingTech;

                CraftDataWrapper.SetTechPrefab(recyclingTech, prefabID);
                PrefabDatabaseWrapper.PreparePrefabDatabase();
                if (CraftDataWrapper.TryGetTechPrefab(originTech, out originPrefab) && PrefabDatabase.TryGetPrefabFilename(originPrefab, out originFile))
                {
                    PrefabDatabaseWrapper.SetPrefabFile(prefabID, originFile);
                }
                else
                {
                    Logger.Warning($"Failed to load prefabID or fileName for TechType '{originTech}'.");
                }
            }
示例#2
0
            private static void LoadRecyclingData(TechType originTech, TechType recyclingTech)
            {
                if (IsBlackListed(recyclingTech))
                {
                    CraftDataWrapper.SetTechData(recyclingTech, new TechData(0, new Ingredient[0], new TechType[0]));
                    return;
                }

                var originData  = CraftData.Get(originTech);
                var ingredients = new Dictionary <TechType, int>();

                if (originData.craftAmount > 0)
                {
                    ingredients[originTech] = originData.craftAmount;
                }
                for (var i = 0; i < originData.linkedItemCount; i++)
                {
                    var item = originData.GetLinkedItem(i);
                    ingredients[item] = ingredients.ContainsKey(item) ? (ingredients[item] + 1) : 1;
                }
                var resIngs = new List <IIngredient>();

                ingredients.ForEach(x => resIngs.Add(new Ingredient(x.Key, x.Value)));

                var linkedItems = new List <TechType>();
                var isTool      = IsPlayerToolWithEnergyMixin(originTech);

                for (var i = 0; i < originData.ingredientCount; i++)
                {
                    var ing = originData.GetIngredient(i);
                    if (isTool && IsBattery(ing.techType))
                    {
                        continue;
                    }
                    var amount = UnityEngine.Mathf.FloorToInt(ing.amount * Config.GetYield(ing.techType));
                    for (var j = 0; j < amount; j++)
                    {
                        linkedItems.Add(ing.techType);
                    }
                }

                CraftDataWrapper.SetTechData(recyclingTech, new TechData(0, resIngs, linkedItems));
            }