Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
Ben C 2022-05-06 22:20:45 -04:00
commit 833993704a
4 changed files with 95 additions and 21 deletions

View File

@ -1,12 +1,63 @@
using System; using System;
using System.Collections.Generic; using NewHorizons.External.Configs;
using System.Linq; using NewHorizons.Utility;
using System.Text; using OWML.Common;
using System.Threading.Tasks; using UnityEngine;
using Logger = NewHorizons.Utility.Logger;
using Object = System.Object;
namespace NewHorizons.Builder.StarSystem namespace NewHorizons.Builder.StarSystem
{ {
class SkyboxBuilder internal class SkyboxBuilder
{ {
public static Material LoadMaterial(string assetBundle, string path, string uniqueModName, IModBehaviour mod)
{
string key = uniqueModName + "." + assetBundle;
AssetBundle bundle;
Material cubemap;
try
{
if (Main.AssetBundles.ContainsKey(key)) bundle = Main.AssetBundles[key];
else
{
bundle = mod.ModHelper.Assets.LoadBundle(assetBundle);
Main.AssetBundles[key] = bundle;
}
}
catch (Exception e)
{
Logger.LogError($"Couldn't load AssetBundle {assetBundle} : {e.Message}");
return null;
}
try
{
cubemap = bundle.LoadAsset<Material>(path);
}
catch (Exception e)
{
Logger.Log($"Couldn't load asset {path} from AssetBundle {assetBundle} : {e.Message}");
return null;
}
return cubemap;
}
public static void Make(StarSystemConfig.SkyboxConfig info, IModBehaviour mod)
{
Logger.Log("Building Skybox");
Material skyBoxMaterial = LoadMaterial(info.assetBundle, info.path, mod.ModHelper.Manifest.UniqueName, mod);
RenderSettings.skybox = skyBoxMaterial;
DynamicGI.UpdateEnvironment();
Main.Instance.ModHelper.Events.Unity.FireOnNextUpdate(() =>
{
foreach (var camera in Resources.FindObjectsOfTypeAll<OWCamera>())
{
camera.clearFlags = CameraClearFlags.Skybox;
}
});
}
} }
} }

View File

@ -14,6 +14,7 @@ namespace NewHorizons.External.Configs
public bool destroyStockPlanets = true; public bool destroyStockPlanets = true;
public string factRequiredForWarp; public string factRequiredForWarp;
public NomaiCoordinates coords; public NomaiCoordinates coords;
public SkyboxConfig skybox;
public class NomaiCoordinates public class NomaiCoordinates
{ {
@ -22,6 +23,14 @@ namespace NewHorizons.External.Configs
public int[] z; public int[] z;
} }
public class SkyboxConfig
{
public string assetBundle = null;
public string path = null;
public bool destroyStarField = false;
}
public StarSystemConfig(Dictionary<string, object> dict) : base(dict) { } public StarSystemConfig(Dictionary<string, object> dict) : base(dict) { }
} }
} }

View File

@ -5,7 +5,10 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using NewHorizons.Builder.StarSystem;
using UnityEngine; using UnityEngine;
using Logger = NewHorizons.Utility.Logger;
using Object = UnityEngine.Object;
namespace NewHorizons.Handlers namespace NewHorizons.Handlers
{ {
@ -17,23 +20,15 @@ namespace NewHorizons.Handlers
var skybox = GameObject.Find("Skybox/Starfield"); var skybox = GameObject.Find("Skybox/Starfield");
/* if (system.Config.skybox?.destroyStarField ?? false)
skybox.GetComponent<MeshRenderer>().material.shader = Shader.Find("Standard"); {
*/ Object.Destroy(skybox);
}
/* if (system.Config.skybox?.assetBundle != null && system.Config.skybox?.path != null)
var sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere); {
GameObject.Destroy(sphere.GetComponent<SphereCollider>()); SkyboxBuilder.Make(system.Config.skybox, system.Mod);
}
sphere.transform.parent = skybox.transform;
sphere.transform.localPosition = Vector3.zero;
var meshFilter = sphere.GetComponent<MeshFilter>();
meshFilter.mesh.triangles = meshFilter.mesh.triangles.Reverse().ToArray();
var meshRenderer = sphere.GetComponent<MeshRenderer>();
meshRenderer.material.color = Color.green;
*/
} }
} }

View File

@ -19,6 +19,25 @@
"destroyStockPlanets": { "destroyStockPlanets": {
"type": "bool", "type": "bool",
"description": "Do you want a clean slate for this star system? Or will it be a modified version of the original." "description": "Do you want a clean slate for this star system? Or will it be a modified version of the original."
},
"skybox": {
"type": "object",
"description": "Options for the skybox of your system",
"properties": {
"destroyStarField": {
"type": "boolean",
"description": "Whether to destroy the star field around the player (always set to true if `assetBundle` and `path` is set)",
"default": false
},
"assetBundle": {
"type": "string",
"description": "Path to the Unity asset bundle to load the skybox material from"
},
"path": {
"type": "string",
"description": "Path to the material within the asset bundle specified by `assetBundle` to use for the skybox"
}
}
} }
} }
} }