mirror of
https://github.com/Outer-Wilds-New-Horizons/new-horizons.git
synced 2025-12-11 20:15:44 +01:00
Implement #401
This commit is contained in:
parent
01f719dee4
commit
feb22deba1
@ -21,18 +21,47 @@ namespace NewHorizons.Builder.Props
|
||||
var dialogue = MakeConversationZone(go, sector, info, mod.ModHelper);
|
||||
|
||||
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
|
||||
// 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);
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
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)
|
||||
{
|
||||
GameObject conversationZone = new GameObject("ConversationZone");
|
||||
var conversationZone = new GameObject("ConversationZone");
|
||||
conversationZone.SetActive(false);
|
||||
|
||||
conversationZone.layer = LayerMask.NameToLayer("Interactible");
|
||||
@ -88,10 +117,11 @@ namespace NewHorizons.Builder.Props
|
||||
var dialogueTree = conversationZone.AddComponent<CharacterDialogueTree>();
|
||||
|
||||
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.name = Path.GetFileNameWithoutExtension(info.xmlFile);
|
||||
name = Path.GetFileNameWithoutExtension(info.xmlFile)
|
||||
};
|
||||
|
||||
dialogueTree.SetTextXml(text);
|
||||
AddTranslation(xml);
|
||||
@ -146,7 +176,7 @@ namespace NewHorizons.Builder.Props
|
||||
|
||||
if (info.lookAtRadius > 0)
|
||||
{
|
||||
GameObject playerTrackingZone = new GameObject("PlayerTrackingZone");
|
||||
var playerTrackingZone = new GameObject("PlayerTrackingZone");
|
||||
playerTrackingZone.SetActive(false);
|
||||
|
||||
playerTrackingZone.layer = LayerMask.NameToLayer("BasicEffectVolume");
|
||||
@ -194,22 +224,22 @@ namespace NewHorizons.Builder.Props
|
||||
|
||||
private static void AddTranslation(string xml)
|
||||
{
|
||||
XmlDocument xmlDocument = new XmlDocument();
|
||||
var xmlDocument = new XmlDocument();
|
||||
xmlDocument.LoadXml(xml);
|
||||
XmlNode xmlNode = xmlDocument.SelectSingleNode("DialogueTree");
|
||||
XmlNodeList xmlNodeList = xmlNode.SelectNodes("DialogueNode");
|
||||
var xmlNode = xmlDocument.SelectSingleNode("DialogueTree");
|
||||
var xmlNodeList = xmlNode.SelectNodes("DialogueNode");
|
||||
string characterName = xmlNode.SelectSingleNode("NameField").InnerText;
|
||||
TranslationHandler.AddDialogue(characterName);
|
||||
|
||||
foreach (object obj in xmlNodeList)
|
||||
{
|
||||
XmlNode xmlNode2 = (XmlNode)obj;
|
||||
var xmlNode2 = (XmlNode)obj;
|
||||
var name = xmlNode2.SelectSingleNode("Name").InnerText;
|
||||
|
||||
XmlNodeList xmlText = xmlNode2.SelectNodes("Dialogue/Page");
|
||||
var xmlText = xmlNode2.SelectNodes("Dialogue/Page");
|
||||
foreach (object page in xmlText)
|
||||
{
|
||||
XmlNode pageData = (XmlNode)page;
|
||||
var pageData = (XmlNode)page;
|
||||
var text = pageData.InnerText;
|
||||
// The text is trimmed in DialogueText constructor (_listTextBlocks), so we also need to trim it for the key
|
||||
TranslationHandler.AddDialogue(text, true, name);
|
||||
@ -218,7 +248,7 @@ namespace NewHorizons.Builder.Props
|
||||
xmlText = xmlNode2.SelectNodes("DialogueOptionsList/DialogueOption/Text");
|
||||
foreach (object option in xmlText)
|
||||
{
|
||||
XmlNode optionData = (XmlNode)option;
|
||||
var optionData = (XmlNode)option;
|
||||
var text = optionData.InnerText;
|
||||
// The text is trimmed in CharacterDialogueTree.LoadXml, so we also need to trim it for the key
|
||||
TranslationHandler.AddDialogue(text, true, characterName, name);
|
||||
|
||||
10
NewHorizons/External/Modules/PropModule.cs
vendored
10
NewHorizons/External/Modules/PropModule.cs
vendored
@ -450,6 +450,16 @@ namespace NewHorizons.External.Modules
|
||||
/// Relative path to the xml file defining the dialogue.
|
||||
/// </summary>
|
||||
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]
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user