public override void Start() { ItemsWon.Clear(); addNewItemsToPlayerPartyInventory(); BattleStateRenderer = new WinRenderer(this); getMinAndMaxCurrentItemIndex(); CurrentItemIndex = minCurrentItemIndex; }
private void addNewItemsToPlayerPartyInventory() { Dictionary <Rarity, List <WeaponData> > weapons = new Dictionary <Rarity, List <WeaponData> >(); Dictionary <Rarity, List <ShieldData> > shields = new Dictionary <Rarity, List <ShieldData> >(); Dictionary <Rarity, List <ItemData> > items = new Dictionary <Rarity, List <ItemData> >(); foreach (Rarity rarity in Enum.GetValues(typeof(Rarity))) { if (rarity == Rarity.Never) { continue; } weapons[rarity] = ResourceManager.GetWeaponDataWhere(wd => wd.Rarity == rarity); shields[rarity] = ResourceManager.GetShieldDataWhere(sd => sd.Rarity == rarity); items[rarity] = ResourceManager.GetItemDataWhere(id => id.Rarity == rarity); } List <Rarity> rarityList = new List <Rarity> { Rarity.Common, Rarity.Uncommon, Rarity.Rare, Rarity.Common, Rarity.Uncommon, Rarity.Common }; List <ThinkActionType> thinkActionTypeList = new List <ThinkActionType> { ThinkActionType.Attack, ThinkActionType.Defend, ThinkActionType.Attack, ThinkActionType.UseItem }; int count = Math.Max(minimumItemsWon, Battle.PlayerPartyItemsUsed + Game1.Random.Next(Math.Max(minimumForItemsWonRandomizer, Battle.PlayerPartyItemsUsed / itemsUsedDivisorForItemsWonRandomizer))); for (int i = 0; i < count; ++i) { Rarity rarity = rarityList.Sample(); switch (thinkActionTypeList.Sample()) { case ThinkActionType.Attack: if (weapons[rarity].Count == 0) { --i; continue; } WeaponData weaponData = weapons[rarity].Sample(); if (!Battle.PlayerParty.HasMemberOfCharacterClass(weaponData.CharacterClass)) { --i; continue; } string weaponName = new Attributes(weaponData).ToString(weaponData.Name); Battle.PlayerParty.WeaponInventories[weaponData.CharacterClass].AddItem(weaponName, null); ItemsWon.Add(new Tuple <string, CharacterClass>(weaponName, weaponData.CharacterClass)); Logger.Log("Player party won weapon " + weaponName); break; case ThinkActionType.Defend: if (shields[rarity].Count == 0) { --i; continue; } ShieldData shieldData = shields[rarity].Sample(); string shieldName = new Attributes(shieldData).ToString(shieldData.Name); Battle.PlayerParty.ShieldInventory.AddItem(shieldName, null); ItemsWon.Add(new Tuple <string, CharacterClass>(shieldName, CharacterClass.Enemy)); Logger.Log("Player party won shield " + shieldName); break; case ThinkActionType.UseItem: if (items[rarity].Count == 0) { --i; continue; } ItemData itemData = items[rarity].Sample(); string itemName = itemData.Name.ToUpperFirstChar(); Battle.PlayerParty.ItemInventory.AddItem(itemName, null); ItemsWon.Add(new Tuple <string, CharacterClass>(itemName, CharacterClass.Enemy)); Logger.Log("Player party won item " + itemName); break; } } }