Example #1
0
    public GameObject RollLoot(Loot.Rarity maxRarity)
    {
        if (loots.Length <= 0)
        {
            return(null);
        }

        int rolledLootId  = 0;
        int infinityBreak = 0;

        do
        {
            infinityBreak++;

            if (infinityBreak > 100)
            {
                Debug.LogError("Couldn't RollLoot() after 100 tries.");
                break;
            }

            rolledLootId = RollWithWeights(loots);
        }while (loots[rolledLootId].rarity > maxRarity);

        return(loots[rolledLootId].loot);
    }
Example #2
0
        private void GenerateLoot(ILootable lootable)
        {
            LootConfig.LootDropDef lootDropDef = lootable._lootDropDef;

            List <LootConfig.ProbabilityDef> probabilities = lootDropDef.probabilities;

            probabilities.Sort(LootUtil.CompareLootByProbability);

            int   lootToDrop = LootUtil.GetLootDropCount(lootDropDef);
            float totalSum   = LootUtil.GetTotalSum(probabilities);

            for (int i = 0; i < lootToDrop; i++)
            {
                Loot.Rarity        rarity  = LootUtil.GetWeightedRarity(probabilities, totalSum);
                LootConfig.LootDef lootDef = _lootConfig.GetLootDef(rarity);
                int bucket = Random.Range(0, lootDef.lootItems.Count);
                LootConfig.LootItemDef itemDef = lootDef.lootItems[bucket];
                string    key  = Storeable.GetCachedStoreableKey(itemDef.type);
                ILootItem item = _lootPool.GetPooledObject(key).GetComponent <ILootItem>();
                if (item != null)
                {
                    item.Init(lootable, _playerCombatSystem.playerController.transform, lootDef, _lootConfig, itemDef);
                }
                else
                {
                    Debug.LogError("Item of type " + key + " does not implement  ILootItem");
                }
            }
        }
Example #3
0
        public LootDef GetLootDef(Loot.Rarity key)
        {
            if (_lootDefLookup.Count == 0)
            {
                GenerateLootDefLookup();
            }

            if (_lootDefLookup.ContainsKey(key))
            {
                return(_lootDefLookup[key]);
            }
            return(null);
        }
Example #4
0
        private void GenerateLootDefLookup()
        {
            int i = 0;
            int particleLength = lootDefs.Count;

            for (i = 0; i < particleLength; i++)
            {
                LootDef     blueprint = lootDefs[i];
                Loot.Rarity type      = blueprint.rarity;
                if (!_lootDefLookup.ContainsKey(type))
                {
                    _lootDefLookup.Add(type, blueprint);
                }
            }
        }
Example #5
0
            //private string name;

            public LootDef(Loot.Rarity rarity, string name, Color color)
            {
                this.rarity = rarity;
                this.color  = color;
                //this.name = name;
            }
Example #6
0
 public ProbabilityDef(Loot.Rarity rare, float prob)
 {
     rarity      = rare;
     probability = prob;
 }