149 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			149 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | namespace SRDebugger.Services.Implementation | |||
|  | { | |||
|  |     using Internal; | |||
|  |     using SRF.Service; | |||
|  |     using UI.Other; | |||
|  |     using UnityEngine; | |||
|  | 
 | |||
|  |     [Service(typeof (IDockConsoleService))] | |||
|  |     public class DockConsoleServiceImpl : IDockConsoleService | |||
|  |     { | |||
|  |         private ConsoleAlignment _alignment; | |||
|  |         private DockConsoleController _consoleRoot; | |||
|  |         private bool _didSuspendTrigger; | |||
|  |         private bool _isExpanded = true; | |||
|  |         private bool _isVisible; | |||
|  | 
 | |||
|  |         public DockConsoleServiceImpl() | |||
|  |         { | |||
|  |             _alignment = Settings.Instance.ConsoleAlignment; | |||
|  |         } | |||
|  | 
 | |||
|  |         public bool IsVisible | |||
|  |         { | |||
|  |             get { return _isVisible; } | |||
|  | 
 | |||
|  |             set | |||
|  |             { | |||
|  |                 if (value == _isVisible) | |||
|  |                 { | |||
|  |                     return; | |||
|  |                 } | |||
|  | 
 | |||
|  |                 _isVisible = value; | |||
|  | 
 | |||
|  |                 if (_consoleRoot == null && value) | |||
|  |                 { | |||
|  |                     Load(); | |||
|  |                 } | |||
|  |                 else | |||
|  |                 { | |||
|  |                     _consoleRoot.CachedGameObject.SetActive(value); | |||
|  |                 } | |||
|  | 
 | |||
|  |                 CheckTrigger(); | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  |         public bool IsExpanded | |||
|  |         { | |||
|  |             get { return _isExpanded; } | |||
|  | 
 | |||
|  |             set | |||
|  |             { | |||
|  |                 if (value == _isExpanded) | |||
|  |                 { | |||
|  |                     return; | |||
|  |                 } | |||
|  | 
 | |||
|  |                 _isExpanded = value; | |||
|  | 
 | |||
|  |                 if (_consoleRoot == null && value) | |||
|  |                 { | |||
|  |                     Load(); | |||
|  |                 } | |||
|  |                 else | |||
|  |                 { | |||
|  |                     _consoleRoot.SetDropdownVisibility(value); | |||
|  |                 } | |||
|  | 
 | |||
|  |                 CheckTrigger(); | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  |         public ConsoleAlignment Alignment | |||
|  |         { | |||
|  |             get { return _alignment; } | |||
|  |             set | |||
|  |             { | |||
|  |                 _alignment = value; | |||
|  | 
 | |||
|  |                 if (_consoleRoot != null) | |||
|  |                 { | |||
|  |                     _consoleRoot.SetAlignmentMode(value); | |||
|  |                 } | |||
|  | 
 | |||
|  |                 CheckTrigger(); | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  |         private void Load() | |||
|  |         { | |||
|  |             var dockService = SRServiceManager.GetService<IPinnedUIService>(); | |||
|  | 
 | |||
|  |             if (dockService == null) | |||
|  |             { | |||
|  |                 Debug.LogError("[DockConsoleService] PinnedUIService not found"); | |||
|  |                 return; | |||
|  |             } | |||
|  | 
 | |||
|  |             var pinService = dockService as PinnedUIServiceImpl; | |||
|  | 
 | |||
|  |             if (pinService == null) | |||
|  |             { | |||
|  |                 Debug.LogError("[DockConsoleService] Expected IPinnedUIService to be PinnedUIServiceImpl"); | |||
|  |                 return; | |||
|  |             } | |||
|  | 
 | |||
|  |             _consoleRoot = pinService.DockConsoleController; | |||
|  | 
 | |||
|  |             _consoleRoot.SetDropdownVisibility(_isExpanded); | |||
|  |             _consoleRoot.IsVisible = _isVisible; | |||
|  |             _consoleRoot.SetAlignmentMode(_alignment); | |||
|  | 
 | |||
|  |             CheckTrigger(); | |||
|  |         } | |||
|  | 
 | |||
|  |         private void CheckTrigger() | |||
|  |         { | |||
|  |             ConsoleAlignment? triggerAlignment = null; | |||
|  |             var pinAlignment = Service.Trigger.Position; | |||
|  | 
 | |||
|  |             if (pinAlignment == PinAlignment.TopLeft || | |||
|  |                 pinAlignment == PinAlignment.TopRight || pinAlignment == PinAlignment.TopCenter) | |||
|  |             { | |||
|  |                 triggerAlignment = ConsoleAlignment.Top; | |||
|  |             } else if (pinAlignment == PinAlignment.BottomLeft || | |||
|  |                        pinAlignment == PinAlignment.BottomRight || | |||
|  |                        pinAlignment == PinAlignment.BottomCenter) | |||
|  |             { | |||
|  |                 triggerAlignment = ConsoleAlignment.Bottom; | |||
|  |             } | |||
|  | 
 | |||
|  |             var shouldHide = triggerAlignment.HasValue &&  IsVisible && Alignment == triggerAlignment.Value; | |||
|  | 
 | |||
|  |             // Show trigger if we have hidden it, and we no longer need to hide it. | |||
|  |             if (_didSuspendTrigger && !shouldHide) | |||
|  |             { | |||
|  |                 Service.Trigger.IsEnabled = true; | |||
|  |                 _didSuspendTrigger = false; | |||
|  |             } | |||
|  |             else if (Service.Trigger.IsEnabled && shouldHide) | |||
|  |             { | |||
|  |                 Service.Trigger.IsEnabled = false; | |||
|  |                 _didSuspendTrigger = true; | |||
|  |             } | |||
|  |         } | |||
|  |     } | |||
|  | } |