public void TakeDamage(DamageInfo damageInfo) { Global.DamageType damageType = damageInfo.damageType; int damageToPlayer = damageInfo.damage; bool doesArmorBlockDamageType = Global.CompareDamageTypes(damageType, equippedArmor.armorType); int damageToArmor = (isUsingArmor && doesArmorBlockDamageType) ? Mathf.CeilToInt(damageToPlayer * equippedArmor.resistPercent) : 0; damageToPlayer -= damageToArmor; ChangeHealth(-damageToPlayer); statusValuePopupText.ShowText($"-{damageToPlayer}", Global.DamageTypeToColor(damageType)); equippedArmor.armorHealth -= damageToArmor; if (equippedArmor.armorHealth <= 0) { UnequipArmor(); } if (isUsingArmor) { int currentArmorHealth = equippedArmor.armorHealth; targetArmorFillAmount = (float)currentArmorHealth / maxArmorHealth; armorText.text = $"{currentArmorHealth}/{maxArmorHealth}"; } }
public static void Damage(int pvDamage, Global.DamageType pvDamageType, string pvXml) { XPathDocument xPathDoc = new XPathDocument(pvXml); XPathNavigator xPathNav = xPathDoc.CreateNavigator(); int lvHealth = xPathNav.SelectSingleNode("Character/Attributes/Health/Max").ValueAsInt; int lvBash = xPathNav.SelectSingleNode("Character/Attributes/Health/Bash").ValueAsInt; int lvLethal = xPathNav.SelectSingleNode("Character/Attributes/Health/Lethal").ValueAsInt; int lvAggravated = xPathNav.SelectSingleNode("Character/Attributes/Health/Aggravated").ValueAsInt; int lvTotal = lvBash + lvLethal + lvAggravated; int lvLethalUpgradeAllowance = lvHealth - lvAggravated; int lvBashUpgradeAllowance = lvLethalUpgradeAllowance - lvLethal; switch (pvDamageType) { case Global.DamageType.Bash: while (pvDamage > 0) { if (lvTotal < lvHealth) { lvBash++; lvTotal++; } else if (lvBashUpgradeAllowance > 0) { lvBash--; lvLethal++; } else { lvLethal--; lvAggravated++; } pvDamage--; } break; case Global.DamageType.Lethal: while (pvDamage > 0) { if (lvTotal < lvHealth) { lvLethal++; lvTotal++; } else if (lvLethalUpgradeAllowance > 0) { lvLethal--; lvAggravated++; if (lvBash > 1 && lvTotal > lvHealth) { lvBash--; } } pvDamage--; } break; case Global.DamageType.Aggravated: while (pvDamage > 0) { if (lvTotal < lvHealth) { lvAggravated++; lvTotal++; if (lvLethal > 1 && lvTotal > lvHealth) { lvLethal--; } else if (lvBash > 1 && lvTotal > lvHealth) { lvBash--; } } pvDamage--; } break; } XmlDocument xDoc = new XmlDocument(); xDoc.Load(pvXml); xDoc.SelectSingleNode("Character/Attributes/Health/Bash").InnerText = lvBash.ToString(); xDoc.SelectSingleNode("Character/Attributes/Health/Lethal").InnerText = lvLethal.ToString(); xDoc.SelectSingleNode("Character/Attributes/Health/Aggravated").InnerText = lvAggravated.ToString(); FileStream lvFS = new FileStream(pvXml, FileMode.Truncate, FileAccess.Write, FileShare.ReadWrite); xDoc.Save(lvFS); lvFS.Close(); //TODO: Add notification to Combat chat box UpdateCombatXml(); }
public ArmorInfo(int armorHealth, float resistPercent, Global.DamageType armorType) { this.armorHealth = armorHealth; this.resistPercent = resistPercent; this.armorType = armorType; }
public DamageInfo(int damage, Global.DamageType damageType) { this.damage = damage; this.damageType = damageType; }