using Noesis; using UnityEngine; using GUI = Noesis.GUI; using NoesisColor = Noesis.Color; using NoesisEventArgs = Noesis.EventArgs; namespace StellarConquest.Presentation.Unity.UI { public sealed class MapIndicatorControl : UserControl { private View _View; private FrameworkElement _Root; private Rectangle _Rectangle; private SCMinimalSVGButton _Button; public MapIndicatorControl() { if (!Application.isPlaying) return; Initialized += OnInitialized; InitializeComponent(); } private void InitializeComponent() { GUI.LoadComponent(this, "Assets/User Interface/Screens/Game/Static/Map/MapIndicatorControl.xaml"); Loaded += (sender, e) => { _View = View; _View.Rendering += OnRendering; }; Unloaded += (sender, e) => { _View.Rendering -= OnRendering; _View = null; }; _Root = Content as FrameworkElement; _Rectangle = _Root.FindName(nameof(_Rectangle)) as Rectangle; _Button = _Root.FindName(nameof(_Button)) as SCMinimalSVGButton; } private void OnInitialized(object sender, NoesisEventArgs args) { } public void SetSVG(NoesisColor color) { } private void OnRendering(object sender, NoesisEventArgs e) { if (SessionState.Instance.StarSystem == null) return; float scalar = 4; // position indicator in world space coordinates float z = (SessionState.Instance.StarSystem.AbsolutePositionZ) * scalar; GameState.Instance.MapShipIndicatorGameObject.transform.localPosition = new Vector3( SessionState.Instance.StarSystem.AbsolutePosition.X * scalar, z, SessionState.Instance.StarSystem.AbsolutePosition.Y * scalar); _Rectangle.Visibility = Visibility.Collapsed; //_Rectangle.Height = z; //_Rectangle.Margin = new Thickness(0, 0, 0, -z); // billboard faces camera Vector3 directionToCamera = GameState.Instance.MapShipIndicatorGameObject.transform.localPosition - InputManager.Instance.CurrentCamera.transform.position; GameState.Instance.MapShipIndicatorGameObject.transform.localRotation = Quaternion.LookRotation(directionToCamera); } } }