Пример #1
0
            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;
            }
Пример #3
0
            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;
            }