Exemple #1
0
        public static string GenerateTransitionMethods(FlowWindow window)
        {
            var flowData = FlowSystem.GetData();

            var transitions = flowData.windows.Where(w => window.attachItems.Any((item) => item.targetId == w.id) && w.CanCompiled() && !w.IsContainer());

            var result = string.Empty;

            foreach (var each in transitions)
            {
                var className = each.directory;
                var classNameWithNamespace = Tpl.GetNamespace(each) + "." + Tpl.GetDerivedClassName(each);

                result += FlowTemplateGenerator.GenerateWindowLayoutTransitionMethod(window, each, className, classNameWithNamespace);
            }

            // Make FlowDefault() method if exists
            var c = 0;
            var everyPlatformHasUniqueName = false;

            foreach (var attachItem in window.attachItems)
            {
                var attachId = attachItem.targetId;

                var attachedWindow = FlowSystem.GetWindow(attachId);
                var tmp            = UnityEditor.UI.Windows.Plugins.Flow.Flow.IsCompilerTransitionAttachedGeneration(window, attachedWindow);
                if (tmp == true)
                {
                    ++c;
                }
            }

            everyPlatformHasUniqueName = c > 1;

            foreach (var attachItem in window.attachItems)
            {
                var attachId = attachItem.targetId;

                var attachedWindow = FlowSystem.GetWindow(attachId);
                if (attachedWindow.IsShowDefault() == true)
                {
                    result += FlowTemplateGenerator.GenerateWindowLayoutTransitionMethodDefault();
                }

                result += UnityEditor.UI.Windows.Plugins.Flow.Flow.OnCompilerTransitionAttachedGeneration(window, attachedWindow, everyPlatformHasUniqueName);
            }

            // Run addons transition logic
            result += UnityEditor.UI.Windows.Plugins.Flow.Flow.OnCompilerTransitionGeneration(window);

            return(result);
        }
Exemple #2
0
        public static string GenerateTransitionMethods(FlowWindow window)
        {
            var flowData = FlowSystem.GetData();

            var transitions = flowData.windows.Where(w => window.attaches.Contains(w.id) && !w.isDefaultLink && !w.isContainer);

            var result = string.Empty;

            foreach (var each in transitions)
            {
                var className = each.directory;
                var classNameWithNamespace = Tpl.GetNamespace(each) + "." + Tpl.GetDerivedClassName(each);                //GetBaseClassName( each );

                result = result + FlowTemplateGenerator.GenerateWindowLayoutTransitionMethod(className, classNameWithNamespace);
            }

            return(result);
        }
Exemple #3
0
 public static string ReplaceText(string text, Info oldInfo, Info newInfo)
 {
     return(FlowTemplateGenerator.ReplaceText(text, oldInfo, newInfo));
 }
Exemple #4
0
        /*
         * private static bool CompiledInfoIsInvalid( FlowWindow flowWindow ) {
         *
         *      return GetBaseClassName( flowWindow ) != flowWindow.compiledBaseClassName
         || GetNamespace( flowWindow ) != flowWindow.compiledNamespace;
         ||}
         ||
         ||private static void UpdateInheritedClasses( string oldBaseClassName, string newBaseClassName, string oldDerivedClassName, string newDerivedClassName, string oldNamespace, string newNamespace ) {
         ||
         ||     if ( string.IsNullOrEmpty( oldBaseClassName ) || string.IsNullOrEmpty( newBaseClassName ) ) {
         ||
         ||             return;
         ||     }
         ||
         ||     var oldFullClassPath = oldNamespace + oldBaseClassName;
         ||     var newFullClassPath = newNamespace + newBaseClassName;
         ||
         ||     AssetDatabase.StartAssetEditing();
         ||
         ||     try {
         ||
         ||             var scripts =
         ||                     AssetDatabase.FindAssets( "t:MonoScript" )
         ||                             .Select( _ => AssetDatabase.GUIDToAssetPath( _ ) )
         ||                             .Select( _ => AssetDatabase.LoadAssetAtPath( _, typeof( MonoScript ) ) )
         ||                             .OfType<MonoScript>()
         ||                             .Where( _ => _.text.Contains( oldBaseClassName ) || _.text.Contains( oldDerivedClassName ) || _.text.Contains( oldNamespace ) )
         ||                             .Where( _ => _.name != newBaseClassName );
         ||
         ||             foreach ( var each in scripts ) {
         ||
         ||                     var path = AssetDatabase.GetAssetPath( each );
         ||
         ||                     var lines = File.ReadAllLines( path );
         ||
         ||                     var writer = new StreamWriter( path );
         ||
         ||                     foreach ( var line in lines ) {
         ||
         ||                             writer.WriteLine( line.Replace( oldFullClassPath, newFullClassPath )
         ||                                                                       .Replace( oldNamespace, newNamespace )
         ||                                                                       .Replace( oldBaseClassName, newBaseClassName )
         ||                                                                       .Replace( oldDerivedClassName, newDerivedClassName ) );
         ||                     }
         ||
         ||                     writer.Dispose();
         ||             }
         ||     } catch ( Exception e ) { Debug.LogException( e ); }
         ||
         ||     AssetDatabase.StopAssetEditing();
         ||     AssetDatabase.Refresh( ImportAssetOptions.ForceUpdate );
         ||
         ||}
         ||
         ||private static void GenerateUIWindow( string fullpath, FlowWindow window, bool recompile = false ) {
         ||
         ||     var isCompiledInfoInvalid = window.compiled && CompiledInfoIsInvalid( window );
         ||
         ||     if ( window.compiled == false || recompile == true || isCompiledInfoInvalid ) {
         ||
         ||             var baseClassName = GetBaseClassName( window );
         ||             var derivedClassName = GetDerivedClassName( window );
         ||             var classNamespace = GetNamespace( window );
         ||
         ||             var baseClassTemplate = FlowTemplateGenerator.GenerateWindowLayoutBaseClass( baseClassName, classNamespace, GenerateTransitionMethods( window ) );
         ||             var derivedClassTemplate = FlowTemplateGenerator.GenerateWindowLayoutDerivedClass( derivedClassName, baseClassName, classNamespace );
         ||
         #if !UNITY_WEBPLAYER
         ||             var baseClassPath = ( fullpath + "/" + baseClassName + ".cs" ).Replace( "//", "/" );
         ||             var derivedClassPath = ( fullpath + "/" + derivedClassName + ".cs" ).Replace( "//", "/" );
         #endif
         ||
         ||             if ( baseClassTemplate != null && derivedClassTemplate != null ) {
         ||
         ||                     IO.CreateDirectory( fullpath, string.Empty );
         ||                     IO.CreateDirectory( fullpath, FlowDatabase.COMPONENTS_FOLDER );
         ||                     IO.CreateDirectory( fullpath, FlowDatabase.LAYOUT_FOLDER );
         ||                     IO.CreateDirectory( fullpath, FlowDatabase.SCREENS_FOLDER );
         ||
         #if !UNITY_WEBPLAYER
         ||
         ||                     Directory.CreateDirectory( fullpath );
         ||
         ||                     File.WriteAllText( baseClassPath, baseClassTemplate );
         ||
         ||                     if ( !File.Exists( derivedClassPath ) ) {
         ||
         ||                             File.WriteAllText( derivedClassPath, derivedClassTemplate );
         ||
         ||                             AssetDatabase.ImportAsset( derivedClassName );
         ||                     }
         ||
         ||                     AssetDatabase.ImportAsset( baseClassPath );
         ||
         #endif
         ||
         ||             } else {
         ||
         ||                     return;
         ||             }
         ||
         ||             var oldBaseClassName = window.compiledBaseClassName;
         ||             var newBaseClassName = baseClassName;
         ||             var oldDerivedClassName = window.compiledDerivedClassName;
         ||             var newDerivedClassName = derivedClassName;
         ||
         ||             var oldNamespace = window.compiledNamespace;
         ||
         ||             window.compiledBaseClassName = baseClassName;
         ||             window.compiledDerivedClassName = derivedClassName;
         ||             window.compiledNamespace = classNamespace;
         ||
         ||             var newNamespace = window.compiledNamespace;
         ||
         ||             window.compiledDirectory = fullpath;
         ||
         ||             window.compiled = true;
         ||
         ||             AssetDatabase.Refresh( ImportAssetOptions.ForceUpdate );
         ||
         ||             if ( isCompiledInfoInvalid ) {
         ||
         ||                     EditorApplication.delayCall += () => UpdateInheritedClasses( oldBaseClassName, newBaseClassName, oldDerivedClassName, newDerivedClassName, oldNamespace, newNamespace );
         ||             }
         ||     }
         ||
         ||}
         ||
         ||public static void GenerateUI( string pathToData, bool recompile = false, Func<FlowWindow, bool> predicate = null ) {
         ||
         ||     var filename = Path.GetFileName( pathToData );
         ||     var directory = pathToData.Replace( filename, "" );
         ||
         ||     currentProject = Path.GetFileNameWithoutExtension( pathToData );
         ||     var basePath = directory + currentProject;
         ||
         ||     CreateDirectory( basePath, string.Empty );
         ||     CreateDirectory( basePath, FlowDatabase.OTHER_NAME );
         ||
         ||     AssetDatabase.StartAssetEditing();
         ||
         ||     predicate = predicate ?? delegate { return true; };
         ||
         ||     try {
         ||
         ||             foreach ( var each in FlowSystem.GetWindows().Where( _ => !_.isDefaultLink && predicate( _ ) ) ) {
         ||
         ||                     var relativePath = GetRelativePath( each, "/" );
         ||
         ||                     if ( !string.IsNullOrEmpty( each.directory ) ) {
         ||
         ||                             CreateDirectory( basePath, relativePath );
         ||                     }
         ||
         ||                     GenerateUIWindow( basePath + relativePath + "/", each, recompile );
         ||             }
         ||     } catch ( Exception e ) {
         ||
         ||             Debug.LogException( e );
         ||     }
         ||
         ||     AssetDatabase.StopAssetEditing();
         ||     AssetDatabase.Refresh( ImportAssetOptions.ForceUpdate );
         ||
         ||}*/
        #endregion

        private static void GenerateWindow(string newPath, FlowWindow window, bool recompile)
        {
            if (window.compiled == true && recompile == false)
            {
                return;
            }

            var oldPath = window.compiledDirectory;

            var newInfo = new Tpl.Info(Tpl.GetNamespace(window), Tpl.GetDerivedClassName(window), Tpl.GetBaseClassName(window), window.directory);
            var oldInfo = new Tpl.Info(window);

            if (string.IsNullOrEmpty(oldPath) == true)
            {
                oldPath = newPath;
            }

            var path = oldPath;

            if (window.compiled == true && (oldPath != newPath))
            {
                // If window is moving and compiled - just rename

                // Replace in files
                IO.ReplaceInFiles(FlowCompilerSystem.currentProjectDirectory, (file) => {
                    var text = file.text;
                    return(text.Contains(oldInfo.baseNamespace));
                }, (text) => {
                    return(Tpl.ReplaceText(text, oldInfo, newInfo));
                });

                // Rename base class name
                IO.RenameFile(oldPath + oldInfo.baseClassnameFile, oldPath + newInfo.baseClassnameFile);

                // Rename derived class name
                IO.RenameFile(oldPath + oldInfo.classnameFile, oldPath + newInfo.classnameFile);

                // Rename main folder
                IO.RenameDirectory(oldPath, newPath);

                path = newPath;
            }

            // Rebuild without rename
            //Debug.Log(window.title + " :: REBUILD BASE :: " + path);

            IO.CreateDirectory(path, string.Empty);
            IO.CreateDirectory(path, FlowDatabase.COMPONENTS_FOLDER);
            IO.CreateDirectory(path, FlowDatabase.LAYOUT_FOLDER);
            IO.CreateDirectory(path, FlowDatabase.SCREENS_FOLDER);

            var baseClassTemplate    = FlowTemplateGenerator.GenerateWindowLayoutBaseClass(newInfo.baseClassname, newInfo.baseNamespace, Tpl.GenerateTransitionMethods(window));
            var derivedClassTemplate = FlowTemplateGenerator.GenerateWindowLayoutDerivedClass(newInfo.classname, newInfo.baseClassname, newInfo.baseNamespace);

            if (baseClassTemplate != null && derivedClassTemplate != null)
            {
                IO.CreateFile(path, newInfo.baseClassnameFile, baseClassTemplate, rewrite: true);
                IO.CreateFile(path, newInfo.classnameFile, derivedClassTemplate, rewrite: false);
            }

            window.compiledNamespace        = newInfo.baseNamespace;
            window.compiledScreenName       = newInfo.screenName;
            window.compiledBaseClassName    = newInfo.baseClassname;
            window.compiledDerivedClassName = newInfo.classname;

            window.compiledDirectory = path;
            window.compiled          = true;
        }
Exemple #5
0
        private static void GenerateUIWindow(string fullpath, FlowWindow window, bool recompile = false)
        {
            var isCompiledInfoInvalid = window.compiled && CompiledInfoIsInvalid(window);

            if (window.compiled == false || recompile == true || isCompiledInfoInvalid)
            {
                var baseClassName    = GetBaseClassName(window);
                var derivedClassName = GetDerivedClassName(window);
                var classNamespace   = GetNamespace(window);

                var baseClassTemplate    = FlowTemplateGenerator.GenerateWindowLayoutBaseClass(baseClassName, classNamespace, GenerateTransitionMethods(window));
                var derivedClassTemplate = FlowTemplateGenerator.GenerateWindowLayoutDerivedClass(derivedClassName, baseClassName, classNamespace);

                                #if !UNITY_WEBPLAYER
                var baseClassPath    = (fullpath + "/" + baseClassName + ".cs").Replace("//", "/");
                var derivedClassPath = (fullpath + "/" + derivedClassName + ".cs").Replace("//", "/");
                                #endif

                if (baseClassTemplate != null && derivedClassTemplate != null)
                {
                    CreateDirectory(fullpath, string.Empty);
                    CreateDirectory(fullpath, FlowDatabase.COMPONENTS_FOLDER);
                    CreateDirectory(fullpath, FlowDatabase.LAYOUT_FOLDER);
                    CreateDirectory(fullpath, FlowDatabase.SCREENS_FOLDER);

                                        #if !UNITY_WEBPLAYER
                    /*if ( Directory.Exists( window.compiledDirectory ) && fullpath != window.compiledDirectory ) {
                     *
                     *      foreach ( var each in Directory.GetFiles( window.compiledDirectory ) ) {
                     *
                     *              if ( Path.GetFileNameWithoutExtension( each ) != window.compiledDerivedClassName ) {
                     *
                     *                      File.Delete( each );
                     *              } else {
                     *
                     *                      if ( !File.Exists( derivedClassPath ) ) {
                     *
                     *                              File.Move( each, derivedClassPath );
                     *
                     *                              AssetDatabase.ImportAsset( derivedClassName );
                     *                      }
                     *              }
                     *      }
                     *
                     *      Directory.Delete( window.compiledDirectory, recursive: true );
                     * }*/

                    Directory.CreateDirectory(fullpath);

                    File.WriteAllText(baseClassPath, baseClassTemplate);

                    if (!File.Exists(derivedClassPath))
                    {
                        File.WriteAllText(derivedClassPath, derivedClassTemplate);

                        AssetDatabase.ImportAsset(derivedClassName);
                    }

                    AssetDatabase.ImportAsset(baseClassPath);
                                        #endif
                }
                else
                {
                    return;
                }

                var oldBaseClassName    = window.compiledBaseClassName;
                var newBaseClassName    = baseClassName;
                var oldDerivedClassName = window.compiledDerivedClassName;
                var newDerivedClassName = derivedClassName;

                var oldNamespace = window.compiledNamespace;

                window.compiledBaseClassName    = baseClassName;
                window.compiledDerivedClassName = derivedClassName;
                window.compiledNamespace        = classNamespace;

                var newNamespace = window.compiledNamespace;

                window.compiledDirectory = fullpath;

                window.compiled = true;

                AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate);

                if (isCompiledInfoInvalid)
                {
                    EditorApplication.delayCall += () => UpdateInheritedClasses(oldBaseClassName, newBaseClassName, oldDerivedClassName, newDerivedClassName, oldNamespace, newNamespace);
                }
            }
        }