public static void AddHighlight(GameObject gameobject, Color color, bool force = false) { if (aura != null) { Renderer[] renderers = gameobject.GetComponentsInChildren <Renderer>(); if (renderers != null) { foreach (Renderer renderer in renderers) { if (renderer.sharedMaterial.shader != aura.shader) { // TODO (hitch) find a better way to check if this is opaque or not, // right now we check the render queue (2000 = opaque, 2450 = alpha cutout) // this will also detect overlay materials as non-opaque // (<= 2500 is considered opaque, cutouts are barely opaque) Material mat = new Material(aura); if (renderer.sharedMaterial.renderQueue > 2000) { // FIXME (hitch) this probably isn't needed with the new depth test system ^_^ mat.mainTexture = renderer.sharedMaterial.mainTexture; } mat.color = color; if (renderer is MeshRenderer) { MeshFilter filter = renderer.GetComponent <MeshFilter>(); if (filter != null) { SpecialStates state = renderer.GetComponent <SpecialStates>(); if (force || (renderer.enabled && (state == null || !state.hideFromHighlighter))) { MeshRenderer nr = new GameObject().AddComponent <MeshRenderer>(); nr.transform.SetParent(renderer.transform); nr.transform.localPosition = Vector3.zero; nr.transform.localScale = Vector3.one; nr.receiveShadows = false; nr.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; nr.transform.localRotation = Quaternion.identity; nr.name = renderer.name + " (Aura)"; nr.sharedMaterial = mat; nr.gameObject.layer = highlightLayer; MeshFilter f = nr.gameObject.AddComponent <MeshFilter>(); f.sharedMesh = renderer.GetComponent <MeshFilter>().sharedMesh; } } } } } } } }
public virtual void HaveSpecialState(Mobile who,SpecialStates state) { foreach(Mobile.AuraReleaseTimer art in who.Auras) { } }