using System.Collections.Generic; using System.Xml.Linq; #if TEXTMESHPRO_INSTALLED using TMPro; #endif using UnityEditor; using UnityEngine; using UnityEngine.UI; namespace EasyTalk.Display.Style { /// /// The DialogueStyleManager is used to modify the style of a Dialogue Display more easily than having to access individual components within the display. /// public class DialogueStyleManager { /// /// Applies the specified DialogueStyle to the DialogueDisplay provided. /// /// The style to apply. /// The dialogue display to update. public static void ApplyStyle(DialogueStyle style, DialogueDisplay display) { if (display.GetConversationDisplay() != null && style.conversationStyle != null) { ApplyStyleToConvoDisplay(style.conversationStyle, display.GetConversationDisplay()); } if (display.GetOptionDisplay() != null && style.optionStyle != null) { ApplyStyleToOptionDisplay(style.optionStyle, display.GetOptionDisplay()); } if(display.GetContinueDisplay() != null && style.continueStyle != null) { ApplyStyleToContinuePanel(style.continueStyle, display.GetContinueDisplay()); } } /// /// Applies the specified OptionDisplayStyle to the provided OptionDisplay. /// /// The style to apply. /// The option display to update. public static void ApplyStyleToOptionDisplay(OptionDisplayStyle style, OptionDisplay display) { if (style == null) { return; } ApplyStyleToOptionPanel(style, display); foreach (DialogueButton button in display.GetOptionButtons()) { ApplyStyleToOptionButton(style.optionButtonStyle, button); } ApplyStyleToDirectionalOptionDisplay(style, display); } /// /// Applies the specified OptionDisplayStyle to the provided OptionDisplay if it is a Directional Option Display. /// /// The style to apply. /// The option display to update (changes only applied if it is a directional option display). public static void ApplyStyleToDirectionalOptionDisplay(OptionDisplayStyle style, OptionDisplay display) { if (display is DirectionalOptionDisplay) { DirectionalOptionDisplay directionalDisplay = display as DirectionalOptionDisplay; if (directionalDisplay.MainImage != null) { directionalDisplay.MainImage.color = style.directionalStyle.mainImageColor; #if UNITY_EDITOR EditorUtility.SetDirty(directionalDisplay.MainImage); #endif } if (directionalDisplay.UseOptionButtonColors) { foreach (DirectionalOptionElement element in directionalDisplay.OptionElements) { if (element != null && element.linkedImage != null && element.button != null) { element.linkedImage.color = element.button.normalButtonColor; #if UNITY_EDITOR EditorUtility.SetDirty(element.linkedImage); #endif } } } else { foreach (DirectionalOptionElement element in directionalDisplay.OptionElements) { if (element != null && element.linkedImage != null) { element.linkedImage.color = style.directionalStyle.normalColor; #if UNITY_EDITOR EditorUtility.SetDirty(element.linkedImage); #endif } } } directionalDisplay.LinkNormalColor = style.directionalStyle.normalColor; directionalDisplay.LinkHighlightColor = style.directionalStyle.highlightColor; directionalDisplay.LinkPressedColor = style.directionalStyle.pressedColor; directionalDisplay.LinkDisabledColor = style.directionalStyle.disabledColor; #if UNITY_EDITOR EditorUtility.SetDirty(directionalDisplay); #endif } } /// /// Applies the specified ConversationDisplayStyle to the ConversationDisplay provided. /// /// The style to apply. /// The conversation display to update. public static void ApplyStyleToConvoDisplay(ConversationDisplayStyle style, ConversationDisplay display) { if (style == null) { return; } ApplyStyleToCharacterNameText(style, display); ApplyStyleToCharacterNameBackgroundImage(style, display.CharacterNameBackgroundImage); ApplyStyleToConvoImages(style, display); ApplyStyleToConvoText(style, display); } /// /// Applies styling to the character name text provided. /// /// The style to apply. /// The Conversation Display to update. protected static void ApplyStyleToCharacterNameText(ConversationDisplayStyle convoStyle, ConversationDisplay display) { ApplyStyleToText(convoStyle.characterNameStyle.textStyleSettings, display.StandardCharacterNameText); #if TEXTMESHPRO_INSTALLED ApplyStyleToTMPText(convoStyle.characterNameStyle.textStyleSettings, display.TMPCharacterNameText); #endif } /// /// Applies styling to the character name background image provided. /// /// The style to apply. /// The background image to update. protected static void ApplyStyleToCharacterNameBackgroundImage(ConversationDisplayStyle convoStyle, Image backgroundImage) { if (backgroundImage != null && convoStyle != null) { backgroundImage.enabled = convoStyle.characterNameStyle.imageStyleSettings.enabled; backgroundImage.sprite = convoStyle.characterNameStyle.imageStyleSettings.sprite; backgroundImage.color = convoStyle.characterNameStyle.imageStyleSettings.color; backgroundImage.type = convoStyle.characterNameStyle.imageStyleSettings.imageType; backgroundImage.pixelsPerUnitMultiplier = convoStyle.characterNameStyle.imageStyleSettings.pixelsPerUnit; #if UNITY_EDITOR EditorUtility.SetDirty(backgroundImage); #endif } } /// /// Applies styling to the provided dialogue/conversation text. /// /// The style to apply. /// The Conversation Display to update. protected static void ApplyStyleToConvoText(ConversationDisplayStyle convoStyle, ConversationDisplay display) { ApplyStyleToText(convoStyle.convoTextStyle, display.StandardConvoText); #if TEXTMESHPRO_INSTALLED ApplyStyleToTMPText(convoStyle.convoTextStyle, display.TMPConvoText); #endif } /// /// Apply the style of the provided TextStyleSettings to the Unity Text component specified. /// /// The text style settings to apply. /// The Text component to update. protected static void ApplyStyleToText(TextStyleSettings textStyleSettings, Text text) { if (text != null && textStyleSettings != null) { text.fontSize = (int)textStyleSettings.fontSize; text.color = textStyleSettings.color; if (textStyleSettings.StandardFont != null) { text.font = textStyleSettings.StandardFont; } if (textStyleSettings.autoSizeFont) { text.resizeTextForBestFit = true; text.resizeTextMinSize = (int)textStyleSettings.minFontSize; text.resizeTextMaxSize = (int)textStyleSettings.maxFontSize; } else { text.resizeTextForBestFit = false; } #if UNITY_EDITOR EditorUtility.SetDirty(text); #endif } } #if TEXTMESHPRO_INSTALLED /// /// Apply the style of the provided TextStyleSettings to the TextMeshPro Text component specified. /// /// The text style settings to apply. /// The TextMeshPro component to update. protected static void ApplyStyleToTMPText(TextStyleSettings textStyleSettings, TMP_Text text) { if (text != null && textStyleSettings != null) { text.fontSize = textStyleSettings.fontSize; text.color = textStyleSettings.color; if (textStyleSettings.TMPFont != null) { text.font = textStyleSettings.TMPFont; } if (textStyleSettings.autoSizeFont) { text.enableAutoSizing = true; text.fontSizeMin = textStyleSettings.minFontSize; text.fontSizeMax = textStyleSettings.maxFontSize; } else { text.enableAutoSizing = false; } #if UNITY_EDITOR EditorUtility.SetDirty(text); #endif } } #endif /// /// Applies styling to the images of the conversation display provided. /// /// The style to apply. /// The conversation display to update. protected static void ApplyStyleToConvoImages(ConversationDisplayStyle convoStyle, ConversationDisplay convoDisplay) { if (convoStyle != null && convoDisplay != null) { for (int imageStyleIdx = 0; imageStyleIdx < convoStyle.convoImageStyles.Count; imageStyleIdx++) { ImageStyleSettings imageStyle = convoStyle.convoImageStyles[imageStyleIdx]; if (convoDisplay.ConversationPanelImages.Count > imageStyleIdx) { Image convoImage = convoDisplay.ConversationPanelImages[imageStyleIdx]; if (convoImage != null) { convoImage.enabled = imageStyle.enabled; convoImage.sprite = imageStyle.sprite; convoImage.color = imageStyle.color; convoImage.type = imageStyle.imageType; convoImage.pixelsPerUnitMultiplier = imageStyle.pixelsPerUnit; #if UNITY_EDITOR EditorUtility.SetDirty(convoImage); #endif } } } } } /// /// Applies styling to the option button provided. /// /// The style to apply. /// The dialogue button to update. protected static void ApplyStyleToOptionButton(OptionButtonStyle style, DialogueButton button) { if (button != null && style != null) { button.normalButtonColor = style.buttonStyleSettings.normalImageColor; button.highlightedButtonColor = style.buttonStyleSettings.highlightedImageColor; button.disabledButtonColor = style.buttonStyleSettings.disabledImageColor; button.pressedButtonColor = style.buttonStyleSettings.pressedImageColor; button.normalTextColor = style.buttonStyleSettings.normalTextColor; button.highlightedTextColor = style.buttonStyleSettings.highlightedTextColor; button.disabledTextColor = style.buttonStyleSettings.disabledTextColor; button.pressedTextColor = style.buttonStyleSettings.pressedTextColor; button.hoverSound = style.hoverSound; #if UNITY_EDITOR EditorUtility.SetDirty(button); #endif Image optionImage = button.backgroundImage; if (optionImage != null) { if (style.imageStyleSettings.enabled) { optionImage.enabled = true; optionImage.sprite = style.imageStyleSettings.sprite; optionImage.color = style.imageStyleSettings.color; optionImage.type = style.imageStyleSettings.imageType; optionImage.pixelsPerUnitMultiplier = style.imageStyleSettings.pixelsPerUnit; } else { optionImage.enabled = false; } #if UNITY_EDITOR EditorUtility.SetDirty(optionImage); #endif } ApplyStyleToText(style.textStyleSettings, button.StandardText); #if TEXTMESHPRO_INSTALLED ApplyStyleToTMPText(style.textStyleSettings, button.TMPText); #endif } } /// /// Applies styling to the option display provided. /// /// The style to apply. /// The option display to update. protected static void ApplyStyleToOptionPanel(OptionDisplayStyle style, OptionDisplay optionDisplay) { if (style != null) { for(int i = 0; i < style.optionPanelImageStyles.Count; i++) { ImageStyleSettings optionImageStyle = style.optionPanelImageStyles[i]; if(optionImageStyle != null && optionDisplay.Images.Count > i) { Image optionImage = optionDisplay.Images[i]; if (optionImage != null) { optionImage.enabled = optionImageStyle.enabled; optionImage.sprite = optionImageStyle.sprite; optionImage.color = optionImageStyle.color; optionImage.type = optionImageStyle.imageType; optionImage.pixelsPerUnitMultiplier = optionImageStyle.pixelsPerUnit; #if UNITY_EDITOR EditorUtility.SetDirty(optionImage); #endif } } } } } /// /// Applies styling to the continue display provided. /// /// The style to apply. /// The continue display to update. public static void ApplyStyleToContinuePanel(ContinueDisplayStyle style, ContinueDisplay continueDisplay) { Image backgroundImage = continueDisplay.BackgroundImage; if (continueDisplay.BackgroundImage != null) { backgroundImage.enabled = style.imageStyleSettings.enabled; backgroundImage.sprite = style.imageStyleSettings.sprite; backgroundImage.color = style.imageStyleSettings.color; backgroundImage.type = style.imageStyleSettings.imageType; backgroundImage.pixelsPerUnitMultiplier = style.imageStyleSettings.pixelsPerUnit; #if UNITY_EDITOR EditorUtility.SetDirty(backgroundImage); #endif } ApplyStyleToText(style.textStyleSettings, continueDisplay.StandardText); #if TEXTMESHPRO_INSTALLED ApplyStyleToTMPText(style.textStyleSettings, continueDisplay.TMPText); #endif DialogueButton button = continueDisplay.GetComponent(); if(button != null) { button.normalButtonColor = style.buttonStyleSettings.normalImageColor; button.pressedButtonColor = style.buttonStyleSettings.pressedImageColor; button.disabledButtonColor = style.buttonStyleSettings.disabledImageColor; button.highlightedButtonColor = style.buttonStyleSettings.highlightedImageColor; button.normalTextColor = style.buttonStyleSettings.normalTextColor; button.pressedTextColor = style.buttonStyleSettings.pressedTextColor; button.disabledTextColor = style.buttonStyleSettings.disabledTextColor; button.highlightedTextColor = style.buttonStyleSettings.highlightedTextColor; #if UNITY_EDITOR EditorUtility.SetDirty(button); #endif } } /// /// Creates a conversation display style from the provided conversation display. /// /// The conversation display to create a style from. /// The new ConversationDisplayStyle. public static ConversationDisplayStyle CreateConversationDisplayStyle(ConversationDisplay display) { ConversationDisplayStyle convoStyle = new ConversationDisplayStyle(); //Apply settings to convo text style. ApplyTextSettingsToStyle(convoStyle.convoTextStyle, display.StandardConvoText); #if TEXTMESHPRO_INSTALLED ApplyTMPTextSettingsToStyle(convoStyle.convoTextStyle, display.TMPConvoText); #endif //Apply settings to character name style. ApplyTextSettingsToStyle(convoStyle.characterNameStyle.textStyleSettings, display.StandardCharacterNameText); #if TEXTMESHPRO_INSTALLED ApplyTMPTextSettingsToStyle(convoStyle.characterNameStyle.textStyleSettings, display.TMPCharacterNameText); #endif if (display.ConversationPanelImages != null) { if (convoStyle.convoImageStyles == null) { convoStyle.convoImageStyles = new List(); } for (int i = 0; i < display.ConversationPanelImages.Count; i++) { ImageStyleSettings imageStyle = new ImageStyleSettings(); Image convoImage = display.ConversationPanelImages[i]; if (convoImage != null) { imageStyle.enabled = convoImage.enabled; imageStyle.color = convoImage.color; imageStyle.imageType = convoImage.type; imageStyle.pixelsPerUnit = convoImage.pixelsPerUnitMultiplier; imageStyle.sprite = convoImage.sprite; } else { imageStyle.enabled = false; } convoStyle.convoImageStyles.Add(imageStyle); } } if (display.StandardCharacterNameText != null) { convoStyle.characterNameStyle.textStyleSettings.enabled = display.StandardCharacterNameText.enabled; convoStyle.characterNameStyle.textStyleSettings.color = display.StandardCharacterNameText.color; convoStyle.characterNameStyle.textStyleSettings.StandardFont = display.StandardCharacterNameText.font; convoStyle.characterNameStyle.textStyleSettings.fontSize = display.StandardCharacterNameText.fontSize; convoStyle.convoTextStyle.autoSizeFont = display.StandardCharacterNameText.resizeTextForBestFit; convoStyle.convoTextStyle.minFontSize = display.StandardCharacterNameText.resizeTextMinSize; convoStyle.convoTextStyle.maxFontSize = display.StandardCharacterNameText.resizeTextMaxSize; } #if TEXTMESHPRO_INSTALLED if (display.TMPCharacterNameText != null) { convoStyle.characterNameStyle.textStyleSettings.enabled = display.TMPCharacterNameText.enabled; convoStyle.characterNameStyle.textStyleSettings.color = display.TMPCharacterNameText.color; convoStyle.characterNameStyle.textStyleSettings.TMPFont = display.TMPCharacterNameText.font; convoStyle.characterNameStyle.textStyleSettings.fontSize = display.TMPCharacterNameText.fontSize; convoStyle.characterNameStyle.textStyleSettings.autoSizeFont = display.TMPCharacterNameText.enableAutoSizing; convoStyle.characterNameStyle.textStyleSettings.minFontSize = display.TMPCharacterNameText.fontSizeMin; convoStyle.characterNameStyle.textStyleSettings.maxFontSize = display.TMPCharacterNameText.fontSizeMax; } #endif if (display.CharacterNameBackgroundImage != null) { convoStyle.characterNameStyle.imageStyleSettings.enabled = display.CharacterNameBackgroundImage.enabled; convoStyle.characterNameStyle.imageStyleSettings.sprite = display.CharacterNameBackgroundImage.sprite; convoStyle.characterNameStyle.imageStyleSettings.color = display.CharacterNameBackgroundImage.color; convoStyle.characterNameStyle.imageStyleSettings.imageType = display.CharacterNameBackgroundImage.type; convoStyle.characterNameStyle.imageStyleSettings.pixelsPerUnit = display.CharacterNameBackgroundImage.pixelsPerUnitMultiplier; } return convoStyle; } /// /// Creates a option display style from the provided option display. /// /// The option display to create a style from. /// The new OptionDisplayStyle. public static OptionDisplayStyle CreateOptionDisplayStyle(OptionDisplay display) { OptionDisplayStyle style = new OptionDisplayStyle(); ApplyOptionPanelImageSettingsToStyle(display.Images, style); List buttons = display.GetOptionButtons(); if(buttons != null && buttons.Count > 0) { OptionButtonStyle buttonStyle = new OptionButtonStyle(); style.optionButtonStyle = buttonStyle; ApplyOptionButtonToStyle(buttons[0], buttonStyle); } ApplyDirectionalDisplaySettingsToStyle(display, style); return style; } /// /// Applies the settings for link image colors and the main image color to the style provided if it's a directional option display. /// /// The option display to apply settings from. /// The style to apply settings to (only if the option display is a directional option display). private static void ApplyDirectionalDisplaySettingsToStyle(OptionDisplay display, OptionDisplayStyle style) { if (display is DirectionalOptionDisplay) { DirectionalOptionDisplay directionalDisplay = display as DirectionalOptionDisplay; if (directionalDisplay.MainImage != null) { style.directionalStyle.mainImageColor = directionalDisplay.MainImage.color; } style.directionalStyle.normalColor = directionalDisplay.LinkNormalColor; style.directionalStyle.highlightColor = directionalDisplay.LinkHighlightColor; style.directionalStyle.pressedColor = directionalDisplay.LinkPressedColor; style.directionalStyle.disabledColor = directionalDisplay.LinkDisabledColor; } } /// /// Creates a new continue display style from the provided continue display. /// /// The continue display to create a style from. /// The new ContinueDisplayStyle. public static ContinueDisplayStyle CreateContinueDisplayStyle(ContinueDisplay display) { ContinueDisplayStyle style = new ContinueDisplayStyle(); if(display.BackgroundImage != null) { style.imageStyleSettings.enabled = display.BackgroundImage.enabled; style.imageStyleSettings.color = display.BackgroundImage.color; style.imageStyleSettings.sprite = display.BackgroundImage.sprite; style.imageStyleSettings.imageType = display.BackgroundImage.type; style.imageStyleSettings.pixelsPerUnit = display.BackgroundImage.pixelsPerUnitMultiplier; } ApplyTextSettingsToStyle(style.textStyleSettings, display.StandardText); #if TEXTMESHPRO_INSTALLED ApplyTMPTextSettingsToStyle(style.textStyleSettings, display.TMPText); #endif DialogueButton button = display.GetComponent(); if(button != null) { style.buttonStyleSettings.normalImageColor = button.normalButtonColor; style.buttonStyleSettings.pressedImageColor = button.pressedButtonColor; style.buttonStyleSettings.disabledImageColor = button.disabledButtonColor; style.buttonStyleSettings.highlightedImageColor = button.highlightedButtonColor; style.buttonStyleSettings.normalTextColor = button.normalTextColor; style.buttonStyleSettings.pressedTextColor = button.pressedTextColor; style.buttonStyleSettings.disabledTextColor = button.disabledTextColor; style.buttonStyleSettings.highlightedTextColor = button.highlightedTextColor; } return style; } /// /// Creates a complete dialogue display style from the provided dialogue display. /// /// The dialogue display to create a style from. /// The new DialogueStyle. public static DialogueStyle CreateStyle(DialogueDisplay display) { DialogueStyle style = ScriptableObject.CreateInstance(); if (display.GetConversationDisplay() != null) { ConversationDisplayStyle convoStyle = CreateConversationDisplayStyle(display.GetConversationDisplay()); style.conversationStyle = convoStyle; } if (display.GetOptionDisplay() != null) { OptionDisplayStyle optionStyle = CreateOptionDisplayStyle(display.GetOptionDisplay()); style.optionStyle = optionStyle; } if(display.GetContinueDisplay() != null) { ContinueDisplayStyle continueStyle = CreateContinueDisplayStyle(display.GetContinueDisplay()); style.continueStyle = continueStyle; } return style; } /// /// Applies and creates option panel image styles for the provided OptionDisplayStyle from the List of option display images provided. /// /// The list of option panel images to create styles from. /// The option display style to update. protected static void ApplyOptionPanelImageSettingsToStyle(List optionPanelImages, OptionDisplayStyle style) { for(int i = 0; i < optionPanelImages.Count; i++) { Image image = optionPanelImages[i]; if(style.optionPanelImageStyles.Count <= i) { style.optionPanelImageStyles.Add(new ImageStyleSettings()); } ImageStyleSettings imageStyle = style.optionPanelImageStyles[i]; if (image != null) { imageStyle.enabled = image.enabled; imageStyle.sprite = image.sprite; imageStyle.color = image.color; imageStyle.imageType = image.type; imageStyle.pixelsPerUnit = image.pixelsPerUnitMultiplier; } else { imageStyle.enabled = false; } } } /// /// Applies the settings of the specified dialogue button to the provided option button style. /// /// The dialogue button to use. /// The style to update. protected static void ApplyOptionButtonToStyle(DialogueButton button, OptionButtonStyle style) { style.buttonStyleSettings.normalTextColor = button.normalTextColor; style.buttonStyleSettings.highlightedTextColor = button.highlightedTextColor; style.buttonStyleSettings.pressedTextColor = button.pressedTextColor; style.buttonStyleSettings.disabledTextColor = button.disabledTextColor; if (button.StandardText != null) { style.textStyleSettings.color = button.StandardText.color; style.textStyleSettings.StandardFont = button.StandardText.font; style.textStyleSettings.fontSize = button.StandardText.fontSize; } #if TEXTMESHPRO_INSTALLED if (button.TMPText != null) { style.textStyleSettings.color = button.TMPText.color; style.textStyleSettings.TMPFont = button.TMPText.font; style.textStyleSettings.fontSize = button.TMPText.fontSize; } #endif ApplyTextSettingsToStyle(style.textStyleSettings, button.StandardText); #if TEXTMESHPRO_INSTALLED ApplyTMPTextSettingsToStyle(style.textStyleSettings, button.TMPText); #endif if (button.backgroundImage != null) { style.imageStyleSettings.enabled = button.backgroundImage.enabled; style.buttonStyleSettings.normalImageColor = button.normalButtonColor; style.buttonStyleSettings.highlightedImageColor = button.highlightedButtonColor; style.buttonStyleSettings.pressedImageColor = button.pressedButtonColor; style.buttonStyleSettings.disabledImageColor = button.disabledButtonColor; style.imageStyleSettings.color = button.backgroundImage.color; style.imageStyleSettings.pixelsPerUnit = button.backgroundImage.pixelsPerUnitMultiplier; style.imageStyleSettings.imageType = button.backgroundImage.type; style.imageStyleSettings.sprite = button.backgroundImage.sprite; } else { style.imageStyleSettings.enabled = false; } if (button.hoverSound != null) { style.hoverSound = button.hoverSound; } } /// /// Apply the settings of the provided Unity Text component to the TextStyleSettings specified. /// /// The text style settings to update. /// The Text component to retrieve settings from. protected static void ApplyTextSettingsToStyle(TextStyleSettings styleSettings, Text text) { if (text != null) { styleSettings.color = text.color; styleSettings.StandardFont = text.font; styleSettings.fontSize = text.fontSize; styleSettings.autoSizeFont = text.resizeTextForBestFit; styleSettings.minFontSize = text.resizeTextMinSize; styleSettings.maxFontSize = text.resizeTextMaxSize; } } #if TEXTMESHPRO_INSTALLED /// /// Apply the settings of the provided TextMeshPro Text component to the TextStyleSettings specified. /// /// The text style settings to update. /// The TextMeshPro component to retrieve settings from. protected static void ApplyTMPTextSettingsToStyle(TextStyleSettings styleSettings, TMP_Text text) { styleSettings.TMPFont = text.font; DialogueDisplay dialogueDisplay = text.GetComponentInParent(); //Apply TextMeshPro settings if TextMeshPro is present. if (dialogueDisplay != null && text != null) { styleSettings.color = text.color; styleSettings.fontSize = text.fontSize; styleSettings.autoSizeFont = text.enableAutoSizing; styleSettings.minFontSize = text.fontSizeMin; styleSettings.maxFontSize = text.fontSizeMax; } } #endif /// /// Applies the color theme specified to the provided dialogue display. /// /// The color theme to apply. /// The dialogue display to update. public static void ApplyColorTheme(ColorTheme colorTheme, DialogueDisplay display) { if (display != null && colorTheme != null) { ConversationDisplay convoDisplay = display.GetConversationDisplay(); if (convoDisplay != null) { for(int i = 0; i < convoDisplay.ConversationPanelImages.Count; i++) { Image convoImage = convoDisplay.ConversationPanelImages[i]; if(convoImage != null && colorTheme.convoImageColors.Count > i) { convoImage.color = colorTheme.convoImageColors[i]; } } if (convoDisplay.CharacterNameBackgroundImage != null) { convoDisplay.CharacterNameBackgroundImage.color = colorTheme.characterPanelColor; } if (convoDisplay.StandardConvoText != null) { convoDisplay.StandardConvoText.color = colorTheme.convoTextColor; } #if TEXTMESHPRO_INSTALLED if (convoDisplay.TMPCharacterNameText != null) { convoDisplay.TMPCharacterNameText.color = colorTheme.convoTextColor; } #endif if (convoDisplay.StandardCharacterNameText != null) { convoDisplay.StandardCharacterNameText.color = colorTheme.characterNameTextColor; } #if TEXTMESHPRO_INSTALLED if (convoDisplay.TMPCharacterNameText != null) { convoDisplay.TMPCharacterNameText.color = colorTheme.characterNameTextColor; } #endif } OptionDisplay optionDisplay = display.GetOptionDisplay(); if (optionDisplay != null) { if (optionDisplay.Images != null) { for(int i = 0; i < optionDisplay.Images.Count; i++) { Image optionImage = optionDisplay.Images[i]; if(optionImage != null && colorTheme.optionImageColors.Count > i) { optionImage.color = colorTheme.optionImageColors[i]; } } } foreach (DialogueButton button in optionDisplay.GetOptionButtons()) { ApplyColorThemeToButton(colorTheme, button); } } ContinueDisplay continueDisplay = display.GetContinueDisplay(); if (continueDisplay != null) { DialogueButton continueButton = continueDisplay.GetComponent(); ApplyColorThemeToContinueButton(colorTheme, continueButton); } } } /// /// Applies the color theme specified to the provided dialogue button. /// /// The color theme to apply. /// The dialogue button to update. public static void ApplyColorThemeToButton(ColorTheme colorTheme, DialogueButton button) { if (button != null && colorTheme != null) { button.backgroundImage.color = colorTheme.buttonNormalColor; button.normalButtonColor = colorTheme.buttonNormalColor; button.pressedButtonColor = colorTheme.buttonPressedColor; button.highlightedButtonColor = colorTheme.buttonHighlightColor; button.disabledButtonColor = colorTheme.buttonDisabledColor; if (button.StandardText != null) { button.StandardText.color = colorTheme.buttonTextNormalColor; } #if TEXTMESHPRO_INSTALLED if (button.TMPText != null) { button.TMPText.color = colorTheme.buttonTextNormalColor; } #endif button.normalTextColor = colorTheme.buttonTextNormalColor; button.pressedTextColor = colorTheme.buttonTextPressedColor; button.highlightedTextColor = colorTheme.buttonTextHighlightColor; button.disabledTextColor = colorTheme.buttonTextDisabledColor; } } /// /// Applies the specified color theme to the provided dialogue button. /// /// The color theme to apply. /// The dialogue button to update. public static void ApplyColorThemeToContinueButton(ColorTheme colorTheme, DialogueButton button) { if (button != null && colorTheme != null) { button.backgroundImage.color = colorTheme.continueButtonNormalColor; button.normalButtonColor = colorTheme.continueButtonNormalColor; button.pressedButtonColor = colorTheme.continueButtonPressedColor; button.highlightedButtonColor = colorTheme.continueButtonHighlightColor; button.disabledButtonColor = colorTheme.continueButtonDisabledColor; if (button.StandardText != null) { button.StandardText.color = colorTheme.continueTextNormalColor; } #if TEXTMESHPRO_INSTALLED if (button.TMPText != null) { button.TMPText.color = colorTheme.continueTextNormalColor; } #endif button.normalTextColor = colorTheme.continueTextNormalColor; button.pressedTextColor = colorTheme.continueTextPressedColor; button.highlightedTextColor = colorTheme.continueTextHighlightColor; button.disabledTextColor = colorTheme.continueTextDisabledColor; } } /// /// Applies the specified frame theme to the provided dialogue display. /// /// The frame theme to apply. /// The dialogue display to update. public static void ApplyFrameTheme(FrameTheme frameTheme, DialogueDisplay display) { if (display != null && frameTheme != null) { ConversationDisplay convoDisplay = display.GetConversationDisplay(); if (convoDisplay != null) { for (int i = 0; i < convoDisplay.ConversationPanelImages.Count; i++) { Image convoImage = convoDisplay.ConversationPanelImages[i]; if (convoImage != null && frameTheme.convoImageSettings.Count > i) { ImageStyleSettings imageSetting = frameTheme.convoImageSettings[i]; if(imageSetting != null) { convoImage.sprite = imageSetting.sprite; convoImage.type = imageSetting.imageType; convoImage.pixelsPerUnitMultiplier = imageSetting.pixelsPerUnit; } } } if (convoDisplay.CharacterNameBackgroundImage != null) { ImageStyleSettings imageSetting = frameTheme.characterPanelImageSettings; convoDisplay.CharacterNameBackgroundImage.sprite = imageSetting.sprite; convoDisplay.CharacterNameBackgroundImage.type = imageSetting.imageType; convoDisplay.CharacterNameBackgroundImage.pixelsPerUnitMultiplier = imageSetting.pixelsPerUnit; } } OptionDisplay optionDisplay = display.GetOptionDisplay(); if (optionDisplay != null) { if (optionDisplay.Images != null) { for(int i = 0; i < optionDisplay.Images.Count; i++) { Image optionImage = optionDisplay.Images[i]; if(optionImage != null && frameTheme.optionImageSettings.Count > i) { ImageStyleSettings imageSetting = frameTheme.optionImageSettings[i]; optionImage.sprite = imageSetting.sprite; optionImage.type = imageSetting.imageType; optionImage.pixelsPerUnitMultiplier = imageSetting.pixelsPerUnit; } } } foreach (DialogueButton button in optionDisplay.GetOptionButtons()) { if (button != null && button.backgroundImage != null) { ImageStyleSettings imageSetting = frameTheme.buttonImageSettings; button.backgroundImage.sprite = imageSetting.sprite; button.backgroundImage.type = imageSetting.imageType; button.backgroundImage.pixelsPerUnitMultiplier = imageSetting.pixelsPerUnit; } } } ContinueDisplay continueDisplay = display.GetContinueDisplay(); if (continueDisplay != null) { if (continueDisplay.BackgroundImage != null) { ImageStyleSettings imageSetting = frameTheme.continueImageSettings; continueDisplay.BackgroundImage.sprite = imageSetting.sprite; continueDisplay.BackgroundImage.type = imageSetting.imageType; continueDisplay.BackgroundImage.pixelsPerUnitMultiplier = imageSetting.pixelsPerUnit; } } } } } }