18 private float toolTipTimer = 0.0f;
19 public float ToolTipFadeTime = 0.25f;
20 public float ToolTipDelayTime = 0.5f;
25 private int focusedButtonId;
26 private int selectedButtonId;
27 private int dehydrateButtonId;
28 private int stayFocusedButtonId;
29 private int colorPropertyId;
31 public delegate
void ActivateDelegate(
TestButton source);
34 public bool EnableActivation =
true;
36 private AnimatorControllerParameter[] animatorHashes;
37 private Material cachedToolTipMaterial;
42 get {
return focused; }
48 UpdateButtonAnimation();
53 private bool stayFocused;
54 public bool StayFocused
56 get {
return stayFocused; }
59 if (stayFocused != value)
62 UpdateButtonAnimation();
67 private bool selected;
70 get {
return selected; }
73 if (selected != value)
76 UpdateButtonAnimation();
83 if (focusedButtonId == 0)
85 focusedButtonId = Animator.StringToHash(
"Focused");
88 if (selectedButtonId == 0)
90 selectedButtonId = Animator.StringToHash(
"Selected");
93 if (dehydrateButtonId == 0)
95 dehydrateButtonId = Animator.StringToHash(
"Dehydrate");
98 if (stayFocusedButtonId == 0)
100 stayFocusedButtonId = Animator.StringToHash(
"StayFocused");
103 if (colorPropertyId == 0)
105 colorPropertyId = Shader.PropertyToID(
"_Color");
114 if (ToolTipRenderer != null)
116 cachedToolTipMaterial = ToolTipRenderer.material;
118 Color tipColor = cachedToolTipMaterial.GetColor(colorPropertyId);
120 cachedToolTipMaterial.SetColor(colorPropertyId, tipColor);
125 UpdateButtonAnimation();
128 private void Update()
130 if (ToolTipRenderer != null && (Focused && toolTipTimer < ToolTipFadeTime) || (!Focused && toolTipTimer > 0.0f))
133 toolTipTimer = toolTipTimer + (Focused ? Time.deltaTime : -Time.deltaTime);
136 if (Focused && toolTipTimer > ToolTipFadeTime)
138 toolTipTimer = ToolTipFadeTime;
140 else if (!Focused && toolTipTimer < 0.0f)
146 if (ToolTipRenderer != null)
148 Color tipColor = cachedToolTipMaterial.GetColor(colorPropertyId);
149 tipColor.a = Mathf.Clamp(toolTipTimer, 0, ToolTipFadeTime) / ToolTipFadeTime;
150 cachedToolTipMaterial.SetColor(colorPropertyId, tipColor);
157 if (ButtonAnimator != null && ButtonAnimator.isInitialized)
159 if (animatorHashes == null)
161 animatorHashes = ButtonAnimator.parameters;
164 for (
int i = 0; i < animatorHashes.Length; i++)
166 if (animatorHashes[i].nameHash == dehydrateButtonId)
168 ButtonAnimator.SetTrigger(dehydrateButtonId);
179 private void UpdateButtonAnimation()
181 if (ButtonAnimator != null && ButtonAnimator.gameObject.activeInHierarchy)
183 if (animatorHashes == null)
185 animatorHashes = ButtonAnimator.parameters;
188 for (
int i = 0; i < animatorHashes.Length; i++)
190 if (animatorHashes[i].nameHash == focusedButtonId)
192 ButtonAnimator.SetBool(focusedButtonId, Focused);
195 if (animatorHashes[i].nameHash == selectedButtonId)
197 ButtonAnimator.SetBool(selectedButtonId, Selected);
200 if (animatorHashes[i].nameHash == stayFocusedButtonId)
202 ButtonAnimator.SetBool(stayFocusedButtonId, StayFocused);
210 if (!EnableActivation)
215 Selected = !Selected;
217 if (Activated != null)
230 if (Focused && toolTipTimer == 0.0f)
232 toolTipTimer = -ToolTipDelayTime;
245 private void OnDestroy()
247 DestroyImmediate(cachedToolTipMaterial);