123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288 |
- using System;
- using System.Collections.Generic;
- using System.Globalization;
- using System.IO;
- using System.Reflection;
- using System.Text;
- using UnityEditor.Timeline;
- namespace UnityEngine.Timeline
- {
- [Serializable]
- class DirectorNamedColor : ScriptableObject
- {
- [SerializeField]
- public Color colorPlayhead;
- [SerializeField]
- public Color colorSelection;
- [SerializeField]
- public Color colorEndmarker;
- [SerializeField]
- public Color colorGroup;
- [SerializeField]
- public Color colorGroupTrackBackground;
- [SerializeField]
- public Color colorAnimation;
- [SerializeField]
- public Color colorAnimationRecorded;
- [SerializeField]
- public Color colorAudio;
- [SerializeField]
- public Color colorAudioWaveform;
- [SerializeField]
- public Color colorActivation;
- [SerializeField]
- public Color colorDropTarget;
- [SerializeField]
- public Color colorClipFont;
- [SerializeField]
- public Color colorInvalidClipOverlay;
- [SerializeField]
- public Color colorTrackBackground;
- [SerializeField]
- public Color colorTrackHeaderBackground;
- [SerializeField]
- public Color colorTrackDarken;
- [SerializeField]
- public Color colorTrackBackgroundRecording;
- [SerializeField]
- public Color colorInfiniteTrackBackgroundRecording;
- [SerializeField]
- public Color colorTrackBackgroundSelected;
- [SerializeField]
- public Color colorTrackFont;
- [SerializeField]
- public Color colorClipUnion;
- [SerializeField]
- public Color colorTopOutline3;
- [SerializeField]
- public Color colorDurationLine;
- [SerializeField]
- public Color colorRange;
- [SerializeField]
- public Color colorSequenceBackground;
- [SerializeField]
- public Color colorTooltipBackground;
- [SerializeField]
- public Color colorInfiniteClipLine;
- [SerializeField]
- public Color colorDefaultTrackDrawer;
- [SerializeField]
- public Color colorDuration = new Color(0.66f, 0.66f, 0.66f, 1.0f);
- [SerializeField]
- public Color colorRecordingClipOutline = new Color(1, 0, 0, 0.9f);
- [SerializeField]
- public Color colorAnimEditorBinding = new Color(54.0f / 255.0f, 54.0f / 255.0f, 54.0f / 255.0f);
- [SerializeField]
- public Color colorTimelineBackground = new Color(0.2f, 0.2f, 0.2f, 1.0f);
- [SerializeField]
- public Color colorLockTextBG = Color.red;
- [SerializeField]
- public Color colorInlineCurveVerticalLines = new Color(1.0f, 1.0f, 1.0f, 0.2f);
- [SerializeField]
- public Color colorInlineCurveOutOfRangeOverlay = new Color(0.0f, 0.0f, 0.0f, 0.5f);
- [SerializeField]
- public Color colorInlineCurvesBackground;
- [SerializeField]
- public Color markerDrawerBackgroundColor = new Color(0.4f, 0.4f, 0.4f , 1.0f);
- [SerializeField]
- public Color markerHeaderDrawerBackgroundColor = new Color(0.5f, 0.5f, 0.5f , 1.0f);
- [SerializeField]
- public Color colorControl = new Color(0.2313f, 0.6353f, 0.5843f, 1.0f);
- [SerializeField]
- public Color colorSubSequenceBackground = new Color(0.1294118f, 0.1764706f, 0.1764706f, 1.0f);
- [SerializeField]
- public Color colorTrackSubSequenceBackground = new Color(0.1607843f, 0.2156863f, 0.2156863f, 1.0f);
- [SerializeField]
- public Color colorTrackSubSequenceBackgroundSelected = new Color(0.0726923f, 0.252f, 0.252f, 1.0f);
- [SerializeField]
- public Color colorSubSequenceOverlay = new Color(0.02f, 0.025f, 0.025f, 0.30f);
- [SerializeField]
- public Color colorSubSequenceDurationLine = new Color(0.0f, 1.0f, 0.88f, 0.46f);
- [SerializeField]
- public Color clipBckg = new Color(0.5f, 0.5f, 0.5f, 1.0f);
- [SerializeField]
- public Color clipSelectedBckg = new Color(0.7f, 0.7f, 0.7f, 1.0f);
- [SerializeField]
- public Color clipBorderColor = new Color(0.4f, 0.4f, 0.4f, 1.0f);
- [SerializeField]
- public Color clipEaseBckgColor = new Color(0.4f, 0.4f, 0.4f, 1.0f);
- [SerializeField]
- public Color clipBlendIn;
- [SerializeField]
- public Color clipBlendInSelected;
- [SerializeField]
- public Color clipBlendOut;
- [SerializeField]
- public Color clipBlendOutSelected;
- public void SetDefault()
- {
- colorPlayhead = DirectorStyles.Instance.timeCursor.normal.textColor;
- colorSelection = DirectorStyles.Instance.selectedStyle.normal.textColor;
- colorEndmarker = DirectorStyles.Instance.endmarker.normal.textColor;
- colorGroup = new Color(0.094f, 0.357f, 0.384f, 0.310f);
- colorGroupTrackBackground = new Color(0f, 0f, 0f, 1f);
- colorAnimation = new Color(0.3f, 0.39f, 0.46f, 1.0f);
- colorAnimationRecorded = new Color(colorAnimation.r * 0.75f, colorAnimation.g * 0.75f, colorAnimation.b * 0.75f, 1.0f);
- colorAudio = new Color(1f, 0.635f, 0f);
- colorAudioWaveform = new Color(0.129f, 0.164f, 0.254f);
- colorActivation = Color.green;
- colorDropTarget = new Color(0.514f, 0.627f, 0.827f);
- colorClipFont = DirectorStyles.Instance.fontClip.normal.textColor;
- colorTrackBackground = new Color(0.2f, 0.2f, 0.2f, 1.0f);
- colorTrackBackgroundSelected = new Color(1f, 1f, 1f, 0.33f);
- colorInlineCurvesBackground = new Color(0.25f, 0.25f, 0.25f, 0.6f);
- colorTrackFont = DirectorStyles.Instance.trackHeaderFont.normal.textColor;
- colorClipUnion = new Color(0.72f, 0.72f, 0.72f, 0.8f);
- colorTopOutline3 = new Color(0.274f, 0.274f, 0.274f, 1.0f);
- colorDurationLine = new Color(33.0f / 255.0f, 109.0f / 255.0f, 120.0f / 255.0f);
- colorRange = new Color(0.733f, 0.733f, 0.733f, 0.70f);
- colorSequenceBackground = new Color(0.16f, 0.16f, 0.16f, 1.0f);
- colorTooltipBackground = new Color(29.0f / 255.0f, 32.0f / 255.0f, 33.0f / 255.0f);
- colorInfiniteClipLine = new Color(72.0f / 255.0f, 78.0f / 255.0f, 82.0f / 255.0f);
- colorTrackBackgroundRecording = new Color(1, 0, 0, 0.1f);
- colorTrackDarken = new Color(0.0f, 0.0f, 0.0f, 0.4f);
- colorTrackHeaderBackground = new Color(51.0f / 255.0f, 51.0f / 255.0f, 51.0f / 255.0f, 1.0f);
- colorDefaultTrackDrawer = new Color(218.0f / 255.0f, 220.0f / 255.0f, 222.0f / 255.0f);
- colorRecordingClipOutline = new Color(1, 0, 0, 0.9f);
- colorInlineCurveVerticalLines = new Color(1.0f, 1.0f, 1.0f, 0.2f);
- colorInlineCurveOutOfRangeOverlay = new Color(0.0f, 0.0f, 0.0f, 0.5f);
- }
- public void ToText(string path)
- {
- StringBuilder builder = new StringBuilder();
- var fields = GetType().GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);
- foreach (var f in fields)
- {
- if (f.FieldType != typeof(Color))
- continue;
- Color c = (Color)f.GetValue(this);
- builder.Append(f.Name + "," + c);
- builder.Append("\n");
- }
- File.WriteAllText(path, builder.ToString());
- }
- public void FromText(string text)
- {
- // parse to a map
- string[] lines = text.Split(new[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
- var map = new Dictionary<string, Color>();
- foreach (var line in lines)
- {
- var pieces = line.Replace("RGBA(", "").Replace(")", "").Split(',');
- if (pieces.Length == 5)
- {
- string name = pieces[0].Trim();
- Color c = Color.black;
- bool b = ParseFloat(pieces[1], out c.r) &&
- ParseFloat(pieces[2], out c.g) &&
- ParseFloat(pieces[3], out c.b) &&
- ParseFloat(pieces[4], out c.a);
- if (b)
- {
- map[name] = c;
- }
- }
- }
- var fields = typeof(DirectorNamedColor).GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);
- foreach (var f in fields)
- {
- if (f.FieldType != typeof(Color))
- continue;
- Color c = Color.black;
- if (map.TryGetValue(f.Name, out c))
- {
- f.SetValue(this, c);
- }
- }
- }
- // Case 938534 - Timeline window has white background when running on .NET 4.6 depending on the set system language
- // Make sure we're using an invariant culture so "0.35" is parsed as 0.35 and not 35
- static bool ParseFloat(string str, out float f)
- {
- return float.TryParse(str, NumberStyles.Any, CultureInfo.InvariantCulture, out f);
- }
- public static DirectorNamedColor CreateAndLoadFromText(string text)
- {
- DirectorNamedColor instance = CreateInstance<DirectorNamedColor>();
- instance.FromText(text);
- return instance;
- }
- }
- }
|