Пример #1
0
 /// <summary>
 /// Allow an Identifiable.Id to be put into a <see cref="SiloStorage"/> inventory
 /// </summary>
 /// <param name="typeId"></param>
 /// <param name="id"></param>
 public static void RegisterSiloAmmo(SiloStorage.StorageType typeId, Identifiable.Id id)
 {
     if (!siloPrefabs.ContainsKey(typeId))
     {
         siloPrefabs[typeId] = new HashSet <Identifiable.Id>();
     }
     siloPrefabs[typeId].Add(id);
 }
 internal static void InjectStorageAmmo(SiloStorage.StorageType type, HashSet <Identifiable.Id> idSet)
 {
     if (!STORAGE_AMMO.ContainsKey(type))
     {
         return;
     }
     idSet.UnionWith(STORAGE_AMMO[type]);
 }
Пример #3
0
 public static void Postfix(SiloStorage.StorageType type, HashSet <Identifiable.Id> __result)
 {
     if (!AmmoRegistry.siloPrefabs.ContainsKey(type))
     {
         return;
     }
     foreach (var v in AmmoRegistry.siloPrefabs[type])
     {
         __result.Add(v);
     }
 }
Пример #4
0
        /// <summary>
        /// Registers a new ammo for the storage inventories
        /// </summary>
        /// <param name="type">The type of storage to register to</param>
        /// <param name="id">The id to register</param>
        public static void RegisterStorageAmmo(SiloStorage.StorageType type, Identifiable.Id id)
        {
            if (ModLoader.CurrentStep != LoadingState.REGISTER)
            {
                throw new Exception("You can only register things during the 'Register' step");
            }

            if (!STORAGE_AMMO.ContainsKey(type))
            {
                STORAGE_AMMO.Add(type, new HashSet <Identifiable.Id>(Identifiable.idComparer));
            }

            STORAGE_AMMO[type].Add(id);
        }
Пример #5
0
        private static bool GetContents_Prefix(SiloStorage.StorageType type, ref HashSet <Identifiable.Id> @return)
        {
            FieldInfo cacheField = typeof(StorageTypeExtensions).GetField("getContentsCache", BindingFlags.Static | BindingFlags.NonPublic);
            Dictionary <SiloStorage.StorageType, HashSet <Identifiable.Id> > cache = cacheField?.GetValue(null) as Dictionary <SiloStorage.StorageType, HashSet <Identifiable.Id> >;

            if (cache != null && cache.ContainsKey(type))
            {
                @return = cache[type];
                return(false);
            }

            HashSet <Identifiable.Id> idSet = new HashSet <Identifiable.Id>(Identifiable.idComparer);

            switch (type)
            {
            case SiloStorage.StorageType.NON_SLIMES:
                IdentifiableRegistry.PopulateHashSet(idSet, IdentifiableType.NON_SLIME, IdentifiableType.ORNAMENT, IdentifiableType.ECHO, IdentifiableType.ECHO_NOTE);
                break;

            case SiloStorage.StorageType.PLORT:
                IdentifiableRegistry.PopulateHashSet(idSet, IdentifiableType.PLORT);
                break;

            case SiloStorage.StorageType.FOOD:
                IdentifiableRegistry.PopulateHashSet(idSet, IdentifiableType.FOOD, IdentifiableType.CHICK);
                break;

            case SiloStorage.StorageType.CRAFTING:
                IdentifiableRegistry.PopulateHashSet(idSet, IdentifiableType.PLORT, IdentifiableType.CRAFT);
                break;

            case SiloStorage.StorageType.ELDER:
                IdentifiableRegistry.PopulateHashSet(idSet, IdentifiableType.ELDER);
                break;
            }

            idSet.Remove(Identifiable.Id.QUICKSILVER_PLORT);
            AmmoRegistry.InjectStorageAmmo(type, idSet);

            cache?.Add(type, idSet);
            cacheField?.SetValue(null, cache);
            @return = idSet;
            return(false);
        }
 // Methods
 protected override bool ValidSiloAmmo(SiloStorage.StorageType type) => false;
Пример #7
0
 protected override bool ValidSiloAmmo(SiloStorage.StorageType type) =>
 type == SiloStorage.StorageType.NON_SLIMES ||
 type == SiloStorage.StorageType.FOOD ||
 (IsElder && type == SiloStorage.StorageType.ELDER);
Пример #8
0
 protected override bool ValidSiloAmmo(SiloStorage.StorageType type)
 {
     return(false);
 }
Пример #9
0
 // Methods
 protected override bool ValidSiloAmmo(SiloStorage.StorageType type) =>
 type == SiloStorage.StorageType.NON_SLIMES ||
 type == SiloStorage.StorageType.FOOD;
 internal static bool IsStorageTypeRegistered(SiloStorage.StorageType type) => !VANILLA_STORAGE_TYPE.Contains(type) && STORAGE_AMMO.ContainsKey(type);
Пример #11
0
 // Methods
 protected virtual bool ValidSiloAmmo(SiloStorage.StorageType type) => type == SiloStorage.StorageType.NON_SLIMES;