12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- using System.Collections.Generic;
- using UnityEditor;
- using UnityEditor.AnimatedValues;
- using UnityEngine;
- namespace EnhancedHierarchy.Icons {
- public sealed class SoundIcon : IconBase {
- private static AudioSource audioSource;
- private static AnimBool currentAnim;
- private static readonly Dictionary<AudioSource, AnimBool> sourcesAnim = new Dictionary<AudioSource, AnimBool>();
- private static Texture icon;
- public override string Name { get { return "Audio Source Icon"; } }
- public override float Width {
- get {
- if (audioSource == null || currentAnim == null)
- return 0f;
- return currentAnim.faded * (base.Width - 2f);
- }
- }
- public override Texture2D PreferencesPreview { get { return AssetPreview.GetMiniTypeThumbnail(typeof(AudioSource)); } }
- //public override string PreferencesTooltip { get { return "Some tag for the tooltip here"; } }
- static SoundIcon() {
- EditorApplication.update += () => {
- if (!Preferences.IsButtonEnabled(new SoundIcon()))
- return;
- foreach (var kvp in sourcesAnim)
- if (kvp.Key && kvp.Value != null)
- kvp.Value.target = kvp.Key.isPlaying;
- };
- }
- public override void Init() {
- if (!EnhancedHierarchy.IsGameObject)
- return;
- var comps = EnhancedHierarchy.Components;
- audioSource = null;
- for (var i = 0; i < comps.Count; i++)
- if (comps[i] is AudioSource) {
- audioSource = comps[i] as AudioSource;
- break;
- }
- if (!audioSource)
- return;
- if (!sourcesAnim.TryGetValue(audioSource, out currentAnim)) {
- sourcesAnim[audioSource] = currentAnim = new AnimBool(audioSource.isPlaying);
- currentAnim.valueChanged.AddListener(EditorApplication.RepaintHierarchyWindow);
- }
- }
- public override void DoGUI(Rect rect) {
- if (!EnhancedHierarchy.IsRepaintEvent || !EnhancedHierarchy.IsGameObject || !audioSource || Width <= 1f)
- return;
- using(ProfilerSample.Get()) {
- if (!icon)
- icon = EditorGUIUtility.ObjectContent(null, typeof(AudioSource)).image;
- rect.yMax -= 1f;
- rect.yMin += 1f;
- GUI.DrawTexture(rect, icon, ScaleMode.StretchToFill);
- }
- }
- }
- }
|