diff --git a/NewHorizons/Builder/General/ShipLogBuilder.cs b/NewHorizons/Builder/General/ShipLogBuilder.cs index 52d9e4ee..6997b38f 100644 --- a/NewHorizons/Builder/General/ShipLogBuilder.cs +++ b/NewHorizons/Builder/General/ShipLogBuilder.cs @@ -168,10 +168,12 @@ namespace NewHorizons.Builder.General const float unviewedIconOffset = 15; ShipLogAstroObject astroObject = nodeGO.AddComponent(); astroObject._id = GetAstroObjectId(node.mainBody); + string imagePath = node.mainBody.Config.ShipLog?.mapMode?.revealedSprite ?? "DEFAULT"; string outlinePath = node.mainBody.Config.ShipLog?.mapMode?.outlineSprite ?? imagePath; astroObject._imageObj = CreateImage(nodeGO, node.mainBody.Mod.Assets, imagePath, node.mainBody.Config.Name + " Revealed", layer); astroObject._outlineObj = CreateImage(nodeGO, node.mainBody.Mod.Assets, outlinePath, node.mainBody.Config.Name + " Outline", layer); + astroObject._unviewedObj = Object.Instantiate(referenceUnviewedSprite, nodeGO.transform, false); if (node.mainBody.Config.FocalPoint != null) { @@ -181,6 +183,7 @@ namespace NewHorizons.Builder.General astroObject.transform.localScale = node.lastSibling.astroObject.transform.localScale; } astroObject._invisibleWhenHidden = node.mainBody.Config.ShipLog?.mapMode?.invisibleWhenHidden ?? false; + Rect imageRect = astroObject._imageObj.GetComponent().rect; astroObject._unviewedObj.transform.localPosition = new Vector3(imageRect.width / 2 + unviewedIconOffset, imageRect.height / 2 + unviewedIconOffset, 0); node.astroObject = astroObject; @@ -190,16 +193,28 @@ namespace NewHorizons.Builder.General { Vector2 fromPosition = node.astroObject.transform.localPosition; Vector2 toPosition = node.lastSibling.astroObject.transform.localPosition; - GameObject newLink = new GameObject(node.mainBody.Config.Name + " To " + node.lastSibling.mainBody.Config.Name + " Link_ShipLog"); + + GameObject newLink = new GameObject("Line_ShipLog"); newLink.layer = node.astroObject.gameObject.layer; newLink.SetActive(false); + RectTransform transform = newLink.AddComponent(); transform.SetParent(node.astroObject.transform.parent); Vector2 center = toPosition + (fromPosition - toPosition) / 2; transform.localPosition = new Vector3(center.x, center.y, -1); transform.localRotation = Quaternion.identity; transform.localScale = node.level % 2 == 0 ? new Vector3(node.astroObject.transform.localScale.x / 5f, Mathf.Abs(fromPosition.y - toPosition.y) / 100f, 1) : new Vector3(Mathf.Abs(fromPosition.x - toPosition.x) / 100f, node.astroObject.transform.localScale.y / 5f , 1); - newLink.AddComponent(); + Image linkImage = newLink.AddComponent(); + linkImage.color = new Color(0.28f, 0.28f, 0.5f, 0.28f); + + ShipLogModule.ShipLogDetailInfo linkDetailInfo = new ShipLogModule.ShipLogDetailInfo() + { + invisibleWhenHidden = node.mainBody.Config.ShipLog?.mapMode?.invisibleWhenHidden ?? false + }; + + ShipLogDetail linkDetail = newLink.AddComponent(); + linkDetail.Init(linkDetailInfo, linkImage, linkImage); + transform.SetParent(node.astroObject.transform); transform.SetAsFirstSibling(); newLink.SetActive(true); diff --git a/NewHorizons/Components/ShipLogDetail.cs b/NewHorizons/Components/ShipLogDetail.cs index 21059059..c6f77304 100644 --- a/NewHorizons/Components/ShipLogDetail.cs +++ b/NewHorizons/Components/ShipLogDetail.cs @@ -2,6 +2,7 @@ using OWML.Common; using UnityEngine; using UnityEngine.UI; +using Logger = NewHorizons.Utility.Logger; namespace NewHorizons.Components { @@ -20,17 +21,26 @@ namespace NewHorizons.Components outlineImage.enabled = false; } - public void UpdateState(bool parentRevealed) + public void UpdateState(ShipLogEntry.State parentState) { - if (parentRevealed) + switch (parentState) { - revealedImage.enabled = true; - outlineImage.enabled = false; - } - else - { - revealedImage.enabled = false; - outlineImage.enabled = !detailInfo.invisibleWhenHidden; + case ShipLogEntry.State.Explored: + outlineImage.enabled = false; + revealedImage.enabled = true; + break; + case ShipLogEntry.State.Rumored: + revealedImage.enabled = false; + outlineImage.enabled = true; + break; + case ShipLogEntry.State.Hidden: + revealedImage.enabled = false; + outlineImage.enabled = !detailInfo.invisibleWhenHidden; + break; + case ShipLogEntry.State.None: + revealedImage.enabled = false; + outlineImage.enabled = false; + break; } } } diff --git a/NewHorizons/Tools/Patches.cs b/NewHorizons/Tools/Patches.cs index 43316198..4c885417 100644 --- a/NewHorizons/Tools/Patches.cs +++ b/NewHorizons/Tools/Patches.cs @@ -544,10 +544,17 @@ namespace NewHorizons.Tools Component detail; if (child.TryGetComponent(typeof(ShipLogDetail), out detail)) { - (detail as ShipLogDetail)?.UpdateState(__instance._state == ShipLogEntry.State.Explored); + (detail as ShipLogDetail)?.UpdateState(__instance._state); } } } + + Transform lineObject = __instance.transform.Find("Line_ShipLog"); + if (lineObject != null) + { + ShipLogDetail lineDetail = lineObject.gameObject.GetComponent(); + lineDetail.UpdateState(__instance._state); + } } public static bool DisableShipLogSandFunnel()