Skip to content

Commit

Permalink
Persist target filter settings
Browse files Browse the repository at this point in the history
  • Loading branch information
DRVeyl committed Jan 20, 2022
1 parent 518d79a commit 213a79a
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 50 deletions.
15 changes: 11 additions & 4 deletions src/RealAntennasProject/RACommNetScenario.cs
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ public override void OnAwake()
DestroyNetwork();
Debug.Log($"{ModTag} Ignore CommNetScenario ERR immediately after Homes rebuild logging.");
}
Targeting.TextureTools.Initialize();
MapSettings = new MapUI.Settings();
RebuildHomes();
if (CommNetEnabled) // Don't self-delete if we are not enabled.
Expand All @@ -64,6 +65,7 @@ public override void OnLoad(ConfigNode gameNode)
base.OnLoad(gameNode);
if (gameNode.HasNode("MapUISettings"))
ConfigNode.LoadObjectFromConfig(MapSettings, gameNode.GetNode("MapUISettings"));
Targeting.TextureTools.Load(gameNode);
}

public override void OnSave(ConfigNode gameNode)
Expand All @@ -72,6 +74,7 @@ public override void OnSave(ConfigNode gameNode)
var node = ConfigNode.CreateConfigFromObject(MapSettings);
node.name = "MapUISettings";
gameNode.AddNode(node);
Targeting.TextureTools.Save(gameNode);
}

private System.Collections.IEnumerator NotifyDisabled()
Expand Down Expand Up @@ -135,6 +138,8 @@ private void BuildHomes()

if (KopernicusNode != null)
{
var sb = StringBuilderCache.Acquire();
sb.Append($"{ModTag} Building homes: ");
foreach (ConfigNode bodyNode in KopernicusNode.GetNodes("Body"))
{
string t = bodyNode.GetValue("name");
Expand All @@ -149,11 +154,13 @@ private void BuildHomes()
bool result = false;
if (cityNode.TryGetValue("RACommNetStation", ref result) && result)
{
BuildHome(cityNode, body);
CommNetHome h = BuildHome(cityNode, body);
sb.Append($"{h.nodeName} ");
}
}
}
}
Debug.Log(sb.ToStringAndRelease());
}
}

Expand All @@ -163,20 +170,20 @@ private void UnloadHomes()
logger.Append($"{ModTag} Unloaded the following homes: ");
foreach (CommNetHome home in FindObjectsOfType<CommNetHome>())
{
logger.Append($"{home} ");
logger.Append($"{home.nodeName} ");
DestroyImmediate(home);
}
GroundStations.Clear();
Debug.Log(logger.ToStringAndRelease());
}

private void BuildHome(ConfigNode node, CelestialBody body)
private CommNetHome BuildHome(ConfigNode node, CelestialBody body)
{
GameObject newHome = new GameObject(body.name);
Network.RACommNetHome home = newHome.AddComponent<Network.RACommNetHome>();
home.Configure(node, body);
if (!GroundStations.ContainsKey(home.nodeName)) GroundStations.Add(home.nodeName, home);
Debug.Log($"{ModTag} Built: {home.name} {home.nodeName}");
return home;
}
}
}
11 changes: 4 additions & 7 deletions src/RealAntennasProject/Targeting/AntennaTargetGUI.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ enum SortMode { Alphabetical, Distance, VesselType, ParentBody, RFBand };
private string sLat = "0", sLon = "0", sAlt = "0", sAzimuth = "0", sElevation = "0", sForward = "0";
float deflection = 0;
private bool showTargetModeInfo = false;
private readonly Dictionary<string, bool> filters = new Dictionary<string, bool>();

public RealAntenna antenna { get; set; }

Expand All @@ -26,7 +25,6 @@ public void Start()
{
vessels.Clear();
vessels.AddRange(FlightGlobals.Vessels);
TextureTools.Setup(filters, true);
}

public void OnGUI()
Expand Down Expand Up @@ -68,10 +66,10 @@ void GUIDisplay(int windowID)
if (targetMode.mode == TargetMode.Vessel)
{
GUILayout.BeginHorizontal();
foreach (var category in TextureTools.categories)
foreach (var vType in TextureTools.vesselTypes)
{
if (TextureTools.textures.ContainsKey(category))
filters[category] = GUILayout.Toggle(filters[category], TextureTools.textures[category], HighLogic.Skin.button, GUILayout.Height(iconSize.y), GUILayout.Width(iconSize.x));
if (TextureTools.filterTextures.TryGetValue(vType, out Texture2D tex))
TextureTools.filterStates[vType] = GUILayout.Toggle(TextureTools.filterStates[vType], tex, HighLogic.Skin.button, GUILayout.Height(iconSize.y), GUILayout.Width(iconSize.x));
}
GUILayout.EndHorizontal();

Expand All @@ -83,8 +81,7 @@ void GUIDisplay(int windowID)
scrollVesselPos = GUILayout.BeginScrollView(scrollVesselPos, GUILayout.Height(200), GUILayout.ExpandWidth(true));
foreach (Vessel v in vessels)
{

if (filters.TryGetValue(TextureTools.GetKeyFromVesselType(v.vesselType), out bool show)
if (TextureTools.filterStates.TryGetValue(v.vesselType, out bool show)
&& show && GUILayout.Button(v.name))
{
var x = new ConfigNode(AntennaTarget.nodeName);
Expand Down
10 changes: 4 additions & 6 deletions src/RealAntennasProject/Targeting/RemoteAntennaControlUI.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,11 @@ class RemoteAntennaControlUI : MonoBehaviour
private enum SortMode { Alphabetical, VesselType, ParentBody, RFBand };
private SortMode sourceSortMode = SortMode.Alphabetical;
private readonly List<Vessel> sourceVessels = new List<Vessel>();
private readonly Dictionary<string, bool> filters = new Dictionary<string, bool>();

public void Start()
{
sourceVessels.Clear();
sourceVessels.AddRange(FlightGlobals.Vessels.Where(v => v.Connection is RACommNetVessel && v.Connection.Comm is RACommNode));
TextureTools.Setup(filters, true);
}

public void OnGUI()
Expand All @@ -30,10 +28,10 @@ public void OnGUI()
void GUIDisplay(int windowID)
{
GUILayout.BeginHorizontal();
foreach (var category in TextureTools.categories)
foreach (var vType in TextureTools.vesselTypes)
{
if (TextureTools.textures.ContainsKey(category))
filters[category] = GUILayout.Toggle(filters[category], TextureTools.textures[category], HighLogic.Skin.button, GUILayout.Height(iconSize.y), GUILayout.Width(iconSize.x));
if (TextureTools.filterTextures.TryGetValue(vType, out Texture2D tex))
TextureTools.filterStates[vType] = GUILayout.Toggle(TextureTools.filterStates[vType], tex, HighLogic.Skin.button, GUILayout.Height(iconSize.y), GUILayout.Width(iconSize.x));
}
GUILayout.EndHorizontal();
if (GUILayout.Button($"Sort Mode: {sourceSortMode}"))
Expand All @@ -44,7 +42,7 @@ void GUIDisplay(int windowID)
scrollSourcePos = GUILayout.BeginScrollView(scrollSourcePos, GUILayout.ExpandWidth(true));
foreach (var ra in from Vessel v in sourceVessels
from RealAntenna ra in (v.Connection?.Comm as RACommNode)?.RAAntennaList
where filters[TextureTools.GetKeyFromVesselType(v.vesselType)]
where TextureTools.filterStates[v.vesselType]
select ra)
{
GUILayout.BeginHorizontal();
Expand Down
84 changes: 51 additions & 33 deletions src/RealAntennasProject/Targeting/TextureTools.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,44 +6,62 @@ namespace RealAntennas.Targeting
{
public class TextureTools
{
public static Dictionary<string, Texture2D> textures = new Dictionary<string, Texture2D>();
public static List<string> categories = new List<string>();
public static readonly List<VesselType> vesselTypes = new List<VesselType>(16)
{
VesselType.Debris,
VesselType.Probe,
VesselType.Rover,
VesselType.Lander,
VesselType.Ship,
VesselType.Station,
VesselType.Base,
VesselType.Plane,
VesselType.Relay,
VesselType.EVA,
VesselType.Flag,
VesselType.SpaceObject,
VesselType.Unknown,
VesselType.DeployedScienceController,
};
public static readonly Dictionary<VesselType, Texture2D> filterTextures = new Dictionary<VesselType, Texture2D>(16);
public static readonly Dictionary<VesselType, bool> filterStates = new Dictionary<VesselType, bool>(16);
public static void Initialize()
{
if (categories.Count == 0)
{
categories.Add(GetKeyFromVesselType(VesselType.Debris));
categories.Add(GetKeyFromVesselType(VesselType.Probe));
categories.Add(GetKeyFromVesselType(VesselType.Rover));
categories.Add(GetKeyFromVesselType(VesselType.Lander));
categories.Add(GetKeyFromVesselType(VesselType.Ship));
categories.Add(GetKeyFromVesselType(VesselType.Station));
categories.Add(GetKeyFromVesselType(VesselType.Base));
categories.Add(GetKeyFromVesselType(VesselType.Plane));
categories.Add(GetKeyFromVesselType(VesselType.Relay));
categories.Add(GetKeyFromVesselType(VesselType.EVA));
categories.Add(GetKeyFromVesselType(VesselType.Flag));
categories.Add(GetKeyFromVesselType(VesselType.SpaceObject));
categories.Add(GetKeyFromVesselType(VesselType.Unknown));
categories.Add(GetKeyFromVesselType(VesselType.DeployedScienceController));
}
if (textures.Count == 0)
foreach (var t in Resources.FindObjectsOfTypeAll<Sprite>().Where(x => categories.Contains(x.name)))
textures[t.name] = TextureFromSprite(t);
var sprites = Resources.FindObjectsOfTypeAll<Sprite>();

if (filterTextures.Count == 0)
foreach (var t in vesselTypes)
{
string name = GetTextureNameFromVesselType(t);
if (sprites.FirstOrDefault(x => x.name == name) is Sprite s)
filterTextures[t] = TextureFromSprite(s);
}

if (filterStates.Count == 0)
foreach (var t in filterTextures.Keys)
filterStates[t] = true;
}

public static void Save(ConfigNode node)
{
ConfigNode n = new ConfigNode("FilterSettings");
foreach (var vType in vesselTypes)
if (filterStates.TryGetValue(vType, out bool val))
n.AddValue($"{vType}", val);
node.AddNode(n);
}

public static void Setup(Dictionary<string, bool> filters = null, bool setDefaults = false)
public static void Load(ConfigNode node)
{
Initialize();
if (setDefaults && filters != null)
ConfigNode n = null;
if (node.TryGetNode("FilterSettings", ref n))
{
foreach (var c in TextureTools.categories)
filters.Add(c, false);
filters[GetKeyFromVesselType(VesselType.Probe)] = true;
filters[GetKeyFromVesselType(VesselType.Relay)] = true;
filters[GetKeyFromVesselType(VesselType.Station)] = true;
filters[GetKeyFromVesselType(VesselType.Ship)] = true;
filters[GetKeyFromVesselType(VesselType.Lander)] = true;
foreach (var vType in vesselTypes)
{
bool val = false;
if (n.TryGetValue($"{vType}", ref val))
filterStates[vType] = val;
}
}
}

Expand Down Expand Up @@ -97,7 +115,7 @@ public static Texture2D TextureFromSprite(Sprite sprite)
return sprite.texture;
}

public static string GetKeyFromVesselType(VesselType vesselType)
public static string GetTextureNameFromVesselType(VesselType vesselType)
{
return vesselType switch
{
Expand Down

0 comments on commit 213a79a

Please sign in to comment.