Esempio n. 1
0
    public HeroUnit GenerateHero(UnitStats stats, int rarity, StatType primaryStat, int cost)
    {
        HeroUnit hero = Instantiate(heroPrefab);

        hero.name   = StatHelper.MakeName();
        hero.rarity = rarity;
        hero.SetStats(stats);
        hero.cost = cost;
        Ability[] abilites = { };
        if (primaryStat == StatType.STR)
        {
            abilites = strAbilities;
        }
        else if (primaryStat == StatType.INT)
        {
            abilites = Random.Range(0.0f, 1.0f) > 0.5f ? intDmgAbilities : intSupAbilities;
        }
        else if (primaryStat == StatType.DEX)
        {
            abilites = dexAbilities;
        }
        UnitAbilityController abilityRoot = hero.GetAbilityController();

        foreach (Ability abilityPrefab in abilites)
        {
            Ability ability = Instantiate(abilityPrefab);
            ability.transform.parent        = abilityRoot.transform;
            ability.transform.localPosition = Vector3.zero;
        }
        abilityRoot.UpdateAbilityList();
        abilityRoot.enabled = false;

        if (abilites == intSupAbilities)
        {
            hero.targettingAlignment = TargettingAlignment.Friendly;
        }

        UnitMovementController movementController;

        if (abilites == strAbilities)
        {
            movementController = hero.gameObject.AddComponent <MeleeUnitMovementController>();
        }
        else
        {
            movementController = hero.gameObject.AddComponent <RangedUnitMovementController>();
        }
        movementController.Disable();

        int       seatIndex = Random.Range(0, seats.Count);
        Transform seat      = seats[seatIndex];

        seats.RemoveAt(seatIndex);
        hero.transform.position = seat.position;

        heroList.AddHero(hero);
        return(hero);
    }
Esempio n. 2
0
    public void SetHero(HeroUnit hero)
    {
        this.hero     = hero;
        nameText.text = hero.name;
        if (!InParty)
        {
            buttonText.text = "Hire (" + hero.cost + " Gold)";
        }
        else
        {
            buttonText.text = "Remove from party";
        }

        if (!InParty && hero.cost > PartyManager.it.GetGold())
        {
            actionButton.interactable = false;
        }

        levelText.text = "Rarity " + hero.rarity;
        UnitStats stats = hero.GetStats();

        strStatImage.transform.localScale = new Vector3(stats.strength / 25.0f, 1.0f, 1.0f);
        intStatImage.transform.localScale = new Vector3(stats.intelligence / 25.0f, 1.0f, 1.0f);
        dexStatImage.transform.localScale = new Vector3(stats.dexterity / 25.0f, 1.0f, 1.0f);

        switch (stats.GetPrimaryStat())
        {
        case StatType.STR:
            GetComponent <Image>().sprite = strPanel;
            break;

        case StatType.INT:
            GetComponent <Image>().sprite = intPanel;
            break;

        case StatType.DEX:
            GetComponent <Image>().sprite = dexPanel;
            break;
        }

        Ability[] abilities = hero.GetAbilityController().GetAbilities();
        foreach (Ability ability in abilities)
        {
            GameObject o    = new GameObject();
            Text       text = o.AddComponent <Text>();
            text.text = ability.name;
            text.resizeTextForBestFit = true;
            text.font      = font;
            text.alignment = TextAnchor.MiddleCenter;
            o.transform.SetParent(abilitiesList, false);
        }
    }