Пример #1
0
    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);
        }));
    }
Пример #2
0
    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);
        }
    }