internal SCANterrainConfig(SCANterrainConfig copy) { minHeightRange = copy.minHeightRange; maxHeightRange = copy.maxHeightRange; clampTerrain = copy.clampTerrain; clampHeight = copy.clampHeight; colorPal = copy.colorPal; paletteName = copy.paletteName; paletteSize = copy.paletteSize; paletteReverse = copy.paletteReverse; paletteDiscrete = copy.paletteDiscrete; body = copy.body; name = copy.name; }
/* MAP: constructor */ internal SCANdata(CelestialBody b) { body = b; float? clamp = null; if (b.ocean) clamp = 0; terrainConfig = SCANcontroller.getTerrainNode(b.name); if (terrainConfig == null) { terrainConfig = new SCANterrainConfig(SCANconfigLoader.SCANNode.DefaultMinHeightRange, SCANconfigLoader.SCANNode.DefaultMaxHeightRange, clamp, SCANUtil.paletteLoader(SCANconfigLoader.SCANNode.DefaultPalette, 7), 7, false, false, body); SCANcontroller.addToTerrainConfigData(body.name, terrainConfig); } }
/* MAP: constructor */ internal SCANdata(CelestialBody b) { body = b; float?clamp = null; if (b.ocean) { clamp = 0; } terrainConfig = SCANcontroller.getTerrainNode(b.name); if (terrainConfig == null) { terrainConfig = new SCANterrainConfig(SCANconfigLoader.SCANNode.DefaultMinHeightRange, SCANconfigLoader.SCANNode.DefaultMaxHeightRange, clamp, SCANUtil.paletteLoader(SCANconfigLoader.SCANNode.DefaultPalette, 7), 7, false, false, body); SCANcontroller.addToTerrainConfigData(body.name, terrainConfig); } }
protected override void Start() { if (HighLogic.LoadedScene == GameScenes.SPACECENTER || HighLogic.LoadedScene == GameScenes.TRACKSTATION) { kscMapObj = (SCANkscMap)SCANcontroller.controller.kscMap; if (SCANkscMap.BigMap != null) bigMap = SCANkscMap.BigMap; if (kscMapObj.Data != null) data = kscMapObj.Data; } else if (HighLogic.LoadedSceneIsFlight) { bigMapObj = (SCANBigMap)SCANcontroller.controller.BigMap; if (SCANBigMap.BigMap != null) bigMap = SCANBigMap.BigMap; if (bigMapObj.Data != null) data = bigMapObj.Data; } if (data == null) { data = SCANUtil.getData(Planetarium.fetch.Home); if (data == null) { data = new SCANdata(Planetarium.fetch.Home); SCANcontroller.controller.addToBodyData(Planetarium.fetch.Home, data); } } currentTerrain = new SCANterrainConfig(data.TerrainConfig); stockBiomes = SCANcontroller.controller.useStockBiomes; minTerrainSlider = new SCANuiSlider(data.TerrainConfig.DefaultMinHeight - SCANconfigLoader.SCANNode.RangeBelowMinHeight, data.TerrainConfig.MaxTerrain - 100, data.TerrainConfig.MinTerrain, "Min: ", "m", -2); maxTerrainSlider = new SCANuiSlider(data.TerrainConfig.MinTerrain + 100, data.TerrainConfig.DefaultMaxHeight + SCANconfigLoader.SCANNode.RangeAboveMaxHeight, data.TerrainConfig.MaxTerrain, "Max: ", "m", -2); clampTerrainSlider = new SCANuiSlider(data.TerrainConfig.MinTerrain + 10, data.TerrainConfig.MaxTerrain - 10, data.TerrainConfig.ClampTerrain ?? data.TerrainConfig.MinTerrain + 10, "Clamp: ", "m", -1); paletteSizeSlider = new SCANuiSlider(3, 12, data.TerrainConfig.PalSize, "Palette Size: ", "", 0); slopeColorPickerLow = new SCANuiColorPicker(SCANcontroller.controller.lowSlopeColorOne, SCANcontroller.controller.highSlopeColorOne, true); slopeColorPickerHigh = new SCANuiColorPicker(SCANcontroller.controller.lowSlopeColorTwo, SCANcontroller.controller.highSlopeColorTwo, true); slopeColorPickerLow.updateOldSwatches(); slopeColorPickerHigh.updateOldSwatches(); bTrans = SCANcontroller.controller.biomeTransparency; biomeTransSlider = new SCANuiSlider(0, 80, bTrans, "Ter. Trans: ", "%", 0); biomeColorPicker = new SCANuiColorPicker(SCANcontroller.controller.lowBiomeColor, SCANcontroller.controller.highBiomeColor, true); biomeColorPicker.updateOldSwatches(); if (SCANconfigLoader.GlobalResource) { loadedResources = SCANcontroller.setLoadedResourceList(); currentResource = new SCANresourceGlobal(loadedResources[0]); currentResource.CurrentBodyConfig(data.Body.name); if (currentResource != null) { resourceMinSlider = new SCANuiSlider(0, currentResource.CurrentBody.MinValue - 0.1f, currentResource.CurrentBody.MinValue, "Min: ", "%", 1); resourceMaxSlider = new SCANuiSlider(currentResource.CurrentBody.MinValue + 0.1f, 100, currentResource.CurrentBody.MaxValue, "Max: ", "%", 1); resourceTransSlider = new SCANuiSlider(0, 80, currentResource.Transparency, "Trans: ", "%", 0); resourceColorPicker = new SCANuiColorPicker(currentResource.MinColor, currentResource.MaxColor, true); } } bodyIndex = data.Body.flightGlobalsIndex; if (windowMode > 3 || (windowMode > 2 && !SCANconfigLoader.GlobalResource)) windowMode = 0; setSizeSlider(currentTerrain.ColorPal.kind); }
//Draw the window tab options private void windowTabs(int id) { growE(); if (GUILayout.Button("Altimetry")) { windowMode = 0; currentTerrain = new SCANterrainConfig(data.TerrainConfig); bodyIndex = data.Body.flightGlobalsIndex; updateUI(); } if (GUILayout.Button("Slope")) { windowMode = 1; } if (GUILayout.Button("Biome")) { windowMode = 2; } if (SCANconfigLoader.GlobalResource) { if (GUILayout.Button("Resources")) { windowMode = 3; fineControlMode = oldFineControl = false; currentResource.CurrentBodyConfig(data.Body.name); bodyIndex = data.Body.flightGlobalsIndex; updateUI(); } } stopE(); }
protected override void DrawWindowPre(int id) { //Some clumsy logic is used here to ensure that the color selection fields always remain in sync with the current map in each scene if (HighLogic.LoadedSceneIsFlight) { if (data == null) { data = SCANUtil.getData(FlightGlobals.currentMainBody); if (data == null) { data = new SCANdata(FlightGlobals.currentMainBody); SCANcontroller.controller.addToBodyData(FlightGlobals.currentMainBody, data); } } if (bigMapObj.Visible && SCANBigMap.BigMap != null) { data = bigMapObj.Data; bigMap = SCANBigMap.BigMap; } else if (data.Body != FlightGlobals.currentMainBody) { data = SCANUtil.getData(FlightGlobals.currentMainBody); if (data == null) { data = new SCANdata(FlightGlobals.currentMainBody); SCANcontroller.controller.addToBodyData(FlightGlobals.currentMainBody, data); } } if (bigMap == null) { if (SCANBigMap.BigMap != null) { bigMap = SCANBigMap.BigMap; } } } //Lock space center click through - Sync SCANdata else if (HighLogic.LoadedScene == GameScenes.SPACECENTER) { if (data == null) { data = SCANUtil.getData(Planetarium.fetch.Home); if (data == null) { data = new SCANdata(Planetarium.fetch.Home); SCANcontroller.controller.addToBodyData(Planetarium.fetch.Home, data); } } if (kscMapObj.Visible) { data = kscMapObj.Data; bigMap = SCANkscMap.BigMap; } else if (data.Body != Planetarium.fetch.Home) { data = SCANUtil.getData(Planetarium.fetch.Home); if (data == null) { data = new SCANdata(Planetarium.fetch.Home); SCANcontroller.controller.addToBodyData(Planetarium.fetch.Home, data); } } if (bigMap == null) { if (SCANkscMap.BigMap != null) { bigMap = SCANkscMap.BigMap; } } Vector2 mousePos = Input.mousePosition; mousePos.y = Screen.height - mousePos.y; if (WindowRect.Contains(mousePos) && !controlLock) { InputLockManager.SetControlLock(ControlTypes.CAMERACONTROLS | ControlTypes.KSC_ALL, lockID); controlLock = true; } else if (!WindowRect.Contains(mousePos) && controlLock) { removeControlLocks(); } } //Lock tracking scene click through - Sync SCANdata else if (HighLogic.LoadedScene == GameScenes.TRACKSTATION) { if (data == null) { data = SCANUtil.getData(Planetarium.fetch.Home); if (data == null) { data = new SCANdata(Planetarium.fetch.Home); SCANcontroller.controller.addToBodyData(Planetarium.fetch.Home, data); } } if (kscMapObj.Visible) { data = kscMapObj.Data; bigMap = SCANkscMap.BigMap; } else if (data.Body != Planetarium.fetch.Home) { data = SCANUtil.getData(Planetarium.fetch.Home); if (data == null) { data = new SCANdata(Planetarium.fetch.Home); SCANcontroller.controller.addToBodyData(Planetarium.fetch.Home, data); } } if (bigMap == null) { if (SCANkscMap.BigMap != null) { bigMap = SCANkscMap.BigMap; } } Vector2 mousePos = Input.mousePosition; mousePos.y = Screen.height - mousePos.y; if (WindowRect.Contains(mousePos) && !controlLock) { InputLockManager.SetControlLock(ControlTypes.TRACKINGSTATION_UI, lockID); controlLock = true; } else if (!WindowRect.Contains(mousePos) && controlLock) { removeControlLocks(); } } //This updates all of the fields whenever the palette selection is changed if (windowMode == 0 && (currentLegend == null || bodyIndex != data.Body.flightGlobalsIndex)) { currentTerrain = new SCANterrainConfig(data.TerrainConfig); SCANUtil.SCANdebugLog("Trigger Body Change"); bodyIndex = data.Body.flightGlobalsIndex; currentTerrain = new SCANterrainConfig(data.TerrainConfig); updateUI(); } if (windowMode == 0 && previewLegend == null) { drawPreviewLegend(); } if (!dropDown) { paletteBox = false; resourceBox = false; saveWarning = false; } }
private void setNewTerrainConfigValues(SCANterrainConfig terrain, float min, float max, float? clamp, Palette c, int size, bool reverse, bool discrete) { terrain.MinTerrain = min; terrain.MaxTerrain = max; terrain.ClampTerrain = clamp; terrain.ColorPal = c; terrain.PalSize = size; terrain.PalRev = reverse; terrain.PalDis = discrete; }
public override void OnLoad(ConfigNode node) { try { lowBiomeColor = ConfigNode.ParseColor(node.GetValue("lowBiomeColor")); highBiomeColor = ConfigNode.ParseColor(node.GetValue("highBiomeColor")); lowSlopeColorOne = ConfigNode.ParseColor(node.GetValue("lowSlopeColorOne")); highSlopeColorOne = ConfigNode.ParseColor(node.GetValue("highSlopeColorOne")); lowSlopeColorTwo = ConfigNode.ParseColor(node.GetValue("lowSlopeColorTwo")); highSlopeColorTwo = ConfigNode.ParseColor(node.GetValue("highSlopeColorTwo")); } catch (Exception e) { SCANUtil.SCANlog("Error While Loading SCANsat Colors: {0}", e); } ConfigNode node_vessels = node.GetNode("Scanners"); if (node_vessels != null) { SCANUtil.SCANlog("SCANsat Controller: Loading {0} known vessels", node_vessels.CountNodes); foreach (ConfigNode node_vessel in node_vessels.GetNodes("Vessel")) { Guid id; try { id = new Guid(node_vessel.GetValue("guid")); } catch (Exception e) { SCANUtil.SCANlog("Something Went Wrong Loading This SCAN Vessel; Moving On To The Next: {0}", e); continue; } foreach (ConfigNode node_sensor in node_vessel.GetNodes("Sensor")) { int sensor; double fov, min_alt, max_alt, best_alt; if (!int.TryParse(node_sensor.GetValue("type"), out sensor)) sensor = 0; if (!double.TryParse(node_sensor.GetValue("fov"), out fov)) fov = 3; if (!double.TryParse(node_sensor.GetValue("min_alt"), out min_alt)) min_alt = minScanAlt; if (!double.TryParse(node_sensor.GetValue("max_alt"), out max_alt)) max_alt = maxScanAlt; if (!double.TryParse(node_sensor.GetValue("best_alt"), out best_alt)) best_alt = bestScanAlt; registerSensor(id, (SCANtype)sensor, fov, min_alt, max_alt, best_alt); } } } ConfigNode node_progress = node.GetNode("Progress"); if (node_progress != null) { foreach (ConfigNode node_body in node_progress.GetNodes("Body")) { float min, max, clamp; float? clampState = null; Palette dataPalette; SCANwaypoint target = null; string paletteName = ""; int pSize; bool pRev, pDis, disabled; string body_name = node_body.GetValue("Name"); SCANUtil.SCANlog("SCANsat Controller: Loading map for {0}", body_name); CelestialBody body = FlightGlobals.Bodies.FirstOrDefault(b => b.name == body_name); if (body != null) { SCANdata data = getData(body.name); if (data == null) data = new SCANdata(body); if (!body_data.ContainsKey(body_name)) body_data.Add(body_name, data); else body_data[body_name] = data; try { string mapdata = node_body.GetValue("Map"); if (dataRebuild) { //On the first load deserialize the "Map" value to both coverage arrays data.integerDeserialize(mapdata, true); } else { data.integerDeserialize(mapdata, false); } } catch (Exception e) { SCANUtil.SCANlog("Something Went Wrong Loading Scanning Data; Resetting Coverage: {0}", e); data.reset(); // fail somewhat gracefully; don't make the save unloadable } try // Make doubly sure that nothing here can interupt the Scenario Module loading process { //Verify that saved data types can be converted, revert to default values otherwise if (node_body.HasValue("LandingTarget")) target = loadWaypoint(node_body.GetValue("LandingTarget")); if (bool.TryParse(node_body.GetValue("Disabled"), out disabled)) data.Disabled = disabled; if (!float.TryParse(node_body.GetValue("MinHeightRange"), out min)) min = data.TerrainConfig.DefaultMinHeight; if (!float.TryParse(node_body.GetValue("MaxHeightRange"), out max)) max = data.TerrainConfig.DefaultMaxHeight; if (node_body.HasValue("ClampHeight")) { if (float.TryParse(node_body.GetValue("ClampHeight"), out clamp)) clampState = clamp; } if (!int.TryParse(node_body.GetValue("PaletteSize"), out pSize)) pSize = data.TerrainConfig.DefaultPaletteSize; if (!bool.TryParse(node_body.GetValue("PaletteReverse"), out pRev)) pRev = data.TerrainConfig.DefaultReverse; if (!bool.TryParse(node_body.GetValue("PaletteDiscrete"), out pDis)) pDis = data.TerrainConfig.DefaultDiscrete; if (node_body.HasValue("PaletteName")) paletteName = node_body.GetValue("PaletteName"); dataPalette = SCANUtil.paletteLoader(paletteName, pSize); if (dataPalette.hash == PaletteLoader.defaultPalette.hash) { paletteName = "Default"; pSize = 7; } SCANterrainConfig dataTerrainConfig = getTerrainNode(body.name); if (dataTerrainConfig == null) dataTerrainConfig = new SCANterrainConfig(min, max, clampState, dataPalette, pSize, pRev, pDis, body); else setNewTerrainConfigValues(dataTerrainConfig, min, max, clampState, dataPalette, pSize, pRev, pDis); data.TerrainConfig = dataTerrainConfig; if (target != null) data.addToWaypoints(target); } catch (Exception e) { SCANUtil.SCANlog("Error Loading SCANdata; Reverting To Default Settings: {0}", e); } } } } dataRebuild = false; //Used for the one-time update to the new integer array if (SCANconfigLoader.GlobalResource) { if (string.IsNullOrEmpty(resourceSelection)) resourceSelection = masterResourceNodes.ElementAt(0).Key; else if (!masterResourceNodes.ContainsKey(resourceSelection)) resourceSelection = masterResourceNodes.ElementAt(0).Key; } ConfigNode node_resources = node.GetNode("SCANResources"); if (node_resources != null) { foreach(ConfigNode node_resource_type in node_resources.GetNodes("ResourceType")) { if (node_resource_type != null) { string name = node_resource_type.GetValue("Resource"); string lowColor = node_resource_type.GetValue("MinColor"); string highColor = node_resource_type.GetValue("MaxColor"); string transparent = node_resource_type.GetValue("Transparency"); string minMaxValues = node_resource_type.GetValue("MinMaxValues"); loadCustomResourceValues(minMaxValues, name, lowColor, highColor, transparent); } } } loaded = true; }
public static void addToTerrainConfigData (string name, SCANterrainConfig data) { if (!masterTerrainNodes.ContainsKey(name)) masterTerrainNodes.Add(name, data); else Debug.LogError("[SCANsat] Warning: SCANterrain Data Dictionary Already Contains Key Of This Type"); }
public static void updateTerrainConfig (SCANterrainConfig t) { SCANterrainConfig update = getTerrainNode(t.Name); if (update != null) { update.MinTerrain = t.MinTerrain; update.MaxTerrain = t.MaxTerrain; update.ClampTerrain = t.ClampTerrain; update.PalSize = t.PalSize; update.PalRev = t.PalRev; update.PalDis = t.PalDis; update.ColorPal = t.ColorPal; } }