diff --git a/Assets/Scripts/Game/Entity.cs b/Assets/Scripts/Game/Entity.cs index 78d68a8..71599b6 100644 --- a/Assets/Scripts/Game/Entity.cs +++ b/Assets/Scripts/Game/Entity.cs @@ -145,22 +145,24 @@ public class Entity { var skin = skins[skinNumber >= 0 && skinNumber < skins.Count ? skinNumber : 0]; if (skin.Frames.Count > 0) - visualStyle.SetAliasModelTextures(material, skin.Frames[0].MainTexture, skin.Frames[0].FullBrightTexture); + visualStyle.SetEntityTextures(material, skin.Frames[0].MainTexture, skin.Frames[0].FullBrightTexture); } } private void AssignMeshRenderer() { + material = visualStyle.CreateEntityMaterial(); + if (aliasModel.IsAnimated) { - visualStyle.SetupAliasModelRenderer(skinnedMeshRenderer); - material = skinnedMeshRenderer.material; + visualStyle.SetupEntityRenderer(skinnedMeshRenderer); + skinnedMeshRenderer.material = material; skinnedMeshRenderer.enabled = true; } else { - visualStyle.SetupAliasModelRenderer(meshRenderer); - material = meshRenderer.material; + visualStyle.SetupEntityRenderer(meshRenderer); + meshRenderer.material = material; meshRenderer.enabled = true; } diff --git a/Assets/Scripts/Game/GameState.cs b/Assets/Scripts/Game/GameState.cs index b381f9c..25d1192 100644 --- a/Assets/Scripts/Game/GameState.cs +++ b/Assets/Scripts/Game/GameState.cs @@ -47,9 +47,10 @@ public class GameState var mf = meshGO.AddComponent(); var mr = meshGO.AddComponent(); mf.sharedMesh = surfaceMesh.Mesh; - + // TODO FIXME This is wrong for brush model entities - uq.CurrentStyle.SetupWorldModelRenderer(mr); // TODO FIXME this currently leaks Materials + uq.CurrentStyle.SetupWorldRenderer(mr); + mr.material = uq.CurrentStyle.CreateWorldMaterial(); // TODO FIXME this currently leaks Materials uint texNum = surfaceMesh.TextureNum; if (uq.GameAssets.TryGetTexture(texNum, out var texture)) @@ -57,7 +58,7 @@ public class GameState uint fbNum = surfaceMesh.FullBrightNum; uq.GameAssets.TryGetTexture(fbNum, out var fullBright); - uq.CurrentStyle.SetWorldModelTextures(mr.material, texture, fullBright, null); + uq.CurrentStyle.SetWorldTextures(mr.material, texture, fullBright, null); } } diff --git a/Assets/Scripts/VisualStyle.cs b/Assets/Scripts/VisualStyle.cs index 7445a27..21cf7ee 100644 --- a/Assets/Scripts/VisualStyle.cs +++ b/Assets/Scripts/VisualStyle.cs @@ -7,66 +7,48 @@ using UnityEngine.Rendering; public class VisualStyle : ScriptableObject { [SerializeField] - protected Material aliasModelMaterial; - - [SerializeField] - protected Material brushModelMaterial; // TODO: not sure if this should be separate or combined into one entityMaterial - + protected Material entityMaterial; + [SerializeField] - protected Material worldModelMaterial; // TODO: split into wall, liquid, sky, etc + 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 SetupAliasModelRenderer(MeshRenderer meshRenderer) + public virtual void SetupEntityRenderer(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) + public virtual void SetupEntityRenderer(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) + public virtual void SetupWorldRenderer(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) + public virtual void SetEntityTextures(Material material, Texture2D mainTexture, Texture2D fullBright) { material.mainTexture = mainTexture; @@ -79,7 +61,7 @@ public class VisualStyle : ScriptableObject material.DisableKeyword("_EMISSION"); } - public virtual void SetWorldModelTextures(Material material, Texture2D mainTexture, Texture2D fullBright, Texture2D lightmap) + public virtual void SetWorldTextures(Material material, Texture2D mainTexture, Texture2D fullBright, Texture2D lightmap) { material.mainTexture = mainTexture; diff --git a/Assets/Styles/GLQuake/GLQuake.asset b/Assets/Styles/GLQuake/GLQuake.asset index a9a09e9..a5495ac 100644 --- a/Assets/Styles/GLQuake/GLQuake.asset +++ b/Assets/Styles/GLQuake/GLQuake.asset @@ -12,6 +12,5 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 2df0cbad06a6ed5489201e395f9c5bb3, type: 3} m_Name: GLQuake m_EditorClassIdentifier: - aliasModelMaterial: {fileID: 2100000, guid: 4d7703ac1adf3534f89b4041b779ff5e, type: 2} - brushModelMaterial: {fileID: 2100000, guid: 4d7703ac1adf3534f89b4041b779ff5e, type: 2} - worldModelMaterial: {fileID: 2100000, guid: fcbaf32c00bea2344bbb1419c61364b6, type: 2} + entityMaterial: {fileID: 2100000, guid: 4d7703ac1adf3534f89b4041b779ff5e, type: 2} + worldMaterial: {fileID: 2100000, guid: fcbaf32c00bea2344bbb1419c61364b6, type: 2}