Skip to content

Commit bb81971

Browse files
FrozenreflexdfgHiatus
authored andcommitted
Make floor indicator persistent
1 parent a8dc5b9 commit bb81971

File tree

8 files changed

+48
-23
lines changed

8 files changed

+48
-23
lines changed

Scripts/BackendHelpers.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ namespace BabbleCalibration.Scripts;
55

66
public static class BackendHelpers
77
{
8-
public static ElementBase CreateElementWithObject(this IBackend backend, Control obj, bool head = false)
8+
public static ElementBase CreateElementWithObject(this IBackend backend, Control obj, bool head = false, bool persistent = false)
99
{
10-
var elem = head ? backend.CreateHeadElement() : backend.CreateWorldElement();
10+
var elem = head ? backend.CreateHeadElement(persistent) : backend.CreateWorldElement(persistent);
1111
elem.Root.AddChild(obj);
1212
return elem;
1313
}

Scripts/Backends/DebugBackend.cs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System.Linq;
12
using BabbleCalibration.Scripts.Elements;
23
using Godot;
34

@@ -42,22 +43,31 @@ public override void _Process(double delta)
4243
(Vector3.Up * 1.8f));
4344
}
4445

45-
public ElementBase CreateHeadElement()
46+
public ElementBase CreateHeadElement(bool persistent = false)
4647
{
4748
var elem = OpenXRElement.CreateElement();
4849
elem.Head = Camera;
50+
elem.IsInternal = persistent;
4951
ElementRoot.AddChild(elem);
5052
return elem;
5153
}
5254

53-
public ElementBase CreateWorldElement()
55+
public ElementBase CreateWorldElement(bool persistent = false)
5456
{
5557
var elem = OpenXRElement.CreateElement();
58+
elem.IsInternal = persistent;
5659
ElementRoot.AddChild(elem);
5760
return elem;
5861
}
5962

60-
public void ClearElements() => BackendHelpers.ClearAllChildren(ElementRoot);
63+
public void ClearElements()
64+
{
65+
foreach (var c in ElementRoot.GetChildren().OfType<OpenXRElement>().Where(i => !i.IsInternal))
66+
{
67+
ElementRoot.RemoveChild(c);
68+
c.QueueFree();
69+
}
70+
}
6171
public Transform3D HeadTransform() => Camera.GlobalTransform;
6272
public Transform3D EyeTransform(bool left) => Camera.GlobalTransform.TranslatedLocal((left ? Vector3.Left : Vector3.Right) * 0.035f);
6373
}

Scripts/Backends/OpenVRBackend.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,15 @@ public void Initialize()
2828
_interface = xrInt;
2929
}
3030

31-
public ElementBase CreateHeadElement()
31+
public ElementBase CreateHeadElement(bool persistent = false)
3232
{
33-
var elem = CreateElement();
33+
var elem = CreateElement(persistent);
3434
elem.HeadMode = true;
3535
return elem;
3636
}
37-
public ElementBase CreateWorldElement()
37+
public ElementBase CreateWorldElement(bool persistent = false)
3838
{
39-
var elem = CreateElement();
39+
var elem = CreateElement(persistent);
4040
return elem;
4141
}
4242

@@ -60,9 +60,9 @@ public Transform3D EyeTransform(bool left)
6060
return new Transform3D(head.Basis, eyeBall.Origin);
6161
}
6262

63-
private OpenVRElement CreateElement()
63+
private OpenVRElement CreateElement(bool persistent = false)
6464
{
65-
if (_storedPool.TryPop(out var result))
65+
if (!persistent && _storedPool.TryPop(out var result))
6666
{
6767
_usedPool.Add(result);
6868
result.Visible = true;
@@ -71,7 +71,7 @@ private OpenVRElement CreateElement()
7171
result = ResourceLoader.Load<PackedScene>("res://Scenes/Elements/OpenVRElement.tscn")
7272
.Instantiate<OpenVRElement>();
7373
ElementRoot.AddChild(result);
74-
_usedPool.Add(result);
74+
if (!persistent) _usedPool.Add(result);
7575
return result;
7676
}
7777
}

Scripts/Backends/OpenXRBackend.cs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System.Linq;
12
using BabbleCalibration.Scripts.Elements;
23
using Godot;
34

@@ -24,21 +25,31 @@ public void Initialize()
2425
}
2526
}
2627

27-
public ElementBase CreateHeadElement()
28+
public ElementBase CreateHeadElement(bool persistent = false)
2829
{
2930
var elem = OpenXRElement.CreateElement();
3031
elem.Head = Camera;
32+
elem.IsInternal = persistent;
3133
ElementRoot.AddChild(elem);
3234
return elem;
3335
}
3436

35-
public ElementBase CreateWorldElement()
37+
public ElementBase CreateWorldElement(bool persistent = false)
3638
{
3739
var elem = OpenXRElement.CreateElement();
40+
elem.IsInternal = persistent;
3841
ElementRoot.AddChild(elem);
3942
return elem;
4043
}
41-
public void ClearElements() => BackendHelpers.ClearAllChildren(ElementRoot);
44+
public void ClearElements()
45+
{
46+
foreach (var c in ElementRoot.GetChildren().OfType<OpenXRElement>().Where(i => !i.IsInternal))
47+
{
48+
ElementRoot.RemoveChild(c);
49+
c.QueueFree();
50+
}
51+
}
52+
4253
public Transform3D HeadTransform() => Camera.GlobalTransform;
4354

4455
public Transform3D EyeTransform(bool left)

Scripts/Backends/OpenXROverlayBackend.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@ public void Initialize()
1616
throw new System.NotImplementedException();
1717
}
1818

19-
public ElementBase CreateHeadElement()
19+
public ElementBase CreateHeadElement(bool persistent = false)
2020
{
2121
throw new System.NotImplementedException();
2222
}
2323

24-
public ElementBase CreateWorldElement()
24+
public ElementBase CreateWorldElement(bool persistent = false)
2525
{
2626
throw new System.NotImplementedException();
2727
}

Scripts/Elements/OpenXRElement.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ public partial class OpenXRElement : ElementBase
88
[Export] public MeshInstance3D Mesh;
99
[Export] public PlaneMesh PlaneMesh;
1010
[Export] public Node3D Head;
11+
[Export] public bool IsInternal = false;
1112

1213
public override Transform3D ElementTransform
1314
{

Scripts/IBackend.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,12 @@ public interface IBackend
2727
/// Create an element, attached to the head. Doesn't require parenting.
2828
/// </summary>
2929
/// <returns>The created element</returns>
30-
public abstract ElementBase CreateHeadElement();
30+
public abstract ElementBase CreateHeadElement(bool persistent = false);
3131
/// <summary>
3232
/// Create an element in free space. Doesn't require parenting.
3333
/// </summary>
3434
/// <returns>The created element</returns>
35-
public abstract ElementBase CreateWorldElement();
35+
public abstract ElementBase CreateWorldElement(bool persistent = false);
3636
/// <summary>
3737
/// Clears all elements
3838
/// </summary>

Scripts/MainScene.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using System.Threading.Tasks;
77
using BabbleCalibration.Scripts;
88
using BabbleCalibration.Scripts.Backends;
9+
using BabbleCalibration.Scripts.Elements;
910
using BabbleCalibration.Scripts.Routines;
1011
using Godot.Collections;
1112
using OverlaySDK;
@@ -149,6 +150,12 @@ public override void _Ready()
149150

150151
Backend.Initialize();
151152

153+
var elem = Backend.CreateElementWithObject(ResourceLoader.Load<PackedScene>("res://Scenes/Routines/FloorIndicator.tscn").Instantiate<PanelContainer>(), persistent: true);
154+
elem.ElementTransform = OriginOffset * new Transform3D(new Basis(new Quaternion(Vector3.Forward, Vector3.Down)), Vector3.Up * 0.001f);
155+
elem.ElementWidth = 1.25f;
156+
157+
if (elem is OpenXRElement openXrElement) GD.Print(openXrElement.IsInternal);
158+
152159
StartRoutine<TextRoutine>(RoutineHelpers.LabelRoutineArgs(Tr(ConnectingString), true, Transform3D.Identity.TranslatedLocal(Vector3.Forward)));
153160

154161
/*Task.Run(async () =>
@@ -288,9 +295,5 @@ public override void _Process(double delta)
288295
Backend.ClearElements();
289296
CurrentRoutine = new T();
290297
CurrentRoutine.Initialize(Backend, args);
291-
292-
var elem = Backend.CreateElementWithObject(ResourceLoader.Load<PackedScene>("res://Scenes/Routines/FloorIndicator.tscn").Instantiate<PanelContainer>());
293-
elem.ElementTransform = OriginOffset * new Transform3D(new Basis(new Quaternion(Vector3.Forward, Vector3.Down)), Vector3.Up * 0.001f);
294-
elem.ElementWidth = 1.5f;
295298
}
296299
}

0 commit comments

Comments
 (0)