private void ConfigureCharacterClass(CharacterClassDef selectedClassDef) { // Configure from defaults. // Override defaults where necessary. bool factionFound = false; foreach (CharacterClassModifier factionModifiers in selectedClassDef.factions) { if (factionFound) { break; } foreach (FactionDef factionDef2 in factionModifiers.factionDefs) { if (Faction.def != factionDef2) { continue; } factionFound = true; List <AbilityDef> abilities = SelectAbilities(selectedClassDef); AddAbilities(abilities); // Modify Stats. // Modify Skills. } } }
private List <AbilityDef> SelectAbilities(CharacterClassDef characterClassDef) { List <AbilityDef> abilities = new List <AbilityDef>(); List <AbilityDef> excludedAbilities = new List <AbilityDef>(); // Get defaults. if (characterClassDef.defaultSettings != null) { abilities = SelectAbilities(characterClassDef.defaultSettings, ref excludedAbilities); } // Get additional faction specific abilities. foreach (CharacterClassModifier factionSettings in characterClassDef.factions) { abilities = SelectAbilities(factionSettings, ref excludedAbilities, abilities); } // Only allow the maximum number of abilities. if (characterClassDef.MaximumNumberOfAbilities(Faction.def) < 0) // infinite. { return(abilities); } int n = abilities.Count - characterClassDef.MaximumNumberOfAbilities(Faction.def); while (!abilities.NullOrEmpty() && n > 0) // limited. { abilities.RemoveLast(); n--; } return(abilities); }
private CharacterClassRecord SelectClass() { List <CharacterClassChance> classChances = new List <CharacterClassChance>(); classChances = Defaults.ToList(); foreach (FactionBasedCharacterClassChance factionChance in Factions) { foreach (FactionDef factionDef in factionChance.factionDefs) { if (Faction.def != factionDef) { continue; } // Modify the defaults and note any additional classes List <CharacterClassChance> additionalClasseChances = new List <CharacterClassChance>(); foreach (CharacterClassChance otherClassChance in factionChance.characterClasses) { bool classFound = false; foreach (CharacterClassChance classChance in classChances) { if (classChance.characterClassDef == otherClassChance.characterClassDef) { classChance.chance = otherClassChance.chance; classFound = true; break; } } // Add the character class to a list for later. if (!classFound) { additionalClasseChances.Add(otherClassChance); } } // Add any character classes that weren't included in 'defaults' foreach (CharacterClassChance classChance in additionalClasseChances) { classChances.Add(classChance); } } } float cumulativeChances = SumChances(classChances); float selectionNum = UnityEngine.Random.Range(0f, cumulativeChances); CharacterClassDef selectedClassDef = SelectCharacterClassDef(classChances, selectionNum); ConfigureCharacterClass(selectedClassDef); return(new CharacterClassRecord((Pawn)parent, selectedClassDef)); }
private List <AbilityDef> SelectAbilities(CharacterClassDef characterClassDef) { List <AbilityDef> abilities = new List <AbilityDef>(); // Get defaults. if (characterClassDef.defaultSettings != null) { abilities = SelectAbilities(characterClassDef.defaultSettings); } // Get additional faction specific abilities. foreach (CharacterClassModifier factionSettings in characterClassDef.factions) { abilities = SelectAbilities(factionSettings, abilities); } return(abilities); }
public CharacterClassRecord(Pawn pawn, CharacterClassDef def) { this.pawn = pawn; this.def = def; }