bool IsMatchingAdvPair(string str1, string str2, SpecialAdvDis candidate, SpecialAdvDis incumbent) { if ((candidate.primaryString == str1 && incumbent.primaryString == str2 || candidate.primaryString == str2 && incumbent.primaryString == str1) && candidate.secondaryString == incumbent.secondaryString) { return(true); } return(false); }
bool IsDuplicateAdvantage(SpecialAdvDis advDis) { for (int i = 0; i < advDisList.Count; i++) { if (advDis.primaryString == advDisList[i].primaryString && advDis.secondaryString == advDisList[i].secondaryString) { return(true); } } return(false); }
bool CannotAddAdvantage(SpecialAdvDis advDis) { // Combine advantage and disadvantage lists List <SpecialAdvDis> adList = new List <SpecialAdvDis>(); adList.AddRange(advDisList); adList.AddRange(otherList); for (int i = 0; i < adList.Count; i++) { // Duplicate if (advDis.primaryString == adList[i].primaryString && advDis.secondaryString == adList[i].secondaryString) { return(true); } // Incompatible advantage/disadvantage pairs if (IsMatchingAdvPair(HardStrings.bonusToHit, HardStrings.phobia, advDis, adList[i])) { return(true); } if (IsMatchingAdvPair(HardStrings.expertiseIn, HardStrings.forbiddenWeaponry, advDis, adList[i])) { return(true); } // No immunity, resistance, low tolerance, or critical weakness may co-exist if (IsMatchingAdvPair(HardStrings.immunity, HardStrings.resistance, advDis, adList[i])) { return(true); } if (IsMatchingAdvPair(HardStrings.immunity, HardStrings.criticalWeakness, advDis, adList[i])) { return(true); } if (IsMatchingAdvPair(HardStrings.immunity, HardStrings.lowTolerance, advDis, adList[i])) { return(true); } if (IsMatchingAdvPair(HardStrings.resistance, HardStrings.lowTolerance, advDis, adList[i])) { return(true); } if (IsMatchingAdvPair(HardStrings.resistance, HardStrings.criticalWeakness, advDis, adList[i])) { return(true); } if (IsMatchingAdvPair(HardStrings.lowTolerance, HardStrings.criticalWeakness, advDis, adList[i])) { return(true); } } return(false); }
void SecondaryPicker_OnItemPicked(int index, string itemString) { CloseWindow(); string primary = advDisList[advDisList.Count - 1].primaryString; SpecialAdvDis item = new SpecialAdvDis { primaryString = primary, secondaryString = itemString, difficulty = GetAdvDisAdjustment(primary, itemString) }; if (CannotAddAdvantage(item)) { advDisList.RemoveAt(advDisList.Count - 1); return; } advDisList[advDisList.Count - 1] = item; UpdateLabels(); UpdateDifficultyAdjustment(); }
void AdvantagePicker_OnItemPicked(int index, string advantageName) { CloseWindow(); SpecialAdvDis s = new SpecialAdvDis { primaryString = advantageName , secondaryString = string.Empty }; string[] secondaryList = null; // advantages/disadvantages with secondary options switch (advantageName) { case HardStrings.bonusToHit: case HardStrings.phobia: secondaryList = enemyTypeStrings; break; case HardStrings.expertiseIn: case HardStrings.forbiddenWeaponry: secondaryList = weaponTypeStrings; break; case HardStrings.immunity: case HardStrings.resistance: case HardStrings.criticalWeakness: secondaryList = effectTypeStrings; break; case HardStrings.increasedMagery: // limit to 1 magery increase advantage for the character bool alreadyAdded = false; foreach (SpecialAdvDis item in advDisList) { if (item.primaryString == HardStrings.increasedMagery) { alreadyAdded = true; } } if (alreadyAdded) { return; } secondaryList = increasedMageryStrings; break; case HardStrings.rapidHealing: case HardStrings.spellAbsorption: secondaryList = effectEnvStrings; break; case HardStrings.regenerateHealth: secondaryList = regenHealthStrings; break; case HardStrings.damage: secondaryList = damageEnvStrings; break; case HardStrings.darknessPoweredMagery: secondaryList = darknessPoweredStrings; break; case HardStrings.forbiddenArmorType: secondaryList = armorTypeStrings; break; case HardStrings.forbiddenMaterial: secondaryList = materialStrings; break; case HardStrings.forbiddenShieldTypes: secondaryList = shieldTypeStrings; break; case HardStrings.lightPoweredMagery: secondaryList = lightPoweredStrings; break; case HardStrings.lowTolerance: secondaryList = effectTypeStrings; break; default: break; } if (secondaryList == null) { if (CannotAddAdvantage(s)) { return; } s = new SpecialAdvDis { primaryString = advantageName , secondaryString = string.Empty , difficulty = GetAdvDisAdjustment(advantageName, string.Empty) }; advDisList.Add(s); UpdateLabels(); UpdateDifficultyAdjustment(); } else { DaggerfallListPickerWindow secondaryPicker = new DaggerfallListPickerWindow(uiManager, this, DaggerfallUI.SmallFont, advPickerItemCount); secondaryPicker.ListBox.Font = DaggerfallUI.SmallFont; secondaryPicker.OnItemPicked += SecondaryPicker_OnItemPicked; secondaryPicker.OnCancel += SecondaryPicker_OnCancel; foreach (string secondaryString in secondaryList) { secondaryPicker.ListBox.AddItem(secondaryString); } uiManager.PushWindow(secondaryPicker); advDisList.Add(s); } }
void PrimaryPicker_OnItemPicked(int index, string advantageName) { CloseWindow(); string primaryKey = primaryPicker.ListBox.GetItem(index).tag as string; SpecialAdvDis s = new SpecialAdvDis { primaryStringKey = primaryKey, secondaryStringKey = string.Empty }; string[] secondaryList = null; // advantages/disadvantages with secondary options switch (primaryKey) { case HardStrings.bonusToHit: case HardStrings.phobia: secondaryList = enemyTypeStringKeys; break; case HardStrings.expertiseIn: case HardStrings.forbiddenWeaponry: secondaryList = weaponTypeStringKeys; break; case HardStrings.immunity: case HardStrings.resistance: case HardStrings.criticalWeakness: secondaryList = effectTypeStringKeys; break; case HardStrings.increasedMagery: // limit to 1 magery increase advantage for the character bool alreadyAdded = false; foreach (SpecialAdvDis item in advDisList) { if (item.primaryStringKey == HardStrings.increasedMagery) { alreadyAdded = true; } } if (alreadyAdded) { return; } secondaryList = increasedMageryStringKeys; break; case HardStrings.rapidHealing: case HardStrings.spellAbsorption: secondaryList = effectEnvStringKeys; break; case HardStrings.regenerateHealth: secondaryList = regenHealthStringKeys; break; case HardStrings.damage: secondaryList = damageEnvStringKeys; break; case HardStrings.darknessPoweredMagery: secondaryList = darknessPoweredStringKeys; break; case HardStrings.forbiddenArmorType: secondaryList = armorTypeStringKeys; break; case HardStrings.forbiddenMaterial: secondaryList = materialStringKeys; break; case HardStrings.forbiddenShieldTypes: secondaryList = shieldTypeStringKeys; break; case HardStrings.lightPoweredMagery: secondaryList = lightPoweredStringKeys; break; case HardStrings.lowTolerance: secondaryList = effectTypeStringKeys; break; default: break; } if (secondaryList == null) { if (CannotAddAdvantage(s)) { return; } s = new SpecialAdvDis { primaryStringKey = primaryKey, secondaryStringKey = string.Empty, difficulty = GetAdvDisAdjustment(primaryKey, string.Empty) }; advDisList.Add(s); UpdateLabels(); UpdateDifficultyAdjustment(); } else { secondaryPicker.ListBox.ClearItems(); foreach (string secondaryKey in secondaryList) { secondaryPicker.ListBox.AddItem(TextManager.Instance.GetLocalizedText(secondaryKey), -1, secondaryKey); } uiManager.PushWindow(secondaryPicker); advDisList.Add(s); } }