public Telekinesis() { TargetCandidate = TickAsObservable .Where(_ => !hasTarget) .Where(_ => Game.Player.Character.Weapons.Current.Hash == WeaponHash.Unarmed) .Select(_ => GetTargetCandidate()) .Where(c => c != null) .ResetAfter(null, TimeSpan.FromSeconds(2)) .ObserveOn(Scheduler) .ToReactiveProperty() .AddTo(this); TickAsObservable .Where(_ => !hasTarget && Game.IsControlJustPressed(0, Control.Aim)) .Select(_ => TargetCandidate.Value) .Where(t => t != null) .Subscribe(t => Coroutine.Start(MyCoroutine(t))) .AddTo(this); TickAsObservable .Select(_ => TargetCandidate.Value) .Where(t => t != null && t.Exists() && !hasTarget) .Subscribe(t => DrawTargetMarker(t)) .AddTo(this); }
protected ObservableScript() { AbortedAsObservable = Observable.FromEventPattern <EventHandler, EventArgs>(h => h.Invoke, h => Aborted += h, h => Aborted -= h) .Select(_ => Unit.Default) .Publish() .RefCount(); TickAsObservable = Observable.FromEventPattern <EventHandler, EventArgs>(h => h.Invoke, h => Tick += h, h => Tick -= h) .Select(_ => Unit.Default) .Publish() .RefCount(); KeyDownAsObservable = Observable.FromEventPattern <KeyEventHandler, KeyEventArgs>(h => h.Invoke, h => KeyDown += h, h => KeyDown -= h) .Select(e => e.EventArgs) .Publish() .RefCount(); KeyUpAsObservable = Observable.FromEventPattern <KeyEventHandler, KeyEventArgs>(h => h.Invoke, h => KeyDown += h, h => KeyDown -= h) .Select(e => e.EventArgs) .Publish() .RefCount(); TickAsObservable .Subscribe(_ => { scheduler.Run(); Coroutine.Run(); }) .AddTo(CompositeDisposable); }