diff --git a/NewHorizons/Builder/Props/DialogueBuilder.cs b/NewHorizons/Builder/Props/DialogueBuilder.cs index 9893ee85..f4d7006e 100644 --- a/NewHorizons/Builder/Props/DialogueBuilder.cs +++ b/NewHorizons/Builder/Props/DialogueBuilder.cs @@ -13,6 +13,42 @@ namespace NewHorizons.Builder.Props public static class DialogueBuilder { public static void Make(GameObject go, Sector sector, PropModule.DialogueInfo info) + { + var dialogue = MakeConversationZone(go, sector, info); + if (info.remoteVolumePosition != null) MakeRemoteDialogueTrigger(go, sector, info, dialogue); + } + + public static void MakeRemoteDialogueTrigger(GameObject go, Sector sector, PropModule.DialogueInfo info, CharacterDialogueTree dialogue) + { + GameObject conversationTrigger = new GameObject("ConversationTrigger"); + conversationTrigger.SetActive(false); + + var remoteDialogueTrigger = conversationTrigger.AddComponent(); + var boxCollider = conversationTrigger.AddComponent(); + conversationTrigger.AddComponent(); + + remoteDialogueTrigger._listDialogues = new RemoteDialogueTrigger.RemoteDialogueCondition[] + { + new RemoteDialogueTrigger.RemoteDialogueCondition() + { + priority = 1, + dialogue = dialogue, + prereqConditionType = RemoteDialogueTrigger.MultiConditionType.AND, + prereqConditions = new string[]{ }, + onTriggerEnterConditions = new string[]{ } + } + }; + remoteDialogueTrigger._activatedDialogues = new bool[1]; + remoteDialogueTrigger._deactivateTriggerPostConversation = true; + + boxCollider.size = Vector3.one * info.radius / 2f; + + conversationTrigger.transform.parent = sector?.transform ?? go.transform; + conversationTrigger.transform.localPosition = info.remoteVolumePosition; + conversationTrigger.SetActive(true); + } + + public static CharacterDialogueTree MakeConversationZone(GameObject go, Sector sector, PropModule.DialogueInfo info) { GameObject conversationZone = new GameObject("ConversationZone"); conversationZone.SetActive(false); @@ -34,10 +70,11 @@ namespace NewHorizons.Builder.Props dialogueTree.SetTextXml(text); AddTranslation(xml); - - conversationZone.transform.parent = sector.transform; + conversationZone.transform.parent = sector?.transform ?? go.transform; conversationZone.transform.localPosition = info.position; conversationZone.SetActive(true); + + return dialogueTree; } private static void AddTranslation(string xml) diff --git a/NewHorizons/External/PropModule.cs b/NewHorizons/External/PropModule.cs index 02385e41..122e916f 100644 --- a/NewHorizons/External/PropModule.cs +++ b/NewHorizons/External/PropModule.cs @@ -64,6 +64,8 @@ namespace NewHorizons.External public MVector3 position; public float radius; public string xmlFile; + public MVector3 remoteVolumePosition; + public string persistentCondition; } } }