using System; using RoR2.ExpansionManagement; using UnityEngine; namespace RoR2; [Serializable] public class DirectorCard { public SpawnCard spawnCard; public int selectionWeight; public DirectorCore.MonsterSpawnDistance spawnDistance; public bool preventOverhead; public int minimumStageCompletions; [Tooltip("'requiredUnlockable' will be discontinued. Use 'requiredUnlockableDef' instead.")] [Obsolete("'requiredUnlockable' will be discontinued. Use 'requiredUnlockableDef' instead.", false)] public string requiredUnlockable; [Tooltip("'forbiddenUnlockable' will be discontinued. Use 'forbiddenUnlockableDef' instead.")] [Obsolete("'forbiddenUnlockable' will be discontinued. Use 'forbiddenUnlockableDef' instead.", false)] public string forbiddenUnlockable; public UnlockableDef requiredUnlockableDef; public UnlockableDef forbiddenUnlockableDef; public int cost => spawnCard.directorCreditCost; [Obsolete("'CardIsValid' is confusingly named. Use 'IsAvailable' instead.", false)] public bool CardIsValid() { return IsAvailable(); } public bool IsAvailable() { ref string reference = ref requiredUnlockable; ref string reference2 = ref forbiddenUnlockable; if (!requiredUnlockableDef && !string.IsNullOrEmpty(reference)) { requiredUnlockableDef = UnlockableCatalog.GetUnlockableDef(reference); reference = null; } if (!forbiddenUnlockableDef && !string.IsNullOrEmpty(reference2)) { forbiddenUnlockableDef = UnlockableCatalog.GetUnlockableDef(reference2); reference2 = null; } bool flag = !requiredUnlockableDef || Run.instance.IsUnlockableUnlocked(requiredUnlockableDef); bool flag2 = (bool)forbiddenUnlockableDef && Run.instance.DoesEveryoneHaveThisUnlockableUnlocked(forbiddenUnlockableDef); if ((bool)Run.instance && Run.instance.stageClearCount >= minimumStageCompletions && flag && !flag2 && (bool)spawnCard && (bool)spawnCard.prefab) { ExpansionRequirementComponent component = spawnCard.prefab.GetComponent(); if (!component) { CharacterMaster component2 = spawnCard.prefab.GetComponent(); if ((bool)component2 && (bool)component2.bodyPrefab) { component = component2.bodyPrefab.GetComponent(); } } if ((bool)component) { return Run.instance.IsExpansionEnabled(component.requiredExpansion); } return true; } return false; } }