This commit is contained in:
Nick 2022-10-10 12:24:09 -04:00
parent 01f719dee4
commit feb22deba1
2 changed files with 56 additions and 16 deletions

View File

@ -21,18 +21,47 @@ namespace NewHorizons.Builder.Props
var dialogue = MakeConversationZone(go, sector, info, mod.ModHelper); var dialogue = MakeConversationZone(go, sector, info, mod.ModHelper);
RemoteDialogueTrigger remoteTrigger = null; RemoteDialogueTrigger remoteTrigger = null;
if (info.remoteTriggerPosition != null || info.remoteTriggerRadius != 0) remoteTrigger = MakeRemoteDialogueTrigger(go, sector, info, dialogue); if (info.remoteTriggerPosition != null || info.remoteTriggerRadius != 0)
{
remoteTrigger = MakeRemoteDialogueTrigger(go, sector, info, dialogue);
}
if (!string.IsNullOrEmpty(info.rename))
{
dialogue.name = info.rename;
if (remoteTrigger != null)
{
remoteTrigger.name = $"{info.rename}_{remoteTrigger.name}";
}
}
if (!string.IsNullOrEmpty(info.parentPath))
{
var parent = go.transform.Find(info.parentPath);
if (parent != null)
{
dialogue.transform.parent = parent;
if (remoteTrigger != null)
{
remoteTrigger.transform.parent = parent;
}
}
}
// Make the character look at the player // Make the character look at the player
// Useful for dialogue replacement // Useful for dialogue replacement
if (!string.IsNullOrEmpty(info.pathToAnimController)) MakePlayerTrackingZone(go, dialogue, info); // Overrides parent path for dialogue
if (!string.IsNullOrEmpty(info.pathToAnimController))
{
MakePlayerTrackingZone(go, dialogue, info);
}
return (dialogue, remoteTrigger); return (dialogue, remoteTrigger);
} }
private static RemoteDialogueTrigger MakeRemoteDialogueTrigger(GameObject planetGO, Sector sector, PropModule.DialogueInfo info, CharacterDialogueTree dialogue) private static RemoteDialogueTrigger MakeRemoteDialogueTrigger(GameObject planetGO, Sector sector, PropModule.DialogueInfo info, CharacterDialogueTree dialogue)
{ {
GameObject conversationTrigger = new GameObject("ConversationTrigger"); var conversationTrigger = new GameObject("ConversationTrigger");
conversationTrigger.SetActive(false); conversationTrigger.SetActive(false);
var remoteDialogueTrigger = conversationTrigger.AddComponent<RemoteDialogueTrigger>(); var remoteDialogueTrigger = conversationTrigger.AddComponent<RemoteDialogueTrigger>();
@ -64,7 +93,7 @@ namespace NewHorizons.Builder.Props
private static CharacterDialogueTree MakeConversationZone(GameObject planetGO, Sector sector, PropModule.DialogueInfo info, IModHelper mod) private static CharacterDialogueTree MakeConversationZone(GameObject planetGO, Sector sector, PropModule.DialogueInfo info, IModHelper mod)
{ {
GameObject conversationZone = new GameObject("ConversationZone"); var conversationZone = new GameObject("ConversationZone");
conversationZone.SetActive(false); conversationZone.SetActive(false);
conversationZone.layer = LayerMask.NameToLayer("Interactible"); conversationZone.layer = LayerMask.NameToLayer("Interactible");
@ -88,10 +117,11 @@ namespace NewHorizons.Builder.Props
var dialogueTree = conversationZone.AddComponent<CharacterDialogueTree>(); var dialogueTree = conversationZone.AddComponent<CharacterDialogueTree>();
var xml = File.ReadAllText(Path.Combine(mod.Manifest.ModFolderPath, info.xmlFile)); var xml = File.ReadAllText(Path.Combine(mod.Manifest.ModFolderPath, info.xmlFile));
var text = new TextAsset(xml); var text = new TextAsset(xml)
{
// Text assets need a name to be used with VoiceMod // Text assets need a name to be used with VoiceMod
text.name = Path.GetFileNameWithoutExtension(info.xmlFile); name = Path.GetFileNameWithoutExtension(info.xmlFile)
};
dialogueTree.SetTextXml(text); dialogueTree.SetTextXml(text);
AddTranslation(xml); AddTranslation(xml);
@ -146,7 +176,7 @@ namespace NewHorizons.Builder.Props
if (info.lookAtRadius > 0) if (info.lookAtRadius > 0)
{ {
GameObject playerTrackingZone = new GameObject("PlayerTrackingZone"); var playerTrackingZone = new GameObject("PlayerTrackingZone");
playerTrackingZone.SetActive(false); playerTrackingZone.SetActive(false);
playerTrackingZone.layer = LayerMask.NameToLayer("BasicEffectVolume"); playerTrackingZone.layer = LayerMask.NameToLayer("BasicEffectVolume");
@ -194,22 +224,22 @@ namespace NewHorizons.Builder.Props
private static void AddTranslation(string xml) private static void AddTranslation(string xml)
{ {
XmlDocument xmlDocument = new XmlDocument(); var xmlDocument = new XmlDocument();
xmlDocument.LoadXml(xml); xmlDocument.LoadXml(xml);
XmlNode xmlNode = xmlDocument.SelectSingleNode("DialogueTree"); var xmlNode = xmlDocument.SelectSingleNode("DialogueTree");
XmlNodeList xmlNodeList = xmlNode.SelectNodes("DialogueNode"); var xmlNodeList = xmlNode.SelectNodes("DialogueNode");
string characterName = xmlNode.SelectSingleNode("NameField").InnerText; string characterName = xmlNode.SelectSingleNode("NameField").InnerText;
TranslationHandler.AddDialogue(characterName); TranslationHandler.AddDialogue(characterName);
foreach (object obj in xmlNodeList) foreach (object obj in xmlNodeList)
{ {
XmlNode xmlNode2 = (XmlNode)obj; var xmlNode2 = (XmlNode)obj;
var name = xmlNode2.SelectSingleNode("Name").InnerText; var name = xmlNode2.SelectSingleNode("Name").InnerText;
XmlNodeList xmlText = xmlNode2.SelectNodes("Dialogue/Page"); var xmlText = xmlNode2.SelectNodes("Dialogue/Page");
foreach (object page in xmlText) foreach (object page in xmlText)
{ {
XmlNode pageData = (XmlNode)page; var pageData = (XmlNode)page;
var text = pageData.InnerText; var text = pageData.InnerText;
// The text is trimmed in DialogueText constructor (_listTextBlocks), so we also need to trim it for the key // The text is trimmed in DialogueText constructor (_listTextBlocks), so we also need to trim it for the key
TranslationHandler.AddDialogue(text, true, name); TranslationHandler.AddDialogue(text, true, name);
@ -218,7 +248,7 @@ namespace NewHorizons.Builder.Props
xmlText = xmlNode2.SelectNodes("DialogueOptionsList/DialogueOption/Text"); xmlText = xmlNode2.SelectNodes("DialogueOptionsList/DialogueOption/Text");
foreach (object option in xmlText) foreach (object option in xmlText)
{ {
XmlNode optionData = (XmlNode)option; var optionData = (XmlNode)option;
var text = optionData.InnerText; var text = optionData.InnerText;
// The text is trimmed in CharacterDialogueTree.LoadXml, so we also need to trim it for the key // The text is trimmed in CharacterDialogueTree.LoadXml, so we also need to trim it for the key
TranslationHandler.AddDialogue(text, true, characterName, name); TranslationHandler.AddDialogue(text, true, characterName, name);

View File

@ -450,6 +450,16 @@ namespace NewHorizons.External.Modules
/// Relative path to the xml file defining the dialogue. /// Relative path to the xml file defining the dialogue.
/// </summary> /// </summary>
public string xmlFile; public string xmlFile;
/// <summary>
/// Optionally rename the dialogue object. The remote trigger volume will be renamed to have this as a prefix.
/// </summary>
public string rename;
/// <summary>
/// Optionally set the parent object that the dialogue and remote trigger will be attached to
/// </summary>
public string parentPath;
} }
[JsonObject] [JsonObject]