private static ColorHSV GetGasColor(SimHashes elementID, Color primaryColor, float pressureFraction, float mass) { ColorHSV colorHSV = primaryColor.ToHSV(); colorHSV = ScaleColorToPressure(colorHSV, pressureFraction, elementID); //if (StateManager.ConfiguratorState.ShowEarDrumPopMarker) if (ImprovedGasOverlayState.State.ShowEarDrumPopMarker) { colorHSV = MarkEarDrumPopPressure(colorHSV, mass, elementID); } //if (StateManager.ConfiguratorState.AdvancedGasOverlayDebugging) if (ImprovedGasOverlayState.State.AdvancedGasOverlayDebugging) { colorHSV.CheckAndLogOverflow(elementID, pressureFraction); } colorHSV = colorHSV.Clamp(); return(colorHSV); }
public static bool Prefix(int cell, ref Color __result) { // ModSettings settings = ONI_Common.ModdyMcModscreen float minMass = ONI_Common.State.ConfiguratorState.GasPressureStart; float maxMass = ONI_Common.State.ConfiguratorState.GasPressureEnd; Element element = Grid.Element[cell]; if (!element.IsGas) { __result = NotGasColor; return(false); } Color gasColor = GetCellOverlayColor(cell); float gasMass = Grid.Mass[cell]; gasMass -= minMass; if (gasMass < 0) { gasMass = 0; } maxMass -= minMass; if (maxMass < float.Epsilon) { maxMass = float.Epsilon; } float intensity; ColorHSV gasColorHSV = gasColor; float mass = Grid.Mass[cell]; float maxMarker; float minMarker; minMarker = SimDebugView.minimumBreathable; maxMarker = SimDebugView.optimallyBreathable; if (element.id == SimHashes.Oxygen || element.id == SimHashes.ContaminatedOxygen) { // // To red for thin air // if (intensity < 1f) // { // gasColorHSV.V = Mathf.Min(gasColorHSV.V + 1f - intensity, 0.9f); // } } else { maxMarker *= 2f; //intensity = GetGasColorIntensity(gasMass, maxMass); //intensity = Mathf.Max(intensity, 0.15f); } intensity = Mathf.Max(0.05f, Mathf.InverseLerp(minMarker, maxMarker, mass)); // Pop ear drum marker if (mass > EarPopFloat) { gasColorHSV.H += 0.02f * Mathf.InverseLerp(EarPopFloat, 3.5f, mass); if (gasColorHSV.H > 1f) { gasColorHSV.H -= 1f; } float intens = Mathf.InverseLerp(EarPopFloat, 20f, mass); float modifier = 1f - intens / 2; gasColorHSV.V *= modifier; } // New code, use the saturation of a color for the pressure gasColorHSV.S *= intensity; __result = gasColorHSV; return(false); // gasColor *= intensity; // gasColor.a = 1; // __result = gasColor; }
public static bool Prefix(int cell, ref Color __result) { float minMass = ONI_Common.State.ConfiguratorState.GasPressureStart; float maxMass = ONI_Common.State.ConfiguratorState.GasPressureEnd; Element element = Grid.Element[cell]; if (!element.IsGas) { __result = NotGasColor; return(false); } Color gasColor = GetCellOverlayColor(cell); float gasMass = Grid.Mass[cell]; gasMass -= minMass; if (gasMass < 0) { gasMass = 0; } maxMass -= minMass; if (maxMass < float.Epsilon) { maxMass = float.Epsilon; } float intensity; ColorHSV gasColorHSV = gasColor; float mass = Grid.Mass[cell]; if (element.id == SimHashes.Oxygen || element.id == SimHashes.ContaminatedOxygen) { float optimallyBreathable = SimDebugView.optimallyBreathable; intensity = Mathf.Clamp((mass - SimDebugView.minimumBreathable) / optimallyBreathable, 0.05f, 1f); // To red for thin air if (intensity < 1f) { gasColorHSV.V = Mathf.Min(gasColorHSV.V + 1f - intensity, 0.9f); } } else { intensity = GetGasColorIntensity(gasMass, maxMass); } // cap the saturation intensity = Mathf.Max(intensity, 0.2f); // Pop ear drum marker if (mass > 2.5f) { gasColorHSV.H += 0.02f * Mathf.InverseLerp(2.5f, 3.5f, mass); if (gasColorHSV.H > 1f) { gasColorHSV.H -= 1f; } float intens = Mathf.InverseLerp(3.5f, 20f, mass); float min = gasColorHSV.V * 0.7f; float current = gasColorHSV.V * intens; gasColorHSV.V = Mathf.Max(min, current); } // New code, use the saturation of a color for the pressure gasColorHSV.S *= intensity; __result = gasColorHSV; return(false); // gasColor *= intensity; // gasColor.a = 1; // __result = gasColor; }