2 using System.Collections.Generic;
3 using System.Collections.Immutable;
10 private readonly ImmutableHashSet<MissionType> missionType;
11 private readonly
bool isAffiliated;
16 HashSet<MissionType> missionTypes =
new HashSet<MissionType>();
19 foreach (
string missionTypeString
in missionTypeStrings)
25 DebugConsole.ThrowError($
"Error in AbilityConditionMission \"{characterTalent.DebugIdentifier}\" - \"{missionTypeString}\" is not a valid mission type.",
26 contentPackage: conditionElement.ContentPackage);
31 missionTypes.Add(parsedMission);
34 missionType = missionTypes.ToImmutableHashSet();
41 if (!isAffiliated) {
return CheckMissionType(); }
45 foreach (var reputationReward
in mission.ReputationRewards)
47 if (reputationReward.Amount <= 0) {
continue; }
48 if (GetMatchingFaction(reputationReward.FactionIdentifier) is { } faction &&
51 return CheckMissionType();
57 Faction GetMatchingFaction(Identifier factionIdentifier) =>
58 factionIdentifier ==
"location"
59 ? mission.OriginLocation?.
Faction
60 : factions.FirstOrDefault(f => factionIdentifier == f.Prefab.Identifier);
62 bool CheckMissionType() => missionType.IsEmpty || missionType.Contains(mission.Prefab.Type);
void LogAbilityConditionError(AbilityObject abilityObject, Type expectedData)
CharacterTalent characterTalent
override bool MatchesConditionSpecific(AbilityObject abilityObject)
AbilityConditionMission(CharacterTalent characterTalent, ContentXElement conditionElement)
IReadOnlyList< Faction > Factions
bool GetAttributeBool(string key, bool def)
string?[] GetAttributeStringArray(string key, string[]? def, bool convertToLowerInvariant=false)
Faction(CampaignMetadata? metadata, FactionPrefab prefab)
static FactionAffiliation GetPlayerAffiliationStatus(Faction faction)
Get what kind of affiliation this faction has towards the player depending on who they chose to side ...
static GameSession?? GameSession