示例#1
0
    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}";
        }
    }
示例#2
0
        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();
        }
示例#3
0
 public ArmorInfo(int armorHealth, float resistPercent, Global.DamageType armorType)
 {
     this.armorHealth   = armorHealth;
     this.resistPercent = resistPercent;
     this.armorType     = armorType;
 }
示例#4
0
 public DamageInfo(int damage, Global.DamageType damageType)
 {
     this.damage     = damage;
     this.damageType = damageType;
 }