Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 62 additions & 22 deletions Source/Virgin_Kalactic/VirginGeneric/NodeUtilities.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
using KSP;
using UnityEngine;
using System.Collections.Generic;
using System.Linq;
using System.Data.Linq;


namespace NodeUtilities
Expand All @@ -13,64 +13,74 @@ public class NodeToggle : PartModule
[KSPEvent(guiActive = false, guiActiveEditor = true, guiName = "Show Nodes")]
public void ShowNodes()
{
MyDebugLog("ShowNodes: start");
this.Events["HideNodes"].active = true;
this.Events["ShowNodes"].active = false;
if (aNVisualList == null)
aNVisualList = new List<AttachNode>(part.attachNodes);

refreshANVisualList();

foreach (AttachNode node in aNVisualList)
{
createVisibleNode(node);
}
MyDebugLog("ShowNodes: end");
}

[KSPEvent(guiActive = false, guiActiveEditor = true, guiName = "Hide Nodes", active = false)]
public void HideNodes()
{
MyDebugLog("HideNodes: start");
this.Events["HideNodes"].active = false;
this.Events["ShowNodes"].active = true;

foreach (AttachNode node in aNVisualList)
{
node.icon.renderer.enabled = false;
}
MyDebugLog("HideNodes: end");
}


private List<AttachNode> aNList;
private List<AttachNode> aNVisualList;
//private Dictionary<string, bool> attachNodesStates = new Dictionary<string, bool>();

EditorVesselOverlays vesselOverlays;
Material crashTestNodeMaterial;

public override void OnStart(PartModule.StartState state)
{
//Debug.Log("NodeToggle Prep");
if (aNList == null && HighLogic.LoadedSceneIsEditor)
MyDebugLog("OnStart: start");
if (HighLogic.LoadedSceneIsEditor)
{
if (aNList == null)
{
MyDebugLog("Processing AttachNodes for: " + part.name);

Debug.Log("Processing AttachNodes for: " + part.name);

aNList = new List<AttachNode>(part.attachNodes);
Debug.Log("Nodes: " + aNList.Count);
aNList = new List<AttachNode>(part.attachNodes);
MyDebugLog("Nodes: " + aNList.Count);

foreach (AttachNode node in aNList)
{
Debug.Log("Node: " + node.id);
//attachNodesStates.Add(node.id, true);
populateToggle(node);
foreach (AttachNode node in aNList)
{
MyDebugLog("Node: " + node.id);
//attachNodesStates.Add(node.id, true);
populateToggle(node);
}
}

refreshANVisualList();
}


vesselOverlays = (EditorVesselOverlays)GameObject.FindObjectOfType(
typeof(EditorVesselOverlays));

crashTestNodeMaterial = vesselOverlays.CoMmarker.gameObject.renderer.material;
MyDebugLog("OnStart: end");
}

private void populateToggle(AttachNode node)
{
Debug.Log("-Creating Event for: " + node.id);
MyDebugLog("populateToggle: " + node.id);

BaseEvent item = new BaseEvent(new BaseEventList(part, this), node.GetHashCode().ToString(), () => toggle(node.GetHashCode()));

Expand All @@ -79,36 +89,40 @@ private void populateToggle(AttachNode node)
item.guiName = node.id + " || Active";

Events.Add(item);
MyDebugLog("populateToggle: end");
}

public void toggle(int caller)
{
MyDebugLog("toggle Start: " + caller);
int hashcode = caller.GetHashCode();
MyDebugLog(hashcode);
AttachNode node = aNList.Find(a => a.GetHashCode() == caller.GetHashCode());
MyDebugLog("Toggling Node: " + node.id);
AttachNode nodeVisual = aNVisualList.Find(a => a.GetHashCode() == caller.GetHashCode());
Debug.Log("Toggling Node: " + node.id);

MyDebugLog(nodeVisual);

if (part.attachNodes.Contains(node))
{
Debug.Log("Node Exists, Removing");
MyDebugLog("Node Exists, Removing");
part.attachNodes.Remove(node);
Events[node.GetHashCode().ToString()].guiName = node.id + " || Inactive";
enableVisualNodes(nodeVisual, false);
}
else
{
Debug.Log("Node Absent, Adding");
MyDebugLog("Node Absent, Adding");
part.attachNodes.Add(node);
MyDebugLog("attachNodes: " + node.id);
Events[node.GetHashCode().ToString()].guiName = node.id + " || Active";
enableVisualNodes(nodeVisual, true);
}
Debug.Log("Toggle Complete");
MyDebugLog("Toggle: end");
}

private void createVisibleNode(AttachNode node)
{

MyDebugLog("createVisibleNode: " + node);
if (!Events[node.GetHashCode().ToString()].guiName.Contains("Inactive"))
{

Expand All @@ -124,26 +138,52 @@ private void createVisibleNode(AttachNode node)
node.icon.transform.position = (this.part.transform.TransformPoint(node.position));
node.icon.renderer.enabled = true;
}
MyDebugLog("Toggle: end");
}

void enableVisualNodes(AttachNode node, bool isEnabled)
{
MyDebugLog("enableVisualNodes: start: node: " + node + " enabled: " + isEnabled);
if (this.Events["HideNodes"].active == true)
{
createVisibleNode(node);
MyDebugLog("Set Node: " + isEnabled);
node.icon.renderer.enabled = isEnabled;
}
MyDebugLog("enableVisualNodes: exit");
}

void resetVisualNodes(Part part)
{
MyDebugLog("createVisibleNode: " + part);
this.Events["HideNodes"].active = false;
this.Events["ShowNodes"].active = true;

foreach (AttachNode node in aNVisualList)
{
node.icon.renderer.enabled = false;
}
MyDebugLog("enableVisualNodes: exit");
}

// Populates ANVisualList with current attachNodes
void refreshANVisualList()
{
MyDebugLog("refreshANVisualList: start");
if (aNVisualList == null)
{
MyDebugLog("Setting aNVisualList");
aNVisualList = new List<AttachNode>(part.attachNodes);
}
MyDebugLog("refreshANVisualList: end");
}

// Pipe out debug if DEBUG constant is true.
void MyDebugLog(object message)
{
#if DEBUG
Debug.Log(message);
#endif
}
}
}