UnityGameProjectsCode / RelianceGame / Inventory Control / SpecSelect.cs
SpecSelect.cs
Raw
using System.Collections.Generic;
using TMPro;
using UnityEngine;

public class SpecSelect : MonoBehaviour
{
    private int currentLevel;
    private TextMeshProUGUI specText;
    private string specTitle;
    private GameObject specChoicePanel;
    private GameObject specSkillTreePanel;
    private GameObject skillPanelChild;
    private int specRequirement = 5;
    private bool specSet;
    public Sprite tempImage;

    private List<GameObject> perkBlocks = new List<GameObject>();

    private HUBStats hubStats;

    // Start is called before the first frame update
    void Start()
    {
        specChoicePanel = GameObject.Find("HUBUI/Loadout Panel/Spec Panel");
        specSkillTreePanel = GameObject.Find("HUBUI/Loadout Panel/Skill Tree Panel");
        skillPanelChild = GameObject.Find("HUBUI/Loadout Panel/Skill Tree Panel/Spec Title");
        hubStats = GameObject.Find("HUBUI/Loadout Panel/Stats Backing").GetComponent<HUBStats>();
        specText = GetComponent<TextMeshProUGUI>();
        specText.text = "No Specialization";
        specSet = false;

        foreach (Transform block in skillPanelChild.GetComponentsInChildren<Transform>())
        {
            if (block.name.Contains("Block"))
            {
                perkBlocks.Add(block.gameObject);
            }
        }
    }

    // Update is called once per frame
    void Update()
    {
        currentLevel = int.Parse(GameObject.Find("HUBUI/Loadout Panel/Stats Backing/Level #").GetComponent<TextMeshProUGUI>().text);

        if (currentLevel < specRequirement)
        {
            specSet = false;
        }

        if (hubStats.botStats.specialization.text == "Medic" || hubStats.botStats.specialization.text == "Heavy" || hubStats.botStats.specialization.text == "Support" || hubStats.botStats.specialization.text == "Sniper")
        {
            specSet = true;
        }

        if (hubStats.botStats.specialization.text == "No Specialization")
        {
            specSet = false;
        }
    }

    public void CheckSpecState()
    {
        if (currentLevel >= specRequirement && specSet == false)
        {
            specChoicePanel.SetActive(true);
        }

        if (specSet == true)
        {
            specSkillTreePanel.SetActive(true);
        }
    }

    private void ShowSpecs() //once a bot has selected a spec, this method will run to display the perks specific to that spec
    {
        if (specTitle == "Medic")
        {
            //get a reference to the perk script on each block and update the info to fit the spec
            Perk perk1 = perkBlocks[0].GetComponent<Perk>();
            perk1.stats.perkName = "Fast Heal";
            perk1.stats.perkDesc = "Enhances medics ability to heal at higher rates.";
            perk1.stats.perkImage = tempImage;
            perk1.stats.partyHealingBuff = 2;

            Perk perk2 = perkBlocks[1].GetComponent<Perk>();
            perk2.stats.perkName = "Self Sustaining";
            perk2.stats.perkDesc = "Allows the medic to heal passively.";
            perk2.stats.perkImage = tempImage;
            perk2.stats.selfHealingBuff = 2;

        }

        if (specTitle == "Support")
        {
            Perk perk1 = perkBlocks[0].GetComponent<Perk>();
            perk1.stats.perkName = "Ranged Assistance";
            perk1.stats.perkDesc = "Allows for ranged AOE grenade blasts that buff allies.";
            perk1.stats.perkImage = tempImage;

            Perk perk2 = perkBlocks[1].GetComponent<Perk>();
            perk2.stats.perkName = "Enhanced Aim";
            perk2.stats.perkDesc = "When partnered with another bot, increase the groups firing accuracy.";
            perk2.stats.perkImage = tempImage;
            perk2.stats.accuracyBuff = 2;
        }

        if (specTitle == "Heavy")
        {
            Perk perk1 = perkBlocks[0].GetComponent<Perk>();
            perk1.stats.perkName = "Suppression";
            perk1.stats.perkDesc = "Increases rate of fire for 5 seconds and provides an effect that holds enemies in place";
            perk1.stats.perkImage = tempImage;
            perk1.stats.fireRateBuff = 2;

            Perk perk2 = perkBlocks[1].GetComponent<Perk>();
            perk2.stats.perkName = "Armor Up";
            perk2.stats.perkDesc = "Increases health by 30% and slows movement by 50%. Lasts 20 seconds.";
            perk2.stats.perkImage = tempImage;
            perk2.stats.healthBuff = 2;
            perk2.stats.speedBuff = -2;
        }

        if (specTitle == "Sniper")
        {
            Perk perk1 = perkBlocks[0].GetComponent<Perk>();
            perk1.stats.perkName = "Lock-Down";
            perk1.stats.perkDesc = "Removes ability to move while increasing damage output and range. Rate of fire is slower while in this mode.";
            perk1.stats.perkImage = tempImage;
            perk1.stats.damageBuff = 2;
            perk1.stats.rangeBuff = 2;
            perk1.stats.fireRateBuff = -2;

            Perk perk2 = perkBlocks[1].GetComponent<Perk>();
            perk2.stats.perkName = "Team Targeting";
            perk2.stats.perkDesc = "When an ally is being attacked by enemies that are in sight of the sniper they can engage at any range";
            perk2.stats.perkImage = tempImage;
        }
    }

    public void SetMedicSpec()
    {
        specTitle = "Medic";
        hubStats.SpecUpdate(specTitle);
        specSet = true;
        ShowSpecs();

        for (int i = 0; i < perkBlocks.Count; i++)
        {
            perkBlocks[i].GetComponent<Perk>().UpdateImage();
        }
    }

    public void SetSupportSpec()
    {
        specTitle = "Support";
        hubStats.SpecUpdate(specTitle);
        specSet = true;
        ShowSpecs();

        for (int i = 0; i < perkBlocks.Count; i++)
        {
            perkBlocks[i].GetComponent<Perk>().UpdateImage();
        }
    }

    public void SetHeavySpec()
    {
        specTitle = "Heavy";
        hubStats.SpecUpdate(specTitle);
        specSet = true;
        ShowSpecs();

        for (int i = 0; i < perkBlocks.Count; i++)
        {
            perkBlocks[i].GetComponent<Perk>().UpdateImage();
        }
    }

    public void SetSniperSpec()
    {
        specTitle = "Sniper";
        hubStats.SpecUpdate(specTitle);
        specSet = true;
        ShowSpecs();

        for (int i = 0; i < perkBlocks.Count; i++)
        {
            perkBlocks[i].GetComponent<Perk>().UpdateImage();
        }
    }
}