From fde1d36adac75479bf92ae5ee29a712660e99b13 Mon Sep 17 00:00:00 2001 From: Leonardo Ascione <112330494+rockfactory@users.noreply.github.com> Date: Sat, 17 Feb 2024 05:10:39 +0100 Subject: [PATCH] Add rendering for vessel report connections --- .../assets/bundles/commnext_ui.bundle | Bin 55576 -> 56634 bytes .../localizations/commnext_localizations.csv | 1 + .../Assets/Scenes/SampleScene.unity | 161 + .../Assets/Shaders/CommConnectionMat.mat | 3 + .../Shaders/CommConnectionShad.shadergraph | 5268 ++++++++++++++--- .../Assets/UI/CommNextStyles.uss | 2 +- src/CommNext/Network/NetworkManager.cs | 29 +- src/CommNext/Network/NetworkNode.cs | 2 +- src/CommNext/Patches/CommNetManagerPatches.cs | 3 + .../Behaviors/MapConnectionComponent.cs | 108 +- src/CommNext/Rendering/ConnectionsRenderer.cs | 82 +- src/CommNext/UI/LocalizedStrings.cs | 1 + src/CommNext/UI/Logic/ConnectionsQuery.cs | 5 + .../UI/VesselReportWindowController.cs | 20 +- 14 files changed, 4780 insertions(+), 905 deletions(-) diff --git a/plugin_template/assets/bundles/commnext_ui.bundle b/plugin_template/assets/bundles/commnext_ui.bundle index 43450850a5783568aab766673a2c7fc39289056a..50a59272fb0b84567b4e0383f7a72d2ed8847709 100644 GIT binary patch literal 56634 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 GetNodeConnections( break; } + // If the node has a connection in general, we want to highlight + // the _Outbound_ connections (since we are connected, we are interested + // in providing link to other sats), otherwise, we want to highlight the + // _Inbound_ connections (which are not valid, since the node is + // not connected). + var hasNodeCommNetConnection = previousIndices[nodeIndex] != -1; + for (var i = 0; i < length; i++) { var outboundConnection = jobConnections[i * length + nodeIndex]; var inboundConnection = jobConnections[nodeIndex * length + i]; var isConnected = outboundConnection.IsConnected || inboundConnection.IsConnected; + // Keep the occlusion state in sync + if (outboundConnection.IsOccluded && !inboundConnection.IsOccluded) + { + inboundConnection.IsOccluded = true; + inboundConnection.OccludingBody = outboundConnection.OccludingBody; + } + + if (inboundConnection.IsOccluded && !outboundConnection.IsOccluded) + { + outboundConnection.IsOccluded = true; + outboundConnection.OccludingBody = inboundConnection.OccludingBody; + } + var shouldAdd = nodesFilter switch { VesselNodesFilter.All => true, @@ -192,7 +212,9 @@ public List GetNodeConnections( _ => false }; - var shouldAddOutbound = isConnected ? outboundConnection.IsConnected : false; + // If we are connected, we want to highlight the _Outbound_ connections + // (since we are connected, we are interested in providing link to other sats). + var shouldAddOutbound = isConnected ? outboundConnection.IsConnected : hasNodeCommNetConnection; if (shouldAdd && shouldAddOutbound) { var targetNode = allNodes[i]; @@ -206,7 +228,10 @@ public List GetNodeConnections( )); } - var shouldAddInbound = isConnected ? inboundConnection.IsConnected : true; + // If we are not connected, we want to highlight the _Inbound_ connections + // (which are not valid, since the node is not connected). + // If this connection is present add it as well. + var shouldAddInbound = isConnected ? inboundConnection.IsConnected : !hasNodeCommNetConnection; if (shouldAdd && shouldAddInbound) { var sourceNode = allNodes[i]; diff --git a/src/CommNext/Network/NetworkNode.cs b/src/CommNext/Network/NetworkNode.cs index 7f9c3a7..7f66f63 100644 --- a/src/CommNext/Network/NetworkNode.cs +++ b/src/CommNext/Network/NetworkNode.cs @@ -17,7 +17,7 @@ public class NetworkNode /// /// Used only for debugging purposes. /// - public string DebugVesselName { get; private set; } = "N/A"; + public string DebugVesselName { get; set; } = "N/A"; public NetworkNode(IGGuid owner) { diff --git a/src/CommNext/Patches/CommNetManagerPatches.cs b/src/CommNext/Patches/CommNetManagerPatches.cs index c61dea5..cc2682d 100644 --- a/src/CommNext/Patches/CommNetManagerPatches.cs +++ b/src/CommNext/Patches/CommNetManagerPatches.cs @@ -1,5 +1,6 @@ using AwesomeTechnologies; using CommNext.Network; +using CommNext.UI; using HarmonyLib; using KSP.Game; using KSP.Sim; @@ -40,6 +41,8 @@ public static void SetSourceNode(CommNetManager __instance, ref ConnectionGraphN simObj.transform.Position = kscSimObj.transform.Position; newSourceNode.MaxRange = KSCMaxRange; + + NetworkManager.Instance.Nodes[newSourceNode.Owner].DebugVesselName = LocalizedStrings.KSCCommNet; } /// diff --git a/src/CommNext/Rendering/Behaviors/MapConnectionComponent.cs b/src/CommNext/Rendering/Behaviors/MapConnectionComponent.cs index d9241ef..388e2b4 100644 --- a/src/CommNext/Rendering/Behaviors/MapConnectionComponent.cs +++ b/src/CommNext/Rendering/Behaviors/MapConnectionComponent.cs @@ -16,19 +16,29 @@ public class MapConnectionComponent : MonoBehaviour, IMapComponent private LineRenderer _lineRenderer = null!; + private bool _isReportConnection; + public NetworkConnection? _networkConnection; + private bool _isSource; + public string Id { get; set; } = null!; private bool _isConnected; - private static readonly int MainColor = Shader.PropertyToID("_Color"); - // private static readonly Color LinkColor = new(0.440f, 1.436f, 0.606f, 1.0f); private static readonly Color LinkColor = new(0.212f, 0.765f, 0.345f, 1.0f); - - // private static readonly Color RelayColor = new(0.43f, 1.755f, 1.619f, 1.0f); private static readonly Color RelayColor = new(0.215f, 0.858f, 0.847f, 1.0f); + private static readonly Color InboundColor = new(0.19f, 0.35f, 1f, 1f); + private static readonly Color OutboundColor = new(0.71f, 0.35f, 0.86f, 1f); + private static readonly Color DisconnectedColor = new(1f, 0.36f, 0.28f, 1f); + + private static readonly int MainColor = Shader.PropertyToID("_Color"); + private static readonly int ReportProperty = Shader.PropertyToID("_Report"); + private static readonly int LengthProperty = Shader.PropertyToID("_Length"); + private static readonly int ConnectedProperty = Shader.PropertyToID("_Connected"); private MaterialPropertyBlock _materialPropertyBlock = null!; + public static float ScalingFactor = 10000.0f; + /// /// Encodes the connection ID based on the source and target items, /// considering the order of the items. @@ -48,7 +58,8 @@ private void Start() gameObject.layer = LayerMask.NameToLayer("Map"); } - public void Configure(Map3DFocusItem source, Map3DFocusItem target, + private void InternalConfigure( + Map3DFocusItem source, Map3DFocusItem target, NetworkNode sourceNetworkNode, NetworkNode targetNetworkNode, ConnectionGraphNode sourceNode, ConnectionGraphNode targetNode) { @@ -69,16 +80,74 @@ public void Configure(Map3DFocusItem source, Map3DFocusItem target, ); _lineRenderer.colorGradient = connectionGradient; + _isConnected = true; + } + + public void Configure(Map3DFocusItem source, Map3DFocusItem target, + NetworkNode sourceNetworkNode, NetworkNode targetNetworkNode, + ConnectionGraphNode sourceNode, ConnectionGraphNode targetNode) + { + InternalConfigure(source, target, sourceNetworkNode, targetNetworkNode, sourceNode, targetNode); + _materialPropertyBlock = new MaterialPropertyBlock(); var color = sourceNetworkNode.IsRelay && targetNetworkNode.IsRelay ? RelayColor : LinkColor; _materialPropertyBlock.SetColor(MainColor, color); _lineRenderer.SetPropertyBlock(_materialPropertyBlock); - _isConnected = true; + UpdateLinePositions(); + } + + /// + /// Highlights a NetworkConnection on the map. + /// It depends on the current NetworkNode to determine the color of the connection, + /// if it's inbound or outbound. + /// + /// + /// + /// + /// + public void ConfigureForReport( + Map3DFocusItem source, + Map3DFocusItem target, + NetworkConnection networkConnection, + NetworkNode currentNode) + { + InternalConfigure(source, target, + networkConnection.Source, networkConnection.Target, + networkConnection.SourceNode, networkConnection.TargetNode); + + _isReportConnection = true; + _networkConnection = networkConnection; + _isSource = networkConnection.IsSource(currentNode); + + _lineRenderer.startWidth = 0.3f; + _lineRenderer.endWidth = 0.3f; + + var connectionGradient = new Gradient(); + connectionGradient.SetKeys( + // Color is set in MainColor some lines below + [new GradientColorKey(Color.black, 0.0f), new GradientColorKey(Color.black, 1.0f)], + // We want quasi-constant alpha for these lines, since the direction is already + // highlighted by the arrows. + [new GradientAlphaKey(0.8f, 0.0f), new GradientAlphaKey(0.7f, 1.0f)] + ); + _lineRenderer.colorGradient = connectionGradient; + + // Set fixed properties, other shader properties will be updated in UpdateLinePositions + _materialPropertyBlock = new MaterialPropertyBlock(); + _materialPropertyBlock.SetFloat(ReportProperty, 1.0f); + _lineRenderer.SetPropertyBlock(_materialPropertyBlock); UpdateLinePositions(); } + public void SetNetworkConnection(NetworkConnection networkConnection) + { + _networkConnection = networkConnection; + // We assume "_isSource" cannot change since it's bound to active vessel. + // Changing it means for sure destroying this Component and creating a new one. + } + private void UpdateLinePositions() { var positions = new Vector3[10]; @@ -89,6 +158,27 @@ private void UpdateLinePositions() } _lineRenderer.SetPositions(positions); + + if (_isReportConnection) + { + var distance = Vector3.Distance(SourceItem!.transform.position, TargetItem!.transform.position); + + var color = !_networkConnection!.IsConnected ? DisconnectedColor : + _isSource ? OutboundColor : InboundColor; + + // If the distance is too big, we need to adjust the scaling factor since + // floating point precision is not enough. + // This means the arrow will be bigger for longer distances, but it's not a problem + // since this happens only when zooming in the map near the connection. + // I don't like it however, so I'm commenting it out for now. + var adjustedScalingFactor = /*distance > 1_000_000f ? ScalingFactor * 100f : + distance > 100_000f ? ScalingFactor * 10f :*/ ScalingFactor; + + _materialPropertyBlock.SetColor(MainColor, color); + _materialPropertyBlock.SetFloat(ConnectedProperty, _networkConnection.IsConnected ? 1.0f : 0.0f); + _materialPropertyBlock.SetFloat(LengthProperty, distance / adjustedScalingFactor); + _lineRenderer.SetPropertyBlock(_materialPropertyBlock); + } } public void Update() @@ -97,7 +187,8 @@ public void Update() if (SourceItem == null || TargetItem == null) { - ConnectionsRenderer.Instance.OnMapConnectionDestroyed(this); + if (_isReportConnection) ConnectionsRenderer.Instance.OnMapReportConnectionDestroyed(this); + else ConnectionsRenderer.Instance.OnMapConnectionDestroyed(this); return; } @@ -107,6 +198,7 @@ public void Update() public void OnDestroy() { if (!_isConnected) return; - ConnectionsRenderer.Instance.OnMapConnectionDestroyed(this); + if (_isReportConnection) ConnectionsRenderer.Instance.OnMapReportConnectionDestroyed(this); + else ConnectionsRenderer.Instance.OnMapConnectionDestroyed(this); } } \ No newline at end of file diff --git a/src/CommNext/Rendering/ConnectionsRenderer.cs b/src/CommNext/Rendering/ConnectionsRenderer.cs index 37699e1..8152f75 100644 --- a/src/CommNext/Rendering/ConnectionsRenderer.cs +++ b/src/CommNext/Rendering/ConnectionsRenderer.cs @@ -5,6 +5,7 @@ using CommNext.Network; using CommNext.Patches; using CommNext.Rendering.Behaviors; +using CommNext.UI; using CommNext.Unity.Runtime; using KSP.Game; using KSP.Map; @@ -27,6 +28,7 @@ public class ConnectionsRenderer : MonoBehaviour private readonly Dictionary _connections = new(); private readonly Dictionary _rulers = new(); + private readonly Dictionary _reportConnections = new(); private static Dictionary? AllMapItems => _mapCore.map3D.AllMapSelectableItems; private static MapCore _mapCore = null!; @@ -72,6 +74,18 @@ public bool IsRulersEnabled } } + private VesselComponent? _reportVessel; + + public VesselComponent? ReportVessel + { + get => _reportVessel; + set + { + ClearReportConnections(); + _reportVessel = value; + } + } + private void Start() { Instance = this; @@ -82,7 +96,7 @@ private void ToggleUpdateTaskIfNeeded() // We want to trigger them right away so that UI is updated // right after the UI click. // if (IsConnectionsEnabled || _isRulersEnabled) UpdateRenderings(); - var shouldBeRunning = IsConnectionsEnabled || _isRulersEnabled; + var shouldBeRunning = IsConnectionsEnabled || _isRulersEnabled || ReportVessel != null; switch (shouldBeRunning) { @@ -98,6 +112,7 @@ private void ToggleUpdateTaskIfNeeded() _updateTask = null; ClearConnections(); + ClearReportConnections(); ClearRulers(); break; } @@ -108,6 +123,7 @@ public void Initialize() Logger.LogInfo("Initializing ConnectionsRenderer"); // TODO MapCore loading ClearConnections(); + ClearReportConnections(); ClearRulers(); ConnectionsDisplayMode = ConnectionsDisplayMode.Lines; @@ -119,6 +135,12 @@ public void ClearConnections() _connections.Clear(); } + public void ClearReportConnections() + { + foreach (var connection in _reportConnections.Values) Destroy(connection.gameObject); + _reportConnections.Clear(); + } + public void ClearRulers() { foreach (var ruler in _rulers.Values) Destroy(ruler.gameObject); @@ -147,6 +169,7 @@ private void UpdateRenderings() try { if (IsConnectionsEnabled) UpdateConnections(nodes!, prevIndexes); + if (ReportVessel != null) UpdateReportConnections(); if (_isRulersEnabled) UpdateRulers(nodes!, prevIndexes); } catch (Exception e) @@ -230,6 +253,55 @@ private void UpdateConnections(List nodes, int[] prevIndexe } } + private void UpdateReportConnections() + { + if (ReportVessel == null) return; + if (!NetworkManager.Instance.Nodes.TryGetValue(ReportVessel.GlobalId, out var vesselNode)) + { + Logger.LogWarning($"Vessel node not found for {ReportVessel.GlobalId}. Untracking."); + ReportVessel = null; + return; + } + + // I don't like this. + var vesselConnections = MainUIManager.Instance.VesselReportWindow!.ReportVesselConnections; + + var keepIds = new List(); + foreach (var connection in vesselConnections) + { + var sourceItem = GetMapItem(connection.SourceNode); + var targetItem = GetMapItem(connection.TargetNode); + if (sourceItem == null || targetItem == null) continue; + + var connectionId = MapConnectionComponent.GetID(sourceItem, targetItem); + if (!_reportConnections.TryGetValue(connectionId, out var connectionComponent)) + { + var connectionObject = new GameObject($"MapCommReportConnection_{connectionId}"); + connectionObject.transform.SetParent(_mapCore.map3D.transform); + connectionComponent = connectionObject.AddComponent(); + connectionComponent.ConfigureForReport( + sourceItem, targetItem, + connection, vesselNode + ); + _reportConnections.Add(connectionId, connectionComponent); + } + else + { + connectionComponent.SetNetworkConnection(connection); + } + + keepIds.Add(connectionId); + } + + var removeIds = _reportConnections.Keys.Except(keepIds).ToList(); + foreach (var connectionId in removeIds) + { + var connection = _reportConnections[connectionId]; + Destroy(connection.gameObject); + _reportConnections.Remove(connectionId); + } + } + private void UpdateRulers(List nodes, int[] prevIndexes) { if (!GameManager.Instance.Game.Map.TryGetMapCore(out _mapCore)) @@ -293,6 +365,14 @@ public void OnMapConnectionDestroyed(MapConnectionComponent connection) _connections.Remove(connection.Id); } + public void OnMapReportConnectionDestroyed(MapConnectionComponent connection) + { + // This is wanted. + if (connection.gameObject != null) Destroy(connection.gameObject); + if (!_reportConnections.ContainsKey(connection.Id)) return; + _reportConnections.Remove(connection.Id); + } + public void OnMapRulerDestroyed(MapRulerComponent ruler) { if (ruler.gameObject != null) Destroy(ruler.gameObject); diff --git a/src/CommNext/UI/LocalizedStrings.cs b/src/CommNext/UI/LocalizedStrings.cs index e4eb7a2..8b2bc9c 100644 --- a/src/CommNext/UI/LocalizedStrings.cs +++ b/src/CommNext/UI/LocalizedStrings.cs @@ -21,6 +21,7 @@ public static class LocalizedStrings public static LocalizedString SortByBand = "CommNext/UI/SortByBand"; public static LocalizedString SortBySignalStrength = "CommNext/UI/SortBySignalStrength"; public static LocalizedString SortByName = "CommNext/UI/SortByName"; + public static LocalizedString KSCCommNet = "CommNext/Simulation/KSCCommNet"; // Only keys public const string DistanceLabelKey = "CommNext/UI/DistanceLabel"; diff --git a/src/CommNext/UI/Logic/ConnectionsQuery.cs b/src/CommNext/UI/Logic/ConnectionsQuery.cs index e99b9b1..ffdd726 100644 --- a/src/CommNext/UI/Logic/ConnectionsQuery.cs +++ b/src/CommNext/UI/Logic/ConnectionsQuery.cs @@ -16,6 +16,8 @@ public enum ConnectionsSort Name } + public event Action? Changed; + public VesselNodesFilter Filter = VesselNodesFilter.InRange; public ConnectionsSort Sort = ConnectionsSort.Distance; public SortDirection Direction = SortDirection.Descending; @@ -43,6 +45,7 @@ public void BindFilter(DropdownField dropdownField) dropdownField.RegisterValueChangedCallback(evt => { Filter = AllFilters.Find(f => f.Item2 == evt.newValue).Item1; + Changed?.Invoke(); }); } @@ -53,6 +56,7 @@ public void BindSort(DropdownField dropdownField) dropdownField.RegisterValueChangedCallback(evt => { Sort = AllSorts.Find(f => f.Item2 == evt.newValue).Item1; + Changed?.Invoke(); }); } @@ -60,6 +64,7 @@ public void BindDirection(SortDirectionButton button) { button.direction = Direction; button.directionChanged += direction => { Direction = direction; }; + Changed?.Invoke(); } private static readonly List<(VesselNodesFilter, string)> AllFilters = diff --git a/src/CommNext/UI/VesselReportWindowController.cs b/src/CommNext/UI/VesselReportWindowController.cs index fa7fb5c..74dc5f3 100644 --- a/src/CommNext/UI/VesselReportWindowController.cs +++ b/src/CommNext/UI/VesselReportWindowController.cs @@ -40,7 +40,13 @@ public class VesselReportWindowController : MonoBehaviour private DropdownField _filterDropdown = null!; private DropdownField _sortDropdown = null!; private SortDirectionButton _sortDirectionButton = null!; - private ConnectionsQuery _query = new(); + private readonly ConnectionsQuery _query = new(); + + /// + /// We cache here the connections of the vessel to avoid unnecessary allocations + /// in the ConnectionsRenderer. + /// + public List ReportVesselConnections = []; private bool _isWindowOpen; @@ -62,6 +68,12 @@ public bool IsWindowOpen _lastRefresh = 0f; BuildUI(); } + else + { + _vessel = null; + var instance = ConnectionsRenderer.Instance; + if (instance != null) instance.ReportVessel = null; + } } } @@ -69,6 +81,7 @@ public void OpenForVessel(VesselComponent vessel) { _vessel = vessel; AlignWindowToToolbar(); + ConnectionsRenderer.Instance.ReportVessel = vessel; IsWindowOpen = true; } @@ -107,6 +120,7 @@ private void OnEnable() _query.BindFilter(_filterDropdown); _query.BindSort(_sortDropdown); _query.BindDirection(_sortDirectionButton); + _query.Changed += BuildUI; // Get the close button from the window var closeButton = _root.Q