feat: initial import
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
using System;
|
||||
using Godot;
|
||||
|
||||
namespace GodotHostTest.Helpers;
|
||||
|
||||
public static class NodeExtensions
|
||||
{
|
||||
public static void AddTo(this IDisposable disposable, Node node)
|
||||
{
|
||||
node.TreeExited += OnTreeExited;
|
||||
return;
|
||||
|
||||
void OnTreeExited()
|
||||
{
|
||||
disposable.Dispose();
|
||||
node.TreeExited -= OnTreeExited;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
uid://lbkratfmlq5e
|
||||
@@ -0,0 +1,19 @@
|
||||
using System;
|
||||
using R3;
|
||||
|
||||
namespace GodotHostTest.Helpers;
|
||||
|
||||
public static class ObservableHelpers
|
||||
{
|
||||
public static IDisposable SubscribeOnce<T>(this Observable<T> observable, Action<T> action)
|
||||
{
|
||||
IDisposable? disposable = null;
|
||||
disposable = observable.Subscribe(x =>
|
||||
{
|
||||
// ReSharper disable once AccessToModifiedClosure
|
||||
disposable?.Dispose();
|
||||
action(x);
|
||||
});
|
||||
return disposable;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
uid://kfb8ooqmhoh0
|
||||
@@ -0,0 +1,27 @@
|
||||
using System;
|
||||
using R3;
|
||||
|
||||
namespace GodotHostTest.Helpers;
|
||||
|
||||
public class Pipe<T> : IDisposable
|
||||
{
|
||||
private readonly ReplaySubject<Observable<T>> _subject = new(1);
|
||||
|
||||
public Pipe()
|
||||
{
|
||||
Observable = _subject.Switch();
|
||||
}
|
||||
|
||||
public Observable<T> Observable { get; }
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_subject.Dispose();
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
public void PipeIn(Observable<T> observable)
|
||||
{
|
||||
_subject.OnNext(observable);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
uid://crh20vve83rew
|
||||
Reference in New Issue
Block a user