public static float ByStyle(this float f, ToStringStyle style) { float value; switch (style) { case ToStringStyle.Integer: value = (float)Mathf.RoundToInt(f); break; case ToStringStyle.PercentZero: case ToStringStyle.PercentOne: case ToStringStyle.PercentTwo: value = f.ToPercent(); break; case ToStringStyle.WorkAmount: value = Mathf.CeilToInt(f / 60f); break; //case ToStringStyle.Temperature: //case ToStringStyle.TemperatureOffset: default: value = f; break; } return(value); }
public static void FloatRange(this Listing_Standard ls, string label, ref FloatRange range, float min = 0f, float max = 1f, string tooltip = null, ToStringStyle valueStyle = ToStringStyle.FloatTwo) { var rect = ls.GetRect(Text.LineHeight); var rect2 = rect.LeftPart(.70f).Rounded(); var rect3 = rect.RightPart(.30f).Rounded().LeftPart(.9f).Rounded(); rect3.yMin -= 5f; //Rect rect4 = rect.RightPart(.10f).Rounded(); var anchor = Text.Anchor; Text.Anchor = TextAnchor.MiddleLeft; Widgets.Label(rect2, label); Text.Anchor = TextAnchor.MiddleRight; var id = ls.CurHeight.GetHashCode(); Widgets.FloatRange(rect3, id, ref range, min, max, null, valueStyle); if (!tooltip.NullOrEmpty()) { TooltipHandler.TipRegion(rect, tooltip); } Text.Anchor = anchor; ls.Gap(ls.verticalSpacing); }
public string ModifierChangeString(ToStringStyle toStringStyle = ToStringStyle.FloatTwoOrThree) { string str = ""; if (preMinValue != -9999999f) { str += string.Format("{0}={1} ", "min".Translate(), preMinValue.ToStringByStyle(toStringStyle, ToStringNumberSense.Absolute)); } if (setValue != null) { str += string.Format("={0} ", ((float)setValue).ToStringByStyle(toStringStyle, ToStringNumberSense.Absolute)); } if (addValue != 0) { str += string.Format("{0} ", addValue.ToStringByStyle(toStringStyle, ToStringNumberSense.Offset)); } if (multiplier != 1) { str += string.Format("{0} ", multiplier.ToStringByStyle(toStringStyle, ToStringNumberSense.Factor)); } if (minValue != -9999999f) { str += string.Format("{0}={1} ", "min".Translate(), minValue.ToStringByStyle(toStringStyle, ToStringNumberSense.Absolute)); } if (maxValue != 9999999f) { str += string.Format("{0}={1} ", "max".Translate(), maxValue.ToStringByStyle(toStringStyle, ToStringNumberSense.Absolute)); } return(str.TrimEnd()); }
protected FilterRange(string saveLabel, Func <FilterRange, string> widgetLabel, Func <FilterRange, string> menuLabel, ToStringStyle toStringStyle, float min, float max, Func <FilterRange, Thing, bool> isAllowed) { this.saveLabel = saveLabel; this.widgetLabel = widgetLabel; this.menuLabel = menuLabel; this.toStringStyle = toStringStyle; this.min = min; this.max = max; this.isAllowed = isAllowed; inner = new FloatRange(min, max); }
/// <summary> /// Creates and returns a string that contains all resources and their equipment in a predefined format. /// </summary> /// <param name="style">The style determining how the output will look like.</param> /// <returns></returns> public string ToString(ToStringStyle style) { switch (style) { case ToStringStyle.ThreeLinesPerResource: return(ToString(ThreeLinesFormatString, null)); case ToStringStyle.SingleLine: default: return(ToString(SingleLineFormatString, null)); } }
public static void FloatRange( Rect canvas, int id, ref FloatRange range, FloatRange sliderRange, ToStringStyle valueStyle = ToStringStyle.FloatTwo, string labelKey = null) { // margin canvas.xMin += 8f; canvas.xMax -= 8f; // label var mainColor = GUI.color; GUI.color = new Color(0.4f, 0.4f, 0.4f); var text = range.min.ToStringByStyle(valueStyle) + " - " + range.max.ToStringByStyle(valueStyle); if (labelKey != null) { text = labelKey.Translate(text); } Text.Font = GameFont.Tiny; var labelRect = new Rect(canvas.x, canvas.y, canvas.width, 19f); Text.Anchor = TextAnchor.UpperCenter; Widgets.Label(labelRect, text); Text.Anchor = TextAnchor.UpperLeft; // background line var sliderRect = new Rect(canvas.x, labelRect.yMax, canvas.width, 2f); GUI.DrawTexture(sliderRect, BaseContent.WhiteTex); GUI.color = mainColor; // slider handle positions var pxPerUnit = sliderRect.width / sliderRange.Span; var minHandlePos = sliderRect.xMin + ((range.min - sliderRange.min) * pxPerUnit); var maxHandlePos = sliderRect.xMin + ((range.max - sliderRange.min) * pxPerUnit); // draw handles var minHandleRect = new Rect(minHandlePos - 16f, sliderRect.center.y - 8f, 16f, 16f); GUI.DrawTexture(minHandleRect, OutfitterTextures.FloatRangeSliderTex); var maxHandleRect = new Rect(maxHandlePos + 16f, sliderRect.center.y - 8f, -16f, 16f); GUI.DrawTexture(maxHandleRect, OutfitterTextures.FloatRangeSliderTex); // interactions var interactionRect = canvas; interactionRect.xMin -= 8f; interactionRect.xMax += 8f; var dragging = false; if (Mouse.IsOver(interactionRect) || _draggingId == id) { if (Event.current.type == EventType.MouseDown && Event.current.button == 0) { _draggingId = id; var x = Event.current.mousePosition.x; if (x < minHandleRect.xMax) { _draggingHandle = Handle.Min; } else if (x > maxHandleRect.xMin) { _draggingHandle = Handle.Max; } else { var distToMin = Mathf.Abs(x - minHandleRect.xMax); var distToMax = Mathf.Abs(x - (maxHandleRect.x - 16f)); _draggingHandle = distToMin >= distToMax ? Handle.Max : Handle.Min; } dragging = true; Event.current.Use(); } if (dragging || _draggingHandle != Handle.None && Event.current.type == EventType.MouseDrag) { // NOTE: this deviates from vanilla, vanilla seemed to assume that max == span? var curPosValue = ((Event.current.mousePosition.x - canvas.x) / canvas.width * sliderRange.Span) + sliderRange.min; curPosValue = Mathf.Clamp(curPosValue, sliderRange.min, sliderRange.max); if (_draggingHandle == Handle.Min) { range.min = curPosValue; if (range.max < range.min) { range.max = range.min; } } else if (_draggingHandle == Handle.Max) { range.max = curPosValue; if (range.min > range.max) { range.min = range.max; } } Event.current.Use(); } } if (_draggingHandle == Handle.None || Event.current.type != EventType.MouseUp) { return; } _draggingId = 0; _draggingHandle = Handle.None; Event.current.Use(); }
public static float?ByStyle(this float?f, ToStringStyle style) { return(f?.ByStyle(style)); }
// Token: 0x06000029 RID: 41 RVA: 0x00003844 File Offset: 0x00001A44 public static void FloatRange(this Listing_Standard ls, string label, ref FloatRange range, float min = 0f, float max = 1f, string tooltip = null, ToStringStyle valueStyle = ToStringStyle.FloatTwo) { Rect rect = ls.GetRect(Text.LineHeight); Rect rect2 = GenUI.Rounded(GenUI.LeftPart(rect, 0.7f)); Rect rect3 = GenUI.Rounded(GenUI.LeftPart(GenUI.Rounded(GenUI.RightPart(rect, 0.3f)), 0.9f)); rect3.yMin -= 5f; TextAnchor anchor = Text.Anchor; Text.Anchor = TextAnchor.MiddleLeft; Widgets.Label(rect2, label); Text.Anchor = TextAnchor.MiddleRight; int hashCode = ls.CurHeight.GetHashCode(); Widgets.FloatRange(rect3, hashCode, ref range, min, max, null, valueStyle); if (!GenText.NullOrEmpty(tooltip)) { TooltipHandler.TipRegion(rect, tooltip); } Text.Anchor = anchor; ls.Gap(ls.verticalSpacing); }
public static string ToStringByStyle(this float f, ToStringStyle style, ToStringNumberSense numberSense = ToStringNumberSense.Absolute) { if (style == ToStringStyle.Temperature && numberSense == ToStringNumberSense.Offset) { style = ToStringStyle.TemperatureOffset; } if (numberSense == ToStringNumberSense.Factor) { if (f >= 10f) { style = ToStringStyle.FloatMaxTwo; } else { style = ToStringStyle.PercentZero; } } string text; switch (style) { case ToStringStyle.Integer: text = Mathf.RoundToInt(f).ToString(); break; case ToStringStyle.FloatOne: text = f.ToString("F1"); break; case ToStringStyle.FloatTwo: text = f.ToString("F2"); break; case ToStringStyle.FloatThree: text = f.ToString("F3"); break; case ToStringStyle.FloatMaxOne: text = f.ToString("0.#"); break; case ToStringStyle.FloatMaxTwo: text = f.ToString("0.##"); break; case ToStringStyle.FloatMaxThree: text = f.ToString("0.###"); break; case ToStringStyle.FloatTwoOrThree: text = f.ToString((f != 0f && Mathf.Abs(f) < 0.01f) ? "F3" : "F2"); break; case ToStringStyle.PercentZero: text = f.ToStringPercent(); break; case ToStringStyle.PercentOne: text = f.ToStringPercent("F1"); break; case ToStringStyle.PercentTwo: text = f.ToStringPercent("F2"); break; case ToStringStyle.Temperature: text = f.ToStringTemperature("F1"); break; case ToStringStyle.TemperatureOffset: text = f.ToStringTemperatureOffset("F1"); break; case ToStringStyle.WorkAmount: text = f.ToStringWorkAmount(); break; default: Log.Error("Unknown ToStringStyle " + style, false); text = f.ToString(); break; } if (numberSense == ToStringNumberSense.Offset) { if (f >= 0f) { text = "+" + text; } } else if (numberSense == ToStringNumberSense.Factor) { text = "x" + text; } return(text); }
private static void DrawCustomDifficultySlider(Listing_Standard listing, string optionName, ref float value, ToStringStyle style, ToStringNumberSense numberSense, float min, float max, float precision = 0.01f, bool reciprocate = false, float reciprocalCutoff = 1000f) { string str = (reciprocate ? "_Inverted" : ""); string str2 = optionName.CapitalizeFirst(); string key = "Difficulty_" + str2 + str + "_Label"; string key2 = "Difficulty_" + str2 + str + "_Info"; float num = value; if (reciprocate) { num = Reciprocal(num, reciprocalCutoff); } TaggedString label = key.Translate() + ": " + num.ToStringByStyle(style, numberSense); listing.Label(label, -1f, key2.Translate()); float num2 = listing.Slider(num, min, max); if (num2 != num) { num = GenMath.RoundTo(num2, precision); } if (reciprocate) { num = Reciprocal(num, reciprocalCutoff); } value = num; }
public static void NonlinearRangeSlider(Rect rect, int id, ref FloatRange range, string labelKey = null, ToStringStyle valueStyle = ToStringStyle.FloatTwo) { Rect rect2 = rect; rect2.xMin += 8f; rect2.xMax -= 8f; GUI.color = RangeControlTextColor; string text = $"${range.min.ToStringByStyle(valueStyle)} - " + ( range.max > max ? infinity : $"${range.max.ToStringByStyle(valueStyle)}"); if (labelKey != null) { text = text + " " + labelKey; } GameFont font = Text.Font; Text.Font = GameFont.Tiny; Text.Anchor = TextAnchor.UpperCenter; Widgets.Label(rect2, text); Text.Anchor = TextAnchor.UpperLeft; Rect position = new Rect(rect2.x, rect2.yMax - 8f - 1f, rect2.width, 2f); GUI.DrawTexture(position, BaseContent.WhiteTex); GUI.color = Color.white; float minSliderPos = rect2.x + (rect2.width * SliderPosForValue(range.min)); float maxSliderPos = rect2.x + (rect2.width * Mathf.Clamp01(SliderPosForValue(range.max))); Rect position2 = new Rect(minSliderPos - 16f, position.center.y - 8f, 16f, 16f); GUI.DrawTexture(position2, FloatRangeSliderTex); Rect position3 = new Rect(maxSliderPos + 16f, position.center.y - 8f, -16f, 16f); GUI.DrawTexture(position3, FloatRangeSliderTex); if (curDragEnd != RangeEnd.None && (Event.current.type == EventType.MouseUp || Event.current.rawType == EventType.MouseDown)) { draggingIdInfo.SetValue(null, 0); curDragEnd = RangeEnd.None; SoundDefOf.DragSlider.PlayOneShotOnCamera(); } bool flag = false; if (Mouse.IsOver(rect) || draggingIdGet() == id) { if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && id != draggingIdGet()) { draggingIdInfo.SetValue(null, id); float x = Event.current.mousePosition.x; if (x < position2.xMax) { curDragEnd = RangeEnd.Min; } else if (x > position3.xMin) { curDragEnd = RangeEnd.Max; } else { float num3 = Mathf.Abs(x - position2.xMax); float num4 = Mathf.Abs(x - (position3.x - 16f)); curDragEnd = ((num3 >= num4) ? RangeEnd.Max : RangeEnd.Min); } flag = true; Event.current.Use(); SoundDefOf.DragSlider.PlayOneShotOnCamera(); } if (flag || (curDragEnd != RangeEnd.None && Event.current.type == EventType.MouseDrag)) { float sliderValue = ValueForSliderPos((Event.current.mousePosition.x - rect2.x) / rect2.width); sliderValue = RoundToSignificantDigits(sliderValue, 2); sliderValue = Mathf.Clamp(sliderValue, 0f, max); if (curDragEnd == RangeEnd.Min) { if (sliderValue != range.min) { range.min = sliderValue; if (range.max < range.min) { range.max = range.min; } CheckPlayDragSliderSound(); } } else if (curDragEnd == RangeEnd.Max && sliderValue != range.max) { if (sliderValue == max) { sliderValue = float.MaxValue; } range.max = sliderValue; if (range.min > range.max) { range.min = range.max; } CheckPlayDragSliderSound(); } Event.current.Use(); } } Text.Font = font; }
public static string ToStringByStyle(this float f, ToStringStyle style, ToStringNumberSense numberSense = ToStringNumberSense.Absolute) { if (style == ToStringStyle.Temperature && numberSense == ToStringNumberSense.Offset) { style = ToStringStyle.TemperatureOffset; } if (numberSense == ToStringNumberSense.Factor) { style = (ToStringStyle)((!(f >= 10.0)) ? 4 : 3); } string text; switch (style) { case ToStringStyle.Integer: text = Mathf.RoundToInt(f).ToString(); break; case ToStringStyle.FloatOne: text = f.ToString("F1"); break; case ToStringStyle.FloatTwo: text = f.ToString("F2"); break; case ToStringStyle.FloatMaxTwo: text = f.ToString("0.##"); break; case ToStringStyle.PercentZero: text = f.ToStringPercent(); break; case ToStringStyle.PercentOne: text = f.ToStringPercent("F1"); break; case ToStringStyle.PercentTwo: text = f.ToStringPercent("F2"); break; case ToStringStyle.Temperature: text = f.ToStringTemperature("F1"); break; case ToStringStyle.TemperatureOffset: text = f.ToStringTemperatureOffset("F1"); break; case ToStringStyle.WorkAmount: text = f.ToStringWorkAmount(); break; default: Log.Error("Unknown ToStringStyle " + style); text = f.ToString(); break; } switch (numberSense) { case ToStringNumberSense.Offset: if (f >= 0.0) { text = "+" + text; } break; case ToStringNumberSense.Factor: text = "x" + text; break; } return(text); }
public static void FloatRange( Rect canvas, int id, ref FloatRange range, FloatRange sliderRange, ToStringStyle valueStyle = ToStringStyle.FloatTwo, string labelKey = null ) { // margin canvas.xMin += 8f; canvas.xMax -= 8f; // label Color mainColor = GUI.color; GUI.color = new Color( 0.4f, 0.4f, 0.4f ); string text = range.min.ToStringByStyle( valueStyle ) + " - " + range.max.ToStringByStyle( valueStyle ); if( labelKey != null ) { text = labelKey.Translate( text ); } Text.Font = GameFont.Tiny; Rect labelRect = new Rect(canvas.x, canvas.y, canvas.width, 19f); Text.Anchor = TextAnchor.UpperCenter; Widgets.Label( labelRect, text ); Text.Anchor = TextAnchor.UpperLeft; // background line Rect sliderRect = new Rect(canvas.x, labelRect.yMax, canvas.width, 2f); GUI.DrawTexture( sliderRect, BaseContent.WhiteTex ); GUI.color = mainColor; // slider handle positions float pxPerUnit = sliderRect.width / sliderRange.Span; float minHandlePos = sliderRect.xMin + ( range.min - sliderRange.min ) * pxPerUnit; float maxHandlePos = sliderRect.xMin + ( range.max - sliderRange.min ) * pxPerUnit; // draw handles Rect minHandleRect = new Rect(minHandlePos - 16f, sliderRect.center.y - 8f, 16f, 16f); GUI.DrawTexture( minHandleRect, FloatRangeSliderTex ); Rect maxHandleRect = new Rect(maxHandlePos + 16f, sliderRect.center.y - 8f, -16f, 16f); GUI.DrawTexture( maxHandleRect, FloatRangeSliderTex ); // interactions Rect interactionRect = canvas; interactionRect.xMin -= 8f; interactionRect.xMax += 8f; bool dragging = false; if( Mouse.IsOver( interactionRect ) || draggingId == id ) { if( Event.current.type == EventType.MouseDown && Event.current.button == 0 ) { draggingId = id; float x = Event.current.mousePosition.x; if( x < minHandleRect.xMax ) { draggingHandle = Handle.Min; } else if( x > maxHandleRect.xMin ) { draggingHandle = Handle.Max; } else { float distToMin = Mathf.Abs(x - minHandleRect.xMax); float distToMax = Mathf.Abs(x - (maxHandleRect.x - 16f)); draggingHandle = distToMin >= distToMax ? Handle.Max : Handle.Min; } dragging = true; Event.current.Use(); } if( dragging || ( draggingHandle != Handle.None && Event.current.type == EventType.MouseDrag ) ) { // NOTE: this deviates from vanilla, vanilla seemed to assume that max == span? float curPosValue = (Event.current.mousePosition.x - canvas.x) / canvas.width * sliderRange.Span + sliderRange.min; curPosValue = Mathf.Clamp( curPosValue, sliderRange.min, sliderRange.max ); if( draggingHandle == Handle.Min ) { range.min = curPosValue; if( range.max < range.min ) { range.max = range.min; } } else if( draggingHandle == Handle.Max ) { range.max = curPosValue; if( range.min > range.max ) { range.min = range.max; } } Event.current.Use(); } } if( draggingHandle != Handle.None && Event.current.type == EventType.MouseUp ) { draggingId = 0; draggingHandle = Handle.None; Event.current.Use(); } }