123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.Rendering;
- using UnityEngine.Serialization;
- namespace EPOOutline
- {
- [Flags]
- public enum ColorMask
- {
- None = 0,
- R = 1,
- G = 2,
- B = 4,
- A = 8
- }
- [System.Serializable]
- public class OutlineTarget
- {
- public bool IsVisible = false;
- [SerializeField]
- public ColorMask CutoutMask = ColorMask.A;
- [SerializeField]
- private float edgeDilateAmount = 5.0f;
- [SerializeField]
- private float frontEdgeDilateAmount = 5.0f;
- [SerializeField]
- private float backEdgeDilateAmount = 5.0f;
- [SerializeField]
- [FormerlySerializedAs("Renderer")]
- public Renderer renderer;
- [SerializeField]
- public int SubmeshIndex;
- [SerializeField]
- public BoundsMode BoundsMode = BoundsMode.Default;
- [SerializeField]
- public Bounds Bounds = new Bounds(Vector3.zero, Vector3.one);
- [SerializeField]
- [Range(0.0f, 1.0f)]
- public float CutoutThreshold = 0.5f;
- [SerializeField]
- public CullMode CullMode;
- [SerializeField]
- private string cutoutTextureName;
- [SerializeField]
- public DilateRenderMode DilateRenderingMode;
- [SerializeField]
- private int cutoutTextureIndex;
-
- private int? cutoutTextureId;
-
- public Renderer Renderer
- {
- get
- {
- return renderer;
- }
- }
- public bool UsesCutout
- {
- get
- {
- return !string.IsNullOrEmpty(cutoutTextureName);
- }
- }
- public int CutoutTextureIndex
- {
- get
- {
- return cutoutTextureIndex;
- }
- set
- {
- cutoutTextureIndex = value;
- if (cutoutTextureIndex < 0)
- {
- Debug.LogError("Trying to set cutout texture index less than zero");
- cutoutTextureIndex = 0;
- }
- }
- }
-
- public int ShiftedSubmeshIndex
- {
- get
- {
- return SubmeshIndex;
- }
- }
- public int CutoutTextureId
- {
- get
- {
- if (!cutoutTextureId.HasValue)
- cutoutTextureId = Shader.PropertyToID(cutoutTextureName);
- return cutoutTextureId.Value;
- }
- }
- public string CutoutTextureName
- {
- get
- {
- return cutoutTextureName;
- }
- set
- {
- cutoutTextureName = value;
- cutoutTextureId = null;
- }
- }
- public float EdgeDilateAmount
- {
- get
- {
- return edgeDilateAmount;
- }
- set
- {
- if (value < 0)
- edgeDilateAmount = 0;
- else
- edgeDilateAmount = value;
- }
- }
- public float FrontEdgeDilateAmount
- {
- get
- {
- return frontEdgeDilateAmount;
- }
- set
- {
- if (value < 0)
- frontEdgeDilateAmount = 0;
- else
- frontEdgeDilateAmount = value;
- }
- }
- public float BackEdgeDilateAmount
- {
- get
- {
- return backEdgeDilateAmount;
- }
- set
- {
- if (value < 0)
- backEdgeDilateAmount = 0;
- else
- backEdgeDilateAmount = value;
- }
- }
- public OutlineTarget()
- {
- }
- public OutlineTarget(Renderer renderer, int submesh = 0)
- {
- SubmeshIndex = submesh;
- this.renderer = renderer;
- CutoutThreshold = 0.5f;
- cutoutTextureId = null;
- cutoutTextureName = string.Empty;
- CullMode = renderer is SpriteRenderer ? CullMode.Off : CullMode.Back;
- DilateRenderingMode = DilateRenderMode.PostProcessing;
- frontEdgeDilateAmount = 5.0f;
- backEdgeDilateAmount = 5.0f;
- edgeDilateAmount = 5.0f;
- }
- public OutlineTarget(Renderer renderer, string cutoutTextureName, float cutoutThreshold = 0.5f)
- {
- SubmeshIndex = 0;
- this.renderer = renderer;
- cutoutTextureId = Shader.PropertyToID(cutoutTextureName);
- CutoutThreshold = cutoutThreshold;
- this.cutoutTextureName = cutoutTextureName;
- CullMode = renderer is SpriteRenderer ? CullMode.Off : CullMode.Back;
- DilateRenderingMode = DilateRenderMode.PostProcessing;
- frontEdgeDilateAmount = 5.0f;
- backEdgeDilateAmount = 5.0f;
- edgeDilateAmount = 5.0f;
- }
- }
- }
|