Added Support for Systems

This commit is contained in:
Ben C 2022-08-29 17:25:42 -04:00
parent 202eb808aa
commit 6722ff7ad4
No known key found for this signature in database
GPG Key ID: 7F8F04504B670474
5 changed files with 152 additions and 121 deletions

View File

@ -50,9 +50,14 @@ namespace NewHorizons
UnityEvent<string> GetBodyLoadedEvent(); UnityEvent<string> GetBodyLoadedEvent();
/// <summary> /// <summary>
/// Gets an object in the `extras` object of a config, returns null if the key doesn't exist /// Gets an object in the `extras` object of a body config, returns null if the key doesn't exist
/// </summary> /// </summary>
object GetExtraModule(Type moduleType, string extrasModuleName, string planetName); object GetExtraModuleForBody(Type moduleType, string extrasModuleName, string planetName);
/// <summary>
/// Gets an object in the `extras` object of a system config, returns null if the key doesn't exist
/// </summary>
object GetExtraModuleForSystem(Type moduleType, string extrasModuleName, string systemName);
/// <summary> /// <summary>
/// Allows you to overwrite the default system. This is where the player is respawned after dying. /// Allows you to overwrite the default system. This is where the player is respawned after dying.

View File

@ -127,7 +127,7 @@ namespace NewHorizons
BodyDict["SolarSystem"] = new List<NewHorizonsBody>(); BodyDict["SolarSystem"] = new List<NewHorizonsBody>();
BodyDict["EyeOfTheUniverse"] = new List<NewHorizonsBody>(); // Keep this empty tho fr BodyDict["EyeOfTheUniverse"] = new List<NewHorizonsBody>(); // Keep this empty tho fr
SystemDict["SolarSystem"] = new NewHorizonsSystem("SolarSystem", new StarSystemConfig(), Instance) SystemDict["SolarSystem"] = new NewHorizonsSystem("SolarSystem", new StarSystemConfig(), "", Instance)
{ {
Config = Config =
{ {
@ -143,7 +143,7 @@ namespace NewHorizons
} }
} }
}; };
SystemDict["EyeOfTheUniverse"] = new NewHorizonsSystem("EyeOfTheUniverse", new StarSystemConfig(), Instance) SystemDict["EyeOfTheUniverse"] = new NewHorizonsSystem("EyeOfTheUniverse", new StarSystemConfig(), "", Instance)
{ {
Config = Config =
{ {
@ -517,7 +517,7 @@ namespace NewHorizons
} }
else else
{ {
SystemDict[name] = new NewHorizonsSystem(name, starSystemConfig, mod); SystemDict[name] = new NewHorizonsSystem(name, starSystemConfig, relativePath, mod);
} }
} }
} }
@ -618,7 +618,7 @@ namespace NewHorizons
starSystemConfig.Migrate(); starSystemConfig.Migrate();
starSystemConfig.FixCoordinates(); starSystemConfig.FixCoordinates();
var system = new NewHorizonsSystem(config.starSystem, starSystemConfig, mod); var system = new NewHorizonsSystem(config.starSystem, starSystemConfig, "", mod);
SystemDict.Add(config.starSystem, system); SystemDict.Add(config.starSystem, system);

View File

@ -101,24 +101,43 @@ namespace NewHorizons
} }
} }
public object GetExtraModule(Type moduleType, string extraModuleKey, string planetName) private object GetExtraModule(Type moduleType, string key, string path)
{ {
var planet = Main.BodyDict[Main.Instance.CurrentStarSystem].Find((b) => b.Config.name == planetName); if (path == "") return null;
if (planet == null) try
{ {
// Uh idk if we need this but ye it do be here etc. var jsonText = File.ReadAllText(path);
Logger.LogVerbose($"Attempting To Get Extras On Planet That Doesn't Exist! ({planetName})");
return null;
}
var jsonText = File.ReadAllText(planet.Mod.ModHelper.Manifest.ModFolderPath + planet.RelativePath);
var jsonData = JObject.Parse(jsonText); var jsonData = JObject.Parse(jsonText);
var possibleExtras = jsonData.Property("extras")?.Value; var possibleExtras = jsonData.Property("extras")?.Value;
if (possibleExtras is JObject extras) if (possibleExtras is JObject extras)
{ {
return extras.Property(extraModuleKey)?.Value.ToObject(moduleType); return extras.Property(key)?.Value.ToObject(moduleType);
} }
return null; return null;
} }
catch (FileNotFoundException)
{
return null;
}
}
public object GetExtraModuleForBody(Type moduleType, string extraModuleKey, string planetName)
{
var planet = Main.BodyDict[Main.Instance.CurrentStarSystem].Find((b) => b.Config.name == planetName);
return planet == null
? null
: GetExtraModule(moduleType, extraModuleKey,
planet.Mod.ModHelper.Manifest.ModFolderPath + planet.RelativePath);
}
public object GetExtraModuleForSystem(Type moduleType, string extraModuleKey, string systemName)
{
var system = Main.SystemDict[Main.Instance.CurrentStarSystem];
return system == null
? null
: GetExtraModule(moduleType, extraModuleKey,
system.Mod.ModHelper.Manifest.ModFolderPath + system.RelativePath);
}
public GameObject SpawnObject(GameObject planet, Sector sector, string propToCopyPath, Vector3 position, Vector3 eulerAngles, public GameObject SpawnObject(GameObject planet, Sector sector, string propToCopyPath, Vector3 position, Vector3 eulerAngles,
float scale, bool alignWithNormal) float scale, bool alignWithNormal)

View File

@ -11,15 +11,17 @@ namespace NewHorizons.Utility
public class NewHorizonsSystem public class NewHorizonsSystem
{ {
public string UniqueID; public string UniqueID;
public string RelativePath;
public SpawnModule Spawn = null; public SpawnModule Spawn = null;
public SpawnPoint SpawnPoint = null; public SpawnPoint SpawnPoint = null;
public StarSystemConfig Config; public StarSystemConfig Config;
public IModBehaviour Mod; public IModBehaviour Mod;
public NewHorizonsSystem(string uniqueID, StarSystemConfig config, IModBehaviour mod) public NewHorizonsSystem(string uniqueID, StarSystemConfig config, string relativePath, IModBehaviour mod)
{ {
UniqueID = uniqueID; UniqueID = uniqueID;
Config = config; Config = config;
RelativePath = relativePath;
Mod = mod; Mod = mod;
} }
} }

View File

@ -78,23 +78,28 @@ public static class SchemaExporter
{"description", _description} {"description", _description}
}); });
if (_title == "Celestial Body Schema") switch (_title)
{ {
case "Celestial Body Schema":
schema.Definitions["OrbitModule"].Properties["semiMajorAxis"].Default = 5000f; schema.Definitions["OrbitModule"].Properties["semiMajorAxis"].Default = 5000f;
schema.Properties.Add("extras", new JsonSchemaProperty { break;
Type = JsonObjectType.Object, case "Star System Schema":
Description = "Extra data that may be used by extension mods"
});
}
if (_title == "Star System Schema")
{
schema.Definitions["NomaiCoordinates"].Properties["x"].UniqueItems = true; schema.Definitions["NomaiCoordinates"].Properties["x"].UniqueItems = true;
schema.Definitions["NomaiCoordinates"].Properties["y"].UniqueItems = true; schema.Definitions["NomaiCoordinates"].Properties["y"].UniqueItems = true;
schema.Definitions["NomaiCoordinates"].Properties["z"].UniqueItems = true; schema.Definitions["NomaiCoordinates"].Properties["z"].UniqueItems = true;
break;
}
if (_title is "Star System Schema" or "Celestial Body Schema")
{
schema.Properties.Add("extras", new JsonSchemaProperty { schema.Properties.Add("extras", new JsonSchemaProperty {
Type = JsonObjectType.Object, Type = JsonObjectType.Object,
Description = "Extra data that may be used by extension mods" Description = "Extra data that may be used by extension mods",
AllowAdditionalProperties = true,
AdditionalPropertiesSchema = new JsonSchema
{
Type = JsonObjectType.Object
}
}); });
} }