/// <summary>Populates bookData with the standard characters that should be allowed to be grouped together without causing proximity problems</summary> private void GetStandardCharactersToTreatAsOne(BookScript book, ProjectDramatizationPreferences dramatizationPreferences, Dictionary <ExtraBiblicalMaterialSpeakerOption, HashSet <string> > bookData) { if (m_strictlyAdhereToNarratorPreferences) { AddOrNew(bookData, dramatizationPreferences.BookTitleAndChapterDramatization, CharacterVerseData.GetStandardCharacterId(book.BookId, CharacterVerseData.StandardCharacter.BookOrChapter)); AddOrNew(bookData, dramatizationPreferences.SectionHeadDramatization, CharacterVerseData.GetStandardCharacterId(book.BookId, CharacterVerseData.StandardCharacter.ExtraBiblical)); AddOrNew(bookData, dramatizationPreferences.BookIntroductionsDramatization, CharacterVerseData.GetStandardCharacterId(book.BookId, CharacterVerseData.StandardCharacter.Intro)); bookData.Remove(ExtraBiblicalMaterialSpeakerOption.Omitted); // add the narrator to its group if there are others there already if (bookData.ContainsKey(ExtraBiblicalMaterialSpeakerOption.Narrator)) { bookData[ExtraBiblicalMaterialSpeakerOption.Narrator].Add(book.NarratorCharacterId); } } else { AddOrNew(bookData, ExtraBiblicalMaterialSpeakerOption.Narrator, book.NarratorCharacterId); if (dramatizationPreferences.BookTitleAndChapterDramatization != ExtraBiblicalMaterialSpeakerOption.Omitted) { bookData[ExtraBiblicalMaterialSpeakerOption.Narrator].Add(CharacterVerseData.GetStandardCharacterId(book.BookId, CharacterVerseData.StandardCharacter.BookOrChapter)); } if (dramatizationPreferences.SectionHeadDramatization != ExtraBiblicalMaterialSpeakerOption.Omitted) { bookData[ExtraBiblicalMaterialSpeakerOption.Narrator].Add(CharacterVerseData.GetStandardCharacterId(book.BookId, CharacterVerseData.StandardCharacter.ExtraBiblical)); } if (dramatizationPreferences.BookIntroductionsDramatization != ExtraBiblicalMaterialSpeakerOption.Omitted) { bookData[ExtraBiblicalMaterialSpeakerOption.Narrator].Add(CharacterVerseData.GetStandardCharacterId(book.BookId, CharacterVerseData.StandardCharacter.Intro)); } } }
public Proximity(IReadOnlyList <BookScript> booksToConsider, ProjectDramatizationPreferences dramatizationPreferences) { m_booksToConsider = booksToConsider; //m_dramatizationPreferences = dramatizationPreferences; m_considerSameExtrabiblicalCharacter = new Dictionary <BookScript, Dictionary <CharacterVerseData.StandardCharacter, HashSet <string> > >(); // get the standard character mapping for each books foreach (var book in m_booksToConsider) { // initialize the standard character data var bookData = new Dictionary <CharacterVerseData.StandardCharacter, HashSet <string> >(); bookData[CharacterVerseData.StandardCharacter.Narrator] = null; bookData[CharacterVerseData.StandardCharacter.BookOrChapter] = null; bookData[CharacterVerseData.StandardCharacter.ExtraBiblical] = null; bookData[CharacterVerseData.StandardCharacter.Intro] = null; GetNarratorCharactersToTreatAsOne(book, dramatizationPreferences, bookData); GetOtherCharactersToTreatAsOne(book, dramatizationPreferences, bookData); m_considerSameExtrabiblicalCharacter[book] = bookData; } }
/// <summary>Gets extra-biblical characters that are voiced by the same actor who is not the narrator</summary> /// <param name="book"></param> /// <param name="dramatizationPreferences"></param> /// <param name="bookData"></param> private static void GetOtherCharactersToTreatAsOne(BookScript book, ProjectDramatizationPreferences dramatizationPreferences, Dictionary <CharacterVerseData.StandardCharacter, HashSet <string> > bookData) { var bookTitleChapterId = CharacterVerseData.GetStandardCharacterId(book.BookId, CharacterVerseData.StandardCharacter.BookOrChapter); var sectionHeadId = CharacterVerseData.GetStandardCharacterId(book.BookId, CharacterVerseData.StandardCharacter.ExtraBiblical); var bookIntroductionId = CharacterVerseData.GetStandardCharacterId(book.BookId, CharacterVerseData.StandardCharacter.Intro); if ((dramatizationPreferences.BookTitleAndChapterDramatization & ExtraBiblicalMaterialSpeakerOption.NotNarratorOrOmitted) != 0) { if (dramatizationPreferences.BookTitleAndChapterDramatization == dramatizationPreferences.SectionHeadDramatization) { AddOrNew(bookData, CharacterVerseData.StandardCharacter.BookOrChapter, bookTitleChapterId); AddOrNew(bookData, CharacterVerseData.StandardCharacter.BookOrChapter, sectionHeadId); AddOrNew(bookData, CharacterVerseData.StandardCharacter.ExtraBiblical, bookTitleChapterId); AddOrNew(bookData, CharacterVerseData.StandardCharacter.ExtraBiblical, sectionHeadId); } if (dramatizationPreferences.BookTitleAndChapterDramatization == dramatizationPreferences.BookIntroductionsDramatization) { AddOrNew(bookData, CharacterVerseData.StandardCharacter.BookOrChapter, bookTitleChapterId); AddOrNew(bookData, CharacterVerseData.StandardCharacter.BookOrChapter, bookIntroductionId); AddOrNew(bookData, CharacterVerseData.StandardCharacter.Intro, bookTitleChapterId); AddOrNew(bookData, CharacterVerseData.StandardCharacter.Intro, bookIntroductionId); } } if ((dramatizationPreferences.SectionHeadDramatization & ExtraBiblicalMaterialSpeakerOption.NotNarratorOrOmitted) != 0) { if (dramatizationPreferences.SectionHeadDramatization == dramatizationPreferences.BookIntroductionsDramatization) { AddOrNew(bookData, CharacterVerseData.StandardCharacter.ExtraBiblical, sectionHeadId); AddOrNew(bookData, CharacterVerseData.StandardCharacter.ExtraBiblical, bookIntroductionId); AddOrNew(bookData, CharacterVerseData.StandardCharacter.Intro, sectionHeadId); AddOrNew(bookData, CharacterVerseData.StandardCharacter.Intro, bookIntroductionId); } } }
/// <summary>Gets extra-biblical characters that should be considered same as the narrator</summary> /// <param name="book"></param> /// <param name="dramatizationPreferences"></param> /// <param name="bookData"></param> private static void GetNarratorCharactersToTreatAsOne(BookScript book, ProjectDramatizationPreferences dramatizationPreferences, Dictionary <CharacterVerseData.StandardCharacter, HashSet <string> > bookData) { var narratorCharacterId = CharacterVerseData.GetStandardCharacterId(book.BookId, CharacterVerseData.StandardCharacter.Narrator); string bookTitleChapterId = null; string sectionHeadId = null; string bookIntroductionId = null; // is the book title and chapter character also the narrator? if (dramatizationPreferences.BookTitleAndChapterDramatization == ExtraBiblicalMaterialSpeakerOption.Narrator) { bookTitleChapterId = CharacterVerseData.GetStandardCharacterId(book.BookId, CharacterVerseData.StandardCharacter.BookOrChapter); AddOrNew(bookData, CharacterVerseData.StandardCharacter.Narrator, bookTitleChapterId); AddOrNew(bookData, CharacterVerseData.StandardCharacter.BookOrChapter, bookTitleChapterId); AddOrNew(bookData, CharacterVerseData.StandardCharacter.BookOrChapter, narratorCharacterId); } // is the section head character also the narrator? if (dramatizationPreferences.SectionHeadDramatization == ExtraBiblicalMaterialSpeakerOption.Narrator) { sectionHeadId = CharacterVerseData.GetStandardCharacterId(book.BookId, CharacterVerseData.StandardCharacter.ExtraBiblical); AddOrNew(bookData, CharacterVerseData.StandardCharacter.Narrator, sectionHeadId); AddOrNew(bookData, CharacterVerseData.StandardCharacter.ExtraBiblical, sectionHeadId); AddOrNew(bookData, CharacterVerseData.StandardCharacter.ExtraBiblical, narratorCharacterId); } // is the book introduction character also the narrator? if (dramatizationPreferences.BookIntroductionsDramatization == ExtraBiblicalMaterialSpeakerOption.Narrator) { bookIntroductionId = CharacterVerseData.GetStandardCharacterId(book.BookId, CharacterVerseData.StandardCharacter.Intro); AddOrNew(bookData, CharacterVerseData.StandardCharacter.Narrator, bookIntroductionId); AddOrNew(bookData, CharacterVerseData.StandardCharacter.Intro, bookIntroductionId); AddOrNew(bookData, CharacterVerseData.StandardCharacter.Intro, narratorCharacterId); } // link all the narrator character IDs together if (bookTitleChapterId != null) { if (sectionHeadId != null) { AddOrNew(bookData, CharacterVerseData.StandardCharacter.BookOrChapter, sectionHeadId); AddOrNew(bookData, CharacterVerseData.StandardCharacter.ExtraBiblical, bookTitleChapterId); } if (bookIntroductionId != null) { AddOrNew(bookData, CharacterVerseData.StandardCharacter.BookOrChapter, bookIntroductionId); AddOrNew(bookData, CharacterVerseData.StandardCharacter.Intro, bookTitleChapterId); } } if ((sectionHeadId != null) && (bookIntroductionId != null)) { AddOrNew(bookData, CharacterVerseData.StandardCharacter.ExtraBiblical, bookIntroductionId); AddOrNew(bookData, CharacterVerseData.StandardCharacter.Intro, sectionHeadId); } // add the narrator to its group if there are others there already if (bookData[CharacterVerseData.StandardCharacter.Narrator] != null) { AddOrNew(bookData, CharacterVerseData.StandardCharacter.Narrator, narratorCharacterId); } }