예제 #1
0
    public void OnParticipatingEvent(HeroManager.Hero hero)
    {
        Debug.Log("Participate");
        switch (hero.heroName.name)
        {
        case "Haldorf":
            StartCoroutine(GameManager.uiController.AddResources(new AResource.ResourceBundle(AResource.Type.Materials, -GameManager.resources[AResource.Type.Materials] / 2)));
            break;

        case "Lartrid":
            GameManager.stopLuxuryProduction = 1;
            break;

        case "Zrantic":
            GameManager.enemyStrengthModifer = 2;
            break;

        case "Werthuz":
            StartCoroutine(GameManager.uiController.AddResources(new AResource.ResourceBundle(AResource.Type.Luxuries, -hero.heroName.recruitmentCost / 2)));
            break;

        case "Klpytrill":
            GameManager.forceKlyptrill = false;
            break;
        }
    }
예제 #2
0
 public void HireHero()
 {
     HeroManager.Hero hiredHero = HeroManager.recruitableHeroes[heroHireScreenIndex];
     StartCoroutine(AddResources(new AResource.ResourceBundle(AResource.Type.Luxuries, -hiredHero.heroName.recruitmentCost)));
     heroEventManager.OnRecruit(hiredHero);
     HeroManager.recruitedHeroes.Add(hiredHero);
     HeroManager.recruitableHeroes.Remove(hiredHero);
     GameManager.resourceGrowth[AResource.Type.Food]--;
     UpdateHUD();
     UpdateHeroSelectScreen();
 }
예제 #3
0
    void UnlockPowerUp()
    {
        string heroString = SceneManager.GetActiveScene().name.Split('_')[1];

        HeroManager.Hero hero = (HeroManager.Hero)Enum.Parse(typeof(HeroManager.Hero), heroString);
        CampaignData.GetHeroBoardStats(hero).isComplete = true;

        if (!didSave)
        {
            SaveLoad.Save();
            didSave = true;
        }
    }
예제 #4
0
    public void OnRecruit(HeroManager.Hero hero)
    {
        switch (hero.heroName.name)
        {
        case "Friptali":
            GameManager.extraInjuryDuration += 2;
            break;

        case "Jonvrab":
            GameManager.jonvrabStrengthModifier--;
            break;

        case "Klyptrill":
            GameManager.extraBuildingPrice += 2;
            GameManager.uiController.UpdateBuildMenu();
            break;
        }
    }
예제 #5
0
    Sprite GetCombatModifierIcon(HeroManager.Hero hero)
    {
        Sprite combatModifierIcon;
        CharacterFaction enemyFaction = GameManager.currentEvent.enemyType;
        CharacterFaction heroFaction = hero.type.faction;

        if (heroFaction.strongAgainst == enemyFaction)
        {
            combatModifierIcon = combatModifierIcons[2];
        }
        else if (heroFaction.weakAgainst == enemyFaction)
        {
            combatModifierIcon = combatModifierIcons[0];
        }
        else
        {
            combatModifierIcon = combatModifierIcons[1];
        }
        return combatModifierIcon;
    }
예제 #6
0
    public void UpsetEvent(HeroManager.Hero hero)
    {
        HeroManager.Hero randomHero;
        string           friptaliBattleResult = "";

        switch (hero.heroName.name)
        {
        case "Haldorf":
            GameManager.uiController.DestroyBuilding(true);
            break;

        case "Lartrid":
            GameManager.stopLuxuryProduction = 3;
            break;

        case "Friptali":
            randomHero = HeroManager.recruitedHeroes[random.Next(0, HeroManager.recruitedHeroes.Count)];

            int randomHeroStrength = random.Next(0, 7) + randomHero.strength;
            int heroStrength       = random.Next(0, 7) + hero.strength;
            GameManager.enemyStrengthModifer = 0;

            if (hero.type.faction.strongAgainst == randomHero.type.faction)
            {
                heroStrength++;
            }
            else if (hero.type.faction.weakAgainst == randomHero.type.faction)
            {
                heroStrength--;
            }

            int battleResult = Mathf.Clamp(heroStrength - randomHeroStrength, -2, 2);

            switch (battleResult)
            {
            case 2:
                friptaliBattleResult     = "He fought " + randomHero.heroName.name + " the " + randomHero.type.heroType + " and won! " + randomHero.heroName.name + " is injured and lost 1 mentality, but Friptali gained 1 strength!";
                randomHero.injured       = true;
                randomHero.eventsInjured = 3;
                randomHero.mentality--;
                hero.strength++;
                break;

            case 1:
                friptaliBattleResult     = "He fought " + randomHero.heroName.name + " the " + randomHero.type.heroType + " and won! " + randomHero.heroName.name + " is injured!";
                randomHero.injured       = true;
                randomHero.eventsInjured = 3;
                break;

            case 0:
                friptaliBattleResult     = "He fought " + randomHero.heroName.name + " the " + randomHero.type.heroType + ". They both injured each other!";
                hero.injured             = true;
                hero.eventsInjured       = 3;
                randomHero.injured       = true;
                randomHero.eventsInjured = 3;
                break;

            case -1:
                friptaliBattleResult = "He fought " + randomHero.heroName.name + " the " + randomHero.type.heroType + " and lost! Friptali is injured!";
                hero.injured         = true;
                hero.eventsInjured   = 3;
                break;

            case -2:
                friptaliBattleResult = "He fought " + randomHero.heroName.name + " the " + randomHero.type.heroType + " and won! Friptali is injured, but " + randomHero.heroName.name + " gained 1 strength and mentality!";
                hero.injured         = true;
                hero.eventsInjured   = 3;
                randomHero.mentality++;
                randomHero.strength++;
                break;
            }

            break;

        case "Plarkull":
            foreach (HeroManager.Hero _hero in HeroManager.recruitedHeroes)
            {
                _hero.mentality--;
            }
            break;

        case "Jonvrab":
            hero.injured       = true;
            hero.eventsInjured = 3;
            break;

        case "Zrantic":
            randomHero               = HeroManager.recruitedHeroes[random.Next(0, HeroManager.recruitedHeroes.Count)];
            randomHero.injured       = true;
            randomHero.eventsInjured = 3;
            break;

        case "Werthuz":
            StartCoroutine(GameManager.uiController.AddResources(new AResource.ResourceBundle(AResource.Type.Food, -HeroManager.recruitedHeroes.Count * 2)));
            break;

        case "Klyptrill":
            GameManager.forceKlyptrill = true;
            break;
        }

        hero.mentality = 0;
        GameManager.uiController.DisplayUpsetEvent(hero, friptaliBattleResult);
    }
예제 #7
0
 public static void SetHeroBoardStats(HeroManager.Hero heroBoardName, LevelStats stats)
 {
     heroesUnlocked[heroBoardName] = stats;
 }
예제 #8
0
 public static LevelStats GetHeroBoardStats(HeroManager.Hero heroBoardName)
 {
     return(heroesUnlocked[heroBoardName]);
 }
예제 #9
0
    public void UpdateHeroSelectScreen()
    {
        Transform buttons = heroSelectScreen.transform.GetChild(5);
        Button backButton = buttons.GetChild(1).gameObject.GetComponent<Button>();
        Button nextButton = buttons.GetChild(0).gameObject.GetComponent<Button>();
        Button useButton = buttons.GetChild(3).gameObject.GetComponent<Button>();

        Transform hero = heroSelectScreen.transform.GetChild(4);
        TextMeshProUGUI heroName = heroSelectScreen.transform.GetChild(6).GetChild(0).gameObject.GetComponent<TextMeshProUGUI>();
        Image heroSprite = hero.GetChild(1).gameObject.GetComponent<Image>();
        TextMeshProUGUI heroInfo = heroSelectScreen.transform.GetChild(8).GetChild(4).GetChild(0).GetChild(0).gameObject.GetComponent<TextMeshProUGUI>();
        TextMeshProUGUI heroStrength = heroSelectScreen.transform.GetChild(9).GetChild(0).gameObject.GetComponent<TextMeshProUGUI>();

        GameManager.heroSelectScreenIndex = Mathf.Clamp(GameManager.heroSelectScreenIndex, 0, Mathf.Clamp(HeroManager.recruitedHeroes.Count - 1, 0, int.MaxValue));

        if (HeroManager.recruitedHeroes.Count != 0)
        {
            HeroManager.Hero _hero = HeroManager.recruitedHeroes[GameManager.heroSelectScreenIndex];
            heroName.text = _hero.heroName.name + "\nthe " + _hero.type.heroType;
            heroSprite.enabled = true;
            heroSprite.sprite = _hero.type.icon;
            heroInfo.text = _hero.heroName.description;
            heroStrength.text = "Strength: " + _hero.strength + " / Mentality: " + _hero.mentality;

            if (GameManager.currentEvent != null)
            {
                useButton.interactable = true;
                heroSprite.transform.GetChild(0).gameObject.SetActive(true);
                heroSprite.transform.GetChild(0).GetChild(0).gameObject.GetComponent<Image>().sprite = GetCombatModifierIcon(_hero);
            }
            else
            {
                useButton.interactable = false;
                heroSprite.transform.GetChild(0).gameObject.SetActive(false);
            }

            if (_hero.injured)
            {
                useButton.transform.GetChild(0).gameObject.GetComponent<TextMeshProUGUI>().text = "Injured";
                useButton.interactable = false;
            }
            else
            {
                useButton.transform.GetChild(0).gameObject.GetComponent<TextMeshProUGUI>().text = "Use";
            }

            if (_hero.heroName.name == "Werthuz" && GameManager.resources[AResource.Type.Luxuries] < _hero.heroName.recruitmentCost / 2)
            {
                useButton.interactable = false;
            }

            bool ableToForceKlpytrill = false;
            if (_hero.heroName.name != "Klyptrill" && GameManager.forceKlyptrill == true)
            {
                foreach (HeroManager.Hero hiredHero in HeroManager.recruitedHeroes)
                {
                    if (hiredHero.heroName.name == "Klyptrill" && hiredHero.injured == false)
                    {
                        ableToForceKlpytrill = true;
                    }
                }
                if (ableToForceKlpytrill)
                {
                    useButton.interactable = false;
                }
            }
        }
        else
        {
            heroSprite.transform.GetChild(0).gameObject.SetActive(false);
            heroName.text = "No Heroes\nHired";
            heroInfo.text = "No hero selected";
            heroStrength.text = "No hero selected";
            heroSprite.enabled = false;
            useButton.interactable = false;
        }

        if (GameManager.heroSelectScreenIndex == 0)
        {
            backButton.interactable = false;
        }
        else
        {
            backButton.interactable = true;
        }

        if (GameManager.heroSelectScreenIndex == Mathf.Clamp(HeroManager.recruitedHeroes.Count - 1, 0, int.MaxValue))
        {
            nextButton.interactable = false;
        }
        else
        {
            nextButton.interactable = true;
        }
    }
예제 #10
0
    public void UpdateHeroHireScreen()
    {
        Transform buttons = heroHireScreen.transform.GetChild(5);
        Button backButton = buttons.GetChild(1).gameObject.GetComponent<Button>();
        Button nextButton = buttons.GetChild(0).gameObject.GetComponent<Button>();
        Button hireButton = buttons.GetChild(4).gameObject.GetComponent<Button>();

        Transform hero = heroHireScreen.transform.GetChild(4);
        TextMeshProUGUI heroName = heroHireScreen.transform.GetChild(6).GetChild(0).gameObject.GetComponent<TextMeshProUGUI>();
        Image heroSprite = hero.GetChild(1).gameObject.GetComponent<Image>();
        TextMeshProUGUI heroInfo = heroHireScreen.transform.GetChild(8).GetChild(4).GetChild(0).GetChild(0).gameObject.GetComponent<TextMeshProUGUI>();
        TextMeshProUGUI heroCost = heroHireScreen.transform.GetChild(9).GetChild(0).gameObject.GetComponent<TextMeshProUGUI>();

        heroHireScreenIndex = Mathf.Clamp(heroHireScreenIndex, 0, Mathf.Clamp(HeroManager.recruitableHeroes.Count - 1, 0, int.MaxValue));

        if (HeroManager.recruitableHeroes.Count != 0)
        {
            HeroManager.Hero _hero = HeroManager.recruitableHeroes[heroHireScreenIndex];
            heroName.text = _hero.heroName.name + "\nthe " + _hero.type.heroType;
            heroSprite.enabled = true;
            heroSprite.sprite = _hero.type.icon;
            heroInfo.text = _hero.heroName.description;
            string luxuries;
            if (_hero.heroName.recruitmentCost == 1)
            {
                luxuries = " Luxury item";
            }
            else
            {
                luxuries = " Luxuries";
            }
            heroCost.text = "Cost: " + _hero.heroName.recruitmentCost + luxuries;

            if (GameManager.currentEvent != null)
            {
                heroSprite.transform.GetChild(0).gameObject.SetActive(true);
                heroSprite.transform.GetChild(0).GetChild(0).gameObject.GetComponent<Image>().sprite = GetCombatModifierIcon(_hero);
            }
            else
            {
                heroSprite.transform.GetChild(0).gameObject.SetActive(false);
            }

            if (GameManager.resources[AResource.Type.Luxuries] < _hero.heroName.recruitmentCost)
            {
                hireButton.interactable = false;
            }
            else
            {
                hireButton.interactable = true;
            }
        }
        else
        {
            heroName.text = "No Heroes\nAvailable";
            heroCost.text = "No hero selected";
            heroInfo.text = "No hero selected";
            heroSprite.enabled = false;
            hireButton.interactable = false;
        }

        if (heroHireScreenIndex == 0)
        {
            backButton.interactable = false;
        }
        else
        {
            backButton.interactable = true;
        }

        if (heroHireScreenIndex == Mathf.Clamp(HeroManager.recruitableHeroes.Count - 1, 0, int.MaxValue))
        {
            nextButton.interactable = false;
        }
        else
        {
            nextButton.interactable = true;
        }
    }
예제 #11
0
 public void DisplayUpsetEvent(HeroManager.Hero hero, string friptaliBattleResult)
 {
     TextMeshProUGUI heroEventText = heroEventpanel.transform.GetChild(0).GetChild(0).GetChild(0).gameObject.GetComponent<TextMeshProUGUI>();
     heroEventText.text = hero.heroName.name + " the " + hero.type.heroType + " got upset! " + hero.heroName.upsetEventText + friptaliBattleResult;
     heroEventpanel.SetActive(true);
 }
예제 #12
0
    public void EventFight(bool sendcitizen = false)
    {
        if (!sendcitizen)
        {
            HeroManager.Hero hero         = HeroManager.recruitedHeroes[GameManager.heroSelectScreenIndex];
            CharacterFaction enemyFaction = GameManager.currentEvent.enemyType;

            int enemyStrength = random.Next(0, 7) + GameManager.enemyStrengthModifer;
            int heroStrength  = random.Next(0, 7) + hero.strength;
            if (hero.heroName.name != "Jonvrab")
            {
                heroStrength += GameManager.jonvrabStrengthModifier;
            }
            GameManager.enemyStrengthModifer = 0;

            if (hero.type.faction.strongAgainst == enemyFaction)
            {
                heroStrength++;
            }
            else if (hero.type.faction.weakAgainst == enemyFaction)
            {
                heroStrength--;
            }

            hero.mentality++;

            heroEventManager.OnParticipatingEvent(hero);

            int battleResult = Mathf.Clamp(heroStrength - enemyStrength, -2, 2);

            if (firstEvent)
            {
                battleResult = 2;
                firstEvent   = false;
            }

            switch (battleResult)
            {
            case -2:
                LoseEvent();
                if (buildingName == null)
                {
                    buildingName = "empty field";
                }
                eventResultText =
                    GameManager.currentEvent.eventLoseText.Replace("X", hero.heroName.name) + " " +
                    hero.heroName.name + " is injured and lost 1 mentality.";
                hero.injured       = true;
                hero.eventsInjured = 3 + GameManager.extraInjuryDuration;
                hero.mentality--;
                break;

            case -1:
                eventResultText = GameManager.currentEvent.eventWinText.Replace("X", hero.heroName.name) +
                                  " However, HERO was injured and lost 1 strength.".Replace("HERO", hero.heroName.name);
                hero.strength--;
                hero.injured       = true;
                hero.eventsInjured = 3 + GameManager.extraInjuryDuration;
                break;

            case 0:
                eventResultText = GameManager.currentEvent.eventWinText.Replace("X", hero.heroName.name) +
                                  " However, HERO was injured.".Replace("HERO", hero.heroName.name);
                hero.injured       = true;
                hero.eventsInjured = 3 + GameManager.extraInjuryDuration;
                break;

            case 1:
                eventResultText = GameManager.currentEvent.eventWinText.Replace("X", hero.heroName.name);
                break;

            case 2:
                if (hero.strength < 3)
                {
                    eventResultText = GameManager.currentEvent.eventWinText.Replace("X", hero.heroName.name) +
                                      " HERO gained 1 strength and mentality!".Replace("HERO", hero.heroName.name);
                    hero.strength++;
                }
                else
                {
                    eventResultText = GameManager.currentEvent.eventWinText.Replace("X", hero.heroName.name) +
                                      " HERO gained 1 mentality!".Replace("HERO", hero.heroName.name);
                }
                hero.mentality++;
                break;
            }
        }
        else
        {
            LoseEvent();

            if (buildingName == null)
            {
                buildingName = "empty field";
            }

            string citizentext = GameManager.currentEvent.eventLoseText.Replace("X", "the random citizen");

            eventResultText = char.ToUpper(citizentext[0]) + citizentext.Substring(1);
        }

        foreach (HeroManager.Hero hiredHero in HeroManager.recruitedHeroes)
        {
            hiredHero.mentality--;
            hiredHero.eventsInjured--;
            if (hiredHero.eventsInjured == 0)
            {
                hiredHero.injured = false;
            }
            if (hiredHero.eventsInjured < 2 && GameManager.hospitalsBuilt > 0)
            {
                hiredHero.injured = false;
            }

            if (hiredHero.mentality <= hiredHero.heroName.upsetMentalityThreshold)
            {
                heroEventManager.UpsetEvent(hiredHero);
            }
        }

        GameManager.uiController.FinalizeEvent(eventResultText, sendcitizen);
    }