public void GetPrice_ReturnsWeightTimesPrice() { var weighedItem = new WeighedItem(ItemId.Apples, 5.0M, 2.0M); decimal price = weighedItem.GetPrice(); Assert.AreEqual(10.0M, price); }
private void InitializeAnimals() { foreach (Animal animal in _animals) { WeighedItem <Animal> newAnimal = new WeighedItem <Animal>(animal, animal.spawnWeight); animals.Add(newAnimal); } }
public IEnumerator SpawnAnimals() { while (true) { if (AliveAnimals.Count >= MAX_AMOUNT_OF_ANIMALS) { yield return(new WaitForSeconds(ANIMAL_SPAWN_TIME)); continue; } Animal animalToSpawn = WeighedItem <Animal> .Choose(animals); Lean.Pool.LeanPool.Spawn(animalToSpawn.gameObject, GetSpawnPosition(), Quaternion.identity); yield return(new WaitForSeconds(ANIMAL_SPAWN_TIME)); } }
public static T Choose(List <WeighedItem <T> > items) { int cumulSum = 0; int count = items.Count(); for (int slot = 0; slot < count; slot++) { cumulSum += items[slot].weight; items[slot].cumulativeSum = cumulSum; } double divSpot = rndInst.NextDouble() * cumulSum; WeighedItem <T> chosen = items.FirstOrDefault(i => i.cumulativeSum >= divSpot); if (chosen == null) { throw new Exception("No item chosen - there seems to be a problem with the probability distribution."); } return(chosen.value); }