Loads ruleset config before worker. Implement skin option of ruleset config.

This commit is contained in:
2022-11-16 11:45:28 +08:00
parent a19057f869
commit f04d0ec299
2 changed files with 10 additions and 13 deletions

View File

@@ -87,7 +87,6 @@ namespace Cryville.Crtr.Browsing {
void SetDataSettings(int id, ChartDetail detail) { void SetDataSettings(int id, ChartDetail detail) {
Settings.Default.LoadRuleset = detail.Meta.ruleset + "/.umgr"; Settings.Default.LoadRuleset = detail.Meta.ruleset + "/.umgr";
Settings.Default.LoadRulesetConfig = detail.Meta.ruleset + ".json"; Settings.Default.LoadRulesetConfig = detail.Meta.ruleset + ".json";
Settings.Default.LoadSkin = detail.Meta.ruleset + "/Old KeyUI/.umgs";
Settings.Default.LoadChart = MainBrowser.ResourceManager.GetItemPath(id); Settings.Default.LoadChart = MainBrowser.ResourceManager.GetItemPath(id);
} }
} }

View File

@@ -52,6 +52,7 @@ namespace Cryville.Crtr {
public static Rect hitRect; public static Rect hitRect;
public static Plane[] frustumPlanes; public static Plane[] frustumPlanes;
RulesetConfig _rscfg;
static bool disableGC = true; static bool disableGC = true;
static float clippingDist = 1f; static float clippingDist = 1f;
static float renderDist = 6f; static float renderDist = 6f;
@@ -338,14 +339,19 @@ namespace Cryville.Crtr {
FileInfo rulesetConfigFile = new FileInfo( FileInfo rulesetConfigFile = new FileInfo(
Game.GameDataPath + "/config/rulesets/" + Settings.Default.LoadRulesetConfig Game.GameDataPath + "/config/rulesets/" + Settings.Default.LoadRulesetConfig
); );
if (!rulesetConfigFile.Exists) throw new FileNotFoundException("Ruleset config not found\nPlease open the config to generate");
using (StreamReader cfgreader = new StreamReader(rulesetConfigFile.FullName, Encoding.UTF8)) {
_rscfg = JsonConvert.DeserializeObject<RulesetConfig>(cfgreader.ReadToEnd(), new JsonSerializerSettings() {
MissingMemberHandling = MissingMemberHandling.Error
});
}
FileInfo skinFile = new FileInfo( FileInfo skinFile = new FileInfo(
Game.GameDataPath + "/skins/" + Settings.Default.LoadSkin string.Format("{0}/skins/{1}/{2}/.umgs", Game.GameDataPath, rulesetFile.Directory.Name, _rscfg.generic.Skin)
); );
loadThread = new Thread(new ParameterizedThreadStart(Load)); loadThread = new Thread(new ParameterizedThreadStart(Load));
loadThread.Start(new LoadInfo() { loadThread.Start(new LoadInfo() {
chartFile = chartFile, chartFile = chartFile,
rulesetFile = rulesetFile, rulesetFile = rulesetFile,
rulesetConfigFile = rulesetConfigFile,
skinFile = skinFile, skinFile = skinFile,
}); });
@@ -435,7 +441,6 @@ namespace Cryville.Crtr {
struct LoadInfo { struct LoadInfo {
public FileInfo chartFile; public FileInfo chartFile;
public FileInfo rulesetFile; public FileInfo rulesetFile;
public FileInfo rulesetConfigFile;
public FileInfo skinFile; public FileInfo skinFile;
} }
@@ -473,7 +478,7 @@ namespace Cryville.Crtr {
etor = new PdtEvaluator(); etor = new PdtEvaluator();
LoadRuleset(info.rulesetFile, info.rulesetConfigFile); LoadRuleset(info.rulesetFile);
Logger.Log("main", 0, "Load/WorkerThread", "Applying ruleset (iteration 1)"); Logger.Log("main", 0, "Load/WorkerThread", "Applying ruleset (iteration 1)");
pruleset.PrePatch(chart); pruleset.PrePatch(chart);
@@ -532,8 +537,7 @@ namespace Cryville.Crtr {
} }
} }
RulesetConfig _rscfg; void LoadRuleset(FileInfo file) {
void LoadRuleset(FileInfo file, FileInfo cfgfile) {
DirectoryInfo dir = file.Directory; DirectoryInfo dir = file.Directory;
Logger.Log("main", 0, "Load/WorkerThread", "Loading ruleset: {0}", file); Logger.Log("main", 0, "Load/WorkerThread", "Loading ruleset: {0}", file);
using (StreamReader reader = new StreamReader(file.FullName, Encoding.UTF8)) { using (StreamReader reader = new StreamReader(file.FullName, Encoding.UTF8)) {
@@ -543,12 +547,6 @@ namespace Cryville.Crtr {
if (ruleset.format != 1) throw new FormatException("Invalid ruleset file version"); if (ruleset.format != 1) throw new FormatException("Invalid ruleset file version");
ruleset.LoadPdt(dir); ruleset.LoadPdt(dir);
pruleset = ruleset.Root; pruleset = ruleset.Root;
if (!cfgfile.Exists) throw new FileNotFoundException("Ruleset config not found\nPlease open the config to generate");
using (StreamReader cfgreader = new StreamReader(cfgfile.FullName, Encoding.UTF8)) {
_rscfg = JsonConvert.DeserializeObject<RulesetConfig>(cfgreader.ReadToEnd(), new JsonSerializerSettings() {
MissingMemberHandling = MissingMemberHandling.Error
});
}
pruleset.Optimize(etor); pruleset.Optimize(etor);
} }
} }