private IDisposable OnTimWondowsOpen(int lane) { var timeWindow = lane == 0 ? _appStateBroker.P1TimeWindow : lane == 1 ? _appStateBroker.P2TimeWindow : lane == 2 ? _appStateBroker.P3TimeWindow : _appStateBroker.P4TimeWindow; var result = lane == 0 ? _appStateBroker.P1Result : lane == 1 ? _appStateBroker.P2Result : lane == 2 ? _appStateBroker.P3Result : _appStateBroker.P4Result; var PlayerData = lane == 0 ? _inputModule.P1Data : lane == 1 ? _inputModule.P2Data : lane == 2 ? _inputModule.P3Data : _inputModule.P4Data; var offsetval = GameManager.Instance.Open4thLane ? 960 : 800; return (timeWindow.Where(open => open) .Subscribe(b => { var chasedPos = Vector2.zero; var chasedResult = new float[3]; _plot_Internal.anchoredPosition = Vector2.zero; PlcOutText.text = ""; if (GameManager.AutoTest_External) { if (GameManager.TestCount % 2 == 0) { var testval = AutoTestIndexProvider.GetTestTargetVal(); PlayerData.OnNext(new [] { GameManager.TestCount, testval.x, testval.y }); } } _mOSstream .Where(_ => GameManager.ManualInputAllowed_External) .TakeWhile(_ => !Input.GetMouseButtonDown(0)) .Do(mPos => chasedPos = mPos) .DoOnCompleted(() => { var offsetTotal = offsetval * Lane; chasedPos.x = chasedPos.x - offsetTotal; //x PlayerData.OnNext(new[] { 83, chasedPos.x, chasedPos.y }); }) .Subscribe() .AddTo(this); PlayerData .Take(1) .TakeWhile(_ => timeWindow.Value) .DoOnCompleted(() => { MainThreadDispatcher.Post(a => { if (chasedResult[1] != 0) { _plot_Internal.anchoredPosition = new Vector2(GameManager.ManualInputAllowed_External?chasedResult[1]:chasedResult[1].FromTo(0, 960, 960, 0), chasedResult[2]); var dist = CheckDistance(Plot, Target); var isHit = dist < MaxDistance; var tosend = chasedResult; tosend[1] = GameManager.ManualInputAllowed_External ? chasedResult[1] : chasedResult[1].FromTo(0, 960, 960, 0); PlcOutText.text = "P: {tosend[1]},{tosend[2]} \n D: {dist}"; result.OnNext(new UniRx.Tuple <float[], bool>(tosend, isHit)); } else { _plot_Internal.anchoredPosition = new Vector2(GameManager.ManualInputAllowed_External?chasedResult[1]:chasedResult[1].FromTo(0, 960, 960, 0), chasedResult[2]); var dist = CheckDistance(Plot, Target); var isHit = dist < MaxDistance; var tosend = chasedResult; tosend[0] = 0; tosend[1] = 0; PlcOutText.text = "P: {tosend[1]},{tosend[2]} \n D: {dist}"; result.OnNext(new UniRx.Tuple <float[], bool>(tosend, isHit)); } }, null); }) .Subscribe(x => { chasedResult = x; }).AddTo(this); })); }
private void Awake() { _appStateBroker = AppStateBroker.Instance; AutoTest = AutoTest_External; #if !UNITY_EDITOR DevMode = false; #endif //Debug msg binding Observable .EveryUpdate() .Select(_ => TargetLane) .DistinctUntilChanged() .Subscribe(_ => { TargetLane_External = _; }).AddTo(gameObject); Observable .EveryUpdate() .Select(_ => TargetObject) .DistinctUntilChanged() .Subscribe(_ => { TargetObject_External = _; }).AddTo(gameObject); //to reset ResetApp .Where(b => b) .Take(1) .Subscribe(x => { ResetApp.Value = false; AppStateBroker.Instance.ComOutGoingStream.OnNext("{state:30}"); Observable.Timer(TimeSpan.FromSeconds(1f)) .Subscribe(_ => SceneManager.LoadScene(SceneManager.GetActiveScene().name)) .AddTo(gameObject); }) .AddTo(gameObject); //to clibration CalibrationMode .Where(b => b) .Take(1) .Subscribe(x => { CalibrationMode.Value = false; AppStateBroker.Instance.ComOutGoingStream.OnNext("{state:30}"); Observable.Timer(TimeSpan.FromSeconds(1f)) .Subscribe(_ => SceneManager.LoadScene(Open4thLane?"MainScene_4Lane_Cal":"MainScene_3Lane_Cal")) .AddTo(gameObject); }) .AddTo(gameObject); //to main game GameMode .Where(b => b) .Take(1) .Subscribe(x => { GameMode.Value = false; AppStateBroker.Instance.ComOutGoingStream.OnNext("{state:30}"); Observable.Timer(TimeSpan.FromSeconds(1f)) .Subscribe(_ => { SceneManager.LoadScene(Open4thLane ? "MainScene_4Lane" : "MainScene_3Lane"); }) .AddTo(gameObject); }) .AddTo(gameObject); //auto test if (AutoTest) { DebugOutputObjects.SetActive(true); ManualTeamSelectAllowed = ManualTeamSelectAllowedExternal = false; Observable.EveryUpdate().Select(_ => TestCount).Subscribe(x => { DubugOutput.text = x.ToString(); ThrowAllowed.gameObject.SetActive(TestCount % 2 != 0); }).AddTo(gameObject); _appStateBroker .CurrentRound .Subscribe(round => { switch (round) { case Rounds.Idle: Observable.Timer(TimeSpan.FromSeconds(2f)) .Take(1) .Subscribe(_ => { var len = Open4thLane ? 4 : 3; for (int i = 0; i < len; i++) { var client = new ORTCPEventParams(); var team = AutoTestIndexProvider.GetTeamIndex(); client.message = "{\"state\":10,\"station_id\":" + i + ",\"team\":" + team + "}"; _appStateBroker.ComReceivingStream.OnNext(client); } DelayedSanp(); }).AddTo(gameObject); break; case Rounds.R1: case Rounds.R2: case Rounds.R3: DelayedSanp(); break; case Rounds.Finish: DelayedSanp(); TestCount++; Debug.LogFormat("[{0}] Testing Count : {1}", name, TestCount); break; } }) .AddTo(gameObject); } else { DebugOutputObjects.SetActive(false); } }