//  Get and display all info for current sub-boss
    private void DisplayBossCombatInfo()
    {
        if (CacheManager.SetupTab.CurrentSubBossList.Count != 0)
        {
            //UPDATE ARROW UI - disable buttons if not possible to increment and/or decrement
            if (CacheManager.SetupTab.currentSubBossIndex == 0)
            {
                leftArrow.interactable = false;
            }
            else
            {
                leftArrow.interactable = true;
            }
            if (CacheManager.SetupTab.currentSubBossIndex == CacheManager.SetupTab.CurrentSubBossList.Count - 1)
            {
                rightArrow.interactable = false;
            }
            else
            {
                rightArrow.interactable = true;
            }

            //  Get the current sub-boss data
            BossCombatData bcd = CacheManager.SetupTab.CurrentSubBoss;

            //  Basic info - name, lifepoints, whether or not it can poison the player
            subBossNameText.text = bcd.name;
            lifePointsText.text  = bcd.lifepoints.ToString("N0");
            poisonousText.text   = bcd.poisonous ? "Yes" : "No";

            //  AFFINITIES
            //  Images
            weaknessImage.sprite      = null;
            weaknessImage.sprite      = weaknessSprites[(int)bcd.affinityData.attackStyleWeakness];
            weaknessAffinityText.text = bcd.affinityData.weaknessAffinity == -1 ? "-" : bcd.affinityData.weaknessAffinity + "";

            //  Text
            meleeAffinityText.text  = bcd.affinityData.meleeAffinity + "";
            rangedAffinityText.text = bcd.affinityData.rangedAffinity + "";
            magicAffinityText.text  = bcd.affinityData.magicAffinity + "";

            //  Immunities
            poisonImmuneText.text    = bcd.poisonImmune ? IMMUNETEXT : NOTIMMUNETEXT;
            deflectImmuneText.text   = bcd.reflectImmune ? IMMUNETEXT : NOTIMMUNETEXT;
            stunImmuneText.text      = bcd.stunImmune ? IMMUNETEXT : NOTIMMUNETEXT;
            statDrainImmuneText.text = bcd.statDrainImmune ? IMMUNETEXT : NOTIMMUNETEXT;

            //  Susceptibilities; always reset sprite to null first
            monsterTypeSuscImage.sprite = null;
            combatClassSuscImage.sprite = null;
            monsterTypeSuscImage.sprite = monsterTypeSuscSprites[(int)bcd.monsterType];
            combatClassSuscImage.sprite = combatClassSuscSprites[(int)bcd.combatClass];
        }

        //  Call event to calculate and display hit chance
        EventManager.Instance.UpdateHitChance();
    }
    public BossInfo(short bossID, string bossName, bool hasAccessToRareDropTable, uint baseInstanceCost, RS3BossCombatDataSO[] combatData)
    {
        this.bossID   = bossID;
        this.bossName = bossName;
        this.hasAccessToRareDropTable = hasAccessToRareDropTable;
        this.baseInstanceCost         = baseInstanceCost;

        this.combatData = new List <BossCombatData>();

        if (combatData == null)
        {
            return;
        }
        else
        {
            BossCombatData bcd;

            for (int i = 0; i < combatData.Length; ++i)
            {
                bcd = new BossCombatData(combatData[i]);
                this.combatData.Add(bcd);
            }
        }
    }