CrabUI
Loading...
Searching...
No Matches
Ranges.cs
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Reflection;
5
6using Barotrauma;
7using Microsoft.Xna.Framework;
8using Microsoft.Xna.Framework.Input;
9using Microsoft.Xna.Framework.Graphics;
10
11namespace CrabUI
12{
13 /// <summary>
14 /// Same as Range but with normal ints
15 /// </summary>
16 public struct IntRange
17 {
18 public static IntRange Zero = new IntRange(0, 0);
19 public int Start;
20 public int End;
21 public bool IsZero => Start == 0 && End == 0;
22 public bool IsEmpty => End - Start <= 0;
23 public IntRange(int start, int end)
24 {
25 if (end >= start) (Start, End) = (start, end);
26 else (End, Start) = (start, end);
27 }
28 public static bool operator ==(IntRange a, IntRange b) => a.Start == b.Start && a.End == b.End;
29 public static bool operator !=(IntRange a, IntRange b) => a.Start != b.Start || a.End != b.End;
30
31 public override string ToString() => $"[{Start},{End}]";
32 public static IntRange Parse(string raw)
33 {
34 if (raw == null || raw == "") return new IntRange(0, 0);
35
36 string content = raw.Split('[', ']')[1];
37
38 List<string> coords = content.Split(',').Select(s => s.Trim()).ToList();
39
40 int start;
41 int end;
42
43 int.TryParse(coords.ElementAtOrDefault(0), out start);
44 int.TryParse(coords.ElementAtOrDefault(1), out end);
45
46 return new IntRange(start, end);
47 }
48 }
49
50 /// <summary>
51 /// Same as Range but with normal floats
52 /// </summary>
53 public struct FloatRange
54 {
55 public static FloatRange Zero = new FloatRange(0, 0);
56 public float Start;
57 public float End;
58 public bool IsZero => Start == 0 && End == 0;
59 public bool IsEmpty => End - Start <= 0;
60
61 public float PosOf(float lambda) => (End - Start) * lambda;
62 public float LambdaOf(float pos) => (pos - Start) / (End - Start);
63 public FloatRange(float start, float end)
64 {
65 if (end >= start) (Start, End) = (start, end);
66 else (End, Start) = (start, end);
67 }
68 public static bool operator ==(FloatRange a, FloatRange b) => a.Start == b.Start && a.End == b.End;
69 public static bool operator !=(FloatRange a, FloatRange b) => a.Start != b.Start || a.End != b.End;
70
71 public override string ToString() => $"[{Start},{End}]";
72
73 public static FloatRange Parse(string raw)
74 {
75 if (raw == null || raw == "") return new FloatRange(0, 0);
76
77 string content = raw.Split('[', ']')[1];
78
79 List<string> coords = content.Split(',').Select(s => s.Trim()).ToList();
80
81 float start;
82 float end;
83
84 float.TryParse(coords.ElementAtOrDefault(0), out start);
85 float.TryParse(coords.ElementAtOrDefault(1), out end);
86
87 return new FloatRange(start, end);
88 }
89 }
90}
Same as Range but with normal floats.
Definition Ranges.cs:54
Same as Range but with normal ints.
Definition Ranges.cs:17