Example #1
0
    // Add Item Logic
    #region
    public void AddItemToInventory(ItemDataSO itemAdded, bool playCardRewardOverlayEffect = false)
    {
        Debug.Log("InventoryController.AddItemToInventory() called for " + itemAdded.Name);

        // Enable char roster sparkle
        UIManager.Instance.SetCharacterRosterButtonParticleViewState(true);

        // Play screen overlay VFX
        if (playCardRewardOverlayEffect)
        {
            CardRewardScreenManager.Instance.CreateItemCardRewardEffect(itemAdded);
        }

        // Modify player score
        ScoreManager.Instance.itemsCollected++;
        if (itemAdded.itemRarity == ItemDataSO.ItemRarity.Epic)
        {
            ScoreManager.Instance.epicItemsCollected++;
        }

        // Create item
        GameObject        newInventoryItem = Instantiate(PrefabHolder.Instance.InventoryItem, itemsParent.transform);
        InventoryItemCard itemCard         = newInventoryItem.GetComponent <InventoryItemCard>();

        // Place item in inventory
        PlaceItemOnInventorySlot(itemCard, GetNextAvailableSlot());
        ItemManager.Instance.SetUpInventoryItemCardFromData(itemCard, itemAdded, inventoryItemCardSortingOrder);
    }
Example #2
0
    public Action CreateItemCardRewardEffect(ItemDataSO itemData)
    {
        Action action = new Action();

        StartCoroutine(CreateItemCardRewardEffectCoroutine(itemData, action));
        return(action);
    }
Example #3
0
    public void SetUpItemSlot(ItemDataSO.ItemRarity rarity)
    {
        EnableItemSlotView();

        ItemDataSO itemData       = null;
        int        randomGoldCost = 0;

        if (rarity == ItemDataSO.ItemRarity.Common)
        {
            itemData       = ItemLibrary.Instance.GetRandomCommonItem();
            randomGoldCost = Random.Range(40, 60);
        }
        else if (rarity == ItemDataSO.ItemRarity.Rare)
        {
            itemData       = ItemLibrary.Instance.GetRandomRareItem();
            randomGoldCost = Random.Range(60, 100);
        }
        else if (rarity == ItemDataSO.ItemRarity.Epic)
        {
            itemData       = ItemLibrary.Instance.GetRandomEpicItem();
            randomGoldCost = Random.Range(100, 200);
        }

        myItemCard.RunSetupFromItemData(itemData);
        myItemCard.myItemSlot = this;
        myItemCard.inShop     = true;
        SetGoldCost(randomGoldCost);
    }
Example #4
0
    // Initialization + Setup
    #region
    public void SetUpItemSlot(ItemDataSO.ItemRarity rarity)
    {
        EnableItemSlotView();

        ItemDataSO itemData       = null;
        int        randomGoldCost = 0;

        if (rarity == ItemDataSO.ItemRarity.Common)
        {
            itemData       = ItemLibrary.Instance.GetRandomCommonItem();
            randomGoldCost = Random.Range(4, 8);
        }
        else if (rarity == ItemDataSO.ItemRarity.Rare)
        {
            itemData       = ItemLibrary.Instance.GetRandomRareItem();
            randomGoldCost = Random.Range(8, 12);
        }
        else if (rarity == ItemDataSO.ItemRarity.Epic)
        {
            itemData       = ItemLibrary.Instance.GetRandomEpicItem();
            randomGoldCost = Random.Range(14, 18);
        }

        myItemCard.RunSetupFromItemData(itemData, ShopScreenManager.Instance.itemSlotSortingLayer);
        myItemCard.myItemSlot = this;
        myItemCard.location   = ItemCard.Location.Shop;
        SetGoldCost(randomGoldCost);
    }
Example #5
0
    // Get Data
    #region
    public string GetDamageTypeFromWeapon(ItemDataSO weapon)
    {
        Debug.Log("ItemManager.GetDamageTypeFromWeapon() called...");
        string damageTypeStringReturned = weapon.weaponDamageType.ToString();

        Debug.Log("ItemManager.GetDamageTypeFromWeapon() detected that " + weapon.Name + " has a damage type of " + damageTypeStringReturned);
        return(damageTypeStringReturned);
    }
Example #6
0
    // Get Item Data Logic
    #region
    public List <ItemDataSO> GetAllOtherItemSlots(ItemDataSO itemToExclude)
    {
        List <ItemDataSO> allOtherItems = new List <ItemDataSO>();

        allOtherItems.AddRange(itemsInShopData);
        if (allOtherItems.Contains(itemToExclude))
        {
            allOtherItems.Remove(itemToExclude);
        }

        return(allOtherItems);
    }
Example #7
0
    public void CreateAndAddItemDirectlyToCharacter(ItemDataSO itemAdded, CharacterItemSlot weaponSlot)
    {
        // Method used to set characters up with default items. Will be used later again when character presets are set up
        Debug.Log("InventoryController.AddItemToInventory() called for " + itemAdded.Name);

        GameObject        newInventoryItem = Instantiate(PrefabHolder.Instance.InventoryItem, itemsParent.transform);
        InventoryItemCard itemCard         = newInventoryItem.GetComponent <InventoryItemCard>();

        itemCard.transform.localScale = new Vector3(1, 1, 1);

        ItemManager.Instance.SetUpInventoryItemCardFromData(itemCard, itemAdded, inventoryItemCardSortingOrder);
        PlaceItemOnCharacterSlot(itemCard, weaponSlot);
    }
Example #8
0
    public void SetUpInventoryItemCardFromData(InventoryItemCard itemCard, ItemDataSO data, int sortingOrder)
    {
        Debug.Log("InventoryController.AddItemToInventory() called for " + data.Name);

        itemCard.myItemData = data;

        itemCard.itemImage.sprite = data.sprite;

        itemCard.myInfoItemCard.RunSetupFromItemData(data, sortingOrder);

        itemCard.myInfoItemCard.location = ItemCard.Location.Inventory;

        itemCard.myInfoItemCard.mainCanvas.sortingOrder = 3100;
    }
Example #9
0
    // Initialization + Setup
    #region
    public void BuildWeaponTabElements(ItemDataSO item)
    {
        Debug.Log("ItemCardPanelHover.BuildWeaponTabElements() called...");

        // Set sprite first
        if (item.weaponDamageType == ItemDataSO.WeaponDamageType.Physical)
        {
            //weaponInfoTab.image.sprite = physicalSprite;
            weaponInfoTab.passiveInfoSheet.abilityImage.sprite = physicalSprite;
        }
        else if (item.weaponDamageType == ItemDataSO.WeaponDamageType.Fire)
        {
            // weaponInfoTab.image.sprite = fireSprite;
            weaponInfoTab.passiveInfoSheet.abilityImage.sprite = fireSprite;
        }
        else if (item.weaponDamageType == ItemDataSO.WeaponDamageType.Frost)
        {
            // weaponInfoTab.image.sprite = frostSprite;
            weaponInfoTab.passiveInfoSheet.abilityImage.sprite = frostSprite;
        }
        else if (item.weaponDamageType == ItemDataSO.WeaponDamageType.Poison)
        {
            //weaponInfoTab.image.sprite = poisonSprite;
            weaponInfoTab.passiveInfoSheet.abilityImage.sprite = poisonSprite;
        }
        else if (item.weaponDamageType == ItemDataSO.WeaponDamageType.Shadow)
        {
            //weaponInfoTab.image.sprite = shadowSprite;
            weaponInfoTab.passiveInfoSheet.abilityImage.sprite = shadowSprite;
        }
        else if (item.weaponDamageType == ItemDataSO.WeaponDamageType.Air)
        {
            //weaponInfoTab.image.sprite = airSprite;
            weaponInfoTab.passiveInfoSheet.abilityImage.sprite = airSprite;
        }

        // Set description Text
        weaponInfoTab.passiveInfoSheet.descriptionText.text = "This weapon deals " +
                                                              TextLogic.ReturnColoredText(item.baseDamage.ToString(), TextLogic.yellow) + " " +
                                                              TextLogic.ReturnColoredText(item.weaponDamageType.ToString(), TextLogic.GetColorCodeFromString(item.weaponDamageType.ToString())) +
                                                              " damage";

        // Set name text
        weaponInfoTab.passiveInfoSheet.nameText.text = "Weapon";

        // Set pivot
        PassiveInfoSheetController.Instance.SetPivotDirection(weaponInfoTab.passiveInfoSheet, PassiveInfoSheet.PivotDirection.Downwards);
    }
Example #10
0
    // Set up item cards + etc
    #region
    public void SetUpItemCardFromData(ItemCard itemCard, ItemDataSO data, int sortingOrder)
    {
        Debug.Log("ItemManager.RunSetupFromItemData() called for: " + data.Name);

        // Set scale
        itemCard.originalScale = itemCard.GetComponent <RectTransform>().localScale.x;

        // Store data
        itemCard.myItemDataSO = data;

        // Set canvas sorting order
        itemCard.mainCanvas.sortingOrder = sortingOrder;

        // Set properties
        itemCard.myName                 = data.Name;
        itemCard.myNameText.text        = data.Name;
        itemCard.itemImage.sprite       = data.sprite;
        itemCard.myDescriptionText.text = data.itemDescription;
        itemCard.myItemTypeText.text    = ConvertItemTypeEnumToString(data.itemType);

        // Weapon specific set up
        if (IsItemWeapon(data))
        {
            // Turn on damage type icon
            itemCard.weaponDamageTypeParent.SetActive(true);

            // Get and set correct damage type sprite
            itemCard.itemDamageTypeImage.sprite = GetWeaponDamageTypeImage(data);

            // Set base damage text
            itemCard.myBaseDamageText.text = data.baseDamage.ToString();
        }

        // Set up ribbon + frame rarity sprites
        if (data.itemRarity == ItemDataSO.ItemRarity.Common)
        {
            itemCard.commonParent.SetActive(true);
        }
        else if (data.itemRarity == ItemDataSO.ItemRarity.Rare)
        {
            itemCard.rareParent.SetActive(true);
        }
        else if (data.itemRarity == ItemDataSO.ItemRarity.Epic)
        {
            itemCard.epicParent.SetActive(true);
        }
    }
Example #11
0
    // Bools and conditional checks
    #region
    public bool IsItemWeapon(ItemDataSO item)
    {
        Debug.Log("ItemManager.IsItemWeapon() called for: " + item.Name);

        if (item.itemType == ItemDataSO.ItemType.MeleeOneHand ||
            item.itemType == ItemDataSO.ItemType.MeleeTwoHand ||
            item.itemType == ItemDataSO.ItemType.RangedTwoHand)
        {
            Debug.Log(item.Name + " is a weapon");
            return(true);
        }
        else
        {
            Debug.Log(item.Name + " is NOT a weapon");
            return(false);
        }
    }
Example #12
0
    // Conditional Checks + Boolean logic
    #region
    public bool IsItemAlreadyInShop(ItemSlot slotToCheck)
    {
        bool       alreadyInShop = false;
        ItemDataSO itemChecked   = slotToCheck.myItemCard.myItemDataSO;

        foreach (ItemSlot slot in allItemsSlots)
        {
            if (slot.myItemCard.myItemDataSO != null &&
                slot.myItemCard.myItemDataSO.Name == itemChecked.Name &&
                slot != slotToCheck)
            {
                alreadyInShop = true;
                break;
            }
        }

        return(alreadyInShop);
    }
    public ItemDataSO GetItemByName(string itemName)
    {
        ItemDataSO itemReturned = null;

        foreach (ItemDataSO itemData in allItems)
        {
            if (itemData.itemName == itemName)
            {
                itemReturned = itemData;
            }
        }

        if (itemReturned == null)
        {
            Debug.Log("ItemLibrary.GetItem() search error: could not find a matching item in library");
        }

        return(itemReturned);
    }
    public ItemDataSO GetRandomLootRewardItem()
    {
        ItemDataSO itemReturned = null;
        int        randomNumber = Random.Range(0, 100);

        if (randomNumber >= 0 && randomNumber <= 69)
        {
            itemReturned = GetRandomCommonItem();
        }
        else if (randomNumber >= 70 && randomNumber <= 94)
        {
            itemReturned = GetRandomRareItem();
        }
        else if (randomNumber >= 95 && randomNumber <= 99)
        {
            itemReturned = GetRandomEpicItem();
        }

        return(itemReturned);
    }
Example #15
0
    public void ApplyAllItemEffectsToCharacterData(CharacterData character, ItemDataSO item, bool removing = false)
    {
        Debug.Log("ItemManager.ApplyAllItemEffectsToCharacterData() called for " + item.Name);
        // Check item effect one
        if (item.itemEffectOne != ItemDataSO.ItemEffect.None)
        {
            ApplyItemEffectToCharacterData(character, item.itemEffectOne, item.itemEffectOneValue, removing);
        }

        // Check item effect two
        if (item.itemEffectTwo != ItemDataSO.ItemEffect.None)
        {
            ApplyItemEffectToCharacterData(character, item.itemEffectTwo, item.itemEffectTwoValue, removing);
        }

        // Check item effect three
        if (item.itemEffectThree != ItemDataSO.ItemEffect.None)
        {
            ApplyItemEffectToCharacterData(character, item.itemEffectThree, item.itemEffectThreeValue, removing);
        }
    }
Example #16
0
    public Sprite GetWeaponDamageTypeImage(ItemDataSO data)
    {
        Debug.Log("GetWeaponDamageTypeImage() called...");

        if (data.weaponDamageType == ItemDataSO.WeaponDamageType.Physical)
        {
            return(physicalDamageSprite);
        }

        else if (data.weaponDamageType == ItemDataSO.WeaponDamageType.Fire)
        {
            return(fireDamageSprite);
        }

        else if (data.weaponDamageType == ItemDataSO.WeaponDamageType.Frost)
        {
            return(frostDamageSprite);
        }

        else if (data.weaponDamageType == ItemDataSO.WeaponDamageType.Poison)
        {
            return(poisonDamageSprite);
        }

        else if (data.weaponDamageType == ItemDataSO.WeaponDamageType.Air)
        {
            return(airDamageSprite);
        }

        else if (data.weaponDamageType == ItemDataSO.WeaponDamageType.Shadow)
        {
            return(shadowDamageSprite);
        }
        else
        {
            Debug.Log("GetWeaponDamageTypeImage() coudln't detect damage type, returning a null sprite...");
            return(null);
        }
    }
Example #17
0
    // Get ItemDataSO Logic
    #region
    public ItemDataSO GetItemByName(string itemName)
    {
        Debug.Log("ItemLibrary.GetItemByName() called, searching for " + itemName);

        ItemDataSO itemReturned = null;

        foreach (ItemDataSO itemData in allItems)
        {
            if (itemData.Name == itemName)
            {
                itemReturned = itemData;
                break;
            }
        }

        if (itemReturned == null)
        {
            Debug.Log("ItemLibrary.GetItemByName() search error: could not find a matching item in library with the name " + itemName);
        }

        return(itemReturned);
    }
Example #18
0
    public void RunSetupFromItemData(ItemDataSO data)
    {
        myItemDataSO = data;
        Debug.Log("RunSetupFromItemData() called...");
        myName                  = data.itemName;
        myNameText.text         = myName;
        myDescriptionText.text  = data.itemDescription;
        myImageComponent.sprite = data.itemImage;
        myItemRarity            = data.itemRarity;

        if (myItemRarity == ItemDataSO.ItemRarity.Common)
        {
            myRarityFrame.color = data.commonColour;
        }
        else if (myItemRarity == ItemDataSO.ItemRarity.Rare)
        {
            myRarityFrame.color = data.rareColour;
        }
        else if (myItemRarity == ItemDataSO.ItemRarity.Epic)
        {
            myRarityFrame.color = data.epicColour;
        }
    }
Example #19
0
 // Setup + Initialization
 #region
 public void RunSetupFromItemData(ItemDataSO data, int sortingOrder)
 {
     ItemManager.Instance.SetUpItemCardFromData(this, data, sortingOrder);
     myData = data;
 }
Example #20
0
 // Initialization + Setup
 #region
 public void BuildItemCardRewardOverlayFromData(ItemDataSO data, ItemCardRewardOverlay card)
 {
     ItemManager.Instance.SetUpItemCardFromData(card.itemCard, data, itemCardSortingOrder);
 }
Example #21
0
    private IEnumerator CreateItemCardRewardEffectCoroutine(ItemDataSO itemData, Action action)
    {
        // Create Card object
        GameObject            newItemCardGO = Instantiate(itemCardEffectPrefab, cardParent);
        ItemCardRewardOverlay newItemCard   = newItemCardGO.GetComponent <ItemCardRewardOverlay>();

        // Set up card properties
        BuildItemCardRewardOverlayFromData(itemData, newItemCard);

        // Scale down card
        SetParentScale(newItemCard.itemCardScaleParent, new Vector3(0.005f, 0.005f, 0.005f));

        // Insert Delay, break up multiple simoltaenous reveals
        yield return(new WaitForSeconds(CalculateCardRevealDelay()));

        // Get next available slot position
        CardRewardScreenSlot mySlot = GetNextAvailableSlotPosition();

        // dont proceed unless a slot is available
        if (mySlot == null)
        {
            action.actionResolved = true;
            yield break;
        }

        // Move to starting slot position
        newItemCard.masterLocationParent.position = mySlot.parentTransform.position;

        // Start scaling card back to normal size
        Action scaleEffect = ScaleUpCard(newItemCard.itemCardScaleParent, 1);

        yield return(new WaitUntil(() => scaleEffect.actionResolved == true));

        // Brief pause, so player can read the card
        yield return(new WaitForSeconds(1));

        // Free up slot
        mySlot.occupied = false;

        // Start scaling card back down
        ScaleDownCard(newItemCard.itemCardScaleParent, 0.01f);

        // Start card rotation towards destination
        RotateCardZAxis(newItemCard.itemCardScaleParent, -45);

        // Enable Sparkle Effect
        newItemCard.sparkleParticleEffectParent.SetActive(true);

        // Move character panel button position
        Action moveEffect = MoveCardToDestination(newItemCard.masterLocationParent, charRosterButtonEndPosition.position);

        yield return(new WaitUntil(() => moveEffect.actionResolved == true));

        // Create mini explosion on char roster button
        GameObject newPE = Instantiate(lootExplosionEffectPrefab, cardParent);

        newPE.transform.position = charRosterButtonEndPosition.position;

        // Destroy item card
        Destroy(newItemCardGO);

        // Resolve
        action.actionResolved = true;
    }
Example #22
0
    public int GetFinalDamageValueAfterAllCalculations(LivingEntity attacker, LivingEntity target, Ability abilityUsed, string damageType, bool critical, int baseDamage, ItemDataSO weaponUsed = null)
    {
        Debug.Log("CombatLogic.GetFinalDamageValueAfterAllCalculations() called...");
        int finalDamageValueReturned = 0;

        // calculate base damage
        finalDamageValueReturned = GetBaseDamageValue(attacker, baseDamage, abilityUsed, damageType, weaponUsed);
        Debug.Log("CombatLogic.GetFinalDamageValueAfterAllCalculations() finalDamageValueReturned value after base calculations: " + finalDamageValueReturned.ToString());

        // calculate damage after standard modifiers
        finalDamageValueReturned = GetDamageValueAfterNonResistanceModifiers(finalDamageValueReturned, attacker, target, abilityUsed, damageType, critical);
        Debug.Log("CombatLogic.GetFinalDamageValueAfterAllCalculations() finalDamageValueReturned value after non resistance modifier calculations: " + finalDamageValueReturned.ToString());

        // calcualte damage value after resistances
        if (attacker.defender &&
            StateManager.Instance.DoesPlayerAlreadyHaveState("Godly"))
        {
            Debug.Log("CombatLogic.GetFinalDamageValueAfterAllCalculations() detected that attacker is defender and has state 'Godly', ignoring target resistances...");
        }
        else
        {
            finalDamageValueReturned = GetDamageValueAfterResistances(finalDamageValueReturned, damageType, target);
            Debug.Log("CombatLogic.GetFinalDamageValueAfterAllCalculations() finalDamageValueReturned value after resitance type calculations: " + finalDamageValueReturned.ToString());
        }

        // return final value
        Debug.Log("CombatLogic.GetFinalDamageValueAfterAllCalculations() finalDamageValueReturned final value returned: " + finalDamageValueReturned.ToString());
        return(finalDamageValueReturned);
    }
Example #23
0
    public void UpdateCharacterAbilitiesFromWeapons(CharacterData character)
    {
        Debug.Log("InventoryController.UpdateCharacterAbilitiesFromWeapons() called...");
        List <AbilityDataSO> abilitiesToLearn = new List <AbilityDataSO>();

        ItemDataSO mainHandWeapon = character.mainHandWeapon;
        ItemDataSO offHandWeapon  = character.offHandWeapon;

        AbilityDataSO strike     = AbilityLibrary.Instance.GetAbilityByName("Strike");
        AbilityDataSO defend     = AbilityLibrary.Instance.GetAbilityByName("Defend");
        AbilityDataSO shoot      = AbilityLibrary.Instance.GetAbilityByName("Shoot");
        AbilityDataSO twinStrike = AbilityLibrary.Instance.GetAbilityByName("Twin Strike");

        // Unlearn previous weapon related abilities first
        if (character.DoesCharacterAlreadyKnowAbility(strike))
        {
            character.HandleUnlearnAbility(strike);
        }
        if (character.DoesCharacterAlreadyKnowAbility(shoot))
        {
            character.HandleUnlearnAbility(shoot);
        }
        if (character.DoesCharacterAlreadyKnowAbility(defend))
        {
            character.HandleUnlearnAbility(defend);
        }
        if (character.DoesCharacterAlreadyKnowAbility(twinStrike))
        {
            character.HandleUnlearnAbility(twinStrike);
        }


        // Twin Strike
        if (mainHandWeapon.itemType == ItemDataSO.ItemType.MeleeOneHand &&
            offHandWeapon != null && offHandWeapon.itemType == ItemDataSO.ItemType.MeleeOneHand)
        {
            Debug.Log(character.myName + " learning Twin Strike from weapon loadout");
            abilitiesToLearn.Add(twinStrike);
        }

        // Strike and Defend
        else if (mainHandWeapon.itemType == ItemDataSO.ItemType.MeleeOneHand &&
                 offHandWeapon != null && offHandWeapon.itemType == ItemDataSO.ItemType.Shield)
        {
            Debug.Log(character.myName + " learning Strike and Defend from weapon loadout");
            abilitiesToLearn.Add(strike);
            abilitiesToLearn.Add(defend);
        }

        // Strike
        else if (mainHandWeapon.itemType == ItemDataSO.ItemType.MeleeOneHand ||
                 mainHandWeapon.itemType == ItemDataSO.ItemType.MeleeTwoHand)
        {
            Debug.Log(character.myName + " learning Strike from weapon loadout");
            abilitiesToLearn.Add(strike);
        }

        // Shoot
        else if (mainHandWeapon.itemType == ItemDataSO.ItemType.RangedTwoHand)
        {
            Debug.Log(character.myName + " learning Shoot from weapon loadout");
            abilitiesToLearn.Add(shoot);
        }

        // Learn abilities
        foreach (AbilityDataSO ability in abilitiesToLearn)
        {
            character.HandleLearnAbility(ability);
        }
    }
Example #24
0
    public string CalculateFinalDamageTypeOfAttack(LivingEntity entity, Ability abilityUsed, ItemDataSO itemUsed = null)
    {
        Debug.Log("CombatLogic.CalculateFinalDamageTypeOfAttack() called...");
        // preferences
        string damageTypeReturned = "None";

        // First, draw damage type from ability
        damageTypeReturned = AbilityLogic.Instance.GetDamageTypeFromAbility(abilityUsed);

        // Second, if ability uses weapon, get damage type from weapon
        if (itemUsed != null && (abilityUsed.myAbilityData.requiresMeleeWeapon || abilityUsed.myAbilityData.requiresRangedWeapon))
        {
            Debug.Log("CombatLogic.CalculateFinalDamageTypeOfAttack() detected that " + abilityUsed.abilityName + " requires a weapon, drawing damage type from weapon...");
            damageTypeReturned = ItemManager.Instance.GetDamageTypeFromWeapon(itemUsed);
            Debug.Log("Damage type from weapon (" + itemUsed.Name + ") is: " + damageTypeReturned);
        }

        // Third, if character has a 'permanent' imbuement, get damage type from that passive
        if (abilityUsed != null && abilityUsed.abilityType == AbilityDataSO.AbilityType.MeleeAttack)
        {
            Debug.Log("CombatLogic.CalculateFinalDamageTypeOfAttack() checking for damage type imbuements...");
            if (entity.myPassiveManager.airImbuement)
            {
                Debug.Log(entity.name + " has Air Imbuement!");
                damageTypeReturned = "Air";
            }
            else if (entity.myPassiveManager.fireImbuement)
            {
                Debug.Log(entity.name + " has Fire Imbuement!");
                damageTypeReturned = "Fire";
            }
            else if (entity.myPassiveManager.poisonImbuement)
            {
                Debug.Log(entity.name + " has Poison Imbuement!");
                damageTypeReturned = "Poison";
            }
            else if (entity.myPassiveManager.frostImbuement)
            {
                Debug.Log(entity.name + " has Frost Imbuement!");
                damageTypeReturned = "Frost";
            }
            else if (entity.myPassiveManager.shadowImbuement)
            {
                Debug.Log(entity.name + " has Shadow Imbuement!");
                damageTypeReturned = "Shadow";
            }
        }

        // Fourth, if character has a temporary imbuement, get damage type from that (override permanent imbuement)
        if (abilityUsed != null && abilityUsed.abilityType == AbilityDataSO.AbilityType.MeleeAttack)
        {
            Debug.Log("CombatLogic.CalculateFinalDamageTypeOfAttack() checking for TEMPORARY damage type imbuements...");

            if (entity.myPassiveManager.temporaryAirImbuement)
            {
                Debug.Log(entity.name + " has Temporary Air Imbuement!");
                damageTypeReturned = "Air";
            }
            else if (entity.myPassiveManager.temporaryFireImbuement)
            {
                Debug.Log(entity.name + " has Temporary Fire Imbuement!");
                damageTypeReturned = "Fire";
            }
            else if (entity.myPassiveManager.temporaryPoisonImbuement)
            {
                Debug.Log(entity.name + " has Temporary Poison Imbuement!");
                damageTypeReturned = "Poison";
            }
            else if (entity.myPassiveManager.temporaryFrostImbuement)
            {
                Debug.Log(entity.name + " has Temporary Frost Imbuement!");
                damageTypeReturned = "Frost";
            }
            else if (entity.myPassiveManager.temporaryShadowImbuement)
            {
                Debug.Log(entity.name + " has Temporary Shadow Imbuement!");
                damageTypeReturned = "Shadow";
            }
        }

        Debug.Log("CombatLogic.CalculateFinalDamageTypeOfAttack() final damage type returned: " + damageTypeReturned);
        return(damageTypeReturned);
    }
Example #25
0
    // Damage, Damage Type and Resistance Calculators
    #region
    public int GetBaseDamageValue(LivingEntity entity, int baseDamage, Ability abilityUsed, string attackDamageType, ItemDataSO weaponUsed = null)
    {
        Debug.Log("CombatLogic.GetBaseDamageValue() called...");
        int baseDamageValueReturned = 0;

        // Add damage from weapon, if the weapon is being used for the attack
        if (weaponUsed != null)
        {
            baseDamageValueReturned += weaponUsed.baseDamage;
            Debug.Log(weaponUsed.Name + " base damage is: " + weaponUsed.baseDamage.ToString());
        }
        else
        {
            baseDamageValueReturned += baseDamage;
            Debug.Log("Weapon not used, base damage from ability/effect is: " + baseDamageValueReturned.ToString());
        }

        // Add flat damage bonus from modifiers (strength, etc)
        if (abilityUsed != null &&
            abilityUsed.abilityType == AbilityDataSO.AbilityType.MeleeAttack)
        {
            baseDamageValueReturned += EntityLogic.GetTotalStrength(entity);
            Debug.Log("Base damage after strength and related modifiers added: " + baseDamageValueReturned.ToString());
        }

        // Add damage from damage type modifiers that effect spell damage (wisdom, shadowform etc)
        if (attackDamageType == "Fire" || attackDamageType == "Shadow" || attackDamageType == "Air" || attackDamageType == "Frost" || attackDamageType == "Poison")
        {
            baseDamageValueReturned += EntityLogic.GetTotalWisdom(entity);
            Debug.Log("Base damage after wisdom added: " + baseDamageValueReturned.ToString());
        }

        // multiply by ability damage multiplier if ability uses a weapon
        if (abilityUsed != null &&
            (abilityUsed.requiresMeleeWeapon || abilityUsed.requiresRangedWeapon))
        {
            baseDamageValueReturned = (int)(baseDamageValueReturned * abilityUsed.weaponDamagePercentage);
            Debug.Log("Base damage after ability percentage modifer " + baseDamageValueReturned.ToString());
        }

        // return final value
        Debug.Log("Final base damage value of attack returned: " + baseDamageValueReturned.ToString());
        return(baseDamageValueReturned);
    }