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; } }
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); }
public RequestDungeonEvent(int seed, Enums.eLevelTheme theme) { Seed = seed; Theme = theme; }