예제 #1
0
    public override void InitCard(CardData _cardData, Player owner)
    {
        base.InitCard(_cardData, owner);

        ResetStats(true);
        AbilityInit();

        Status                  = UnitStatuses.None;
        CurrentHealth           = GetStat(StatTypes.MaxHealth);
        RemainingSpeed          = 0;
        TemporaryMindControlled = false;
        LoseNextAction          = false;

        ConfiscatedCards = new List <Card>();
        ImprisonedUnits  = new List <Unit>();

        SpymasterLurenCards = new List <Card>();

        if (GameManager.instance.CurrentGamePhase != GameManager.GamePhases.Menu)
        {
            Enchantments         = new List <AppliedEnchantment>();
            CurrentStatusEffects = new List <StatusEffects>();
            CurrentKeywords      = new List <Keywords>();

            if (BaseKeywords.Count > 0 || UnitData.Empowered > 0)
            {
                var keywordEnchantment = new UnitEnchantment()
                {
                    Source = "Base Keywords",
                    Status = UnitEnchantment.EnchantmentStatus.Base,
                };
                keywordEnchantment.Keywords = BaseKeywords.ToList();
                if (UnitData.Empowered > 0)
                {
                    keywordEnchantment.AddStatModifier(StatTypes.Empowered, StatModifierTypes.Modify, UnitData.Empowered);
                }

                AddEnchantment(keywordEnchantment);
            }

            if (Owner != null)
            {
                foreach (var passive in Owner.Passives)
                {
                    if (passive.Enchantment != null)
                    {
                        if (passive.PassiveApplies(this))
                        {
                            AddEnchantment(passive.Enchantment);
                        }
                    }
                }
            }
        }
    }
예제 #2
0
    public void ImmuneUnit()
    {
        var enchantment = new UnitEnchantment()
        {
            Status        = UnitEnchantment.EnchantmentStatus.Permanent,
            Source        = "Immune",
            StatusEffects = new List <StatusEffects>()
            {
                StatusEffects.Immune
            }
        };

        AddEnchantment(enchantment);
    }
예제 #3
0
    public void IndestructibleUnit()
    {
        var enchantment = new UnitEnchantment()
        {
            Status        = UnitEnchantment.EnchantmentStatus.Permanent,
            Source        = "Indestructible",
            StatusEffects = new List <StatusEffects>()
            {
                StatusEffects.Indestructible
            }
        };

        AddEnchantment(enchantment);
    }
예제 #4
0
    public void RootUnit()
    {
        var enchantment = new UnitEnchantment()
        {
            Status        = UnitEnchantment.EnchantmentStatus.EndOfOwnersTurn,
            Source        = "Root",
            StatusEffects = new List <StatusEffects>()
            {
                StatusEffects.Rooted
            }
        };

        AddEnchantment(enchantment);
    }
예제 #5
0
    public void StunUnit()
    {
        var enchantment = new UnitEnchantment()
        {
            Status        = UnitEnchantment.EnchantmentStatus.EndOfOwnersTurn,
            Source        = "Stun",
            StatusEffects = new List <StatusEffects>()
            {
                StatusEffects.Stunned
            }
        };

        AddEnchantment(enchantment);
    }
예제 #6
0
    /// <summary>
    ///
    /// Adds the stat modifier to the enchantment for a particular stat type dropdown and an input
    ///
    /// </summary>
    private void GetStatModifier(UnitEnchantment enchantment, Unit.StatTypes statType, TMP_Dropdown statModTypeDropdown, TMP_InputField statValueInput)
    {
        var statModType = (StatModifierTypes)Enum.Parse(typeof(StatModifierTypes), statModTypeDropdown.captionText.text);

        if (statModType != StatModifierTypes.None)
        {
            if (string.IsNullOrWhiteSpace(statValueInput.text))
            {
                statValueInput.text = "0";
            }
            var statValue = int.Parse(statValueInput.text);

            enchantment.AddStatModifier(statType, statModType, statValue);
        }
    }
예제 #7
0
    public void CheckUnleash(int targetAttack, int targetHealth)
    {
        if (HasKeyword(Keywords.Unleash))
        {
            var unleashEnchantment = new UnitEnchantment()
            {
                Source = "Unleash",
                Status = UnitEnchantment.EnchantmentStatus.Permanent,
            };

            var modifier = Owner.HasSpecialPassive(SpecialPassiveEffects.FeralNature) ? 2 : 1;
            unleashEnchantment.AddStatModifier(StatTypes.Attack, StatModifierTypes.Modify, targetAttack * modifier);
            unleashEnchantment.AddStatModifier(StatTypes.MaxHealth, StatModifierTypes.Modify, targetHealth * modifier);

            AddEnchantment(unleashEnchantment);
        }
    }
예제 #8
0
    public void ModifyOverloadEnchantment(PlayerMana manaResource = null)
    {
        string overloadSourceString = "Overload Reduction";

        if (Owner.UsedResources.Contains(CardResources.Mana))
        {
            if (manaResource == null)
            {
                manaResource = (PlayerMana)Owner.Resources.Single(x => x.ResourceType == CardResources.Mana);
            }

            var overloadEnchantment = Enchantments.Select(x => x.Enchantment).SingleOrDefault(x => x.Source == overloadSourceString);
            var isNew = false;
            if (overloadEnchantment == null)
            {
                overloadEnchantment = new UnitEnchantment()
                {
                    Status = UnitEnchantment.EnchantmentStatus.OverloadPassive, Source = overloadSourceString
                };
                isNew = true;
            }

            overloadEnchantment.AddStatModifier(StatTypes.Attack, StatModifierTypes.Modify, manaResource.TotalOverload);

            if (isNew)
            {
                AddEnchantment(overloadEnchantment);
            }
            else
            {
                UpdateEnchantments();
            }
        }
        else
        {
            throw new Exception("Cannot modify overload enchantment for a non-mana class");
        }
    }
    public void ConfirmButton()
    {
        if (string.IsNullOrWhiteSpace(sourceInput.text))
        {
            sourceInput.text = "Test Enchantment";
        }

        var enchantment = new UnitEnchantment();

        GetStatModifier(enchantment, Unit.StatTypes.Attack, attackModTypeDropdown, attackValueInput);
        GetStatModifier(enchantment, Unit.StatTypes.MaxHealth, healthModTypeDropdown, healthValueInput);
        GetStatModifier(enchantment, Unit.StatTypes.Range, rangeModTypeDropdown, rangeValueInput);
        GetStatModifier(enchantment, Unit.StatTypes.Speed, speedModTypeDropdown, speedValueInput);
        GetStatModifier(enchantment, Unit.StatTypes.Empowered, empoweredModTypeDropdown, empoweredValueInput);

        foreach (var keywordObject in keywordList)
        {
            var keyword = (Keywords)Enum.Parse(typeof(Keywords), keywordObject.Value);
            enchantment.Keywords.Add(keyword);
        }

        foreach (var statusEffectObject in statusEffectList)
        {
            var statusEffect = (Unit.StatusEffects)Enum.Parse(typeof(Unit.StatusEffects), statusEffectObject.Value);
            enchantment.StatusEffects.Add(statusEffect);
        }

        enchantment.Status = (UnitEnchantment.EnchantmentStatus)Enum.Parse(typeof(UnitEnchantment.EnchantmentStatus), statusDropdown.captionText.text);
        enchantment.Source = sourceInput.text;

        if (enchantment.ValidEnchantment)
        {
            StartEffect();
            GameManager.instance.effectManager.SetEnchantUnitMode(enchantment);
        }
    }
예제 #10
0
    public void CreateDeployUnits(CardData cardData, UnitEnchantment enchantment, int numToCreate, string createdBy)
    {
        if (cardData.CardType == CardTypes.Unit)
        {
            var unitList = new List <Unit>();

            for (int cardIndex = 0; cardIndex < numToCreate; cardIndex++)
            {
                var unit = (Unit)GameManager.instance.libraryManager.CreateCard(cardData, this);
                unit.CreatedByName = createdBy;
                if (enchantment != null)
                {
                    unit.AddEnchantment(enchantment);
                }
                unitList.Add(unit);
            }

            GameManager.instance.effectManager.SetDeployUnits(unitList);
        }
        else
        {
            throw new Exception("Cannot deploy a non unit card");
        }
    }
예제 #11
0
 public void SetEnchantUnitMode(UnitEnchantment unitEnchantment)
 {
     SelectedEnchantment = unitEnchantment;
     ActiveEffect        = ActiveEffectTypes.EnchantUnit;
 }
예제 #12
0
    public void AddEnchantment(UnitEnchantment enchantment)
    {
        if (enchantment.ValidEnchantment)
        {
            var newEnchantment = new AppliedEnchantment()
            {
                Enchantment = enchantment
            };
            if (newEnchantment.Enchantment.Keywords.Contains(Keywords.Flying))
            {
                if (!HasStatusEffect(StatusEffects.Airborne))
                {
                    newEnchantment.Enchantment.StatusEffects.Add(StatusEffects.Airborne);
                    if (Status != UnitStatuses.Preparing)
                    {
                        CanFlyOrLand = true;
                    }
                }
            }
            if (newEnchantment.Enchantment.Keywords.Contains(Keywords.Stealth))
            {
                newEnchantment.Enchantment.StatusEffects.Add(StatusEffects.Stealthed);
            }

            if (Status != UnitStatuses.Preparing && Status != UnitStatuses.None)
            {
                if (newEnchantment.Enchantment.Keywords.Contains(Keywords.SpecialSwiftstrike))
                {
                    if (!HasKeyword(Keywords.Swiftstrike) && !HasKeyword(Keywords.SpecialSwiftstrike))
                    {
                        ModifyActions(2);
                    }
                    else if (HasKeyword(Keywords.Swiftstrike))
                    {
                        ModifyActions(1);
                    }
                }
                else if (newEnchantment.Enchantment.Keywords.Contains(Keywords.Swiftstrike))
                {
                    if (!HasKeyword(Keywords.Swiftstrike) && !HasKeyword(Keywords.SpecialSwiftstrike))
                    {
                        ModifyActions(1);
                    }
                }
            }

            Enchantments.Add(newEnchantment);
            UpdateEnchantments();

            if (HasKeyword(Keywords.Prepared) && (Status == UnitStatuses.Preparing || Status == UnitStatuses.None))
            {
                RefreshActions();
            }

            RefreshCounter();
        }
        else
        {
            throw new Exception("Enchantment is not valid to add to unit");
        }
    }
예제 #13
0
    public void ConfirmButton()
    {
        if (!string.IsNullOrWhiteSpace(createdByInput.text))
        {
            var player = GameManager.instance.GetPlayer(activeOwnerToggle.isOn);

            var enchantment = new UnitEnchantment()
            {
                Status = UnitEnchantment.EnchantmentStatus.Permanent, Source = createdByInput.text
            };
            GetStatModifier(enchantment, Unit.StatTypes.Attack, attackModTypeDropdown, attackValueInput);
            GetStatModifier(enchantment, Unit.StatTypes.MaxHealth, healthModTypeDropdown, healthValueInput);
            GetStatModifier(enchantment, Unit.StatTypes.Range, rangeModTypeDropdown, rangeValueInput);
            GetStatModifier(enchantment, Unit.StatTypes.Speed, speedModTypeDropdown, speedValueInput);

            var generationFilter = new GenerateCardFilter(player.PlayerClass)
            {
                Name     = nameInput.text,
                CardType = CardTypes.Unit,
                IncludeUncollectables = includeUncollectablesToggle.isOn,
                IsUnique = isChoiceToggle.isOn,
            };

            if (tagDropdown.captionText.text != DEFAULT_DROPDOWN_STRING)
            {
                generationFilter.Tag = (Tags)Enum.Parse(typeof(Tags), tagDropdown.captionText.text.Replace(" ", ""));
            }

            if (enchantment.ValidEnchantment)
            {
                generationFilter.Enchantment = enchantment;
            }

            if (int.TryParse(numToCreateInput.text, out int result) && numToCreateInput.text != "0")
            {
                generationFilter.UnitsToCreate = Mathf.Max(1, result);
            }
            else
            {
                generationFilter.UnitsToCreate = 1;
            }

            if (isChoiceToggle.isOn)
            {
                generationFilter.NumToGenerate = generationFilter.UnitsToCreate;
            }

            if (player.GenerateCards(generationFilter, CardGenerationTypes.Deploy, isChoiceToggle.isOn, createdByInput.text))
            {
                StartEffect();
            }
            else
            {
                titleText.text = $"{defaultTitleText} (Failed)";
            }
        }
        else
        {
            createdByInput.placeholder.color = new Color(0.8f, 0.0f, 0.0f, 0.5f);
            titleText.text = $"{defaultTitleText} (Input Created By)";
        }
    }
    public void ConfirmButton()
    {
        UpgradeData sourceUpgrade = null;
        CardData    sourceCard    = null;
        int?        playerId      = null;

        switch (GameManager.instance.CurrentGamePhase)
        {
        case GameManager.GamePhases.Setup:
            sourceUpgrade = GameManager.instance.upgradeManager.GetUpgrade(nameInput.text);
            playerId      = int.Parse(playerNumberDropdown.captionText.text) - 1;
            break;

        case GameManager.GamePhases.Gameplay:
            sourceCard = GameManager.instance.libraryManager.GetCard(nameInput.text);
            break;
        }

        if (sourceUpgrade != null || sourceCard != null)
        {
            var passive = new Passive
            {
                Name          = nameInput.text,
                IsTemporary   = isTemporaryToggle.isOn,
                SourceUpgrade = sourceUpgrade,
                SourceCard    = sourceCard
            };

            if (affectedCardTypeDropdown.captionText.text != DEFAULT_INPUT_STRING_ANY)
            {
                passive.AffectedCardTypes = (CardTypes)Enum.Parse(typeof(CardTypes), affectedCardTypeDropdown.captionText.text);
            }
            if (affectedTagDropdown.captionText.text != DEFAULT_INPUT_STRING_ANY)
            {
                passive.AffectedCardTag = (Tags)Enum.Parse(typeof(Tags), affectedTagDropdown.captionText.text);
            }
            if (affectedUnitTagDropdown.captionText.text != DEFAULT_INPUT_STRING_ANY)
            {
                passive.AffectedUnitTags = (UnitTags)Enum.Parse(typeof(UnitTags), affectedUnitTagDropdown.captionText.text);
            }


            if (costResourceDropdown.captionText.text != DEFAULT_INPUT_STRING_NONE)
            {
                passive.TargetResource = (CardResources)Enum.Parse(typeof(CardResources), costResourceDropdown.captionText.text);
            }
            if (int.TryParse(costValueInput.text, out int result))
            {
                var costAdjustment = new AdjustCostObject()
                {
                    AdjustmentType = StatModifierTypes.Modify, FromPassive = true
                };

                costAdjustment.Value = result;

                if (int.TryParse(minCostInput.text, out int minCostResult))
                {
                    costAdjustment.MinCost = minCostResult;
                }
                if (int.TryParse(greaterThanInput.text, out int greaterThanResult))
                {
                    costAdjustment.MustBeGreaterThan = greaterThanResult;
                }

                passive.CostAdjustment = costAdjustment;
            }

            else
            {
                passive.CostAdjustment = null;
            }

            var enchantment = new UnitEnchantment()
            {
                Status = UnitEnchantment.EnchantmentStatus.Passive,
                Source = nameInput.text,
            };
            GetStatModifier(enchantment, Unit.StatTypes.Attack, attackModTypeDropdown, attackValueInput);
            GetStatModifier(enchantment, Unit.StatTypes.MaxHealth, healthModTypeDropdown, healthValueInput);
            GetStatModifier(enchantment, Unit.StatTypes.Range, rangeModTypeDropdown, rangeValueInput);
            GetStatModifier(enchantment, Unit.StatTypes.Speed, speedModTypeDropdown, speedValueInput);
            if (enchantment.ValidEnchantment)
            {
                passive.Enchantment = enchantment;
            }

            if (specialPassiveValueDropdown.captionText.text != DEFAULT_INPUT_STRING_NONE)
            {
                passive.SpecialPassive = (SpecialPassiveEffects)Enum.Parse(typeof(SpecialPassiveEffects), specialPassiveValueDropdown.captionText.text);
                if (int.TryParse(specialPassiveValueInput.text, out int specialPassive))
                {
                    passive.SpecialPassiveProperty = specialPassive;
                }
                else
                {
                    passive.SpecialPassiveProperty = 0;
                }
            }

            if (GameManager.instance.effectManager.AddPassive(passive, playerId))
            {
                gameObject.SetActive(false);
            }
            else
            {
                titleText.text = $"{defaultTitleText} (Failed)";
            }
        }
        else
        {
            titleText.text = $"{defaultTitleText} (Failed)";
        }
    }
예제 #15
0
    /// <summary>
    ///
    /// Button click event for confirming the given filter and attempting to generate a card
    ///
    /// </summary>
    public void ConfirmGeneration()
    {
        //In order to submit, needs to have a created by string. Doesn't confirm if there is no text, and displays error to player
        if (!string.IsNullOrWhiteSpace(createdByInput.text))
        {
            //Sets the name filter to the name input
            GenerationFilter.Name = nameInput.text;
            GenerationFilter.IncludeUncollectables = includeUncollectablesToggle.isOn;
            GenerationFilter.IsUnique = isUnique.isOn;
            if (!string.IsNullOrWhiteSpace(numToGenerateInput.text) && numToGenerateInput.text != "0")
            {
                GenerationFilter.NumToGenerate = Mathf.Max(1, int.Parse(numToGenerateInput.text));
            }
            else
            {
                GenerationFilter.NumToGenerate = 1;
            }

            //Applies the dropdown filter to each of the relevant dropdowns
            ApplyDropdownFilter <Classes.ClassList>(classDropdown, GenerationFilter);
            ApplyDropdownFilter <Tags>(tagDropdown, GenerationFilter);
            ApplyDropdownFilter <CardResources>(resourceDropdown, GenerationFilter);
            ApplyDropdownFilter <CardTypes>(typeDropdown, GenerationFilter);



            if (int.TryParse(modifyCostInput.text, out int result) && modifyCostInput.text != "0")
            {
                GenerationFilter.CostModification = result;
                if (modifyCostDropdown.captionText.text == MODIFY_COST_DEFAULT_DROPDOWN_STRING)
                {
                    GenerationFilter.ResourceModification = null;
                }
                else
                {
                    GenerationFilter.ResourceModification = (CardResources)Enum.Parse(typeof(CardResources), modifyCostDropdown.captionText.text);
                }
            }
            else
            {
                GenerationFilter.CostModification     = null;
                GenerationFilter.ResourceModification = null;
            }

            //If the card type is a unit, constructs the enchantment and adds it to the filter for generation
            if (GenerationFilter.CardType == CardTypes.Unit)
            {
                var enchantment = new UnitEnchantment()
                {
                    Status = UnitEnchantment.EnchantmentStatus.Permanent, Source = createdByInput.text
                };
                GetStatModifier(enchantment, Unit.StatTypes.Attack, attackModTypeDropdown, attackValueInput);
                GetStatModifier(enchantment, Unit.StatTypes.MaxHealth, healthModTypeDropdown, healthValueInput);
                GetStatModifier(enchantment, Unit.StatTypes.Range, rangeModTypeDropdown, rangeValueInput);
                GetStatModifier(enchantment, Unit.StatTypes.Speed, speedModTypeDropdown, speedValueInput);
                GetStatModifier(enchantment, Unit.StatTypes.Empowered, empoweredModTypeDropdown, empoweredValueInput);

                if (enchantment.ValidEnchantment)
                {
                    GenerationFilter.Enchantment = enchantment;
                }
            }

            ClearEnchantmentFields();

            //Attempts the generation of cards. For deck generation, includes the position to place the generated card
            bool successfulGeneration;
            if (CardGenerationType == CardGenerationTypes.Deck)
            {
                var position = (DeckPositions)Enum.Parse(typeof(DeckPositions), positionDropdown.captionText.text);
                successfulGeneration = CardFunctionUI.ConfirmCardGeneration(GenerationFilter, isChoice.isOn, createdByInput.text, position);
            }
            else
            {
                successfulGeneration = CardFunctionUI.ConfirmCardGeneration(GenerationFilter, isChoice.isOn, createdByInput.text);
            }

            //If failed the generation, displays this in the title
            if (!successfulGeneration)
            {
                titleText.text = $"{defaultTitleText} (Failed)";
            }
        }
        else
        {
            createdByInput.placeholder.color = new Color(0.8f, 0.0f, 0.0f, 0.5f);
            titleText.text = $"{defaultTitleText} (Input Created By)";
        }
    }