示例#1
0
        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);
    }