Example #1
0
        public static void Init()
        {
            stopwatch.Start();

            // if the manifest directory is null, there is something seriously wrong
            var manifestDirectory = Path.GetDirectoryName(VersionManifestUtilities.MANIFEST_FILEPATH);

            if (manifestDirectory == null)
            {
                return;
            }

            // setup directories
            ModDirectory = Path.GetFullPath(
                Path.Combine(manifestDirectory,
                             Path.Combine(Path.Combine(Path.Combine(
                                                           "..", ".."), ".."), MODS_DIRECTORY_NAME)));

            StreamingAssetsDirectory = Path.GetFullPath(Path.Combine(manifestDirectory, ".."));
            GameDirectory            = Path.GetFullPath(Path.Combine(Path.Combine(StreamingAssetsDirectory, ".."), ".."));

            ModTekDirectory   = Path.Combine(ModDirectory, MODTEK_DIRECTORY_NAME);
            CacheDirectory    = Path.Combine(ModTekDirectory, CACHE_DIRECTORY_NAME);
            DatabaseDirectory = Path.Combine(ModTekDirectory, DATABASE_DIRECTORY_NAME);

            LogPath            = Path.Combine(ModTekDirectory, LOG_NAME);
            HarmonySummaryPath = Path.Combine(ModTekDirectory, HARMONY_SUMMARY_FILE_NAME);
            LoadOrderPath      = Path.Combine(ModTekDirectory, LOAD_ORDER_FILE_NAME);
            MergeCachePath     = Path.Combine(CacheDirectory, MERGE_CACHE_FILE_NAME);
            TypeCachePath      = Path.Combine(CacheDirectory, TYPE_CACHE_FILE_NAME);
            ModDBPath          = Path.Combine(DatabaseDirectory, MDD_FILE_NAME);
            DBCachePath        = Path.Combine(DatabaseDirectory, DB_CACHE_FILE_NAME);

            // creates the directories above it as well
            Directory.CreateDirectory(CacheDirectory);
            Directory.CreateDirectory(DatabaseDirectory);

            // create log file, overwritting if it's already there
            using (var logWriter = File.CreateText(LogPath))
            {
                logWriter.WriteLine($"ModTek v{Assembly.GetExecutingAssembly().GetName().Version} -- {DateTime.Now}");
            }

            // create all of the caches
            dbCache        = LoadOrCreateDBCache(DBCachePath);
            jsonMergeCache = LoadOrCreateMergeCache(MergeCachePath);
            typeCache      = LoadOrCreateTypeCache(TypeCachePath);

            // init harmony and patch the stuff that comes with ModTek (contained in Patches.cs)
            var harmony = HarmonyInstance.Create("io.github.mpstark.ModTek");

            harmony.PatchAll(Assembly.GetExecutingAssembly());

            stopwatch.Stop();
        }
Example #2
0
        // CACHES
        internal static MergeCache LoadOrCreateMergeCache(string path)
        {
            MergeCache mergeCache;

            if (File.Exists(path))
            {
                try
                {
                    mergeCache = JsonConvert.DeserializeObject <MergeCache>(File.ReadAllText(path));
                    Log("Loaded merge cache.");
                    return(mergeCache);
                }
                catch (Exception e)
                {
                    Log("Loading merge cache failed -- will rebuild it.");
                    Log($"\t{e.Message}");
                }
            }

            // create a new one if it doesn't exist or couldn't be added'
            Log("Building new Merge Cache.");
            mergeCache = new MergeCache();
            return(mergeCache);
        }
Example #3
0
        public static void Init()
        {
            var manifestDirectory = Path.GetDirectoryName(VersionManifestUtilities.MANIFEST_FILEPATH);

            // if the manifest directory is null, there is something seriously wrong
            if (manifestDirectory == null)
            {
                return;
            }

            ModDirectory = Path.GetFullPath(
                Path.Combine(manifestDirectory,
                             Path.Combine(Path.Combine(Path.Combine(
                                                           "..", ".."), ".."), MODS_DIRECTORY_NAME)));

            StreamingAssetsDirectory = Path.GetFullPath(Path.Combine(manifestDirectory, ".."));
            GameDirectory            = Path.GetFullPath(Path.Combine(Path.Combine(StreamingAssetsDirectory, ".."), ".."));

            ModTekDirectory = Path.Combine(ModDirectory, MODTEK_DIRECTORY_NAME);
            LogPath         = Path.Combine(ModTekDirectory, LOG_NAME);
            CacheDirectory  = Path.Combine(ModTekDirectory, CACHE_DIRECTORY_NAME);
            MergeCachePath  = Path.Combine(CacheDirectory, MERGE_CACHE_FILE_NAME);
            TypeCachePath   = Path.Combine(CacheDirectory, TYPE_CACHE_FILE_NAME);

            // creates the directories above it as well
            Directory.CreateDirectory(CacheDirectory);

            // create log file, overwritting if it's already there
            using (var logWriter = File.CreateText(LogPath))
                logWriter.WriteLine($"ModTek v{Assembly.GetExecutingAssembly().GetName().Version} -- {DateTime.Now}");

            // init harmony and patch the stuff that comes with ModTek (contained in Patches.cs)
            var harmony = HarmonyInstance.Create("io.github.mpstark.ModTek");

            harmony.PatchAll(Assembly.GetExecutingAssembly());

            // load merge cache if it exists
            if (File.Exists(MergeCachePath))
            {
                try
                {
                    JsonMergeCache = JsonConvert.DeserializeObject <MergeCache>(File.ReadAllText(MergeCachePath));
                    Log("Loaded merge cache.");
                }
                catch (Exception e)
                {
                    JsonMergeCache = new MergeCache();
                    Log("Loading merge cache failed -- will rebuild it.");
                    Log($"\t{e.Message}");
                }
            }
            else
            {
                JsonMergeCache = new MergeCache();
            }

            // load type cache if it exists
            if (File.Exists(TypeCachePath))
            {
                try
                {
                    TypeCache = JsonConvert.DeserializeObject <Dictionary <string, List <string> > >(File.ReadAllText(TypeCachePath));
                    Log("Loaded type cache.");
                }
                catch (Exception e)
                {
                    TypeCache = new Dictionary <string, List <string> >();
                    Log("Loading type cache failed -- will rebuild it.");
                    Log($"\t{e.Message}");
                }
            }
            else
            {
                TypeCache = new Dictionary <string, List <string> >();
            }
        }