WeightedRandomBuffer <CurrencyData> getDogSpecialGiftChances(DogDescriptor dog) { float affectionFraction; /* * Affection determines whether dog can return souvenir * IF dog already hsa souvenir, assume affection is 0 * (no chance of returning souvenir) */ if (eligibleForSouvenir(dog)) { affectionFraction = dog.FractionOfMaxAffection; } else { affectionFraction = k.NONE_VALUE; } CurrencyData[] specialGiftOptions = giftFactory.CreateGroup(tuning.SpecialGiftTypes); float[] specialGiftOdds = new float[specialGiftOptions.Length]; for (int i = 0; i < specialGiftOdds.Length; i++) { specialGiftOdds[i] = Mathf.Lerp( tuning.SpecialGiftMinAffectionChances[i], tuning.SpecialGiftMaxAffectionChances[i], affectionFraction); // Check to prevent a DogVoucher from being given out if all dogs have already been adopted: if (specialGiftOptions[i] is DogVoucherData && dataController.AllDogsAdopted(DogDatabase.GetInstance)) { specialGiftOdds[i] = k.NONE_VALUE; } } return(new WeightedRandomBuffer <CurrencyData>(specialGiftOptions, specialGiftOdds)); }
WeightedRandomBuffer <CurrencyData> populateGifts( string[] giftTypes, int[] giftAmounts, float[] giftChances, float discountPercent) { ParallelArray <string, int> giftData = new ParallelArray <string, int>(giftTypes, giftAmounts); CurrencyFactory giftFactory = new CurrencyFactory(); CurrencyData[] gifts = giftFactory.CreateGroup(giftData, discountPercent); return(new WeightedRandomBuffer <CurrencyData>(gifts, giftChances)); }