protected void CreateZoneLineRenderer(RadiationLink lnk, AttenuationZone zn) { /// Create the components LineRenderer lr = CreateBasicRenderer(lnk.GO.transform); float valIn = -(float)Math.Log10(zn.attenuationOut) / 10f; float valOut = -(float)Math.Log10(zn.attenuationOut) / 10f; lr.SetColors(grad.Evaluate(valIn), grad.Evaluate(valOut)); // Set up the geometry float w = Mathf.Clamp(RadioactivitySettings.overlayRayWidthMin, RadioactivitySettings.overlayRayWidthMin, RadioactivitySettings.overlayRayWidthMax); lr.SetWidth(w, w); Vector3 zoneStart = lnk.source.EmitterTransform.position; Vector3 pVec = Vector3.Cross((zn.startPosition - zn.endPosition), Camera.main.transform.forward).normalized; lr.useWorldSpace = true; lr.SetPosition(0, zoneStart + (lnk.sink.SinkTransform.position - lnk.source.EmitterTransform.position).normalized * zn.dist1); lr.SetPosition(1, zoneStart + (lnk.sink.SinkTransform.position - lnk.source.EmitterTransform.position).normalized * zn.dist2); lr.useWorldSpace = false; //lr.SetPosition(0, zoneStart + zn.dist1 + pVec*w*0f); //lr.SetPosition(1, zoneStart + zn.dist2 + pVec * w * 0f); }
// Build new links for a new source in the network protected void BuildNewRadiationLink(RadioactiveSource src) { for (int i = 0; i < allRadSinks.Count; i++) { RadiationLink l = new RadiationLink(src, allRadSinks[i]); allLinks.Add(l); } }
// Build new link for a new sink in the network protected void BuildNewRadiationLink(RadioactiveSink snk) { for (int i = 0; i < allRadSources.Count; i++) { RadiationLink l = new RadiationLink(allRadSources[i], snk); allLinks.Add(l); } }
public void Update(RadiationLink lnk) { for (int i = 0; i < shownLinks.Count; i++) { if (shownLinks[i] == lnk) UpdateRenderer(lnk); } }
protected void UpdateRenderer(RadiationLink lnk) { DestroyZoneLineRenderers(lnk); for (int i = 0; i < lnk.Path.Count; i++) { CreateZoneLineRenderer(lnk, lnk.Path[i]); } }
public void Update(RadiationLink lnk) { for (int i = 0; i < shownLinks.Count; i++) { if (shownLinks[i] == lnk) { UpdateRenderer(lnk); } } }
protected void UpdatePathRenderer(RadiationLink lnk) { if (lnk.GO != null) { // lnk.OverlayPath.SetColors(Color.red, new Color(1f, Mathf.Log10((float)(1d / lnk.fluxEndScale)) / 10f, Mathf.Log10((float)(1d / lnk.fluxEndScale)) / 10f)); // lnk.OverlayPath.SetPosition(0, lnk.source.EmitterTransform.position); // lnk.OverlayPath.SetPosition(1, lnk.sink.SinkTransform.position); // float w = Mathf.Clamp(lnk.source.CurrentEmission *RadioactivitySettings.overlayRayWidthMult, RadioactivitySettings.overlayRayWidthMin, RadioactivitySettings.overlayRayWidthMax); // lnk.OverlayPath.SetWidth(w, w); } }
// Destroy the line renderer protected void DestroyRenderer(RadiationLink lnk) { if (lnk.GO) { Destroy(lnk.GO); } if (RadioactivitySettings.debugOverlay) { Utils.Log("Overlay: Hiding link between " + lnk.source.SourceID + " and " + lnk.sink.SinkID + " for render"); } }
protected void DestroyZoneLineRenderers(RadiationLink lnk) { if (lnk.GO != null) { int childs = lnk.GO.transform.childCount; for (int i = childs - 1; i >= 0; i--) { GameObject.Destroy(lnk.GO.transform.GetChild(i).gameObject); } } }
// Create and set up the line renderer protected void SetupRenderer(RadiationLink lnk) { lnk.GO = new GameObject("RadioactiveLinkRendererRoot"); if (HighLogic.LoadedSceneIsFlight) { lnk.GO.transform.SetParent(lnk.source.part.partTransform, true); //lnk.GO.transform.localRotation = Quaternion.identity; } else if (HighLogic.LoadedSceneIsEditor) { if (EditorLogic.fetch.ship != null) { } } for (int i = 0; i < lnk.Path.Count; i++) { CreateZoneLineRenderer(lnk, lnk.Path[i]); } if (RadioactivitySettings.debugOverlay) { Utils.Log("Overlay: Showing link between " + lnk.source.SourceID + " and " + lnk.sink.SinkID + " for render"); } }
// Build new link for a new sink in the network protected void BuildNewRadiationLink(RadioactiveSink snk) { for (int i=0; i< allRadSources.Count; i++) { RadiationLink l = new RadiationLink(allRadSources[i], snk); allLinks.Add(l); } }
public void Hide(RadiationLink lnk) { DestroyRenderer(lnk); shownLinks.Remove(lnk); }
public void Show(RadiationLink lnk) { SetupRenderer(lnk); shownLinks.Add(lnk); }
// Create and set up the line renderer protected void SetupRenderer(RadiationLink lnk) { lnk.GO = new GameObject("RadioactiveLinkRendererRoot"); if (HighLogic.LoadedSceneIsFlight) { lnk.GO.transform.SetParent(lnk.source.part.partTransform, true); //lnk.GO.transform.localRotation = Quaternion.identity; } else if (HighLogic.LoadedSceneIsEditor) { if (EditorLogic.fetch.ship != null) { } } for (int i = 0; i < lnk.Path.Count; i++) { CreateZoneLineRenderer(lnk, lnk.Path[i]); } if (RadioactivitySettings.debugOverlay) Utils.Log("Overlay: Showing link between " + lnk.source.SourceID + " and "+ lnk.sink.SinkID+ " for render"); }
// Destroy the line renderer protected void DestroyRenderer(RadiationLink lnk) { if (lnk.GO) Destroy(lnk.GO); if (RadioactivitySettings.debugOverlay) Utils.Log("Overlay: Hiding link between " + lnk.source.SourceID + " and " + lnk.sink.SinkID + " for render"); }
protected void CreateZoneLineRenderer(RadiationLink lnk, AttenuationZone zn) { /// Create the components LineRenderer lr = CreateBasicRenderer(lnk.GO.transform); float valIn = -(float)Math.Log10(zn.attenuationOut)/10f; float valOut = -(float)Math.Log10(zn.attenuationOut) / 10f; lr.SetColors(grad.Evaluate(valIn),grad.Evaluate(valOut)); // Set up the geometry float w = Mathf.Clamp(RadioactivitySettings.overlayRayWidthMin, RadioactivitySettings.overlayRayWidthMin, RadioactivitySettings.overlayRayWidthMax); lr.SetWidth(w, w); Vector3 zoneStart = lnk.source.EmitterTransform.position; Vector3 pVec = Vector3.Cross((zn.startPosition - zn.endPosition), Camera.main.transform.forward).normalized; lr.useWorldSpace = true; lr.SetPosition(0, zoneStart + (lnk.sink.SinkTransform.position - lnk.source.EmitterTransform.position).normalized * zn.dist1); lr.SetPosition(1, zoneStart + (lnk.sink.SinkTransform.position - lnk.source.EmitterTransform.position).normalized * zn.dist2); lr.useWorldSpace = false; //lr.SetPosition(0, zoneStart + zn.dist1 + pVec*w*0f); //lr.SetPosition(1, zoneStart + zn.dist2 + pVec * w * 0f); }
// Build new links for a new source in the network protected void BuildNewRadiationLink(RadioactiveSource src) { for (int i=0; i< allRadSinks.Count; i++) { RadiationLink l = new RadiationLink(src, allRadSinks[i]); allLinks.Add(l); } }