Ejemplo n.º 1
0
        /// <summary>
        /// Gets the entrytaglocal string (localized version) of a dialogue entry.
        /// </summary>
        /// <param name="conversationID">Dialogue entry's conversation.</param>
        /// <param name="dialogueEntryID">Dialogue entry.</param>
        /// <param name="entrytagFormat">Entrytag format.</param>
        /// <returns>Localized entrytag.</returns>
        public string GetEntrytaglocal(int conversationID, int dialogueEntryID, EntrytagFormat entrytagFormat)
        {
            var conversation = GetConversation(conversationID);
            var entry        = (conversation != null) ? conversation.GetDialogueEntry(dialogueEntryID) : null;

            return(GetEntrytaglocal(conversation, entry, entrytagFormat));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Initializes a new ConversationModel.
        /// </summary>
        /// <param name="database">The database to use.</param>
        /// <param name="title">The title of the conversation in the database.</param>
        /// <param name="actor">Actor.</param>
        /// <param name="conversant">Conversant.</param>
        /// <param name="allowLuaExceptions">If set to <c>true</c> allow Lua exceptions.</param>
        /// <param name="isDialogueEntryValid">Is dialogue entry valid.</param>
        /// <param name="initialDialogueEntryID">Initial dialogue entry ID (-1 to start at beginning).</param>
        /// <param name="stopAtFirstValid">If set to <c>true</c> stop at first valid link from the initial entry.</param>
        public ConversationModel(DialogueDatabase database, string title, Transform actor, Transform conversant, 
		                         bool allowLuaExceptions, IsDialogueEntryValidDelegate isDialogueEntryValid,
		                         int initialDialogueEntryID = -1, bool stopAtFirstValid = false)
        {
            this.allowLuaExceptions = allowLuaExceptions;
            this.database = database;
            this.IsDialogueEntryValid = isDialogueEntryValid;
            DisplaySettings displaySettings = DialogueManager.DisplaySettings;
            if (displaySettings != null) {
                if (displaySettings.cameraSettings != null) entrytagFormat = displaySettings.cameraSettings.entrytagFormat;
                if (displaySettings.inputSettings != null) {
                    emTagForOldResponses = displaySettings.inputSettings.emTagForOldResponses;
                    includeInvalidEntries = displaySettings.inputSettings.includeInvalidEntries;
                }
            }
            Conversation conversation = database.GetConversation(title);
            if (conversation != null) {
                SetParticipants(conversation, actor, conversant);
                if (initialDialogueEntryID == -1) {
                    FirstState = GetState(conversation.GetFirstDialogueEntry(), true, stopAtFirstValid);
                    FixFirstStateSequence();
                } else {
                    FirstState = GetState(conversation.GetDialogueEntry(initialDialogueEntryID), true, stopAtFirstValid);
                }
            } else {
                FirstState = null;
                if (DialogueDebug.LogErrors) Debug.LogWarning(string.Format("{0}: Conversation '{1}' not found in database.", new System.Object[] { DialogueDebug.Prefix, title }));
            }
        }
Ejemplo n.º 3
0
        private void DrawExportSection()
        {
            EditorWindowTools.StartIndentedSection();
            EditorGUILayout.BeginVertical(GroupBoxStyle);
            EditorGUILayout.HelpBox("Use this feature to export your database to CSV or Chat Mapper XML format.\nIf exporting to Chat Mapper, you must also prepare a Chat Mapper template project that contains all the fields defined in this database. You can use the Dialogue System Chat Mapper template project as a base.", MessageType.None);
            exportActors        = EditorGUILayout.Toggle("Export Actors", exportActors);
            exportItems         = EditorGUILayout.Toggle("Export Items/Quests", exportItems);
            exportLocations     = EditorGUILayout.Toggle("Export Locations", exportLocations);
            exportVariables     = EditorGUILayout.Toggle("Export Variables", exportVariables);
            exportConversations = EditorGUILayout.Toggle("Export Conversations", exportConversations);
            entrytagFormat      = (EntrytagFormat)EditorGUILayout.EnumPopup("Entrytag Format", entrytagFormat, GUILayout.Width(400));
            EditorGUILayout.BeginHorizontal();
            exportFormat = (ExportFormat)EditorGUILayout.EnumPopup("Format", exportFormat, GUILayout.Width(280));
            GUILayout.FlexibleSpace();
            if (GUILayout.Button("Export...", GUILayout.Width(100)))
            {
                switch (exportFormat)
                {
                case ExportFormat.ChatMapperXML:
                    TryExportToChatMapperXML();
                    break;

                case ExportFormat.CSV:
                    TryExportToCSV();
                    break;

                case ExportFormat.VoiceoverScript:
                    TryExportToVoiceoverScript();
                    break;
                }
            }
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.EndVertical();
            EditorWindowTools.EndIndentedSection();
        }
Ejemplo n.º 4
0
        public string GetEntrytag(Conversation conversation, DialogueEntry entry, EntrytagFormat entrytagFormat)
        {
            if (conversation == null || entry == null)
            {
                return(InvalidEntrytag);
            }
            Actor actor = null;
            Regex regex = new Regex("[;,\'\"\t\r\n\\/ ]");

            switch (entrytagFormat)
            {
            case EntrytagFormat.ActorName_ConversationID_EntryID:
                actor = GetActor(entry.ActorID);
                if (actor == null)
                {
                    return(InvalidEntrytag);
                }
                return(string.Format("{0}_{1}_{2}", regex.Replace(actor.Name, "_"), conversation.id, entry.id));

            case EntrytagFormat.ConversationTitle_EntryID:
                return(string.Format("{0}_{1}", regex.Replace(conversation.Title, "_"), entry.id));

            case EntrytagFormat.ActorNameLineNumber:
                actor = GetActor(entry.ActorID);
                if (actor == null)
                {
                    return(InvalidEntrytag);
                }
                int lineNumber = (conversation.id * 500) + entry.id;
                return(string.Format("{0}{1}", new Regex("[,\"\t\r\n\\/<>?]").Replace(actor.Name, "_"), lineNumber));

            default:
                return(InvalidEntrytag);
            }
        }
Ejemplo n.º 5
0
        private static void ExportDialogueEntries(DialogueDatabase database, EntrytagFormat entrytagFormat, StreamWriter file)
        {
            // Generate list of all fields:
            List <Field> allFields = new List <Field>();

            foreach (var conversation in database.conversations)
            {
                foreach (var entry in conversation.dialogueEntries)
                {
                    foreach (var field in entry.fields)
                    {
                        if (allFields.Find(f => string.Equals(f.title, field.title)) == null)
                        {
                            allFields.Add(field);
                        }
                    }
                }
            }

            List <string> orderedFields = new List <string>
            {
                "Title", "Actor", "Conversant", "Menu Text", "Dialogue Text", "Sequence"
            };

            // Export header: (note: decided to omit some unused values)
            file.WriteLine("DialogueEntries");
            StringBuilder titles = new StringBuilder("entrytag,ConvID,ID,Actor,Conversant,Title,MenuText,DialogueText,IsGroup,FalseConditionAction,ConditionPriority,Conditions,Script,Sequence");
            StringBuilder types  = new StringBuilder("Text,Number,Number,Number,Number,Text,Text,Text,Boolean,Special,Special,Text,Text,Text");

            foreach (var field in allFields)
            {
                if (!orderedFields.Contains(field.title))
                {
                    titles.AppendFormat(",{0}", CleanField(field.title));
                    types.AppendFormat(",{0}", field.type.ToString());
                }
            }
            file.WriteLine(titles.ToString());
            file.WriteLine(types.ToString());

            // Export all assets:
            foreach (var conversation in database.conversations)
            {
                foreach (var entry in conversation.dialogueEntries)
                {
                    StringBuilder sb = new StringBuilder();
                    sb.AppendFormat("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13}",
                                    CleanField(database.GetEntrytag(conversation, entry, entrytagFormat)),
                                    entry.conversationID, entry.id,
                                    entry.ActorID, entry.ConversantID, CleanField(entry.Title),
                                    CleanField(entry.DefaultMenuText), CleanField(entry.DefaultDialogueText),
                                    entry.isGroup, entry.falseConditionAction,
                                    entry.conditionPriority, CleanField(entry.conditionsString),
                                    CleanField(entry.userScript), CleanField(entry.Sequence));
                    AppendFields(sb, allFields, entry.fields, orderedFields);
                    file.WriteLine(sb.ToString());
                }
            }
        }
 /// <summary>
 /// The main export method. Exports a voiceover script to a CSV file.
 /// </summary>
 /// <param name="database">Source database.</param>
 /// <param name="filename">Target CSV filename.</param>
 /// <param name="exportActors">If set to <c>true</c> export actors.</param>
 public static void Export(DialogueDatabase database, string filename, bool exportActors, EntrytagFormat entrytagFormat)
 {
     using (StreamWriter file = new StreamWriter(filename, false, Encoding.UTF8)) {
         ExportDatabaseProperties(database, file);
         if (exportActors) ExportActors(database, file);
         ExportConversations(database, entrytagFormat, file);
     }
 }
Ejemplo n.º 7
0
        /// <summary>
        /// Gets the entrytag string of a dialogue entry.
        /// </summary>
        /// <param name="conversation">Dialogue entry's conversation.</param>
        /// <param name="entry">Dialogue entry.</param>
        /// <param name="entrytagFormat">Entrytag format.</param>
        /// <returns>Entrytag.</returns>
        public string GetEntrytag(Conversation conversation, DialogueEntry entry, EntrytagFormat entrytagFormat)
        {
            if (conversation == null || entry == null)
            {
                return(InvalidEntrytag);
            }
            Actor actor = null;
            Regex regex = new Regex("[;:,!\'\"\t\r\n\\/\\?\\[\\] ]");

            switch (entrytagFormat)
            {
            case EntrytagFormat.ActorName_ConversationID_EntryID:
                actor = GetActor(entry.ActorID);
                if (actor == null)
                {
                    return(InvalidEntrytag);
                }
                return(string.Format("{0}_{1}_{2}", regex.Replace(actor.Name, "_"), conversation.id, entry.id));

            case EntrytagFormat.ConversationTitle_EntryID:
                return(string.Format("{0}_{1}", regex.Replace(conversation.Title, "_"), entry.id));

            case EntrytagFormat.ActorNameLineNumber:
                actor = GetActor(entry.ActorID);
                if (actor == null)
                {
                    return(InvalidEntrytag);
                }
                int lineNumber = (conversation.id * 500) + entry.id;
                return(string.Format("{0}{1}", new Regex("[,\"\t\r\n\\/<>?]").Replace(actor.Name, "_"), lineNumber));

            case EntrytagFormat.ConversationID_ActorName_EntryID:
                actor = GetActor(entry.ActorID);
                if (actor == null)
                {
                    return(InvalidEntrytag);
                }
                return(string.Format("{0}_{1}_{2}", conversation.id, regex.Replace(actor.Name, "_"), entry.id));

            case EntrytagFormat.ActorName_ConversationTitle_EntryDescriptor:
                actor = GetActor(entry.ActorID);
                if (actor == null)
                {
                    return(InvalidEntrytag);
                }
                var entryDesc = !string.IsNullOrEmpty(entry.Title) ? entry.Title
                        : (!string.IsNullOrEmpty(entry.currentMenuText) ? entry.currentMenuText : entry.id.ToString());
                return(string.Format("{0}_{1}_{2}", regex.Replace(actor.Name, "_"), regex.Replace(conversation.Title, "_"), regex.Replace(entryDesc, "_")));

            case EntrytagFormat.VoiceOverFile:
                return((entry == null) ? InvalidEntrytag : Field.LookupValue(entry.fields, VoiceOverFileFieldName));

            default:
                return(InvalidEntrytag);
            }
        }
Ejemplo n.º 8
0
 private void OnGUI()
 {
     EditorGUILayout.HelpBox("This tool uses RT-Voice to generate and save audio files for the dialogue entries in a dialogue database.", MessageType.Info);
     m_database       = EditorGUILayout.ObjectField("Database", m_database, typeof(DialogueDatabase), false) as DialogueDatabase;
     m_entrytagFormat = (EntrytagFormat)EditorGUILayout.EnumPopup("Entrytag Format", m_entrytagFormat);
     EditorGUI.BeginDisabledGroup(m_database == null);
     if (GUILayout.Button("Save Files..."))
     {
         SaveFiles();
     }
     EditorGUI.EndDisabledGroup();
 }
Ejemplo n.º 9
0
        /// <summary>
        /// Initializes a new ConversationModel.
        /// </summary>
        /// <param name="database">The database to use.</param>
        /// <param name="title">The title of the conversation in the database.</param>
        /// <param name="actor">Actor.</param>
        /// <param name="conversant">Conversant.</param>
        /// <param name="allowLuaExceptions">If set to <c>true</c> allow Lua exceptions.</param>
        /// <param name="isDialogueEntryValid">Is dialogue entry valid.</param>
        /// <param name="initialDialogueEntryID">Initial dialogue entry ID (-1 to start at beginning).</param>
        /// <param name="stopAtFirstValid">If set to <c>true</c> stop at first valid link from the initial entry.</param>
        /// <param name="skipExecution">IF set to <c>true</c>, doesn't run the Lua Script or OnExecute event on the initial entry.</param>
        public ConversationModel(DialogueDatabase database, string title, Transform actor, Transform conversant,
                                 bool allowLuaExceptions, IsDialogueEntryValidDelegate isDialogueEntryValid,
                                 int initialDialogueEntryID = -1, bool stopAtFirstValid = false, bool skipExecution = false)
        {
            this.m_allowLuaExceptions = allowLuaExceptions;
            this.m_database           = database;
            this.isDialogueEntryValid = isDialogueEntryValid;
            DisplaySettings displaySettings = DialogueManager.displaySettings;

            if (displaySettings != null)
            {
                if (displaySettings.cameraSettings != null)
                {
                    m_entrytagFormat = displaySettings.cameraSettings.entrytagFormat;
                }
                if (displaySettings.inputSettings != null)
                {
                    m_emTagForOldResponses     = displaySettings.inputSettings.emTagForOldResponses;
                    m_emTagForInvalidResponses = displaySettings.inputSettings.emTagForInvalidResponses;
                    m_includeInvalidEntries    = displaySettings.GetIncludeInvalidEntries();
                }
            }
            Conversation conversation = database.GetConversation(title);

            if (conversation != null)
            {
                SetParticipants(conversation, actor, conversant);
                if (initialDialogueEntryID == -1)
                {
                    firstState = GetState(conversation.GetFirstDialogueEntry(), true, stopAtFirstValid, skipExecution);
                    FixFirstStateSequence();
                }
                else
                {
                    firstState = GetState(conversation.GetDialogueEntry(initialDialogueEntryID), true, stopAtFirstValid, skipExecution);
                }
            }
            else
            {
                firstState = null;
                if (DialogueDebug.logErrors)
                {
                    Debug.LogWarning(string.Format("{0}: Conversation '{1}' not found in database.", new System.Object[] { DialogueDebug.Prefix, title }));
                }
            }
        }
        private static void ExportConversations(DialogueDatabase database, EntrytagFormat entrytagFormat, StreamWriter file)
        {
            file.WriteLine(string.Empty);
            file.WriteLine("---Conversations---");

            // Find all languages: (TO BE IMPLEMENTED LATER)
            //List<string> otherDialogueText = new List<string>();
            //foreach (var conversation in database.conversations) {
            //	foreach (var entry in conversation.dialogueEntries) {
            //		foreach (var field in entry.fields) {
            //		}
            //	}
            //}

            // Cache actor names:
            Dictionary <int, string> actorNames = new Dictionary <int, string>();

            // Export all conversations:
            foreach (var conversation in database.conversations)
            {
                file.WriteLine(string.Empty);
                file.WriteLine(string.Format("Conversation {0},{1}", conversation.id, CleanField(conversation.Title)));
                file.WriteLine(string.Format("Description,{0}", CleanField(conversation.Description)));
                StringBuilder sb = new StringBuilder("entrytag,Actor,Dialogue Text");
                //foreach (var fieldTitle in otherDialogueText) {
                //	sb.AppendFormat(",{0}", CleanField(fieldTitle));
                //}
                file.WriteLine(sb.ToString());
                foreach (var entry in conversation.dialogueEntries)
                {
                    if (entry.id > 0)
                    {
                        if (!actorNames.ContainsKey(entry.ActorID))
                        {
                            Actor actor = database.GetActor(entry.ActorID);
                            actorNames.Add(entry.ActorID, (actor != null) ? CleanField(actor.Name) : "ActorNotFound");
                        }
                        string actorName = actorNames[entry.ActorID];
                        string entrytag  = database.GetEntrytag(conversation, entry, entrytagFormat);
                        string lineText  = CleanField(entry.SubtitleText);
                        file.WriteLine(string.Format("{0},{1},{2}", entrytag, actorName, lineText));
                    }
                }
            }
        }
        private static void ExportConversations(DialogueDatabase database, EntrytagFormat entrytagFormat, StreamWriter file)
        {
            file.WriteLine(string.Empty);
            file.WriteLine("---Conversations---");

            // Find all languages: (TO BE IMPLEMENTED LATER)
            //List<string> otherDialogueText = new List<string>();
            //foreach (var conversation in database.conversations) {
            //	foreach (var entry in conversation.dialogueEntries) {
            //		foreach (var field in entry.fields) {
            //		}
            //	}
            //}

            // Cache actor names:
            Dictionary<int, string> actorNames = new Dictionary<int, string>();

            // Export all conversations:
            foreach (var conversation in database.conversations) {
                file.WriteLine(string.Empty);
                file.WriteLine(string.Format("Conversation {0},{1}", conversation.id, CleanField(conversation.Title)));
                file.WriteLine(string.Format("Description,{0}", CleanField(conversation.Description)));
                StringBuilder sb = new StringBuilder("entrytag,Actor,Dialogue Text");
                //foreach (var fieldTitle in otherDialogueText) {
                //	sb.AppendFormat(",{0}", CleanField(fieldTitle));
                //}
                file.WriteLine(sb.ToString());
                foreach (var entry in conversation.dialogueEntries) {
                    if (entry.id > 0) {
                        if (!actorNames.ContainsKey(entry.ActorID)) {
                            Actor actor = database.GetActor(entry.ActorID);
                            actorNames.Add(entry.ActorID, (actor != null) ? CleanField(actor.Name) : "ActorNotFound");
                        }
                        string actorName = actorNames[entry.ActorID];
                        string entrytag = database.GetEntrytag(conversation, entry, entrytagFormat);
                        string lineText = CleanField(entry.SubtitleText);
                        file.WriteLine(string.Format("{0},{1},{2}", entrytag, actorName, lineText));
                    }
                }
            }
        }
Ejemplo n.º 12
0
        private void OnEnable()
        {
            titleContent.text = "Save Audio";
            if (m_database == null)
            {
                m_database = EditorTools.FindInitialDatabase();
            }
            var dsc = FindObjectOfType <DialogueSystemController>();

            if (dsc != null && dsc.displaySettings != null)
            {
                if (dsc.displaySettings.cameraSettings != null)
                {
                    m_entrytagFormat = dsc.displaySettings.cameraSettings.entrytagFormat;
                }
                if (dsc.displaySettings.localizationSettings != null && string.IsNullOrEmpty(m_languageCode))
                {
                    m_languageCode = dsc.displaySettings.localizationSettings.language;
                }
            }
        }
Ejemplo n.º 13
0
 public static void Export(DialogueDatabase database, string filename, bool exportActors, bool exportItems,
                           bool exportLocations, bool exportVariables, bool exportConversations,
                           bool exportConversationsAfterEntries, EntrytagFormat entrytagFormat)
 {
     using (StreamWriter file = new StreamWriter(filename, false, Encoding.UTF8))
     {
         ExportDatabaseProperties(database, file);
         if (exportActors)
         {
             ExportAssets <Actor>("Actors", database.actors, CustomActorHeader, CustomActorValues, false, file);
         }
         if (exportItems)
         {
             ExportAssets <Item>("Items", database.items, null, null, false, file);
         }
         if (exportLocations)
         {
             ExportAssets <Location>("Locations", database.locations, null, null, false, file);
         }
         if (exportVariables)
         {
             ExportAssets <Variable>("Variables", database.variables, CustomVariableHeader, CustomVariableValues, true, file);
         }
         if (exportConversations)
         {
             if (!exportConversationsAfterEntries)
             {
                 ExportAssets <Conversation>("Conversations", database.conversations, null, null, false, file);
             }
             ExportDialogueEntries(database, entrytagFormat, file);
             ExportLinks(database, file);
             if (exportConversationsAfterEntries)
             {
                 ExportAssets <Conversation>("Conversations", database.conversations, null, null, false, file);
             }
         }
     }
 }
Ejemplo n.º 14
0
        /// <summary>
        /// Initializes a new ConversationModel.
        /// </summary>
        /// <param name='database'>
        /// The database to use.
        /// </param>
        /// <param name='title'>
        /// The title of the conversation in the database.
        /// </param>
        /// <param name='actor'>
        /// Actor.
        /// </param>
        /// <param name='conversant'>
        /// Conversant.
        /// </param>
        public ConversationModel(DialogueDatabase database, string title, Transform actor, Transform conversant,
                                 bool allowLuaExceptions, IsDialogueEntryValidDelegate isDialogueEntryValid)
        {
            this.allowLuaExceptions   = allowLuaExceptions;
            this.database             = database;
            this.IsDialogueEntryValid = isDialogueEntryValid;
            Conversation conversation = database.GetConversation(title);

            if (conversation != null)
            {
                SetParticipants(conversation, actor, conversant);
                FirstState = GetState(conversation.GetFirstDialogueEntry());
                FixFirstStateSequence();
            }
            else
            {
                FirstState = null;
                if (DialogueDebug.LogErrors)
                {
                    Debug.LogWarning(string.Format("{0}: Conversation '{1}' not found in database.", new System.Object[] { DialogueDebug.Prefix, title }));
                }
            }
            DisplaySettings displaySettings = DialogueManager.DisplaySettings;

            if (displaySettings != null)
            {
                if (displaySettings.cameraSettings != null)
                {
                    entrytagFormat = displaySettings.cameraSettings.entrytagFormat;
                }
                if (displaySettings.inputSettings != null)
                {
                    emTagForOldResponses = displaySettings.inputSettings.emTagForOldResponses;
                }
            }
        }
 private void DrawExportSection()
 {
     EditorWindowTools.StartIndentedSection();
     EditorGUILayout.BeginVertical(GroupBoxStyle);
     EditorGUILayout.HelpBox("Use this feature to export your database to CSV or Chat Mapper XML format.\nIf exporting to Chat Mapper, you must also prepare a Chat Mapper template project that contains all the fields defined in this database. You can use the Dialogue System Chat Mapper template project as a base.", MessageType.None);
     exportActors = EditorGUILayout.Toggle("Export Actors", exportActors);
     exportItems = EditorGUILayout.Toggle("Export Items/Quests", exportItems);
     exportLocations = EditorGUILayout.Toggle("Export Locations", exportLocations);
     exportVariables = EditorGUILayout.Toggle("Export Variables", exportVariables);
     exportConversations = EditorGUILayout.Toggle("Export Conversations", exportConversations);
     entrytagFormat = (EntrytagFormat) EditorGUILayout.EnumPopup("Entrytag Format", entrytagFormat, GUILayout.Width(400));
     EditorGUILayout.BeginHorizontal();
     exportFormat = (ExportFormat) EditorGUILayout.EnumPopup("Format", exportFormat, GUILayout.Width(280));
     GUILayout.FlexibleSpace();
     if (GUILayout.Button("Export...", GUILayout.Width (100))) {
         switch (exportFormat) {
         case ExportFormat.ChatMapperXML:
             TryExportToChatMapperXML();
             break;
         case ExportFormat.CSV:
             TryExportToCSV();
             break;
         case ExportFormat.VoiceoverScript:
             TryExportToVoiceoverScript();
             break;
         }
     }
     EditorGUILayout.EndHorizontal();
     EditorGUILayout.EndVertical();
     EditorWindowTools.EndIndentedSection();
 }
        private static void ExportConversations(DialogueDatabase database, string language, EntrytagFormat entrytagFormat, StreamWriter file)
        {
            file.WriteLine(string.Empty);
            file.WriteLine("---Conversations---");

            // Cache actor names:
            Dictionary <int, string> actorNames = new Dictionary <int, string>();

            // Export all conversations:
            foreach (var conversation in database.conversations)
            {
                file.WriteLine(string.Empty);
                file.WriteLine(string.Format("Conversation {0},{1}", conversation.id, CleanField(conversation.Title)));
                file.WriteLine(string.Format("Description,{0}", CleanField(conversation.Description)));
                StringBuilder sb = new StringBuilder("entrytag,Actor,");
                sb.Append(string.IsNullOrEmpty(language) ? "Dialogue Text" : CleanField(language));
                file.WriteLine(sb.ToString());
                foreach (var entry in conversation.dialogueEntries)
                {
                    if (entry.id > 0)
                    {
                        sb = new StringBuilder();
                        if (!actorNames.ContainsKey(entry.ActorID))
                        {
                            Actor actor = database.GetActor(entry.ActorID);
                            actorNames.Add(entry.ActorID, (actor != null) ? CleanField(actor.Name) : "ActorNotFound");
                        }
                        string actorName = actorNames[entry.ActorID];
                        string entrytag  = database.GetEntrytag(conversation, entry, entrytagFormat);
                        var    lineText  = string.IsNullOrEmpty(language) ? entry.subtitleText : Field.LookupValue(entry.fields, language);
                        sb.AppendFormat("{0},{1},{2}", CleanField(entrytag), CleanField(actorName), CleanField(lineText));
                        file.WriteLine(sb.ToString());
                    }
                }
            }
        }
        private static void ExportFile(DialogueDatabase database, string language, string baseFilename, bool exportActors, EntrytagFormat entrytagFormat, EncodingType encodingType)
        {
            var filename = string.IsNullOrEmpty(language) ? baseFilename
                : Path.GetDirectoryName(baseFilename) + "/" + Path.GetFileNameWithoutExtension(baseFilename) + "_" + language + ".csv";

            using (StreamWriter file = new StreamWriter(filename, false, EncodingTypeTools.GetEncoding(encodingType)))
            {
                ExportDatabaseProperties(database, file);
                if (exportActors)
                {
                    ExportActors(database, file);
                }
                ExportConversations(database, language, entrytagFormat, file);
            }
        }
        /// <summary>
        /// The main export method. Exports voiceover scripts to a CSV file for each language.
        /// </summary>
        /// <param name="database">Source database.</param>
        /// <param name="filename">Target CSV filename.</param>
        /// <param name="exportActors">If set to <c>true</c> export actors.</param>
        public static void Export(DialogueDatabase database, string filename, bool exportActors, EntrytagFormat entrytagFormat, EncodingType encodingType)
        {
            if (database == null || string.IsNullOrEmpty(filename))
            {
                return;
            }
            var otherLanguages = FindOtherLanguages(database);

            ExportFile(database, string.Empty, filename, exportActors, entrytagFormat, encodingType);
            foreach (var language in otherLanguages)
            {
                ExportFile(database, language, filename, exportActors, entrytagFormat, encodingType);
            }
        }
Ejemplo n.º 19
0
 /// <summary>
 /// The main export method. Exports a database to a CSV file.
 /// </summary>
 /// <param name="database">Source database.</param>
 /// <param name="filename">Target CSV filename.</param>
 /// <param name="exportActors">If set to <c>true</c> export actors.</param>
 /// <param name="exportItems">If set to <c>true</c> export items.</param>
 /// <param name="exportLocations">If set to <c>true</c> export locations.</param>
 /// <param name="exportVariables">If set to <c>true</c> export variables.</param>
 /// <param name="exportConversations">If set to <c>true</c> export conversations.</param>
 public static void Export(DialogueDatabase database, string filename, bool exportActors, bool exportItems,
                           bool exportLocations, bool exportVariables, bool exportConversations, EntrytagFormat entrytagFormat)
 {
     Export(database, filename, exportActors, exportItems, exportLocations, exportVariables, exportConversations, false, entrytagFormat);
 }
Ejemplo n.º 20
0
 /// <summary>
 /// Gets the entrytaglocal string (localized version) of a dialogue entry.
 /// </summary>
 /// <param name="conversation">Dialogue entry's conversation.</param>
 /// <param name="entry">Dialogue entry.</param>
 /// <param name="entrytagFormat">Entrytag format.</param>
 /// <returns>Localized entrytag.</returns>
 public string GetEntrytaglocal(Conversation conversation, DialogueEntry entry, EntrytagFormat entrytagFormat)
 {
     return(GetEntrytag(conversation, entry, entrytagFormat) + "_" + Localization.language);
 }
 /// <summary>
 /// The main export method. Exports a voiceover script to a CSV file.
 /// </summary>
 /// <param name="database">Source database.</param>
 /// <param name="filename">Target CSV filename.</param>
 /// <param name="exportActors">If set to <c>true</c> export actors.</param>
 public static void Export(DialogueDatabase database, string filename, bool exportActors, EntrytagFormat entrytagFormat)
 {
     using (StreamWriter file = new StreamWriter(filename, false, Encoding.UTF8)) {
         ExportDatabaseProperties(database, file);
         if (exportActors)
         {
             ExportActors(database, file);
         }
         ExportConversations(database, entrytagFormat, file);
     }
 }
        private void DrawExportSection()
        {
            EditorWindowTools.StartIndentedSection();
            EditorGUILayout.BeginVertical(GroupBoxStyle);
            switch (exportFormat)
            {
            default:
                EditorGUILayout.HelpBox("Use this feature to export your database to external text-based formats.", MessageType.None);
                break;

            case ExportFormat.CSV:
                EditorGUILayout.HelpBox("Use this feature to export your database to external text-based formats.\nYou can import CSV format into spreadsheet programs such as Excel and Google Sheets. To reimport into the Dialogue System, use Tools > Pixel Crushers > Dialogue System > Import > CSV.", MessageType.None);
                break;

            case ExportFormat.ChatMapperXML:
                EditorGUILayout.HelpBox("Use this feature to export your database to external text-based formats.\nIf exporting to Chat Mapper format for import into Chat Mapper, you must also prepare a Chat Mapper template project that contains all the fields defined in this database. You can use the Dialogue System Chat Mapper template project as a base. To reimport into the Dialogue System, use Tools > Pixel Crushers > Dialogue System > Import > Chat Mapper.", MessageType.None);
                break;

            case ExportFormat.LanguageText:
                EditorGUILayout.HelpBox("Use this feature to export your database to external text-based formats.\nThe Language Text format will export a file for each language containing all the localized text for the language. You can use these text dumps to determine which characters your language-specific fonts need to support.", MessageType.None);
                break;

            case ExportFormat.VoiceoverScript:
                EditorGUILayout.HelpBox("Use this feature to export your database to external text-based formats.\nThe voiceover script option will export a separate CSV file for each language that you can use as a guide to record voice actors. Each row specifies the entrytag filename for use with entrytags.", MessageType.None);
                break;
            }
            if (exportFormat != ExportFormat.LanguageText)
            {
                exportActors        = EditorGUILayout.Toggle("Export Actors", exportActors);
                exportItems         = EditorGUILayout.Toggle("Export Items/Quests", exportItems);
                exportLocations     = EditorGUILayout.Toggle("Export Locations", exportLocations);
                exportVariables     = EditorGUILayout.Toggle("Export Variables", exportVariables);
                exportConversations = EditorGUILayout.Toggle("Export Conversations", exportConversations);
                if (exportFormat == ExportFormat.ChatMapperXML)
                {
                    exportCanvasRect = EditorGUILayout.Toggle(new GUIContent("Export Canvas Positions", "Export the positions of dialogue entry nodes in the Dialogue Editor's canvas"), exportCanvasRect);
                }
                if (exportFormat == ExportFormat.CSV)
                {
                    exportConversationsAfterEntries = EditorGUILayout.Toggle(new GUIContent("Convs. After Entries", "Put the Conversations section after the DialogueEntries section in the CSV file. Normally the Conversations section is before."), exportConversationsAfterEntries);
                }
                entrytagFormat = (EntrytagFormat)EditorGUILayout.EnumPopup("Entrytag Format", entrytagFormat, GUILayout.Width(400));
            }
            encodingType = (EncodingType)EditorGUILayout.EnumPopup("Encoding", encodingType, GUILayout.Width(400));
            EditorGUILayout.BeginHorizontal();
            exportFormat = (ExportFormat)EditorGUILayout.EnumPopup("Format", exportFormat, GUILayout.Width(400));
            GUILayout.FlexibleSpace();
            if (GUILayout.Button("Export...", GUILayout.Width(100)))
            {
                switch (exportFormat)
                {
                case ExportFormat.ChatMapperXML:
                    TryExportToChatMapperXML();
                    break;

                case ExportFormat.CSV:
                    TryExportToCSV();
                    break;

                case ExportFormat.VoiceoverScript:
                    TryExportToVoiceoverScript();
                    break;

                case ExportFormat.LanguageText:
                    TryExportToLanguageText();
                    break;
                }
            }
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.EndVertical();
            EditorWindowTools.EndIndentedSection();
        }