Added grayscale if a planet is rumored but not explored

This commit is contained in:
Ben C 2022-02-08 16:04:24 -05:00
parent 464484a94d
commit 3d200a19db
3 changed files with 61 additions and 34 deletions

View File

@ -47,9 +47,10 @@ namespace NewHorizons.Builder.ShipLog
public static ShipLogAstroObject[][] ConstructMapMode(string systemName, GameObject transformParent, int layer) public static ShipLogAstroObject[][] ConstructMapMode(string systemName, GameObject transformParent, int layer)
{ {
MapModeObject rootObject = ConstructPrimaryNode(systemName); MapModeObject rootObject = ConstructPrimaryNode(systemName);
Material greyScaleMaterial = GameObject.Find(ShipLogHandler.PAN_ROOT_PATH + "/TimberHearth/Sprite").GetComponent<Image>().material;
if (rootObject.mainBody != null) if (rootObject.mainBody != null)
{ {
MakeAllNodes(ref rootObject, transformParent, layer); MakeAllNodes(ref rootObject, transformParent, greyScaleMaterial, layer);
} }
int maxAmount = Main.BodyDict[Main.Instance.CurrentStarSystem].Count; int maxAmount = Main.BodyDict[Main.Instance.CurrentStarSystem].Count;
@ -80,13 +81,13 @@ namespace NewHorizons.Builder.ShipLog
} }
} }
private static void MakeAllNodes(ref MapModeObject parentNode, GameObject parent, int layer) private static void MakeAllNodes(ref MapModeObject parentNode, GameObject parent, Material greyScaleMaterial, int layer)
{ {
MakeNode(ref parentNode, parent, layer); MakeNode(ref parentNode, parent, greyScaleMaterial, layer);
for (var i = 0; i < parentNode.children.Count; i++) for (var i = 0; i < parentNode.children.Count; i++)
{ {
MapModeObject child = parentNode.children[i]; MapModeObject child = parentNode.children[i];
MakeAllNodes(ref child, parent, layer); MakeAllNodes(ref child, parent, greyScaleMaterial, layer);
parentNode.children[i] = child; parentNode.children[i] = child;
} }
} }
@ -117,7 +118,7 @@ namespace NewHorizons.Builder.ShipLog
return newImageGO; return newImageGO;
} }
private static void CreateShipLogAstroObject(GameObject nodeGO, ref MapModeObject node, GameObject referenceUnviewedSprite, int layer) private static void CreateShipLogAstroObject(GameObject nodeGO, ref MapModeObject node, GameObject referenceUnviewedSprite, Material greyScaleMaterial, int layer)
{ {
const float unviewedIconOffset = 15; const float unviewedIconOffset = 15;
ShipLogAstroObject astroObject = nodeGO.AddComponent<ShipLogAstroObject>(); ShipLogAstroObject astroObject = nodeGO.AddComponent<ShipLogAstroObject>();
@ -126,6 +127,14 @@ namespace NewHorizons.Builder.ShipLog
string imagePath = node.mainBody.Config.ShipLog?.mapMode?.revealedSprite ?? "DEFAULT"; string imagePath = node.mainBody.Config.ShipLog?.mapMode?.revealedSprite ?? "DEFAULT";
string outlinePath = node.mainBody.Config.ShipLog?.mapMode?.outlineSprite ?? imagePath; 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._imageObj = CreateImage(nodeGO, node.mainBody.Mod.Assets, imagePath, node.mainBody.Config.Name + " Revealed", layer);
if (ShipLogHandler.BodyHasEntries(node.mainBody))
{
Image revealedImage = astroObject._imageObj.GetComponent<Image>();
astroObject._greyscaleMaterial = greyScaleMaterial;
revealedImage.material = greyScaleMaterial;
revealedImage.color = Color.white;
astroObject._image = revealedImage;
}
astroObject._outlineObj = CreateImage(nodeGO, node.mainBody.Mod.Assets, outlinePath, node.mainBody.Config.Name + " Outline", layer); astroObject._outlineObj = CreateImage(nodeGO, node.mainBody.Mod.Assets, outlinePath, node.mainBody.Config.Name + " Outline", layer);
astroObject._unviewedObj = Object.Instantiate(referenceUnviewedSprite, nodeGO.transform, false); astroObject._unviewedObj = Object.Instantiate(referenceUnviewedSprite, nodeGO.transform, false);
@ -143,7 +152,7 @@ namespace NewHorizons.Builder.ShipLog
node.astroObject = astroObject; node.astroObject = astroObject;
} }
private static void ConnectNodeToLastSibling(MapModeObject node) private static void ConnectNodeToLastSibling(MapModeObject node, Material greyScaleMaterial)
{ {
Vector2 fromPosition = node.astroObject.transform.localPosition; Vector2 fromPosition = node.astroObject.transform.localPosition;
Vector2 toPosition = node.lastSibling.astroObject.transform.localPosition; Vector2 toPosition = node.lastSibling.astroObject.transform.localPosition;
@ -167,14 +176,14 @@ namespace NewHorizons.Builder.ShipLog
}; };
ShipLogDetail linkDetail = newLink.AddComponent<ShipLogDetail>(); ShipLogDetail linkDetail = newLink.AddComponent<ShipLogDetail>();
linkDetail.Init(linkDetailInfo, linkImage, linkImage); linkDetail.Init(linkDetailInfo, linkImage, linkImage, greyScaleMaterial);
transform.SetParent(node.astroObject.transform); transform.SetParent(node.astroObject.transform);
transform.SetAsFirstSibling(); transform.SetAsFirstSibling();
newLink.SetActive(true); newLink.SetActive(true);
} }
private static void MakeDetail(ShipLogModule.ShipLogDetailInfo info, Transform parent, IModAssets assets) private static void MakeDetail(ShipLogModule.ShipLogDetailInfo info, Transform parent, IModAssets assets, Material greyScaleMaterial)
{ {
GameObject detailGameObject = new GameObject("Detail"); GameObject detailGameObject = new GameObject("Detail");
detailGameObject.transform.SetParent(parent); detailGameObject.transform.SetParent(parent);
@ -192,11 +201,11 @@ namespace NewHorizons.Builder.ShipLog
Image outlineImage = CreateImage(detailGameObject, assets, outlinePath, "Detail Outline", parent.gameObject.layer).GetComponent<Image>(); Image outlineImage = CreateImage(detailGameObject, assets, outlinePath, "Detail Outline", parent.gameObject.layer).GetComponent<Image>();
ShipLogDetail detail = detailGameObject.AddComponent<ShipLogDetail>(); ShipLogDetail detail = detailGameObject.AddComponent<ShipLogDetail>();
detail.Init(info, revealedImage, outlineImage); detail.Init(info, revealedImage, outlineImage, greyScaleMaterial);
detailGameObject.SetActive(true); detailGameObject.SetActive(true);
} }
private static void MakeDetails(MapModeObject node) private static void MakeDetails(MapModeObject node, Material greyScaleMaterial)
{ {
if (node.mainBody.Config.ShipLog?.mapMode?.details?.Length > 0) if (node.mainBody.Config.ShipLog?.mapMode?.details?.Length > 0)
{ {
@ -211,13 +220,13 @@ namespace NewHorizons.Builder.ShipLog
foreach (ShipLogModule.ShipLogDetailInfo detailInfo in node.mainBody.Config.ShipLog.mapMode.details) foreach (ShipLogModule.ShipLogDetailInfo detailInfo in node.mainBody.Config.ShipLog.mapMode.details)
{ {
MakeDetail(detailInfo, detailsTransform, node.mainBody.Mod.Assets); MakeDetail(detailInfo, detailsTransform, node.mainBody.Mod.Assets, greyScaleMaterial);
} }
detailsParent.SetActive(true); detailsParent.SetActive(true);
} }
} }
private static void MakeNode(ref MapModeObject node, GameObject parent, int layer) private static void MakeNode(ref MapModeObject node, GameObject parent, Material greyScaleMaterial, int layer)
{ {
const float padding = 250f; const float padding = 250f;
@ -246,9 +255,9 @@ namespace NewHorizons.Builder.ShipLog
transform.localPosition = new Vector3(position.x, position.y, 0); transform.localPosition = new Vector3(position.x, position.y, 0);
transform.localRotation = Quaternion.identity; transform.localRotation = Quaternion.identity;
transform.localScale = Vector3.one * scale; transform.localScale = Vector3.one * scale;
CreateShipLogAstroObject(newNodeGO, ref node, GameObject.Find("Ship_Body/Module_Cabin/Systems_Cabin/ShipLogPivot/ShipLog/ShipLogPivot/ShipLogCanvas/MapMode/ScaleRoot/PanRoot/TimberHearth/UnviewedIcon"), layer); CreateShipLogAstroObject(newNodeGO, ref node, GameObject.Find(ShipLogHandler.PAN_ROOT_PATH + "/TimberHearth/UnviewedIcon"), greyScaleMaterial, layer);
if (node.lastSibling != null) ConnectNodeToLastSibling(node); if (node.lastSibling != null) ConnectNodeToLastSibling(node, greyScaleMaterial);
MakeDetails(node); MakeDetails(node, greyScaleMaterial);
transform.SetAsFirstSibling(); transform.SetAsFirstSibling();
} }

View File

@ -1,4 +1,5 @@
using NewHorizons.External; using System;
using NewHorizons.External;
using OWML.Common; using OWML.Common;
using UnityEngine; using UnityEngine;
using UnityEngine.UI; using UnityEngine.UI;
@ -8,17 +9,19 @@ namespace NewHorizons.Components
{ {
public class ShipLogDetail : MonoBehaviour public class ShipLogDetail : MonoBehaviour
{ {
private Image revealedImage; private Image _revealedImage;
private Image outlineImage; private Image _outlineImage;
private ShipLogModule.ShipLogDetailInfo detailInfo; private Material _greyScaleMaterial;
private ShipLogModule.ShipLogDetailInfo _detailInfo;
public void Init(ShipLogModule.ShipLogDetailInfo info, Image revealed, Image outline) public void Init(ShipLogModule.ShipLogDetailInfo info, Image revealed, Image outline, Material greyScale)
{ {
detailInfo = info; _detailInfo = info;
revealedImage = revealed; _revealedImage = revealed;
outlineImage = outline; _outlineImage = outline;
revealedImage.enabled = false; _greyScaleMaterial = greyScale;
outlineImage.enabled = false; _revealedImage.enabled = false;
_outlineImage.enabled = false;
} }
public void UpdateState(ShipLogEntry.State parentState) public void UpdateState(ShipLogEntry.State parentState)
@ -26,22 +29,32 @@ namespace NewHorizons.Components
switch (parentState) switch (parentState)
{ {
case ShipLogEntry.State.Explored: case ShipLogEntry.State.Explored:
outlineImage.enabled = false; _outlineImage.enabled = false;
revealedImage.enabled = true; _revealedImage.enabled = true;
SetGreyScale(false);
break; break;
case ShipLogEntry.State.Rumored: case ShipLogEntry.State.Rumored:
revealedImage.enabled = false; _outlineImage.enabled = false;
outlineImage.enabled = true; _revealedImage.enabled = true;
SetGreyScale(true);
break; break;
case ShipLogEntry.State.Hidden: case ShipLogEntry.State.Hidden:
revealedImage.enabled = false; _revealedImage.enabled = false;
outlineImage.enabled = !detailInfo.invisibleWhenHidden; _outlineImage.enabled = !_detailInfo.invisibleWhenHidden;
break; break;
case ShipLogEntry.State.None: case ShipLogEntry.State.None:
revealedImage.enabled = false; _revealedImage.enabled = false;
outlineImage.enabled = false; _outlineImage.enabled = false;
break;
default:
Logger.LogError("Invalid ShipLogEntryState for " + _revealedImage.transform.parent.parent.gameObject.name);
break; break;
} }
} }
private void SetGreyScale(bool greyScale)
{
_revealedImage.material = (greyScale ? _greyScaleMaterial : null);
}
} }
} }

View File

@ -33,7 +33,7 @@ namespace NewHorizons.Builder.Handlers
public static string GetAstroObjectId(NewHorizonsBody body) public static string GetAstroObjectId(NewHorizonsBody body)
{ {
if (_astroIdToBody.ContainsValue(body)) if (BodyHasEntries(body))
{ {
return CollectionUtilities.KeyByValue(_astroIdToBody, body); return CollectionUtilities.KeyByValue(_astroIdToBody, body);
} }
@ -42,5 +42,10 @@ namespace NewHorizons.Builder.Handlers
return body.Config.Name; return body.Config.Name;
} }
} }
public static bool BodyHasEntries(NewHorizonsBody body)
{
return _astroIdToBody.ContainsValue(body);
}
} }
} }