DirectorNamedColor.cs 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Globalization;
  4. using System.IO;
  5. using System.Reflection;
  6. using System.Text;
  7. using UnityEditor.Timeline;
  8. namespace UnityEngine.Timeline
  9. {
  10. [Serializable]
  11. class DirectorNamedColor : ScriptableObject
  12. {
  13. [SerializeField]
  14. public Color colorPlayhead;
  15. [SerializeField]
  16. public Color colorSelection;
  17. [SerializeField]
  18. public Color colorEndmarker;
  19. [SerializeField]
  20. public Color colorGroup;
  21. [SerializeField]
  22. public Color colorGroupTrackBackground;
  23. [SerializeField]
  24. public Color colorAnimation;
  25. [SerializeField]
  26. public Color colorAnimationRecorded;
  27. [SerializeField]
  28. public Color colorAudio;
  29. [SerializeField]
  30. public Color colorAudioWaveform;
  31. [SerializeField]
  32. public Color colorActivation;
  33. [SerializeField]
  34. public Color colorDropTarget;
  35. [SerializeField]
  36. public Color colorClipFont;
  37. [SerializeField]
  38. public Color colorInvalidClipOverlay;
  39. [SerializeField]
  40. public Color colorTrackBackground;
  41. [SerializeField]
  42. public Color colorTrackHeaderBackground;
  43. [SerializeField]
  44. public Color colorTrackDarken;
  45. [SerializeField]
  46. public Color colorTrackBackgroundRecording;
  47. [SerializeField]
  48. public Color colorInfiniteTrackBackgroundRecording;
  49. [SerializeField]
  50. public Color colorTrackBackgroundSelected;
  51. [SerializeField]
  52. public Color colorTrackFont;
  53. [SerializeField]
  54. public Color colorClipUnion;
  55. [SerializeField]
  56. public Color colorTopOutline3;
  57. [SerializeField]
  58. public Color colorDurationLine;
  59. [SerializeField]
  60. public Color colorRange;
  61. [SerializeField]
  62. public Color colorSequenceBackground;
  63. [SerializeField]
  64. public Color colorTooltipBackground;
  65. [SerializeField]
  66. public Color colorInfiniteClipLine;
  67. [SerializeField]
  68. public Color colorDefaultTrackDrawer;
  69. [SerializeField]
  70. public Color colorDuration = new Color(0.66f, 0.66f, 0.66f, 1.0f);
  71. [SerializeField]
  72. public Color colorRecordingClipOutline = new Color(1, 0, 0, 0.9f);
  73. [SerializeField]
  74. public Color colorAnimEditorBinding = new Color(54.0f / 255.0f, 54.0f / 255.0f, 54.0f / 255.0f);
  75. [SerializeField]
  76. public Color colorTimelineBackground = new Color(0.2f, 0.2f, 0.2f, 1.0f);
  77. [SerializeField]
  78. public Color colorLockTextBG = Color.red;
  79. [SerializeField]
  80. public Color colorInlineCurveVerticalLines = new Color(1.0f, 1.0f, 1.0f, 0.2f);
  81. [SerializeField]
  82. public Color colorInlineCurveOutOfRangeOverlay = new Color(0.0f, 0.0f, 0.0f, 0.5f);
  83. [SerializeField]
  84. public Color colorInlineCurvesBackground;
  85. [SerializeField]
  86. public Color markerDrawerBackgroundColor = new Color(0.4f, 0.4f, 0.4f , 1.0f);
  87. [SerializeField]
  88. public Color markerHeaderDrawerBackgroundColor = new Color(0.5f, 0.5f, 0.5f , 1.0f);
  89. [SerializeField]
  90. public Color colorControl = new Color(0.2313f, 0.6353f, 0.5843f, 1.0f);
  91. [SerializeField]
  92. public Color colorSubSequenceBackground = new Color(0.1294118f, 0.1764706f, 0.1764706f, 1.0f);
  93. [SerializeField]
  94. public Color colorTrackSubSequenceBackground = new Color(0.1607843f, 0.2156863f, 0.2156863f, 1.0f);
  95. [SerializeField]
  96. public Color colorTrackSubSequenceBackgroundSelected = new Color(0.0726923f, 0.252f, 0.252f, 1.0f);
  97. [SerializeField]
  98. public Color colorSubSequenceOverlay = new Color(0.02f, 0.025f, 0.025f, 0.30f);
  99. [SerializeField]
  100. public Color colorSubSequenceDurationLine = new Color(0.0f, 1.0f, 0.88f, 0.46f);
  101. [SerializeField]
  102. public Color clipBckg = new Color(0.5f, 0.5f, 0.5f, 1.0f);
  103. [SerializeField]
  104. public Color clipSelectedBckg = new Color(0.7f, 0.7f, 0.7f, 1.0f);
  105. [SerializeField]
  106. public Color clipBorderColor = new Color(0.4f, 0.4f, 0.4f, 1.0f);
  107. [SerializeField]
  108. public Color clipEaseBckgColor = new Color(0.4f, 0.4f, 0.4f, 1.0f);
  109. [SerializeField]
  110. public Color clipBlendIn;
  111. [SerializeField]
  112. public Color clipBlendInSelected;
  113. [SerializeField]
  114. public Color clipBlendOut;
  115. [SerializeField]
  116. public Color clipBlendOutSelected;
  117. public void SetDefault()
  118. {
  119. colorPlayhead = DirectorStyles.Instance.timeCursor.normal.textColor;
  120. colorSelection = DirectorStyles.Instance.selectedStyle.normal.textColor;
  121. colorEndmarker = DirectorStyles.Instance.endmarker.normal.textColor;
  122. colorGroup = new Color(0.094f, 0.357f, 0.384f, 0.310f);
  123. colorGroupTrackBackground = new Color(0f, 0f, 0f, 1f);
  124. colorAnimation = new Color(0.3f, 0.39f, 0.46f, 1.0f);
  125. colorAnimationRecorded = new Color(colorAnimation.r * 0.75f, colorAnimation.g * 0.75f, colorAnimation.b * 0.75f, 1.0f);
  126. colorAudio = new Color(1f, 0.635f, 0f);
  127. colorAudioWaveform = new Color(0.129f, 0.164f, 0.254f);
  128. colorActivation = Color.green;
  129. colorDropTarget = new Color(0.514f, 0.627f, 0.827f);
  130. colorClipFont = DirectorStyles.Instance.fontClip.normal.textColor;
  131. colorTrackBackground = new Color(0.2f, 0.2f, 0.2f, 1.0f);
  132. colorTrackBackgroundSelected = new Color(1f, 1f, 1f, 0.33f);
  133. colorInlineCurvesBackground = new Color(0.25f, 0.25f, 0.25f, 0.6f);
  134. colorTrackFont = DirectorStyles.Instance.trackHeaderFont.normal.textColor;
  135. colorClipUnion = new Color(0.72f, 0.72f, 0.72f, 0.8f);
  136. colorTopOutline3 = new Color(0.274f, 0.274f, 0.274f, 1.0f);
  137. colorDurationLine = new Color(33.0f / 255.0f, 109.0f / 255.0f, 120.0f / 255.0f);
  138. colorRange = new Color(0.733f, 0.733f, 0.733f, 0.70f);
  139. colorSequenceBackground = new Color(0.16f, 0.16f, 0.16f, 1.0f);
  140. colorTooltipBackground = new Color(29.0f / 255.0f, 32.0f / 255.0f, 33.0f / 255.0f);
  141. colorInfiniteClipLine = new Color(72.0f / 255.0f, 78.0f / 255.0f, 82.0f / 255.0f);
  142. colorTrackBackgroundRecording = new Color(1, 0, 0, 0.1f);
  143. colorTrackDarken = new Color(0.0f, 0.0f, 0.0f, 0.4f);
  144. colorTrackHeaderBackground = new Color(51.0f / 255.0f, 51.0f / 255.0f, 51.0f / 255.0f, 1.0f);
  145. colorDefaultTrackDrawer = new Color(218.0f / 255.0f, 220.0f / 255.0f, 222.0f / 255.0f);
  146. colorRecordingClipOutline = new Color(1, 0, 0, 0.9f);
  147. colorInlineCurveVerticalLines = new Color(1.0f, 1.0f, 1.0f, 0.2f);
  148. colorInlineCurveOutOfRangeOverlay = new Color(0.0f, 0.0f, 0.0f, 0.5f);
  149. }
  150. public void ToText(string path)
  151. {
  152. StringBuilder builder = new StringBuilder();
  153. var fields = GetType().GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);
  154. foreach (var f in fields)
  155. {
  156. if (f.FieldType != typeof(Color))
  157. continue;
  158. Color c = (Color)f.GetValue(this);
  159. builder.Append(f.Name + "," + c);
  160. builder.Append("\n");
  161. }
  162. File.WriteAllText(path, builder.ToString());
  163. }
  164. public void FromText(string text)
  165. {
  166. // parse to a map
  167. string[] lines = text.Split(new[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
  168. var map = new Dictionary<string, Color>();
  169. foreach (var line in lines)
  170. {
  171. var pieces = line.Replace("RGBA(", "").Replace(")", "").Split(',');
  172. if (pieces.Length == 5)
  173. {
  174. string name = pieces[0].Trim();
  175. Color c = Color.black;
  176. bool b = ParseFloat(pieces[1], out c.r) &&
  177. ParseFloat(pieces[2], out c.g) &&
  178. ParseFloat(pieces[3], out c.b) &&
  179. ParseFloat(pieces[4], out c.a);
  180. if (b)
  181. {
  182. map[name] = c;
  183. }
  184. }
  185. }
  186. var fields = typeof(DirectorNamedColor).GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);
  187. foreach (var f in fields)
  188. {
  189. if (f.FieldType != typeof(Color))
  190. continue;
  191. Color c = Color.black;
  192. if (map.TryGetValue(f.Name, out c))
  193. {
  194. f.SetValue(this, c);
  195. }
  196. }
  197. }
  198. // Case 938534 - Timeline window has white background when running on .NET 4.6 depending on the set system language
  199. // Make sure we're using an invariant culture so "0.35" is parsed as 0.35 and not 35
  200. static bool ParseFloat(string str, out float f)
  201. {
  202. return float.TryParse(str, NumberStyles.Any, CultureInfo.InvariantCulture, out f);
  203. }
  204. public static DirectorNamedColor CreateAndLoadFromText(string text)
  205. {
  206. DirectorNamedColor instance = CreateInstance<DirectorNamedColor>();
  207. instance.FromText(text);
  208. return instance;
  209. }
  210. }
  211. }