CrabUI
Loading...
Searching...
No Matches
CUI3DOffset.cs
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Reflection;
5using System.Diagnostics;
6
7using Barotrauma;
8using Microsoft.Xna.Framework;
9using Microsoft.Xna.Framework.Input;
10using Microsoft.Xna.Framework.Graphics;
11using System.Runtime.CompilerServices;
12namespace CrabUI
13{
14 /// <summary>
15 /// Offset of child components with X, Y, Z
16 /// </summary>
17 public struct CUI3DOffset
18 {
19 public float X;
20 public float Y;
21 //HACK this is mega cursed, it doens't want to be set to 1 automatically
22 public float Z;
23
24 public Vector2 ToVector2 => new Vector2(X, Y);
25
26 //TODO unhardcode and move to CUIBoundaries
27 public static float MinZ = 1f;
28
29 public CUI3DOffset Shift(Vector2 shift) => Shift(shift.X, shift.Y);
30 public CUI3DOffset Shift(float x = 0, float y = 0)
31 {
32 return new CUI3DOffset(
33 X + x * Z,
34 Y + y * Z,
35 Z
36 );
37 }
38
39 public CUI3DOffset Zoom(Vector2 staticPoint, float dZ) => Zoom(staticPoint.X, staticPoint.Y, dZ);
40 public CUI3DOffset Zoom(float sx, float sy, float dZ)
41 {
42 float newZ = Math.Max(MinZ, Z + dZ);
43 Vector2 s1 = new Vector2(sx * Z - X, sy * Z - Y);
44 Vector2 s2 = new Vector2(sx * newZ - X, sy * newZ - Y);
45 Vector2 d = s2 - s1;
46
47 return new CUI3DOffset(X + d.X, Y + d.Y, newZ);
48 }
49
50 public Vector2 ToPlaneCoords(Vector2 v)
51 {
52 return new Vector2(v.X * Z - X, v.Y * Z - Y);
53 }
54 public Vector2 TransformPoint(Vector2 point)
55 {
56 return new Vector2((point.X + X) / Z, (point.Y + Y) / Z);
57 }
58
59 public Vector2 TransformSize(Vector2 size)
60 {
61 return new Vector2(size.X / Z, size.Y / Z);
62 }
63
64 public CUIRect Transform(CUIRect rect)
65 {
66 return new CUIRect(
67 (rect.Left + X) / Z,
68 (rect.Top + Y) / Z,
69 rect.Width / Z,
70 rect.Height / Z
71 );
72 }
73
74 // XGLBRLGRLXBRSLRLGRKK!!!
75 public CUI3DOffset()
76 {
77 X = 0;
78 Y = 0;
79 Z = 1;
80 }
81
82 public CUI3DOffset(float x, float y, float z)
83 {
84 X = x;
85 Y = y;
86 Z = z;
87 }
88
89 public override string ToString() => $"[{X},{Y},{Z}]";
90
91 public static CUI3DOffset Parse(string s)
92 {
93 string content = s.Substring(
94 s.IndexOf('[') + 1,
95 s.IndexOf(']') - s.IndexOf('[') - 1
96 );
97
98 var components = content.Split(',').Select(a => a.Trim());
99
100 string sx = components.ElementAtOrDefault(0);
101 string sy = components.ElementAtOrDefault(1);
102 string sz = components.ElementAtOrDefault(2);
103
104 float x = 0;
105 float y = 0;
106 float z = 0;
107
108 float.TryParse(sx, out x);
109 float.TryParse(sy, out y);
110 float.TryParse(sz, out z);
111
112 return new CUI3DOffset(x, y, z);
113 }
114 }
115}
Offset of child components with X, Y, Z.
Rectangle with float.
Definition CUIRect.cs:17