Esempio n. 1
0
    /// <summary>
    /// Mapがクリックされた時の処理
    /// </summary>
    /// <param name="isPickup"></param>
    void MapAction(bool isPickup = false)
    {
        _mapView.SetMapText(
            _mapStringService.MakeMapString(
                (int)_playerModel.PlayerPositionVec3RP.Value.x,
                (int)_playerModel.PlayerPositionVec3RP.Value.z,
                isPickup
                ));

        if (isPickup)
        {
            _mapView.ChangeMapSize(
                _mapView.PickedMapPositionVec3, _mapView.PickedMapSizeVec2
                );
        }
        else
        {
            _mapView.ChangeMapSize(
                _mapView.MapPositionVec3, _mapView.MapSizeVec2, false
                );
        }
    }
    void Start()
    {
        PlayerInit();

        _moveCameraButtonView.OnClick()
        .Subscribe(_ =>
        {
            if (_mainCameraVeiw.OffsetPosition == _mainCameraVeiw.Offset1)
            {
                _mainCameraVeiw.Rotation(_mainCameraVeiw.Euler2, _mainCameraVeiw.Offset2);
            }
            else
            {
                _mainCameraVeiw.Rotation(_mainCameraVeiw.Euler1, _mainCameraVeiw.Offset1);
            }
        });

        // button onclick register
        foreach (var _moveBtn in _moveButtonView)
        {
            _moveBtn.movebutton_OnUp()
            .Subscribe(_ =>
            {
                _playerView.SetAnimation(0);
            });

            _moveBtn.movebutton_OnDown()
            .SelectMany(_moveBtn.UpdateAsObservable())
            .Where(_ => !_playerView.IsObjectMoving && !_dangeonFieldModel.IsFieldSetting)
            .TakeUntil(_moveBtn.movebutton_OnUp())
            .RepeatUntilDestroy(_moveBtn.gameObject)
            .Subscribe(_ =>
            {
                SetPlayerInputVec(_moveBtn.VectorX, _moveBtn.VectorY);
                _playerView.SetAnimation(1);
            });
        }

        // PlayerInputVec3RPの変更によって呼び出すように登録する
        _playerModel.PlayerInputVec3RP
        .Subscribe(
            dvec3 => { _playerView.Move(dvec3); }
            );

        // 移動時のキャラ絵の変更
        _playerModel.DirectionPlayerRP
        .Subscribe(
            dir => _playerView.ChangeDirection(dir)
            );

        // playerの位置が変わった時の処理
        _playerModel.PlayerPositionVec3RP
        .Where(ppos => ppos != Vector3.zero)      //&& !_dangeonFieldModel.IsFieldSettingRP.Value)
        .Subscribe(
            ppos =>
        {
            // if (_dangeonFieldModel.Field[(int) ppos.x, (int) ppos.y] == (int) FieldClass.floor)
            // {
            //     //todo
            //     _playerview.CreateFovFloor (ppos);
            // }

            StartCheckWalkedTiles((int)ppos.x, (int)ppos.z);
            _mapView.SetMapText(
                _mapStringSevice.MakeMapString(
                    (int)ppos.x, (int)ppos.z
                    ));
        }
            );

        // player postion get
        var tmpvec3 = new Vector3();

        _playerView.UpdateAsObservable()
        //.Where(_ => !_playerView.IsObjectMoving)
        .Subscribe(_ =>
        {
            _mainCameraVeiw.Move(_playerView.Position);
            // 移動中はプレイヤー位置の設定を行わない
            if (_playerView.IsObjectMoving)
            {
                return;
            }

            tmpvec3.Set(
                _playerView.Position.x,
                0,
                _playerView.Position.z
                );
            _playerModel.PlayerPositionVec3RP.Value = tmpvec3;
        });

        _playerView.OnTriggerEnterAsObservable()
        .Select(collision => collision.gameObject)
        .Where(colobj => colobj.CompareTag("Item"))
        .Subscribe(colobj =>
        {
            _playerModel.ItemList.Add(
                _dangeonFieldModel.Item[
                    ((int)colobj.transform.position.x),
                    ((int)colobj.transform.position.z)]
                );
            _dangeonFieldModel.Item[
                ((int)colobj.transform.position.x),
                ((int)colobj.transform.position.z)] = ItemClass.none;

            GameObject.Destroy(colobj);

            _playerModel.ItemList.ForEach(i => Debug.Log(i));
            Debug.Log("==================");
        });

        // unirxでの衝突時の処理の登録 unirx.triggersをusingする
        _playerView.OnTriggerStayAsObservable()
        .Select(collision => collision.gameObject)
        .Where(colobj => colobj.CompareTag("Stairs") && !_playerView.IsObjectMoving)
        .Subscribe(collision =>
        {
            PlayerInit();
            _dangeonFieldModel.FloorNumRP.Value++;
        });
        // reload scene
        // SceneManager.LoadScene (SceneManager.GetActiveScene ().buildIndex, LoadSceneMode.Single);

        // unirxでのupdateみたいなやつ => everyupdate
        // keyboard up down left right 監視する
        // _playerview.UpdateAsObservable ()
        //     .Where (_ => !_playerview.IsObjectMoving && !_dangeonFieldModel.IsFieldSetting.Value &&
        //         (
        //             Input.GetKeyDown (KeyCode.UpArrow) || Input.GetKeyDown (KeyCode.DownArrow) ||
        //             Input.GetKeyDown (KeyCode.LeftArrow) || Input.GetKeyDown (KeyCode.RightArrow)
        //         ))
        //     //.ThrottleFirst (System.TimeSpan.FromSeconds (0.3f)) // 実行間隔の指定
        //     .Subscribe (_ =>
        //     {
        //         _playerModel.ChangeVec3 (Input.GetAxis ("Horizontal"), Input.GetAxis ("Vertical"));
        //     });

        // var upkeyDownStream = this.UpdateAsObservable ().Where (_ => Input.GetKeyDown (KeyCode.UpArrow));
        // var upkeyUpStream = this.UpdateAsObservable ().Where (_ => Input.GetKeyUp (KeyCode.UpArrow));
        // //長押しの判定
        // upkeyDownStream
        //     .Where (_ => !_playerview.IsObjectMoving && !_dangeonFieldModel.IsFieldSetting.Value)
        //     .SelectMany (_ => Observable.Timer(System.TimeSpan.FromSeconds(1)))
        //     //途中でMouseUpされたらストリームをリセット
        //     .TakeUntil (upkeyUpStream)
        //     .RepeatUntilDestroy (this)
        //     .Subscribe (_ =>
        //     {
        //         Debug.Log("press");
        //         _playerModel.ChangeVec3 (Input.GetAxis ("Horizontal"), Input.GetAxis ("Vertical"));
        //     });
    }