m |
m |
||
| Line 7: | Line 7: | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
| − | ! | + | ! <center>FILE REFERENCES IN THE GAME</center> || <center>TERMS TO LOCATE SEEK REFERENCE</center> |
|- | |- | ||
| style="vertical-align: top;" | | | style="vertical-align: top;" | | ||
| − | * SpecificCard.cs: Contains the logic related to specific cards and abilities such as `OnUseAbility()`, `CanUseAbility()`, `StartTargetingForSeek()`, `GetAbilityTargets()`, and `DoSeek()`.<br /><br /> | + | * SpecificCard.cs: Contains the logic related to specific cards and abilities such as:<br /> `OnUseAbility()`, `CanUseAbility()`, `StartTargetingForSeek()`, `GetAbilityTargets()`, and `DoSeek()`.<br /><br /> |
| − | * GameModel.cs: Manages the core game functions, such as `RemoveDeck()`, `ShowCardForPlayer()`, `AddHand()`, and `ShuffleDeck()`. | + | * GameModel.cs: Manages the core game functions, such as:<br /> `RemoveDeck()`, `ShowCardForPlayer()`, `AddHand()`, and `ShuffleDeck()`. |
| style="vertical-align: top;" | | | style="vertical-align: top;" | | ||
* OnSeek | * OnSeek | ||
| Line 22: | Line 22: | ||
* AddHand | * AddHand | ||
|- | |- | ||
| − | ! colspan="2" | | + | ! colspan="2" | <center>SUMMARY OF THE SEEK PROCESS:</center> |
|- | |- | ||
| − | | colspan="2" | | + | | colspan="2" | |
# `OnUseAbility()`: Handles the activation of the seek ability. | # `OnUseAbility()`: Handles the activation of the seek ability. | ||
# `CanUseAbility()`: Checks if the seek ability can be used. | # `CanUseAbility()`: Checks if the seek ability can be used. | ||
| Line 35: | Line 35: | ||
# `OnSeek()`: May handle additional effects after the card is added to the hand. | # `OnSeek()`: May handle additional effects after the card is added to the hand. | ||
# `ShuffleOurDeck()`: Shuffles the deck after the seek is completed. | # `ShuffleOurDeck()`: Shuffles the deck after the seek is completed. | ||
| + | |- | ||
| + | ! colspan="2" | <center>DETAILED CODE</center> | ||
|- | |- | ||
| colspan="2" | This code is a collection of all the functions involved in the '''Seek''' mechanic, though it doesn't exist as a single block in any one file. | | colspan="2" | This code is a collection of all the functions involved in the '''Seek''' mechanic, though it doesn't exist as a single block in any one file. | ||


| |
|
|---|---|
|
|
| | |
| |
| | |
| This code is a collection of all the functions involved in the Seek mechanic, though it doesn't exist as a single block in any one file. | |
public override void OnUseAbility() { if (!isPartTwo) { if (!parent.IsDead()) { MoveToCastPosition(); GameModel.QueuePart2(parent); isPartTwo = true; } } else { isPartTwo = false; DoSeek(usedShadowEnergy: true); } } public override bool CanUseAbility() { if (GameModel.isSimulating) { return false; } if (GameModel.DeckCount() == 0) { return false; } if (GameModel.HandCount() == GameModel.MaxHandSize()) { return false; } return true; } public void StartTargetingForSeek() { ClearTargets(); MoveToCastPosition(); GameModel.UnhighlightCards(); GameModel.SetGameState(GameState.GameStateType.target); List<ShadowEraCard> abilityTargets = GetAbilityTargets(); for (int i = 0; i < GameModel.DeckCount(); i++) { ShadowEraCard deck = GameModel.GetDeck(i); if (abilityTargets.Contains(deck)) { GameModel.RemoveDeck(deck); i--; } } for (int j = 0; j < abilityTargets.Count; j++) { GameModel.AddDeck(abilityTargets[j]); } GameModel.HighlightCards(GetAbilityTargets()); DeckListDisplay.abilityCard = parent; DeckListDisplay.ShowDeck(GameModel.CurSide()); } public override List<ShadowEraCard> GetAbilityTargets() { List<ShadowEraCard> list = new List<ShadowEraCard>(); for (int i = 0; i < GameModel.DeckCount(); i++) { ShadowEraCard deck = GameModel.GetDeck(i); if (IsValidAbilityTarget(deck)) { list.Add(deck); } } return list; } private static bool IsValidAbilityTarget(ShadowEraCard check) { return check.cardType == CardTypeEnum.Ally && check.cardSubType == CardSubTypeEnum.Aldmor; } public void DoSeek(bool usedShadowEnergy) { DeckListDisplay.CloseDeck(); if (targets.Count > 0 && GameModel.HandCount() < GameModel.MaxHandSize()) { GameModel.RemoveDeck(targets[0]); GameModel.ShowCardForPlayer(targets[0]); GameModel.AddHand(targets[0]); GameModel.OnSeek(targets[0]); } else { GameModel.OnSeek(null); } ShuffleOurDeck(); targets.Clear(); } public static void RemoveDeck(ShadowEraCard card) { // Code that handles removing a card from the deck } public static void ShowCardForPlayer(ShadowEraCard card) { if (!isSimulating && Gameplay.Instance != null) { Gameplay.Instance.UpdateHand(forceUpdate: true); Gameplay.Instance.ShowCard(card); Gameplay.Instance.BlockInput(2f); if (card.gameObject != null) { CoroutineManager.Start(_ShowCardForPlayer(card)); } } } public static void AddHand(ShadowEraCard card) { // Code that handles adding a card to the player's hand } public static void OnSeek(ShadowEraCard card) { // Handles additional effects or actions after the card is added to the hand } public void ShuffleOurDeck() { GameModel.ShuffleDeck(); } | |
Alan said: "Card effects take precedence over the game rules."`
| void PlayFaceDown(ShadowEraCard card, bool isSeeked)
{ if (isSeeked)
{
// Allow ShowCardForPlayer() to be invoked for Seeked cards
ShowCardForPlayer(card);
}
else
{
// Keep the card face-down as usual (normal Trap behavior)
KeepCardFaceDown(card);
}
} |