Ejemplo n.º 1
0
    private void OnItemRequested(GameEvents.RequestItemSpawnEvent e)
    {
        // TODO get these from somewhere global
        Enums.eLevelTheme currentTheme = Enums.eLevelTheme.Forest;
        Enums.eDifficulty difficulty = Enums.eDifficulty.Easy;

        int[] sourceProbabilities = null;
        switch (e.ItemSource)
        {
            case Enums.eItemSource.Crate:
                sourceProbabilities = m_ItemTypeCrateProbabilities[(int)e.CrateType].Values;
                break;

            case Enums.eItemSource.Enemy:
                sourceProbabilities = m_ItemTypeEnemyProbabilities[(int)e.EnemyType].Values;
                break;
        }

        // determine reward
        eRewardType reward = eRewardType.Nothing;

        int[] probabilities = new int[sourceProbabilities.Length];
        for (int i = 0; i < sourceProbabilities.Length; i++)
        {
            probabilities[i] = sourceProbabilities[i];
        }
        reward = (eRewardType)Utils.WeightedRandom(probabilities);

        switch (reward)
        {
            case eRewardType.Money:
                RewardMoney(difficulty, e.ItemSource, e.CrateType, e.EnemyType, e.SpawnPosition);
                break;

            case eRewardType.Item:
                RewardItem(currentTheme, difficulty, e.ItemSource, e.CrateType, e.EnemyType, e.SpawnPosition);
                break;

            default:
            case eRewardType.Nothing:
                break;
        }
    }
Ejemplo n.º 2
0
    private void RewardMoney(Enums.eDifficulty diff, Enums.eItemSource source, Enums.eCrateType cType, Enums.eEnemyType eType, Vector3 spawnPos)
    {
        int difficulty = (int)diff;
        float baseAmount = m_BaseMoneyAmountByDiff[difficulty];

        int diffVariableModifier = difficulty * 10;
        int variableAmount = UnityEngine.Random.Range(-5, 5 + 1) + diffVariableModifier;
        if (variableAmount < 0 && Mathf.Abs(variableAmount) >= baseAmount)
        {
            // will end up being negative or zero
            variableAmount *= -1;
        }

        InventoryItem data = new InventoryItem(-1);
        data.Type = Enums.eItemType.Money;
        data.Value = baseAmount + variableAmount;

        SpawnItemObject(Enums.eItemType.Money, data, spawnPos);
    }
Ejemplo n.º 3
0
    private void RewardItem(Enums.eLevelTheme theme, Enums.eDifficulty diff, Enums.eItemSource source, Enums.eCrateType cType, Enums.eEnemyType eType, Vector3 spawnPos)
    {
        ItemProbability[] itemProbs = null;
        if (source == Enums.eItemSource.Crate)
        {
            switch (cType)
            {
                case Enums.eCrateType.Common:
                    itemProbs = m_CommonCrateItems;
                    break;

                case Enums.eCrateType.Rare:
                    itemProbs = m_RareCrateItems;
                    break;

                case Enums.eCrateType.VeryRare:
                    itemProbs = m_VeryRareCrateItems;
                    break;
            }
        }
        else if (source == Enums.eItemSource.Enemy)
        {
            switch (eType)
            {
                case Enums.eEnemyType.Weak:
                    itemProbs = m_WeakEnemyItems;
                    break;

                case Enums.eEnemyType.Regular:
                    itemProbs = m_RegularEnemyItems;
                    break;

                case Enums.eEnemyType.Tough:
                    itemProbs = m_ToughEnemyItems;
                    break;

                case Enums.eEnemyType.ExtraTough:
                    itemProbs = m_VeryToughEnemyItems;
                    break;

                case Enums.eEnemyType.Boss:
                    itemProbs = m_BossEnemyItems;
                    break;
            }
        }

        int[] probabilities = new int[itemProbs.Length];
        for (int i = 0; i < itemProbs.Length; i++)
        {
            List<Enums.eLevelTheme> availableThemes = ItemDatabase.Instance.GetThemesForItem(itemProbs[i].ItemID);
            List<Enums.eDifficulty> availableDifficulties = ItemDatabase.Instance.GetDifficultiesForItem(itemProbs[i].ItemID);

            // theme/difficulty check
            if ((availableThemes[0] != Enums.eLevelTheme.All && !availableThemes.Contains(theme)) ||
                (availableDifficulties[0] != Enums.eDifficulty.All && !availableDifficulties.Contains(diff)))
            {
                itemProbs[i].Probability = 0;
            }

            probabilities[i] = itemProbs[i].Probability;
        }

        int dataIndex = Utils.WeightedRandom(probabilities);
        InventoryItem data =  ItemDatabase.Instance.GetItemFromID(itemProbs[dataIndex].ItemID);

        SpawnItemObject(data.Type, data, spawnPos);

        //Enums.eItemType itemType = (Enums.eItemType)Utils.WeightedRandom(m_ItemTypeProbabilities);
        //switch (itemType)
        //{
        //    case Enums.eItemType.Consumable:
        //        currentItems = m_ConsumableData;
        //        break;

        //    case Enums.eItemType.StatBoost:
        //        currentItems = m_StatBoostData;
        //        break;

        //    case Enums.eItemType.Armour:
        //        currentItems = m_ArmourData;
        //        break;

        //    case Enums.eItemType.Weapon:
        //        currentItems = m_WeaponData;
        //        break;
        //}

        //// gather the probabilties of all items
        //int[] itemProbabilities = new int[currentItems.Length];
        //for (int i = 0; i < currentItems.Length; i++)
        //{
        //    itemProbabilities[i] = currentItems[i].m_ProababilityByDifficulty[(int)diff];
        //}

        //int itemDataIndex = Utils.WeightedRandom(itemProbabilities);
        //ItemData data = currentItems[itemDataIndex];

        //SpawnItemObject(itemType, data, spawnPos);
    }