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(); }))); } } }
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); } }
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); }
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)); }
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))); }