示例#1
0
        protected override IEnumerator MakeChoices()
        {
            yield return(StartCoroutine(base.MakeChoices()));

            OffensiveBodyPartDamage bodyPartDamage = (this as SC_OffensiveMove)?.effect.bodyPartDamage ?? (this as SC_Submission).effect.bodyPartDamage;

            if (bodyPartDamage.otherBodyPart != BodyPart.None && !bodyPartDamage.both)
            {
                if (activePlayer.AI)
                {
                    activePlayer.IntChoices["BodyPart"] = (int)(nonActivePlayer.BodyPartsHealth[bodyPartDamage.bodyPart] <= nonActivePlayer.BodyPartsHealth[bodyPartDamage.otherBodyPart] ? bodyPartDamage.bodyPart : bodyPartDamage.otherBodyPart);

                    MakingChoices = false;
                }
                else
                {
                    yield return(StartCoroutine(MakeChoice(() => {
                        foreach (Transform t in UI.bodyPartDamageChoicePanel.transform)
                        {
                            t.gameObject.SetActive(t.name == bodyPartDamage.bodyPart.ToString() || t.name == bodyPartDamage.otherBodyPart.ToString());
                        }

                        UI.ShowBodyPartPanel();
                    })));
                }
            }
        }
示例#2
0
        public void ApplyBodyPartDamage()
        {
            OffensiveBodyPartDamage bodyPartDamage = (this as SC_OffensiveMove)?.GetEffect.bodyPartDamage ?? (this as SC_Submission).GetEffect.bodyPartDamage;

            if (bodyPartDamage.bodyPart != BodyPart.None && (bodyPartDamage.both || bodyPartDamage.otherBodyPart == BodyPart.None || bodyPartDamage.bodyPart == (BodyPart)Caller.GetIntChoice("BodyPart")))
            {
                Receiver.ApplySingleBodyEffect(bodyPartDamage.bodyPart, bodyPartDamage.damage, true);
            }

            if (bodyPartDamage.otherBodyPart != BodyPart.None && (bodyPartDamage.both || bodyPartDamage.otherBodyPart == (BodyPart)Caller.GetIntChoice("BodyPart")))
            {
                Receiver.ApplySingleBodyEffect(bodyPartDamage.otherBodyPart, bodyPartDamage.damage, true);
            }
        }
示例#3
0
        public override void UpdateValuesUI(bool first = false, Transform[][] lines = null)
        {
            if (first)
            {
                BodyPart bp = ((this as SC_OffensiveMove)?.effect.bodyPartDamage ?? (this as SC_Submission).effect.bodyPartDamage).bodyPart;

                foreach (Transform[] t in lines)
                {
                    for (int i = 0; i < t.Length; i++)
                    {
                        foreach (Transform bg in t[i])
                        {
                            if (i == t.Length - 1 && GetCost.bodyPartDamage.bodyPart == BodyPart.None && bp == BodyPart.None)
                            {
                                bg.gameObject.SetActive(false);

                                UICard.HideBodyPartsTexts();
                            }
                            else
                            {
                                bg.GetComponent <Image> ().color = (i % 2 != (t.Length % 2)) == (GetCost.bodyPartDamage.bodyPart != BodyPart.None || bp != BodyPart.None) ? UI.darkGrey : UI.lightGrey;
                            }
                        }
                    }
                }
            }

            UICard.SetAttackValue("staminaCost", GetCost.stamina, false);

            UICard.SetAttackValue("bodyPartsCost", GetCost.bodyPartDamage.bodyPart == BodyPart.None ? "0" : GetCost.bodyPartDamage.bodyPart + " - " + GetCost.bodyPartDamage.damage, true);

            OffensiveBodyPartDamage b = (this as SC_OffensiveMove)?.GetEffect.bodyPartDamage ?? (this as SC_Submission).GetEffect.bodyPartDamage;

            string s = "";

            if (b.bodyPart != BodyPart.None)
            {
                s += b.bodyPart;

                if (b.otherBodyPart != BodyPart.None)
                {
                    s += " " + (b.both ? "&" : "or") + " " + b.otherBodyPart;
                }

                s += " - " + b.damage;
            }

            UICard.SetAttackValue("bodyPartsDamage", s == "" ? "0" : s, true);
        }
示例#4
0
    public override bool Matching(SC_BaseCard card)
    {
        if (maxMatchHeat > 0 && card.matchHeat > maxMatchHeat)
        {
            return(false);
        }

        if (finisher && (!(card as SC_AttackCard) || !(card as SC_AttackCard).finisher))
        {
            return(false);
        }

        if (moveOfDoom > 0 && (!(card as SC_OffensiveMove) || (card as SC_OffensiveMove).moveOfDoom != moveOfDoom))
        {
            return(false);
        }

        if ((heel && !card.IsAlignmentCard(heel)) || (face && !card.IsAlignmentCard(face)))
        {
            return(false);
        }

        if (bodyPartTarget != BodyPart.None)
        {
            if (card as SC_AttackCard)
            {
                OffensiveBodyPartDamage obpd = (card as SC_OffensiveMove)?.effect.bodyPartDamage ?? (card as SC_Submission).effect.bodyPartDamage;

                if (obpd.bodyPart != bodyPartTarget && obpd.otherBodyPart != bodyPartTarget)
                {
                    return(false);
                }
            }
            else
            {
                return(false);
            }
        }

        return(base.Matching(card));
    }
示例#5
0
    public void Filter()
    {
        filteredCards = new Dictionary <SC_BaseCard, SC_DeckBuilder_SearchCard> ();

        if (moreFiltersPanel.activeSelf)
        {
            ToggleMoreFilters();
        }

        foreach (Transform t in searchCardsParent)
        {
            Destroy(t.gameObject);
        }

        float marginsNbr = (((int)searchCardsParent.rect.width) / ((int)size.x)) - 1;

        float margin = (searchCardsParent.rect.width % size.x) / marginsNbr;

        int i, x, y = x = i = 0;

        foreach (SC_BaseCard c in allCards)
        {
            #region Oracle filter
            if (oracle.text != "" && !c.HasText(oracle.text) && !c.name.ToLower().Contains(oracle.text.ToLower()))
            {
                continue;
            }
            #endregion

            #region Types filters
            if (mainType.value == 1 && (c.GetType().IsSubclassOf(typeof(SC_AttackCard)) != mainTypeToggle.isOn))
            {
                continue;
            }
            else if ((mainType.value == 2 && (c.IsSpecial != mainTypeToggle.isOn)) || (mainType.value == 3 && (c.Is(CardType.Basic) != mainTypeToggle.isOn)))
            {
                continue;
            }

            if ((CheckType(c, firstSubType) != firstSubTypeToggle.isOn) || (CheckType(c, secondSubType) != secondSubTypeToggle.isOn))
            {
                continue;
            }
            #endregion

            #region Aligment filter
            if (alignment.value > 0)
            {
                if (alignment.value == 1)
                {
                    CommonRequirement?r = null;

                    foreach (CommonRequirement cr in c.commonRequirements)
                    {
                        if (cr.valueType == ValueName.Alignment && !cr.opponent)
                        {
                            r = cr;
                        }
                    }

                    if (r == null || c.IsAlignmentCard(false) || c.IsAlignmentCard(true))
                    {
                        continue;
                    }
                }
                else if ((alignment.value == 2 && !c.IsAlignmentCard(true)) || (alignment.value == 3 && !c.IsAlignmentCard(false)))
                {
                    continue;
                }
            }
            #endregion

            #region Common effects filter
            bool skip = false;

            foreach (Toggle t in commonEffects)
            {
                if (t.isOn)
                {
                    string s = t.transform.parent.GetComponentInChildren <TextMeshProUGUI> ().text.Replace(" ", "");

                    if (Enum.TryParse(s, out CommonEffectType ty))
                    {
                        if (!c.Has(ty) && !c.additionalKeywords.Contains(s))
                        {
                            skip = true;

                            continue;
                        }
                    }
                    else if (s == "Discard")
                    {
                        if (!c.Has(CommonEffectType.DiscardChosen) && !c.Has(CommonEffectType.DiscardRandom) && !c.additionalKeywords.Contains(s))
                        {
                            skip = true;

                            continue;
                        }
                    }
                    else
                    {
                        Debug.LogError("WRONG COMMON EFFECT FILTER");
                    }
                }
            }

            if (skip)
            {
                continue;
            }

            #endregion

            #region Match Heat effect filter
            if (matchHeat.isOn)
            {
                if (!c.Has(CommonEffectType.MatchHeatEffect) && ((c as SC_AttackCard)?.matchHeatGain ?? 0) <= 0)
                {
                    continue;
                }
            }
            #endregion

            #region Attack values filters
            SC_AttackCard a = c as SC_AttackCard;

            if (a)
            {
                if (a.cost.stamina < attackCardStaminaCost.Min || a.cost.stamina > attackCardStaminaCost.Max)
                {
                    continue;
                }

                if (attackCardBodyPartsCost.value == 0 || a.cost.bodyPartDamage.bodyPart == (BodyPart)attackCardBodyPartsCost.value || (attackCardBodyPartsCost.value == 6 && a.cost.bodyPartDamage.bodyPart == BodyPart.None))
                {
                    if (a.cost.bodyPartDamage.damage < attackCardBodyPartsCostValue.Min || a.cost.bodyPartDamage.damage > attackCardStaminaCost.Max)
                    {
                        continue;
                    }
                }
                else
                {
                    continue;
                }

                OffensiveBodyPartDamage bpDamage = (a as SC_OffensiveMove)?.effect.bodyPartDamage ?? (a as SC_Submission).effect.bodyPartDamage;

                if (attackCardBodyPartsDamage.value == 0 || bpDamage.bodyPart == (BodyPart)attackCardBodyPartsDamage.value || bpDamage.otherBodyPart == (BodyPart)attackCardBodyPartsDamage.value || (attackCardBodyPartsDamage.value == 6 && bpDamage.bodyPart == BodyPart.None && bpDamage.otherBodyPart == BodyPart.None))
                {
                    if (bpDamage.damage < attackCardBodyPartsDamageValue.Min || bpDamage.damage > attackCardBodyPartsDamageValue.Max)
                    {
                        continue;
                    }
                }
                else
                {
                    continue;
                }

                SC_OffensiveMove o = c as SC_OffensiveMove;

                if (o)
                {
                    if (o.cost.health < offensiveMoveHealthCost.Min || o.cost.health > offensiveMoveHealthCost.Max)
                    {
                        continue;
                    }

                    if (o.effect.stamina < offensiveMoveStaminaDamage.Min || o.effect.stamina > offensiveMoveStaminaDamage.Max)
                    {
                        continue;
                    }

                    if (o.effect.health < offensiveMoveHealthDamage.Min || o.effect.health > offensiveMoveHealthDamage.Max)
                    {
                        continue;
                    }
                }
                else
                {
                    SC_Submission s = c as SC_Submission;

                    if (s.effect.stamina < submissionStaminaReduction.Min || s.effect.stamina > submissionStaminaReduction.Max)
                    {
                        continue;
                    }

                    if (s.effect.breakCost < submissionBreakCost.Min || s.effect.breakCost > submissionBreakCost.Max)
                    {
                        continue;
                    }
                }
            }
            #endregion

            if (c.matchHeat >= matchHeatFilter.Min && c.matchHeat <= matchHeatFilter.Max)
            {
                RectTransform r = Instantiate(Resources.Load <RectTransform> ("Prefabs/DeckBuilder/P_DeckBuilder_SearchCard"), searchCardsParent);

                r.sizeDelta = size;

                r.GetComponent <SC_DeckBuilder_SearchCard> ().Card = c;

                r.GetComponent <Image> ().sprite = Resources.Load <Sprite> (c.Path);

                r.anchoredPosition = new Vector2(x * (size.x + margin), -y * (size.y + margin));

                x = x == ((int)searchCardsParent.rect.width) / ((int)size.x) - 1 ? 0 : x + 1;

                y = x == 0 ? y + 1 : y;

                i++;
            }
        }

        if (!deckPanel.activeSelf)
        {
            resultsCount.text = i.ToString() + " matching card" + (i > 1 ? "s" : "");
            resultsCount.gameObject.SetActive(true);
        }

        y += (x == 0 ? -1 : 0) + 1;

        searchCardsParent.sizeDelta = new Vector2(searchCardsParent.sizeDelta.x, Mathf.Max(deckPanel.activeSelf ? 432 : 834, size.y * y + margin * (y - 1)));
    }