using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Rendering; [CreateAssetMenu(fileName = "VisualStyle", menuName = "UniQuake/Visual Style", order = 1)] public class VisualStyle : ScriptableObject { [SerializeField] private Material aliasModelMaterial; [SerializeField] private Material brushModelMaterial; // TODO: not sure if this should be separate or combined into one entityMaterial [SerializeField] private Material worldModelMaterial; // TODO: split into wall, liquid, sky, etc // TODO: add particle effects public virtual void SetupAliasModelRenderer(MeshRenderer meshRenderer) { meshRenderer.material = new Material(aliasModelMaterial); meshRenderer.shadowCastingMode = ShadowCastingMode.Off; meshRenderer.receiveShadows = false; meshRenderer.lightProbeUsage = LightProbeUsage.Off; meshRenderer.reflectionProbeUsage = ReflectionProbeUsage.Off; } public virtual void SetupAliasModelRenderer(SkinnedMeshRenderer skinnedMeshRenderer) { skinnedMeshRenderer.material = new Material(aliasModelMaterial); skinnedMeshRenderer.shadowCastingMode = ShadowCastingMode.Off; skinnedMeshRenderer.receiveShadows = false; skinnedMeshRenderer.lightProbeUsage = LightProbeUsage.Off; skinnedMeshRenderer.reflectionProbeUsage = ReflectionProbeUsage.Off; } public virtual void SetupBrushModelRenderer(MeshRenderer meshRenderer) { meshRenderer.material = new Material(brushModelMaterial); meshRenderer.shadowCastingMode = ShadowCastingMode.Off; meshRenderer.receiveShadows = false; meshRenderer.lightProbeUsage = LightProbeUsage.Off; meshRenderer.reflectionProbeUsage = ReflectionProbeUsage.Off; } public virtual void SetupWorldModelRenderer(MeshRenderer meshRenderer) { meshRenderer.material = new Material(worldModelMaterial); meshRenderer.shadowCastingMode = ShadowCastingMode.Off; meshRenderer.receiveShadows = false; meshRenderer.lightProbeUsage = LightProbeUsage.Off; meshRenderer.reflectionProbeUsage = ReflectionProbeUsage.Off; } public virtual void SetAliasModelTextures(Material material, Texture2D mainTexture, Texture2D fullBright) { material.mainTexture = mainTexture; material.SetTexture("_EmissionMap", fullBright); material.SetColor("_EmissionColor", Color.white); if (fullBright != null) material.EnableKeyword("_EMISSION"); else material.DisableKeyword("_EMISSION"); } public virtual void SetBrushModelTextures(Material material, Texture2D mainTexture, Texture2D fullBright) { material.mainTexture = mainTexture; material.SetTexture("_EmissionMap", fullBright); material.SetColor("_EmissionColor", Color.white); if (fullBright != null) material.EnableKeyword("_EMISSION"); else material.DisableKeyword("_EMISSION"); } public virtual void SetWorldModelTextures(Material material, Texture2D mainTexture, Texture2D fullBright, Texture2D lightmap) { material.mainTexture = mainTexture; material.SetTexture("_EmissionMap", fullBright); material.SetColor("_EmissionColor", Color.white); if (fullBright != null) material.EnableKeyword("_EMISSION"); else material.DisableKeyword("_EMISSION"); // TODO: lightmap texture } }