private void SetRealmTier(Character owner, TitleTier maxTier) { List <Province> ownedProvs = (List <Province>)owner.CustomFlags["provs"]; TitleTier tier = TitleTier.Count; if (ownedProvs.Count >= m_options.RuleSet.EmpireMinSize) { tier = TitleTier.Emperor; } else if (ownedProvs.Count >= m_options.RuleSet.KingdomMinSize) { tier = TitleTier.King; } else if (ownedProvs.Count >= m_options.RuleSet.DuchyMinSize) { tier = TitleTier.Duke; } if (tier > maxTier) { tier = maxTier; } owner.CustomFlags["Tier"] = tier; }
private static Title GetLiegeTitle(Character liege) { Title liegeTitle; TitleTier liegeTier = (TitleTier)liege.CustomFlags["Tier"]; switch (liegeTier) { case TitleTier.Duke: liegeTitle = ((List <Title>)liege.CustomFlags["duchies"]).First(); break; case TitleTier.King: liegeTitle = ((List <Title>)liege.CustomFlags["kingdoms"]).First(); break; case TitleTier.Emperor: liegeTitle = ((List <Title>)liege.CustomFlags["empires"]).First(); break; default: throw new ArgumentOutOfRangeException(string.Format("Liege {0} is a count.", liege.ID)); } return(liegeTitle); }
private List <Character> MakeVassals(Character liege) { Log(" -- Making vassals for " + liege.ID); List <Character> vassals = new List <Character>(); TitleTier vassalTier = (TitleTier)liege.CustomFlags["Tier"]; switch (vassalTier) { case TitleTier.Duke: vassalTier = TitleTier.Count; break; case TitleTier.King: vassalTier = TitleTier.Duke; break; case TitleTier.Emperor: vassalTier = TitleTier.King; break; default: return(vassals); } List <Province> usable = GetUnReservedProvinces(liege); if (!usable.Any()) { return(vassals); } //Prepare for vassal growth. foreach (Province prov in usable) { prov.CustomFlags.Remove("charSurrounded"); prov.CustomFlags.Remove("charOwned"); prov.CustomFlags.Remove("charOwner"); } int vassalSize = 1; switch (vassalTier) { case TitleTier.Count: vassalSize = usable.Count / 3; break; case TitleTier.Duke: vassalSize = usable.Count / m_options.RuleSet.DuchyMinSize; break; case TitleTier.King: vassalSize = usable.Count / m_options.RuleSet.KingdomMinSize; break; } int numVassals = vassalTier == TitleTier.Count ? vassalSize : m_options.Random.Next((int)(vassalSize * 0.75), (int)(vassalSize * 1.25)); MakeFeudalRealms(vassals, liege, vassalTier, numVassals, usable); // Ensure *all* provinces are filled. if (usable.Any()) { MakeFeudalRealms(vassals, liege, TitleTier.Count, usable.Count, usable); } return(vassals); }
private void MakeFeudalRealms(List <Character> allChars, Character liege = null, TitleTier maxTier = TitleTier.King, int numRealms = -1, List <Province> usableProvs = null) { Log(" --Creating " + m_numRealms + " Feudal Realms"); SendMessage("Setting History... Creating Realms"); if (numRealms == -1) { numRealms = m_numRealms; } if (usableProvs == null) { usableProvs = m_unownedProvs; } // Create characters and randomly assign them home provinces. List <Character> owners = CreateNewFeudalCharacters(numRealms, usableProvs, liege); Log(" --Growing Territory"); SendMessage("Setting History... Growing Territory"); #region Growth Phase bool finishedGrowing; do { finishedGrowing = true; foreach (Character owner in owners) { GrowRealm(owner, ref finishedGrowing, usableProvs); } } while(!finishedGrowing); #endregion List <Character> vassals = new List <Character>(); //Set potential tier. if (maxTier > TitleTier.Count) { foreach (Character ch in owners) { SetRealmTier(ch, maxTier); TitleTier tier = (TitleTier)ch.CustomFlags["Tier"]; if (tier >= TitleTier.Duke) { MakeDukes(ch, liege); } if (tier >= TitleTier.King) { MakeKings(ch, liege); } if (tier > TitleTier.Count) { vassals.AddRange(MakeVassals(ch)); } } } allChars.AddRange(vassals); allChars.AddRange(owners); }
private void SetRealmTier( Character owner, TitleTier maxTier ) { List<Province> ownedProvs = (List<Province>)owner.CustomFlags["provs"]; TitleTier tier = TitleTier.Count; if( ownedProvs.Count >= m_options.RuleSet.EmpireMinSize ) tier = TitleTier.Emperor; else if( ownedProvs.Count >= m_options.RuleSet.KingdomMinSize ) tier = TitleTier.King; else if( ownedProvs.Count >= m_options.RuleSet.DuchyMinSize ) tier = TitleTier.Duke; if( tier > maxTier ) tier = maxTier; owner.CustomFlags["Tier"] = tier; }
private void MakeFeudalRealms( List<Character> allChars, Character liege = null, TitleTier maxTier = TitleTier.King, int numRealms = -1, List<Province> usableProvs = null ) { Log( " --Creating " + m_numRealms + " Feudal Realms" ); SendMessage( "Setting History... Creating Realms" ); if( numRealms == -1 ) numRealms = m_numRealms; if( usableProvs == null ) usableProvs = m_unownedProvs; // Create characters and randomly assign them home provinces. List<Character> owners = CreateNewFeudalCharacters( numRealms, usableProvs, liege ); Log( " --Growing Territory" ); SendMessage( "Setting History... Growing Territory" ); #region Growth Phase bool finishedGrowing; do { finishedGrowing = true; foreach( Character owner in owners ) GrowRealm( owner, ref finishedGrowing, usableProvs ); } while( !finishedGrowing ); #endregion List<Character> vassals = new List<Character>(); //Set potential tier. if( maxTier > TitleTier.Count ) { foreach( Character ch in owners ) { SetRealmTier( ch, maxTier ); TitleTier tier = (TitleTier)ch.CustomFlags["Tier"]; if( tier >= TitleTier.Duke ) MakeDukes( ch, liege ); if( tier >= TitleTier.King ) MakeKings( ch, liege ); if( tier > TitleTier.Count ) vassals.AddRange( MakeVassals( ch ) ); } } allChars.AddRange( vassals ); allChars.AddRange( owners ); }