예제 #1
0
        private WFR _WCC_import(WF_Settings settings)
        {
            settings.LOGGER.LogString($"--------------------------------------------------------------------------");
            settings.LOGGER.LogString($"-- WCC_LITE: IMPORTING MODELS pm: {settings.PATCH_MODE}");
            settings.LOGGER.LogString($"--------------------------------------------------------------------------");

            try
            {
                //get all files with specified filter
                string WILDCARD = $"{MODEL_PREFIX}*.fbx";
                if (!String.IsNullOrEmpty(MODELNAME))
                {
                    WILDCARD = $"{MODEL_PREFIX}{MODELNAME}.fbx";
                }
                var files = Directory.GetFiles(settings.DIR_MODEL_FBX(), WILDCARD, SearchOption.AllDirectories);

                for (int i = 0; i < files.Length; i++)
                {
                    string filename = files[i]; //path
                    MODELNAME = Path.GetFileNameWithoutExtension(filename);
                    MODELNAME = MODELNAME.Split(new string[] { MODEL_PREFIX }, StringSplitOptions.None).Last();
                    settings.LOGGER.LogString($"importing: {MODELNAME}...");

                    //call wcc_lite
                    WCC_Command cmd = new import()
                    {
                        Depot = $"{settings.DIR_MODKIT_DEPOT()}",
                        File  = filename,
                        Out   = Path.Combine(settings.DIR_OUTPUT_MESHES(), $"{MODELNAME}.w2mesh"),
                    };
                    WFR result = WCC_Task.RunCommandSync(cmd);
                    if (result == WFR.WFR_Error)
                    {
                        return(WFR.WFR_Error);
                    }
                }

                //set dependencies
                if (!settings.PATCH_MODE)
                {
                    string sp = $"{settings.WORLD_DEF_PREFIX}*.yml";
                    if (Directory.GetFiles(settings.DIR_DEF_WORLD(), sp, SearchOption.AllDirectories).Any())
                    {
                        settings.WCC_NAVDATA = true;
                    }
                    settings.WCC_ANALYZE        = true;
                    settings.WCC_COLLISIONCACHE = true;
                    settings.WCC_COOK           = true;
                    settings.WCC_REPACK_DLC     = true;
                }

                settings.LOGGER.LogString("done.");
                return(WFR.WFR_Finished);
            }
            catch (Exception ex)
            {
                settings.LOGGER.LogString(ex.ToString());
                throw ex;
            }
        }
예제 #2
0
        private WFR _WCC_CookData(WF_Settings settings)
        {
            settings.LOGGER.LogString($"--------------------------------------------------------------------------");
            settings.LOGGER.LogString($"-- WCC_LITE: COOK pm: {settings.PATCH_MODE}");
            settings.LOGGER.LogString($"--------------------------------------------------------------------------");

            try
            {
                WFR result = WFR.WFR_Error;

                // setup *all* seedfiles for cooking: hubs, dlc
                string sp        = $"{settings.SEEDFILE_PREFIX}*.files";
                var    seedfiles = Directory.GetFiles(settings.DIR_TMP(), sp, SearchOption.TopDirectoryOnly);
                foreach (var file in seedfiles)
                {
                    WCC_SEEDFILES += $"-seed={file}";
                }
                // Note: trimdir MUST be lowercased!



                WCC_Command cmd = new cook()
                {
                    Platform = platform.pc,
                    trimdir  = Path.Combine("dlc", $"dlc{settings.MODNAME_LC()}"),
                    outdir   = settings.DIR_COOKED_DLC()
                };

                // run as arguments because of multiple seedfiles
                string args = cmd.CommandLine;
                args  += $" {WCC_SEEDFILES}";
                result = WCC_Task.RunArgsSync(cmd.Name, args);

                //cleanup
                if (Directory.Exists(settings.DIR_COOKED_FILES_DB()))
                {
                    Directory.Delete(settings.DIR_COOKED_FILES_DB());
                }
                //move to prevent beeing packed into mod
                if (File.Exists(Path.Combine(settings.DIR_COOKED_DLC(), "cook.db")))
                {
                    File.Move(Path.Combine(settings.DIR_COOKED_DLC(), "cook.db"), Path.Combine(settings.DIR_COOKED_FILES_DB(), "cook.db"));
                }

                settings.LOGGER.LogString("done.");
                return(result);
            }
            catch (Exception ex)
            {
                settings.LOGGER.LogString(ex.ToString());
                throw ex;
            }
        }
예제 #3
0
        private WFR _Encode_env(WF_Settings settings)
        {
            settings.LOGGER.LogString($"--------------------------------------------------------------------------");
            settings.LOGGER.LogString($"-- ENCODING ENVS pm: {settings.PATCH_MODE}");
            settings.LOGGER.LogString($"--------------------------------------------------------------------------");

            try
            {
                if (!Directory.Exists(settings.DIR_OUTPUT_ENVS()))
                {
                    Directory.CreateDirectory(settings.DIR_OUTPUT_ENVS());
                }

                string WILDCARD = $"{settings.ENV_DEF_PREFIX}*.yml";
                if (!String.IsNullOrEmpty(ENVID))
                {
                    WILDCARD = $"{settings.ENV_DEF_PREFIX}{ENVID}.yml";
                }
                var files = Directory.GetFiles(settings.DIR_DEF_ENVS(), WILDCARD, SearchOption.AllDirectories);

                for (int i = 0; i < files.Length; i++)
                {
                    string filename = files[i];
                    settings.LOGGER.LogString($"encoding: {filename}...");

                    //call encode
                    var encoder = new w3env()
                    {
                        OutputDirectory = settings.DIR_OUTPUT_ENVS(),
                        Encode          = filename,
                        LogLevel        = settings.LOG_LEVEL
                    };
                    WFR result = RAD_Task.RunCommandSync(encoder);
                    if (result == WFR.WFR_Error)
                    {
                        return(WFR.WFR_Error);
                    }
                }

                settings.LOGGER.LogString("done.");
                return(WFR.WFR_Finished);
            }
            catch (Exception ex)
            {
                settings.LOGGER.LogString(ex.ToString());
                throw ex;
            }
        }
예제 #4
0
        private WFR _WCC_occlusion(WF_Settings settings)
        {
            settings.LOGGER.LogString($"--------------------------------------------------------------------------");
            settings.LOGGER.LogString($"-- WCC_LITE: COOK OCCLUSION pm: {settings.PATCH_MODE}");
            settings.LOGGER.LogString($"--------------------------------------------------------------------------");

            try
            {
                //get all folders inside the levels directory
                string levelDir = Path.Combine(settings.DIR_UNCOOKED(), settings.DIR_DLC_GAMEPATH(), "levels");
                var    levels   = Directory.GetDirectories(levelDir);

                for (int i = 0; i < levels.Length; i++)
                {
                    string level     = levels[i]; //path
                    string worldname = Path.GetDirectoryName(level);
                    settings.LOGGER.LogString($"generate occlusiondata for: {worldname}...");

                    //check i w2w file in subfolder?
                    string worldfile = Path.Combine(levelDir, worldname, $"{worldname}.w2w");
                    if (File.Exists(worldfile))
                    {
                        //LOG WCC_LITE: GENERATE OCCLUSIONDATA FOR !WORLDNAME!

                        //call wcc_lite

                        WCC_Command cmd = new cookocclusion()
                        {
                            WorldFile = worldfile
                        };
                        WFR result = WCC_Task.RunCommandSync(cmd);
                        if (result == WFR.WFR_Error)
                        {
                            return(WFR.WFR_Error);
                        }
                    }
                }

                settings.LOGGER.LogString("done.");
                return(WFR.WFR_Finished);
            }
            catch (Exception ex)
            {
                settings.LOGGER.LogString(ex.ToString());
                throw ex;
            }
        }
예제 #5
0
        private WFR _WCC_PackMODAndCreateMetadatastore(WF_Settings settings)
        {
            settings.LOGGER.LogString($"--------------------------------------------------------------------------");
            settings.LOGGER.LogString($"-- WCC_LITE: PACK + METADATASTORE MOD pm: {settings.PATCH_MODE}");
            settings.LOGGER.LogString($"--------------------------------------------------------------------------");

            try
            {
                WFR result_pack = WFR.WFR_Error;
                WFR result_meta = WFR.WFR_Error;


                WCC_Command pack = new pack()
                {
                    Directory = settings.DIR_COOKED_MOD(),
                    Outdir    = settings.DIR_MOD_CONTENT()
                };
                result_pack = WCC_Task.RunCommandSync(pack);
                if (result_pack == WFR.WFR_Error)
                {
                    return(WFR.WFR_Error);
                }

                WCC_Command metadata = new metadatastore()
                {
                    Directory = settings.DIR_MOD_CONTENT()
                };
                result_meta = WCC_Task.RunCommandSync(metadata);
                if (result_meta == WFR.WFR_Error)
                {
                    return(WFR.WFR_Error);
                }

                settings.LOGGER.LogString("done.");
                return(WFR.WFR_Finished);
            }
            catch (Exception ex)
            {
                settings.LOGGER.LogString(ex.ToString());
                throw ex;
            }
        }
예제 #6
0
        public void Run()
        {
            DocumentViewModel wvm = DocumentsSource.FirstOrDefault(x => x.IsSelected);
            var      workflow     = wvm.Workflow;
            RAD_Task RAD_Task     = Kernel.Get <RAD_Task>();
            WCC_Task WCC_Task     = Kernel.Get <WCC_Task>();

            Logger.Clear();
            Logger.LogString("Starting Workflow...");

            // FIXME structure?
            foreach (IWorkflowItem item in workflow)
            {
                WFR completed = WFR.WFR_Error;

                if (item.GetType().IsSubclassOf(typeof(RAD_Command)))
                {
                    completed = RAD_Task.RunCommandSync((RAD_Command)item);
                }
                else if (item.GetType().IsSubclassOf(typeof(WCC_Command)))
                {
                    completed = WCC_Task.RunCommandSync((WCC_Command)item);
                }
                else //workflowitems
                {
                    completed = item.Run();
                }

                if (completed == WFR.WFR_Error)
                {
                    Logger.LogString("Aborting.");
                    break;
                }
                else
                {
                    continue;
                }
            }

            Logger.LogString("Done.");
        }
예제 #7
0
        private WFR _WCC_GenerateTextureCache(WF_Settings settings)
        {
            settings.LOGGER.LogString($"--------------------------------------------------------------------------");
            settings.LOGGER.LogString($"-- WCC_LITE: GENERATE TEXTURE CACHE pm: {settings.PATCH_MODE}");
            settings.LOGGER.LogString($"--------------------------------------------------------------------------");

            if (!Directory.Exists(Path.Combine(settings.DIR_UNCOOKED_TEXTURES(), settings.DIR_DLC_GAMEPATH())))
            {
                settings.LOGGER.LogString($"WARNING: no textures found in {Path.Combine(settings.DIR_UNCOOKED_TEXTURES(), settings.DIR_DLC_GAMEPATH())}");
                return(WFR.WFR_Error);
            }

            try
            {
                WFR result_cook  = WFR.WFR_Error;
                WFR result_cache = WFR.WFR_Error;

                if (Directory.Exists(settings.DIR_COOKED_TEXTURES_DB()))
                {
                    Directory.Delete(settings.DIR_COOKED_TEXTURES_DB());
                }

                // cook textures

                WCC_Command cook = new cook()
                {
                    Platform = platform.pc,
                    mod      = settings.DIR_UNCOOKED_TEXTURES(),
                    basedir  = settings.DIR_UNCOOKED_TEXTURES(),
                    outdir   = settings.DIR_COOKED_DLC()
                };
                result_cook = WCC_Task.RunCommandSync(cook);
                if (result_cook == WFR.WFR_Error)
                {
                    return(WFR.WFR_Error);
                }

                // move so it is separated from "normal" files cook.db
                if (File.Exists(Path.Combine(settings.DIR_COOKED_DLC(), "cook.db")))
                {
                    File.Delete(Path.Combine(settings.DIR_COOKED_DLC(), "cook.db"));
                }

                // build texture cache
                WCC_Command buildcache = new buildcache()
                {
                    builder  = cachebuilder.textures,
                    DataBase = settings.DIR_COOKED_TEXTURES_DB(),
                    basedir  = settings.DIR_UNCOOKED_TEXTURES(),
                    Out      = Path.Combine(settings.DIR_DLC_CONTENT(), "texture.cache"),
                    Platform = platform.pc
                };
                result_cache = WCC_Task.RunCommandSync(buildcache);
                if (result_cache == WFR.WFR_Error)
                {
                    return(WFR.WFR_Error);
                }

                settings.LOGGER.LogString("done.");
                return(WFR.WFR_Finished);
            }
            catch (Exception ex)
            {
                settings.LOGGER.LogString(ex.ToString());
                throw ex;
            }
        }
예제 #8
0
        private WFR _WCC_analyze(WF_Settings settings)
        {
            settings.LOGGER.LogString($"--------------------------------------------------------------------------");
            settings.LOGGER.LogString($"-- WCC_LITE: ANALYZE FILES pm: {settings.PATCH_MODE}");
            settings.LOGGER.LogString($"--------------------------------------------------------------------------");

            try
            {
                if (!Directory.Exists(settings.DIR_TMP()))
                {
                    Directory.CreateDirectory(settings.DIR_TMP());
                }

                // process all worlds IF any world was generated
                if (settings.ENCODE_WORLD || settings.WCC_ANALYZE_WORLD)
                {
                    //get all folders inside the levels directory
                    string levelDir = Path.Combine(settings.DIR_UNCOOKED(), settings.DIR_DLC_GAMEPATH(), "levels");
                    var    levels   = Directory.GetDirectories(levelDir);

                    for (int i = 0; i < levels.Length; i++)
                    {
                        string level     = levels[i]; //path
                        string worldname = Path.GetDirectoryName(level);
                        settings.LOGGER.LogString($"analyze world for: {worldname}...");

                        //check i w2w file in subfolder?
                        string worldfile = Path.Combine(levelDir, worldname, $"{worldname}.w2w");
                        if (File.Exists(worldfile))
                        {
                            //LOG WCC_LITE: ANALYZE WORLD FOR !WORLDNAME!

                            //call wcc_lite

                            WCC_Command cmd = new analyze()
                            {
                                Analyzer = analyzers.world,
                                Object   = Path.Combine(settings.DIR_DLC_GAMEPATH(), "levels", worldname, $"{worldname}.w2w"),
                                Out      = Path.Combine(settings.DIR_TMP(), $"{settings.SEEDFILE_PREFIX}world.{worldname}.files")
                            };
                            WFR result = WCC_Task.RunCommandSync(cmd);

                            //if any wcc operation fails return
                            if (result == WFR.WFR_Error)
                            {
                                return(WFR.WFR_Error);
                            }
                        }
                    }
                }
                else //process dlc IF something changed
                {
                    if (settings.ENCODE_QUEST || settings.WCC_IMPORT_MODELS)
                    {
                        //LOG WCC_LITE: ANALYZE DLC
                        //call wcc_lite

                        WCC_Command cmd = new analyze()
                        {
                            Analyzer = analyzers.r4dlc,
                            reddlc   = Path.Combine(settings.DIR_DLC_GAMEPATH(), $"dlc{settings.MODNAME}.reddlc"),
                            Out      = Path.Combine(settings.DIR_TMP(), $"{settings.SEEDFILE_PREFIX}dlc{settings.MODNAME}.files")
                        };
                        return(WCC_Task.RunCommandSync(cmd));
                    }
                }

                settings.LOGGER.LogString("done.");
                return(WFR.WFR_Finished);
            }
            catch (Exception ex)
            {
                settings.LOGGER.LogString(ex.ToString());
                throw ex;
            }
        }
예제 #9
0
        private WFR _Encode_world(WF_Settings settings)
        {
            settings.LOGGER.LogString($"--------------------------------------------------------------------------");
            settings.LOGGER.LogString($"-- ENCODING WORLD pm: {settings.PATCH_MODE}");
            settings.LOGGER.LogString($"--------------------------------------------------------------------------");

            try
            {
                if (!Directory.Exists(settings.DIR_OUTPUT_WORLD()))
                {
                    Directory.CreateDirectory(settings.DIR_OUTPUT_WORLD());
                }
                if (!Directory.Exists(settings.DIR_TMP()))
                {
                    Directory.CreateDirectory(settings.DIR_TMP());
                }

                string sp    = $"{settings.WORLD_DEF_PREFIX}*.yml";
                var    files = Directory.GetFiles(settings.DIR_DEF_WORLD(), sp, SearchOption.AllDirectories);

                for (int i = 0; i < files.Length; i++)
                {
                    string filename = files[i];
                    settings.LOGGER.LogString($"encoding: {filename}...");

                    //call encoder //FIXME
                    var encoder = new w3world()
                    {
                        RepoDirectory         = settings.dir_repo_worlds(),
                        OutputDirectory       = settings.DIR_OUTPUT_WORLD(),
                        FoliageDirectory      = settings.DIR_DEF_WORLD(),
                        SkipFoliageGeneration = SKIP_FOLIAGE_GENERATION,
                        SkipWorldGeneration   = SKIP_WORLD_GENERATION,
                        Encode   = filename,
                        LogLevel = settings.LOG_LEVEL
                    };
                    WFR result = RAD_Task.RunCommandSync(encoder);
                    if (result == WFR.WFR_Error)
                    {
                        return(WFR.WFR_Error);
                    }
                }

                //set dependencies
                if (!settings.PATCH_MODE)
                {
                    settings.WCC_ANALYZE        = true;
                    settings.WCC_ANALYZE_WORLD  = true;
                    settings.WCC_COOK           = true;
                    settings.WCC_NAVDATA        = true;
                    settings.WCC_OCCLUSIONDATA  = true;
                    settings.WCC_TEXTURECACHE   = true;
                    settings.WCC_COLLISIONCACHE = true;
                    settings.WCC_REPACK_DLC     = true;
                }

                settings.LOGGER.LogString("done.");
                return(WFR.WFR_Finished);
            }
            catch (Exception ex)
            {
                settings.LOGGER.LogString(ex.ToString());
                throw ex;
            }
        }