Пример #1
0
        public static Dictionary <string, List <SteamVR_PartialInputBindings> > ScanForPartials()
        {
            string[] partialManifestPaths = Directory.GetFiles("Assets/", partialManifestFilename, SearchOption.AllDirectories);
            Dictionary <string, List <SteamVR_PartialInputBindings> > partialBindings = new Dictionary <string, List <SteamVR_PartialInputBindings> >();

            for (int partialIndex = 0; partialIndex < partialManifestPaths.Length; partialIndex++)
            {
                string path     = partialManifestPaths[partialIndex];
                string jsonText = File.ReadAllText(path);

                SteamVR_PartialInputBindings partialBinding = JsonConvert.DeserializeObject <SteamVR_PartialInputBindings>(jsonText);
                partialBinding.path = path;

                if (partialBindings.ContainsKey(partialBinding.name))
                {
                    for (int versionIndex = 0; versionIndex < partialBindings[partialBinding.name].Count; versionIndex++)
                    {
                        if (partialBinding.version < partialBindings[partialBinding.name][versionIndex].version)
                        {
                            partialBindings[partialBinding.name].Insert(versionIndex, partialBinding);
                        }
                    }
                }
                else
                {
                    partialBindings.Add(partialBinding.name, new List <SteamVR_PartialInputBindings>()
                    {
                        partialBinding
                    });
                }
            }

            return(partialBindings);
        }
Пример #2
0
        public static void CreatePartial(string name, int version, bool overwriteOld, bool removeUnused)
        {
            if (SteamVR_Input.actionFile.action_sets.Any(set => set.name == "default"))
            {
                bool confirm = EditorUtility.DisplayDialog("Confirmation",
                                                           "We don't recommend you create a partial binding manifest with an action set named 'default'. There will often be collisions with existing actions. Are you sure you want to continue creating this partial binding manifest?",
                                                           "Create", "Cancel");
                if (confirm == false)
                {
                    return;
                }
            }


            string folderName = "SteamVR_" + SteamVR_Input_ActionFile.GetCodeFriendlyName(name);

            string mainFolderPath    = string.Format("{0}", folderName);
            string versionFolderPath = string.Format("{0}/{1}", folderName, version.ToString());
            string manifestPath      = string.Format("{0}/{1}/{2}", folderName, version.ToString(), partialManifestFilename);

            if (Directory.Exists(mainFolderPath) == false)
            {
                Directory.CreateDirectory(mainFolderPath);
            }

            if (Directory.Exists(versionFolderPath) == false)
            {
                Directory.CreateDirectory(versionFolderPath);
            }


            SteamVR_PartialInputBindings partial = new SteamVR_PartialInputBindings();

            partial.name         = name;
            partial.version      = version;
            partial.overwriteOld = overwriteOld;
            partial.removeUnused = removeUnused;


            string jsonText = JsonConvert.SerializeObject(partial, Formatting.Indented,
                                                          new JsonSerializerSettings {
                NullValueHandling = NullValueHandling.Ignore
            });

            if (File.Exists(manifestPath))
            {
                FileInfo manifestFile = new FileInfo(manifestPath);
                manifestFile.IsReadOnly = false;
            }

            File.WriteAllText(manifestPath, jsonText);

            SteamVR_Input.actionFile.CopyFilesToPath(versionFolderPath, true);

            EditorUtility.RevealInFinder(mainFolderPath);
        }
Пример #3
0
        protected static void ImportPartialBinding(SteamVR_PartialInputBindings partialBinding)
        {
            SteamVR_Input.InitializeFile();
            SteamVR_Input_ActionFile currentActionsFile = SteamVR_Input.actionFile;

            SteamVR_Input_ActionFile newActionsFile =
                ReadJson <SteamVR_Input_ActionFile>(partialBinding.GetActionsPath());

            /*
             * int sets = ImportActionSets(currentActionsFile, newActionsFile);
             * int locs = ImportLocalization(currentActionsFile, newActionsFile, partialBinding);
             * int actions = ImportActions(currentActionsFile, newActionsFile);
             */

            ImportActionSets(currentActionsFile, newActionsFile);
            ImportLocalization(currentActionsFile, newActionsFile, partialBinding);
            ImportActions(currentActionsFile, newActionsFile);

            if (SteamVR_Input.HasFileInMemoryBeenModified())
            {
                SteamVR_Input.actionFile.Save(SteamVR_Input.actionsFilePath);

                Debug.Log("<b>[SteamVR]</b> Saved new actions file: " + SteamVR_Input.actionsFilePath);
            }

            ImportBindings(currentActionsFile, newActionsFile, partialBinding.GetDirectory());

            partialBinding.imported = true;
            partialBinding.Save();

            SteamVR_Input.InitializeFile(true);
            SteamVR_Input_EditorWindow.ReopenWindow();

            //todo: ask first?

            /*string dialogText = string.Format("{0} new action sets, {1} new actions, and {2} new localization strings have been added. Would you like to regenerate SteamVR Input code files?", sets, actions, locs);
             *
             * bool confirm = EditorUtility.DisplayDialog("SteamVR Input", dialogText, "Generate", "Cancel");
             * if (confirm)
             *  SteamVR_Input_Generator.BeginGeneration();
             */

            SteamVR_Input_Generator.BeginGeneration();

            Debug.Log("<b>[SteamVR]</b> Reloaded actions file with additional actions from " + partialBinding.name);
        }
Пример #4
0
        protected static void ConfirmImport(List <SteamVR_PartialInputBindings> partialBindingList)
        {
            SteamVR_PartialInputBindings partial = partialBindingList.First();

            //bool dontAskAgain = EditorPrefs.GetBool(dontAskAgainTemplate, false);

            //todo: implement 'do not ask again'
            string dialogText =
                string.Format(
                    "We've found a partial SteamVR Input binding for '{0}' version '{1}'. Would you like to import it?",
                    partial.name, partial.version);

            bool confirm = EditorUtility.DisplayDialog("SteamVR Input", dialogText, "Import", "Cancel");

            if (confirm)
            {
                bool actionsExists = SteamVR_Input.DoesActionsFileExist();

                if (actionsExists)
                {
                    string mergeDialogText =
                        "You have two options for importing this binding:\n Replace your current action file (delete all your actions)\n Merge the partial action file with your existing actions";
                    bool shouldMerge =
                        EditorUtility.DisplayDialog("SteamVR Input", mergeDialogText, "Merge", "Replace");

                    if (shouldMerge)
                    {
                        ImportPartialBinding(partial);
                    }
                    else
                    {
                        ReplaceBinding(partial);
                    }
                }
                else
                {
                    ReplaceBinding(partial);
                }

                if (partialBindingList.Count > 1)
                {
                    RemoveOldPartialBindings(partialBindingList);
                }
            }
        }
        protected static void ReplaceBinding(SteamVR_PartialInputBindings partialBinding)
        {
            SteamVR_Input.DeleteManifestAndBindings();

            string newActionsFilePath = partialBinding.GetActionsPath();

            if (File.Exists(newActionsFilePath))
            {
                File.Copy(newActionsFilePath, SteamVR_Input.GetActionsFilePath());
            }

            string bindingsFolder = SteamVR_Input.GetActionsFileFolder();

            SteamVR_Input_ActionFile newActionsFile = ReadJson <SteamVR_Input_ActionFile>(SteamVR_Input.GetActionsFilePath());
            string partialBindingDirectory          = partialBinding.GetDirectory();

            foreach (var newDefaultPath in newActionsFile.default_bindings)
            {
                string bindingPath    = Path.Combine(partialBindingDirectory, newDefaultPath.binding_url);
                string newBindingPath = Path.Combine(bindingsFolder, newDefaultPath.binding_url);
                File.Copy(bindingPath, newBindingPath, true);
            }

            partialBinding.imported = true;
            partialBinding.Save();

            SteamVR_Input.InitializeFile(true);
            SteamVR_Input_EditorWindow.ReopenWindow();

            //todo: ask first?

            /*string dialogText = string.Format("{0} new action sets, {1} new actions, and {2} new localization strings have been added. Would you like to regenerate SteamVR Input code files?", sets, actions, locs);
             *
             * bool confirm = EditorUtility.DisplayDialog("SteamVR Input", dialogText, "Generate", "Cancel");
             * if (confirm)
             *  SteamVR_Input_Generator.BeginGeneration();
             */

            SteamVR_Input_Generator.BeginGeneration();

            Debug.Log("<b>[SteamVR Input]</b> Reloaded with new actions from " + partialBinding.name);
        }
        protected static void ConfirmImport(List <SteamVR_PartialInputBindings> partialBindingList)
        {
            SteamVR_PartialInputBindings partial = partialBindingList.First();

            //bool dontAskAgain = EditorPrefs.GetBool(dontAskAgainTemplate, false);

            //todo: implement 'do not ask again'
            string dialogText = string.Format("We've found a partial SteamVR Input binding for '{0}' version '{1}'. Would you like to import it?", partial.name, partial.version);

            bool confirm = EditorUtility.DisplayDialog("SteamVR Input", dialogText, "Import", "Cancel");

            if (confirm)
            {
                ImportPartialBinding(partialBindingList[0]);

                if (partialBindingList.Count > 1)
                {
                    RemoveOldPartialBindings(partialBindingList);
                }
            }
        }
 public static void ProcessPartials(Dictionary <string, List <SteamVR_PartialInputBindings> > partialManifestsDictionary)
 {
     foreach (var partialBindingList in partialManifestsDictionary)
     {
         if (partialBindingList.Value.Count == 1)
         {
             SteamVR_PartialInputBindings partial = partialBindingList.Value[0];
             if (partial.imported == false)
             {
                 ConfirmImport(partialBindingList.Value);
             }
         }
         else
         {
             SteamVR_PartialInputBindings partial = partialBindingList.Value[0];
             if (partial.imported == false)
             {
                 ConfirmImport(partialBindingList.Value);
             }
         }
     }
 }
Пример #8
0
        protected static int ImportLocalization(SteamVR_Input_ActionFile currentActionsFile,
                                                SteamVR_Input_ActionFile newActionsFile, SteamVR_PartialInputBindings partialBinding)
        {
            int count = 0;

            foreach (var newLocalDictionary in newActionsFile.localization)
            {
                string newLanguage = FindLanguageInDictionary(newLocalDictionary);

                if (string.IsNullOrEmpty(newLanguage))
                {
                    Debug.LogError(
                        "<b>[SteamVR Input]</b> Localization entry in partial actions file is missing a language tag: " +
                        partialBinding.path);
                    continue;
                }

                int currentLanguage = -1;
                for (int currentLanguageIndex = 0;
                     currentLanguageIndex < currentActionsFile.localization.Count;
                     currentLanguageIndex++)
                {
                    string language = FindLanguageInDictionary(currentActionsFile.localization[currentLanguageIndex]);
                    if (newLanguage == language)
                    {
                        currentLanguage = currentLanguageIndex;
                        break;
                    }
                }

                if (currentLanguage == -1)
                {
                    Dictionary <string, string> newDictionary = new Dictionary <string, string>();
                    foreach (var element in newLocalDictionary)
                    {
                        newDictionary.Add(element.Key, element.Value);
                        count++;
                    }

                    currentActionsFile.localization.Add(newDictionary);
                }
                else
                {
                    foreach (var element in newLocalDictionary)
                    {
                        Dictionary <string, string> currentDictionary = currentActionsFile.localization[currentLanguage];
                        bool exists = currentDictionary.Any(inCurrent => inCurrent.Key == element.Key);

                        if (exists)
                        {
                            //todo: should we overwrite?
                            currentDictionary[element.Key] = element.Value;
                        }
                        else
                        {
                            currentDictionary.Add(element.Key, element.Value);
                            count++;
                        }
                    }
                }
            }

            return(count);
        }