using Plane.CopterManagement; using Plane.Copters; using Plane.Messaging; using System.Collections.Generic; using System.Linq; namespace Plane.CopterControllers { /// /// 集中管理所有控制器。 /// public class CopterControllerManager : ICopterControllerManager { private CopterControllerBase[] _allControllers; private AvatarController _avatarController; private ICopterManager _copterManager; private FlyToController _flyToController; private KeyboardController _keyboardController; //private MicroController _microController; private HashSet _statesControllingRollPitch = new HashSet { CopterState.HoverMode, CopterState.FloatMode }; public CopterControllerManager(IPLMessenger messenger, ICopterManager copterManager, FlyToController flyToController, AvatarController avatarController, KeyboardController keyboardController) //, MicroController microController, ) { _copterManager = copterManager; _flyToController = flyToController; _avatarController = avatarController; //_microController = microController; _keyboardController = keyboardController; _allControllers = new CopterControllerBase[] { _flyToController, _avatarController, _keyboardController }; messenger.Register(this, m => { if (m.LandingStateAcceptsAvatar) _statesControllingRollPitch.Add(CopterState.Landing); else _statesControllingRollPitch.Remove(CopterState.Landing); }); } public bool IsControllingRollPitchUsingAvatar => _avatarController.IsEnabled && _statesControllingRollPitch.Contains(_copterManager.Copter.State) && !_copterManager.Copter.IsEmergencyHoverActive; public void EnableCopterControllers(CopterControllerTypes controllerTypes) { foreach (var controller in _allControllers) { controller.IsEnabled = controllerTypes.HasFlag(controller.Type); } } public bool IsControllerEnabled(CopterControllerTypes controllerType) { var controller = _allControllers.FirstOrDefault(c => c.Type == controllerType); return controller?.IsEnabled ?? false; } } }