r2mods/ilspy_dump/ror2_csproj/RoR2/RandomizeSplatBias.cs

89 lines
2.4 KiB
C#

using System.Collections.Generic;
using UnityEngine;
namespace RoR2;
public class RandomizeSplatBias : MonoBehaviour
{
public float minRedBias;
public float maxRedBias;
public float minGreenBias;
public float maxGreenBias;
public float minBlueBias;
public float maxBlueBias;
private MaterialPropertyBlock _propBlock;
private CharacterModel characterModel;
private List<Material> materialsList;
private List<Renderer> rendererList;
private Shader printShader;
private void Start()
{
materialsList = new List<Material>();
rendererList = new List<Renderer>();
printShader = LegacyResourcesAPI.Load<Shader>("Shaders/Deferred/HGStandard");
Setup();
}
private void Setup()
{
characterModel = GetComponent<CharacterModel>();
if ((bool)characterModel)
{
for (int i = 0; i < characterModel.baseRendererInfos.Length; i++)
{
CharacterModel.RendererInfo rendererInfo = characterModel.baseRendererInfos[i];
Material material = Object.Instantiate(rendererInfo.defaultMaterial);
if (material.shader == printShader)
{
materialsList.Add(material);
rendererList.Add(rendererInfo.renderer);
rendererInfo.defaultMaterial = material;
characterModel.baseRendererInfos[i] = rendererInfo;
}
Renderer renderer = rendererList[i];
_propBlock = new MaterialPropertyBlock();
renderer.GetPropertyBlock(_propBlock);
_propBlock.SetFloat("_RedChannelBias", Random.Range(minRedBias, maxRedBias));
_propBlock.SetFloat("_BlueChannelBias", Random.Range(minBlueBias, maxBlueBias));
_propBlock.SetFloat("_GreenChannelBias", Random.Range(minGreenBias, maxGreenBias));
renderer.SetPropertyBlock(_propBlock);
}
}
else
{
Renderer componentInChildren = GetComponentInChildren<Renderer>();
Material material2 = Object.Instantiate(componentInChildren.material);
materialsList.Add(material2);
componentInChildren.material = material2;
_propBlock = new MaterialPropertyBlock();
componentInChildren.GetPropertyBlock(_propBlock);
_propBlock.SetFloat("_RedChannelBias", Random.Range(minRedBias, maxRedBias));
_propBlock.SetFloat("_BlueChannelBias", Random.Range(minBlueBias, maxBlueBias));
_propBlock.SetFloat("_GreenChannelBias", Random.Range(minGreenBias, maxGreenBias));
componentInChildren.SetPropertyBlock(_propBlock);
}
}
private void OnDestroy()
{
if (materialsList != null)
{
for (int i = 0; i < materialsList.Count; i++)
{
Object.Destroy(materialsList[i]);
}
}
}
}