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] protected Material entityMaterial; [SerializeField] protected Material worldMaterial; // TODO: split into wall, liquid, sky, etc // TODO: add particle effects public virtual Material CreateEntityMaterial() { return new Material(entityMaterial); } public virtual Material CreateWorldMaterial() { return new Material(worldMaterial); } public virtual void SetupEntityRenderer(MeshRenderer meshRenderer) { meshRenderer.shadowCastingMode = ShadowCastingMode.Off; meshRenderer.receiveShadows = false; meshRenderer.lightProbeUsage = LightProbeUsage.Off; meshRenderer.reflectionProbeUsage = ReflectionProbeUsage.Off; } public virtual void SetupEntityRenderer(SkinnedMeshRenderer skinnedMeshRenderer) { skinnedMeshRenderer.shadowCastingMode = ShadowCastingMode.Off; skinnedMeshRenderer.receiveShadows = false; skinnedMeshRenderer.lightProbeUsage = LightProbeUsage.Off; skinnedMeshRenderer.reflectionProbeUsage = ReflectionProbeUsage.Off; } public virtual void SetupWorldRenderer(MeshRenderer meshRenderer) { meshRenderer.shadowCastingMode = ShadowCastingMode.Off; meshRenderer.receiveShadows = false; meshRenderer.lightProbeUsage = LightProbeUsage.Off; meshRenderer.reflectionProbeUsage = ReflectionProbeUsage.Off; } public virtual void SetEntityTextures(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 SetWorldTextures(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 } }