Exemplo n.º 1
0
        public static int Main(string[] args)
        {
            try {
                Trace.Listeners.Add(new ConsoleTraceListener());
                FileUtils.TryToDelete(Path.Combine(MainExecutingFile.Directory, "Log.txt"));
                Trace.Listeners.Add(new DefaultTraceListener {
                    LogFileName = Path.Combine(MainExecutingFile.Directory, "Log.txt")
                });

                var argsLoaded = false;
                if (args.Length > 0)
                {
                    try {
                        if (File.Exists(args[0]))
                        {
                            var extraFileArgs = Path.Combine(Path.GetDirectoryName(args[0]) ?? ".", "Baked Shadows Params.txt");
                            if (File.Exists(extraFileArgs))
                            {
                                args = File.ReadAllLines(extraFileArgs).Where(x => !string.IsNullOrWhiteSpace(x) && !x.TrimStart().StartsWith("#"))
                                       .Union(args).ToArray();
                                argsLoaded = true;
                            }
                            else
                            {
                                extraFileArgs = Path.Combine(Path.GetDirectoryName(args[0]) ?? ".", "Baked_Shadows_Params.txt");
                                if (File.Exists(extraFileArgs))
                                {
                                    args = File.ReadAllLines(extraFileArgs).Where(x => !string.IsNullOrWhiteSpace(x) && !x.TrimStart().StartsWith("#"))
                                           .Union(args).ToArray();
                                    argsLoaded = true;
                                }
                            }
                        }
                    } catch {
                        // ignored
                    }
                }

                if (!argsLoaded)
                {
                    var extraArgs = Path.Combine(MainExecutingFile.Directory, "Arguments.txt");
                    if (File.Exists(extraArgs))
                    {
                        args = File.ReadAllLines(extraArgs).Where(x => !string.IsNullOrWhiteSpace(x) && !x.TrimStart().StartsWith("#"))
                               .Union(args).ToArray();
                    }
                }

                var options = new Options();
                if (!Parser.Default.ParseArguments(args, options) || options.Items.Count == 0 || options.Help)
                {
                    Trace.WriteLine(options.GetUsage());
                    return(options.Help ? 0 : 1);
                }

                string mainKn5 = null;
                string destination;
                var    includeKn5   = new List <string>();
                var    occludersKn5 = new List <string>();

                if (options.Items[0].EndsWith(".ini"))
                {
                    var ini            = new IniFile(options.Items[0]);
                    var trackDirectory = Path.GetDirectoryName(ini.Filename) ?? ".";
                    var first          = true;
                    includeKn5.Clear();
                    occludersKn5.Clear();
                    foreach (var model in ini.GetSections("MODEL").Select(x => x.GetNonEmpty("FILE")).NonNull()
                             .Select(x => Path.Combine(trackDirectory, x)).Where(File.Exists))
                    {
                        if (first)
                        {
                            first   = false;
                            mainKn5 = model;
                        }
                        else
                        {
                            includeKn5.Add(model);
                        }
                    }

                    destination = Path.Combine(trackDirectory, Path.GetFileNameWithoutExtension(ini.Filename) + ".vao-patch");
                }
                else
                {
                    mainKn5     = options.Items[0];
                    destination = options.Destination ?? options.Items[0];
                    var trackDirectory = Path.GetDirectoryName(mainKn5) ?? ".";

                    if (!options.ModifyKn5Directly)
                    {
                        if (!string.IsNullOrWhiteSpace(options.IncludeKn5Filter))
                        {
                            var includeFilter = Filter.Create(StringTester.Instance, options.IncludeKn5Filter,
                                                              new FilterParams {
                                StringMatchMode = StringMatchMode.CompleteMatch
                            });
                            foreach (var file in Directory.GetFiles(trackDirectory, "*.kn5").Where(x =>
                                                                                                   includeFilter.Test(Path.GetFileName(x)) && !FileUtils.ArePathsEqual(x, mainKn5)))
                            {
                                includeKn5.Add(file);

                                destination = Path.Combine(trackDirectory, Path.GetFileName(trackDirectory)) + ".kn5";
                            }
                        }
                    }

                    if (!string.IsNullOrWhiteSpace(options.OccludersKn5Filter ?? options.CommonKn5Filter))
                    {
                        var occludersFilter = Filter.Create(StringTester.Instance, options.OccludersKn5Filter ?? options.CommonKn5Filter,
                                                            new FilterParams {
                            StringMatchMode = StringMatchMode.CompleteMatch
                        });
                        foreach (var file in Directory.GetFiles(trackDirectory, "*.kn5").Where(x =>
                                                                                               occludersFilter.Test(Path.GetFileName(x)) && !FileUtils.ArePathsEqual(x, mainKn5)))
                        {
                            occludersKn5.Add(file);
                        }
                    }
                }

                if (mainKn5 == null)
                {
                    throw new Exception("Main KN5 not found");
                }

                using (var bakery = new MainBakery(mainKn5, options.Filter, options.IgnoreFilter, !options.ModifyKn5Directly)
                {
                    AoOpacity = options.AoOpacity,
                    AoMultiplier = options.AoMultiplier,
                    SaturationGain = options.SaturationGain,
                    SaturationInputMultiplier = options.SaturationInputMultiplier,
                    CameraFov = options.CameraFov,
                    CameraNear = options.CameraNear,
                    CameraFar = options.CameraFar,
                    CameraNormalOffsetUp = options.CameraNormalOffsetUp,
                    CameraOffsetAway = options.CameraOffsetAway,
                    CameraOffsetUp = options.CameraOffsetUp,
                    OccludersDistanceThreshold = options.OccludersDistanceThreshold,
                    MergeVertices = options.MergeVertices,
                    MergeThreshold = options.MergeThreshold,
                    OccludersSplitThreshold = options.OccludersSplitThreshold,
                    QueueSize = options.QueueSize,
                    SampleResolution = options.SampleResolution,
                    ExtraPassBrightnessGain = options.ExtraPassBrightnessGain,
                    HdrSamples = options.HdrSamples,
                    Ground = !options.NoGround,
                    SyncNormalsFilter = options.SyncNormals,
                    SyncNormalsPartiallyFilter = options.SyncNormalsPartially,
                    SyncNormalsPartiallyValue = options.SyncNormalsPartiallyValue,
                    ExtraPass = options.ExtraPass,
                    TreeFilter = options.TreeFilter,
                    GrassFilter = options.GrassFilter,
                    RegularObjectsFilter = options.RegularObjectsFilter,
                    SkipOccludersFilter = options.SkipOccludersFilter,
                    SpecialGrassAmbient = !options.NoSpecialGrassAmbient,
                    SurfacesFilter = options.Surfaces,
                    SurfacesAoOpacity = options.SurfacesAoOpacity,
                    SetMiltiplierForSkipped = options.SetMiltiplierForSkipped,
                }) {
                    if (!string.IsNullOrWhiteSpace(options.DebugPos))
                    {
                        bakery.DebugMode  = true;
                        bakery.DebugPoint = options.DebugPos.Split(new[] { ", " }, StringSplitOptions.RemoveEmptyEntries)
                                            .Select(x => (float)FlexibleParser.ParseDouble(x))
                                            .ToArray().ToVector3();
                        bakery.DebugRadius = options.DebugRange;
                        Console.WriteLine("Debug mode: " + bakery.DebugPoint);
                    }

                    bakery.LoadExtraKn5(includeKn5, occludersKn5).Work(destination);
                }

                Trace.Listeners.Clear();
                return(0);
            } catch (Exception e) {
                Trace.WriteLine(e.ToString());
                return(2);
            } finally {
                if (ParentProcessUtilities.GetParentProcess().ProcessName == "explorer")
                {
                    Console.ReadLine();
                }
            }
        }
Exemplo n.º 2
0
 private static extern int NtQueryInformationProcess(IntPtr processHandle, int processInformationClass, ref ParentProcessUtilities processInformation,
                                                     int processInformationLength, out int returnLength);