Restructure

This commit is contained in:
TerrificTrifid 2023-04-21 16:50:33 -05:00
parent 3d94e07a98
commit df6c31d45e

View File

@ -23,22 +23,22 @@ namespace NewHorizons.Builder.Body
Texture2D smoothnessMap;
Texture2D normalMap;
Texture2D emissionMap;
Texture2D tileBlendMap;
Texture2D baseTextureTile;
Texture2D baseSmoothnessTile;
Texture2D baseNormalTile;
Texture2D redTextureTile;
Texture2D redSmoothnessTile;
Texture2D redNormalTile;
Texture2D greenTextureTile;
Texture2D greenSmoothnessTile;
Texture2D greenNormalTile;
Texture2D blueTextureTile;
Texture2D blueSmoothnessTile;
Texture2D blueNormalTile;
Texture2D alphaTextureTile;
Texture2D alphaSmoothnessTile;
Texture2D alphaNormalTile;
Texture2D tileBlendMap = null;
Texture2D baseTextureTile = null;
Texture2D baseSmoothnessTile = null;
Texture2D baseNormalTile = null;
Texture2D redTextureTile = null;
Texture2D redSmoothnessTile = null;
Texture2D redNormalTile = null;
Texture2D greenTextureTile = null;
Texture2D greenSmoothnessTile = null;
Texture2D greenNormalTile = null;
Texture2D blueTextureTile = null;
Texture2D blueSmoothnessTile = null;
Texture2D blueNormalTile = null;
Texture2D alphaTextureTile = null;
Texture2D alphaSmoothnessTile = null;
Texture2D alphaNormalTile = null;
try
{
if (!string.IsNullOrEmpty(module.heightMap) && !File.Exists(Path.Combine(mod.ModHelper.Manifest.ModFolderPath, module.heightMap)))
@ -73,22 +73,41 @@ namespace NewHorizons.Builder.Body
smoothnessMap = Load(module.smoothnessMap, "smoothnessMap", false);
normalMap = Load(module.normalMap, "normalMap", true);
emissionMap = Load(module.emissionMap, "emissionMap", false);
tileBlendMap = Load(module.tileBlendMap, "tileBlendMap", false);
baseTextureTile = Load(module.baseTile.textureTile, "baseTile textureTile", false);
baseSmoothnessTile = Load(module.baseTile.smoothnessTile, "baseTile smoothnessTile", false);
baseNormalTile = Load(module.baseTile.normalTile, "baseTile normalTile", true);
redTextureTile = Load(module.redTile.textureTile, "redTile textureTile", false);
redSmoothnessTile = Load(module.redTile.smoothnessTile, "redTile smoothnessTile", false);
redNormalTile = Load(module.redTile.normalTile, "redTile normalTile", true);
greenTextureTile = Load(module.greenTile.textureTile, "greenTile textureTile", false);
greenSmoothnessTile = Load(module.greenTile.smoothnessTile, "greenTile smoothnessTile", false);
greenNormalTile = Load(module.greenTile.normalTile, "greenTile normalTile", true);
blueTextureTile = Load(module.blueTile.textureTile, "blueTile textureTile", false);
blueSmoothnessTile = Load(module.blueTile.smoothnessTile, "blueTile smoothnessTile", false);
blueNormalTile = Load(module.blueTile.normalTile, "blueTile normalTile", true);
alphaTextureTile = Load(module.alphaTile.textureTile, "alphaTile textureTile", false);
alphaSmoothnessTile = Load(module.alphaTile.smoothnessTile, "alphaTile smoothnessTile", false);
alphaNormalTile = Load(module.alphaTile.normalTile, "alphaTile normalTile", true);
if (useLOD)
{
tileBlendMap = Load(module.tileBlendMap, "tileBlendMap", false);
if (module.baseTile != null)
{
baseTextureTile = Load(module.baseTile.textureTile, "baseTile textureTile", false);
baseSmoothnessTile = Load(module.baseTile.smoothnessTile, "baseTile smoothnessTile", false);
baseNormalTile = Load(module.baseTile.normalTile, "baseTile normalTile", true);
}
if (module.redTile != null)
{
redTextureTile = Load(module.redTile.textureTile, "redTile textureTile", false);
redSmoothnessTile = Load(module.redTile.smoothnessTile, "redTile smoothnessTile", false);
redNormalTile = Load(module.redTile.normalTile, "redTile normalTile", true);
}
if (module.greenTile != null)
{
greenTextureTile = Load(module.greenTile.textureTile, "greenTile textureTile", false);
greenSmoothnessTile = Load(module.greenTile.smoothnessTile, "greenTile smoothnessTile", false);
greenNormalTile = Load(module.greenTile.normalTile, "greenTile normalTile", true);
}
if (module.blueTile != null)
{
blueTextureTile = Load(module.blueTile.textureTile, "blueTile textureTile", false);
blueSmoothnessTile = Load(module.blueTile.smoothnessTile, "blueTile smoothnessTile", false);
blueNormalTile = Load(module.blueTile.normalTile, "blueTile normalTile", true);
}
if (module.alphaTile != null)
{
alphaTextureTile = Load(module.alphaTile.textureTile, "alphaTile textureTile", false);
alphaSmoothnessTile = Load(module.alphaTile.smoothnessTile, "alphaTile smoothnessTile", false);
alphaNormalTile = Load(module.alphaTile.normalTile, "alphaTile normalTile", true);
}
}
// If the texturemap is the same as the heightmap don't delete it #176
// Do the same with emissionmap
@ -111,16 +130,7 @@ namespace NewHorizons.Builder.Body
var emissionColor = module.emissionColor?.ToColor() ?? Color.white;
var level1 = MakeLODTerrain(
cubeSphere, heightMap, module.minHeight, module.maxHeight, resolution, stretch,
textureMap, smoothnessMap, module.smoothness, module.metallic, normalMap, module.normalStrength, emissionMap, emissionColor,
tileBlendMap,
module.baseTile.scale, baseTextureTile, baseSmoothnessTile, baseNormalTile, module.baseTile.normalStrength,
module.redTile.scale, redTextureTile, redSmoothnessTile, redNormalTile, module.redTile.normalStrength,
module.greenTile.scale, greenTextureTile, greenSmoothnessTile, greenNormalTile, module.greenTile.normalStrength,
module.blueTile.scale, blueTextureTile, blueSmoothnessTile, blueNormalTile, module.blueTile.normalStrength,
module.alphaTile.scale, alphaTextureTile, alphaSmoothnessTile, alphaNormalTile, module.alphaTile.normalStrength
);
var level1 = MakeLODTerrain(resolution, useLOD);
var cubeSphereMC = cubeSphere.AddComponent<MeshCollider>();
cubeSphereMC.sharedMesh = level1.gameObject.GetComponent<MeshFilter>().mesh;
@ -128,16 +138,7 @@ namespace NewHorizons.Builder.Body
if (useLOD)
{
var level2Res = (int)Mathf.Clamp(resolution / 2f, 1 /*cube moment*/, 100);
var level2 = MakeLODTerrain(
cubeSphere, heightMap, module.minHeight, module.maxHeight, level2Res, stretch,
textureMap, smoothnessMap, module.smoothness, module.metallic, normalMap, module.normalStrength, emissionMap, emissionColor,
default,
default, default, default, default, default,
default, default, default, default, default,
default, default, default, default, default,
default, default, default, default, default,
default, default, default, default, default
);
var level2 = MakeLODTerrain(level2Res, false);
var LODGroup = cubeSphere.AddComponent<LODGroup>();
LODGroup.size = module.maxHeight;
@ -170,108 +171,104 @@ namespace NewHorizons.Builder.Body
if (deleteHeightmapFlag) ImageUtilities.DeleteTexture(mod, module.heightMap, heightMap);
return cubeSphere;
}
// lol fuck the stack
private static MeshRenderer MakeLODTerrain(
GameObject root, Texture2D heightMap, float minHeight, float maxHeight, int resolution, Vector3 stretch,
Texture2D textureMap, Texture2D smoothnessMap, float smoothness, float metallic, Texture2D normalMap, float normalStrength, Texture2D emissionMap, Color emissionColor,
Texture2D tileBlendMap,
float baseScale, Texture2D baseTextureTile, Texture2D baseSmoothnessTile, Texture2D baseNormalTile, float baseNormalStrength,
float redScale, Texture2D redTextureTile, Texture2D redSmoothnessTile, Texture2D redNormalTile, float redNormalStrength,
float greenScale, Texture2D greenTextureTile, Texture2D greenSmoothnessTile, Texture2D greenNormalTile, float greenNormalStrength,
float blueScale, Texture2D blueTextureTile, Texture2D blueSmoothnessTile, Texture2D blueNormalTile, float blueNormalStrength,
float alphaScale, Texture2D alphaTextureTile, Texture2D alphaSmoothnessTile, Texture2D alphaNormalTile, float alphaNormalStrength
)
{
var LODCubeSphere = new GameObject("LODCubeSphere");
LODCubeSphere.AddComponent<MeshFilter>().mesh = CubeSphere.Build(resolution, heightMap, minHeight, maxHeight, stretch);
var cubeSphereMR = LODCubeSphere.AddComponent<MeshRenderer>();
var material = new Material(PlanetShader);
cubeSphereMR.material = material;
material.name = textureMap.name;
// string based property lookup. cry about it
material.mainTexture = textureMap;
material.SetFloat("_Smoothness", smoothness);
material.SetFloat("_Metallic", metallic);
material.SetTexture("_SmoothnessMap", smoothnessMap);
material.SetFloat("_BumpStrength", normalStrength);
material.SetTexture("_BumpMap", normalMap);
material.SetColor("_EmissionColor", emissionColor);
material.SetTexture("_EmissionMap", emissionMap);
material.SetTexture("_BlendMap", tileBlendMap);
if (baseTextureTile || baseSmoothnessTile || baseNormalTile)
MeshRenderer MakeLODTerrain(int resolution, bool useTriplanar)
{
material.EnableKeyword("BASE_TILE");
material.SetFloat("_BaseTileScale", baseScale);
material.SetTexture("_BaseTileAlbedo", baseTextureTile);
material.SetTexture("_BaseTileSmoothnessMap", baseSmoothnessTile);
material.SetFloat("_BaseTileBumpStrength", baseNormalStrength);
material.SetTexture("_BaseTileBumpMap", baseNormalTile);
}
else
{
material.DisableKeyword("BASE_TILE");
}
if (redTextureTile || redSmoothnessTile || redNormalTile)
{
material.EnableKeyword("RED_TILE");
material.SetFloat("_RedTileScale", redScale);
material.SetTexture("_RedTileAlbedo", redTextureTile);
material.SetTexture("_RedTileSmoothnessMap", redSmoothnessTile);
material.SetFloat("_RedTileBumpStrength", redNormalStrength);
material.SetTexture("_RedTileBumpMap", redNormalTile);
}
else
{
material.DisableKeyword("RED_TILE");
}
if (greenTextureTile || greenSmoothnessTile || greenNormalTile)
{
material.EnableKeyword("GREEN_TILE");
material.SetFloat("_GreenTileScale", greenScale);
material.SetTexture("_GreenTileAlbedo", greenTextureTile);
material.SetTexture("_GreenTileSmoothnessMap", greenSmoothnessTile);
material.SetFloat("_GreenTileBumpStrength", greenNormalStrength);
material.SetTexture("_GreenTileBumpMap", greenNormalTile);
}
else
{
material.DisableKeyword("GREEN_TILE");
}
if (blueTextureTile || blueSmoothnessTile || blueNormalTile)
{
material.EnableKeyword("BLUE_TILE");
material.SetFloat("_BlueTileScale", blueScale);
material.SetTexture("_BlueTileAlbedo", blueTextureTile);
material.SetTexture("_BlueTileSmoothnessMap", blueSmoothnessTile);
material.SetFloat("_BlueTileBumpStrength", blueNormalStrength);
material.SetTexture("_BlueTileBumpMap", blueNormalTile);
}
else
{
material.DisableKeyword("BLUE_TILE");
}
if (alphaTextureTile || alphaSmoothnessTile || alphaNormalTile)
{
material.EnableKeyword("ALPHA_TILE");
material.SetFloat("_AlphaTileScale", alphaScale);
material.SetTexture("_AlphaTileAlbedo", alphaTextureTile);
material.SetTexture("_AlphaTileSmoothnessMap", alphaSmoothnessTile);
material.SetFloat("_AlphaTileBumpStrength", alphaNormalStrength);
material.SetTexture("_AlphaTileBumpMap", alphaNormalTile);
}
else
{
material.DisableKeyword("ALPHA_TILE");
}
var LODCubeSphere = new GameObject("LODCubeSphere");
LODCubeSphere.transform.parent = root.transform;
LODCubeSphere.transform.localPosition = Vector3.zero;
LODCubeSphere.AddComponent<MeshFilter>().mesh = CubeSphere.Build(resolution, heightMap, module.minHeight, module.maxHeight, stretch);
return cubeSphereMR;
var cubeSphereMR = LODCubeSphere.AddComponent<MeshRenderer>();
var material = new Material(PlanetShader);
cubeSphereMR.material = material;
material.name = textureMap.name;
material.mainTexture = textureMap;
material.SetFloat("_Smoothness", module.smoothness);
material.SetFloat("_Metallic", module.metallic);
material.SetTexture("_SmoothnessMap", smoothnessMap);
material.SetFloat("_BumpStrength", module.normalStrength);
material.SetTexture("_BumpMap", normalMap);
material.SetColor("_EmissionColor", emissionColor);
material.SetTexture("_EmissionMap", emissionMap);
if (useTriplanar)
{
material.SetTexture("_BlendMap", tileBlendMap);
if (module.baseTile != null)
{
material.EnableKeyword("BASE_TILE");
material.SetFloat("_BaseTileScale", module.baseTile.scale);
material.SetTexture("_BaseTileAlbedo", baseTextureTile);
material.SetTexture("_BaseTileSmoothnessMap", baseSmoothnessTile);
material.SetFloat("_BaseTileBumpStrength", module.baseTile.normalStrength);
material.SetTexture("_BaseTileBumpMap", baseNormalTile);
}
else
{
material.DisableKeyword("BASE_TILE");
}
if (module.redTile != null)
{
material.EnableKeyword("RED_TILE");
material.SetFloat("_RedTileScale", module.redTile.scale);
material.SetTexture("_RedTileAlbedo", redTextureTile);
material.SetTexture("_RedTileSmoothnessMap", redSmoothnessTile);
material.SetFloat("_RedTileBumpStrength", module.redTile.normalStrength);
material.SetTexture("_RedTileBumpMap", redNormalTile);
}
else
{
material.DisableKeyword("RED_TILE");
}
if (module.greenTile != null)
{
material.EnableKeyword("GREEN_TILE");
material.SetFloat("_GreenTileScale", module.greenTile.scale);
material.SetTexture("_GreenTileAlbedo", greenTextureTile);
material.SetTexture("_GreenTileSmoothnessMap", greenSmoothnessTile);
material.SetFloat("_GreenTileBumpStrength", module.greenTile.normalStrength);
material.SetTexture("_GreenTileBumpMap", greenNormalTile);
}
else
{
material.DisableKeyword("GREEN_TILE");
}
if (module.blueTile != null)
{
material.EnableKeyword("BLUE_TILE");
material.SetFloat("_BlueTileScale", module.blueTile.scale);
material.SetTexture("_BlueTileAlbedo", blueTextureTile);
material.SetTexture("_BlueTileSmoothnessMap", blueSmoothnessTile);
material.SetFloat("_BlueTileBumpStrength", module.blueTile.normalStrength);
material.SetTexture("_BlueTileBumpMap", blueNormalTile);
}
else
{
material.DisableKeyword("BLUE_TILE");
}
if (module.alphaTile != null)
{
material.EnableKeyword("ALPHA_TILE");
material.SetFloat("_AlphaTileScale", module.alphaTile.scale);
material.SetTexture("_AlphaTileAlbedo", alphaTextureTile);
material.SetTexture("_AlphaTileSmoothnessMap", alphaSmoothnessTile);
material.SetFloat("_AlphaTileBumpStrength", module.alphaTile.normalStrength);
material.SetTexture("_AlphaTileBumpMap", alphaNormalTile);
}
else
{
material.DisableKeyword("ALPHA_TILE");
}
}
LODCubeSphere.transform.parent = cubeSphere.transform;
LODCubeSphere.transform.localPosition = Vector3.zero;
return cubeSphereMR;
}
}
}
}