Пример #1
0
        ////////////////

        private (bool IsModified, bool Completed) FillWith(Chest chest, bool removeOnly)
        {
            if (WorldGen.genRand.NextFloat() >= this.PercentChance)
            {
//if( !removeOnly ) LogLibraries.LogOnce("1a "+this.PercentChance);
                return(false, false);
            }
//if( !removeOnly ) LogLibraries.LogOnce("1b "+this.PercentChance);

            bool isModified          = false;
            ChestFillDefinition self = this;

            float maxWeight = this.Any
                              .Select(kv => kv.Weight)
                              .Sum();
            float weightVal = maxWeight * WorldGen.genRand.NextFloat();

            float countedWeight = 0f;

            foreach ((float weight, ChestFillItemDefinition def) in this.Any)
            {
                countedWeight += weight;
                if (countedWeight < weightVal)
                {
                    continue;
                }

                if (!this.EditNextItem(chest, def, removeOnly))
                {
//if( !removeOnly ) LogLibraries.LogOnce("2 "+isModified);
                    return(isModified, false);
                }
                isModified = true;
                break;
            }

            foreach (ChestFillItemDefinition def in this.All)
            {
                if (!this.EditNextItem(chest, def, removeOnly))
                {
//if( !removeOnly ) LogLibraries.LogOnce("3 "+isModified);
                    return(isModified, false);
                }
                isModified = true;
            }

//if( !removeOnly ) LogLibraries.LogOnce("4 "+isModified);
            return(isModified, true);
        }
		/// <summary>
		/// Removes the current item(s) from a given chest type, in a given area (if specified).
		/// </summary>
		/// <param name="fillDef"></param>
		/// <param name="chestDef"></param>
		/// <param name="within"></param>
		/// <returns>List of modified chests.</returns>
		public static IList<Chest> RemoveFromWorldChests(
					ChestFillDefinition fillDef,
					ChestTypeDefinition chestDef = new ChestTypeDefinition(),
					Rectangle? within = null ) {
			var modifiedChestIndexes = new List<Chest>();

			foreach( Chest chest in chestDef.GetMatchingWorldChests( within ) ) {
				(bool isModified, bool completed) status = fillDef.Unfill( chest );
				if( status.isModified ) {
					modifiedChestIndexes.Add( chest );
				}
			}

			return modifiedChestIndexes;
		}