A game about forced loneliness, made by TACStudios
at master 3.9 kB view raw
1using System; 2 3using UnityEditor; 4using UnityEngine; 5 6using Codice.Client.Common.Authentication; 7using PlasticGui; 8 9namespace Unity.PlasticSCM.Editor.UI.Progress 10{ 11 class ProgressControlsForDialogs : IProgressControls, IAuthenticationProgressControls 12 { 13 internal class Data 14 { 15 internal bool IsWaitingAsyncResult; 16 internal float ProgressPercent; 17 internal string ProgressMessage; 18 19 internal MessageType StatusType; 20 internal string StatusMessage; 21 22 internal void CopyInto(Data other) 23 { 24 other.IsWaitingAsyncResult = IsWaitingAsyncResult; 25 other.ProgressPercent = ProgressPercent; 26 other.ProgressMessage = ProgressMessage; 27 other.StatusType = StatusType; 28 other.StatusMessage = StatusMessage; 29 } 30 } 31 32 internal Data ProgressData { get { return mData; } } 33 34 internal void ForcedUpdateProgress(EditorWindow dialog) 35 { 36 double updateTime; 37 float progressPercent; 38 GetUpdateProgress( 39 mLastUpdateTime, mData.ProgressPercent, 40 out updateTime, out progressPercent); 41 42 mLastUpdateTime = updateTime; 43 44 if (!mData.IsWaitingAsyncResult) 45 return; 46 47 mData.ProgressPercent = progressPercent; 48 49 if (Event.current.type == EventType.Repaint) 50 dialog.Repaint(); 51 } 52 53 void IProgressControls.HideProgress() 54 { 55 InternalHideProgress(); 56 } 57 58 void IAuthenticationProgressControls.HideProgress() 59 { 60 InternalHideProgress(); 61 } 62 63 void InternalHideProgress() 64 { 65 mData.IsWaitingAsyncResult = false; 66 mData.ProgressMessage = string.Empty; 67 } 68 69 void IProgressControls.ShowProgress(string message) 70 { 71 InternalShowProgress(message); 72 } 73 74 void IAuthenticationProgressControls.ShowProgress(string message) 75 { 76 InternalShowProgress(message); 77 } 78 79 void InternalShowProgress(string message) 80 { 81 CleanStatusMessage(mData); 82 83 mData.IsWaitingAsyncResult = true; 84 mData.ProgressPercent = 0f; 85 mData.ProgressMessage = message; 86 } 87 88 void IProgressControls.ShowError(string message) 89 { 90 mData.StatusMessage = message; 91 mData.StatusType = MessageType.Error; 92 } 93 94 void IProgressControls.ShowNotification(string message) 95 { 96 mData.StatusMessage = message; 97 mData.StatusType = MessageType.Info; 98 } 99 100 void IProgressControls.ShowSuccess(string message) 101 { 102 mData.StatusMessage = message; 103 mData.StatusType = MessageType.Info; 104 } 105 106 void IProgressControls.ShowWarning(string message) 107 { 108 mData.StatusMessage = message; 109 mData.StatusType = MessageType.Warning; 110 } 111 112 static void CleanStatusMessage(Data data) 113 { 114 data.StatusMessage = string.Empty; 115 data.StatusType = MessageType.None; 116 } 117 118 static void GetUpdateProgress( 119 double lastUpdateTime, float lastProgressPercent, 120 out double updateTime, out float progressPercent) 121 { 122 updateTime = EditorApplication.timeSinceStartup; 123 124 double deltaTime = Math.Min(0.1, updateTime - lastUpdateTime); 125 double deltaPercent = (deltaTime / 0.1) * PERCENT_PER_SECONDS; 126 127 progressPercent = Mathf.Repeat( 128 lastProgressPercent + (float)deltaPercent, 1f); 129 } 130 131 double mLastUpdateTime = 0.0; 132 133 Data mData = new Data(); 134 135 const double PERCENT_PER_SECONDS = 0.06; 136 } 137}