You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

110 lines
3.7 KiB
C#

3 years ago
using UnityEditor;
using UnityEngine;
namespace FluffyGroomingTool {
public class ToastMessage {
private GUIStyle style;
private GUIStyle textStyle;
private EditorDeltaTime deltaTime = new EditorDeltaTime();
public string messageText = "";
private float showAmount = 0.001f;
private Color textCol = Color.white;
private Texture2D texture;
public bool show;
public bool isFinished;
public bool isCollapsed;
private float hideTimeStamp = -1f;
private static readonly float DEFAULT_SHOW_DURATION = 3f;
public int fixedColorIndex = -1;
private Color32[] colors = new Color32[] {
PainterBrushTypeUI.pink,
PainterBrushTypeUI.orange,
PainterBrushTypeUI.green,
PainterBrushTypeUI.cyan,
PainterBrushTypeUI.blue
};
public void drawMessage(float width) {
checkIfToastIsFinished();
createResources();
updateShowAmount();
drawUI(width);
}
private void createResources() {
if (textStyle == null || texture == null) {
textStyle = new GUIStyle(GUI.skin.label) {
fontStyle = FontStyle.Bold,
fontSize = 14,
alignment = TextAnchor.UpperCenter,
wordWrap = true,
};
textStyle.normal.textColor = textCol;
var colorIndex = fixedColorIndex == -1 ? Random.Range(0, colors.Length - 1) : fixedColorIndex;
texture = PainterBrushTypeUI.createColorBackground(colors[colorIndex]);
style = new GUIStyle {normal = {background = texture}};
}
}
private void updateShowAmount() {
deltaTime.Update();
if (deltaTime.deltaTime > 0) {
var speed = 12f;
if (show) {
showAmount += (1f - showAmount) * speed * deltaTime.deltaTime;
}
else {
showAmount += -showAmount * speed * deltaTime.deltaTime;
}
}
showAmount = Mathf.Clamp01(showAmount);
textCol.a = showAmount;
}
private void checkIfToastIsFinished() {
if (hideTimeStamp > -1f && EditorApplication.timeSinceStartup > hideTimeStamp) {
show = false;
if (showAmount < 0.001f) {
isFinished = true;
}
}
}
private void drawUI(float width) {
if (Event.current.type == EventType.Layout) {
if (!show && showAmount < 0.01f) {
isCollapsed = true;
}
else if (show) {
isCollapsed = false;
}
}
if (!isCollapsed) {
var size = textStyle.CalcHeight(new GUIContent(messageText), width);
GUILayout.BeginVertical(style, GUILayout.Height(size * 1.2f * showAmount));
GUILayout.Space(5 * showAmount);
GUILayout.Space((-size * 0.1f + size * 0.1f * showAmount));
GUILayout.Label(messageText, textStyle, GUILayout.Height(size * showAmount));
GUILayout.Space(5 * showAmount);
GUILayout.EndVertical();
}
}
public void drawFixedMessage(bool doShow, float width) {
show = doShow;
drawMessage(width);
}
public ToastMessage autoHide() {
hideTimeStamp = (float) (EditorApplication.timeSinceStartup + DEFAULT_SHOW_DURATION);
return this;
}
}
}