Exemplo n.º 1
0
        private void CreateDomino(Vector3 position)
        {
            AllDominoUnSelected();

            if (!GetNewPositionEnable(position))
            {
                AudioController.Instance.Play(Defines.DominoCreateErrorSoundName);
                return;
            }

            var newDomino = Instantiate(_dominoPrefab, position, Quaternion.identity);

            newDomino.Initialize(_dominosDic.Count);
            newDomino.EraseObservable
            .Subscribe(_ =>
            {
                _dominosDic.Remove(newDomino.Collider);
            })
            .AddTo(this);

            _dominosDic.Add(newDomino.Collider, newDomino);

            _dominoStatus = DominoStatus.None;
            AudioController.Instance.Play(Defines.DominoCreateSoundName, true);
        }
Exemplo n.º 2
0
        private void DuplicateDomino(Transform origin)
        {
            AllDominoUnSelected();

            var add         = origin.rotation * Vector3.back;
            var newPosition = origin.position + add * Defines.DuplicateDistance;

            if (!GetNewPositionEnable(newPosition))
            {
                AudioController.Instance.Play(Defines.DominoCreateErrorSoundName);
                return;
            }

            var newDomino = Instantiate(_dominoPrefab, newPosition, origin.rotation);

            newDomino.Initialize(_dominosDic.Count);
            newDomino.EraseObservable
            .Subscribe(_ =>
            {
                _dominosDic.Remove(newDomino.Collider);
            })
            .AddTo(this);

            _dominosDic.Add(newDomino.Collider, newDomino);

            _dominoStatus = DominoStatus.None;
            AudioController.Instance.Play(Defines.DominoCreateSoundName, true);
        }
Exemplo n.º 3
0
        private bool DominoMove()
        {
            if (GetStageTapPosition(out var position))
            {
                if (_targetDomino.Value)
                {
                    if (GetNewPositionEnable(_targetDomino.Value.transform.position + (position - _prevPos)))
                    {
                        _targetDomino.Value.transform.position += (position - _prevPos);
                        _prevPos = position;
                        return(true);
                    }
                    else
                    {
                        AudioController.Instance.Play(Defines.DominoCreateErrorSoundName, false);

                        AllDominoUnSelected();

                        _dominoStatus       = DominoStatus.None;
                        _targetDomino.Value = null;
                        return(false);
                    }
                }
            }
            return(false);
        }
Exemplo n.º 4
0
        private void Start()
        {
            _goalDominos = new List <GoalDomino> {
                _goal1, _goal2
            };

            // ドミノ回転or新規作成
            this.UpdateAsObservable()
            .Where(_ => Input.GetMouseButtonDown(0))
            .Subscribe(_ =>
            {
                if (TapController.GetTapClosestObject(out var hit))
                {
                    if (hit.collider.tag == Defines.DominoTag)
                    {
                        // 回転or複製開始
                        if (GetTapDomino(hit.collider, out var targetDomino))
                        {
                            if (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift))
                            {
                                DuplicateDomino(targetDomino.transform);
                            }
                            else
                            {
                                _targetDomino.Value = targetDomino;
                                _dominoStatus       = DominoStatus.Rotate;
                            }
                        }
                    }
                    else if (hit.collider.tag == Defines.StageTag)
                    {
                        // 新規作成
                        CreateDomino(hit.point);
                    }
                }
            })
            .AddTo(this);

            this.UpdateAsObservable()
            .Where(_ => Input.GetMouseButtonDown(1))
            .Subscribe(_ =>
            {
                if (!TapController.GetTapClosestObject(out var hit))
                {
                    return;
                }

                if (hit.collider.tag != Defines.DominoTag)
                {
                    return;
                }

                if (!GetStageTapPosition(out _prevPos))
                {
                    return;
                }

                // 移動開始
                if (GetTapDomino(hit.collider, out var targetDomino))
                {
                    _targetDomino.Value = targetDomino;
                    _dominoStatus       = DominoStatus.Move;
                }
            })
            .AddTo(this);

            // 操作完了
            this.UpdateAsObservable()
            .Where(_ => Input.GetMouseButtonUp(0) || Input.GetMouseButtonUp(1))
            .Subscribe(_ =>
            {
                _dominoStatus       = DominoStatus.None;
                _targetDomino.Value = null;
            })
            .AddTo(this);

            // 回転
            this.UpdateAsObservable()
            .Where(_ => Input.GetMouseButton(0) && _dominoStatus == DominoStatus.Rotate)
            .Subscribe(_ => DominoRotate())
            .AddTo(this);

            // 移動
            this.UpdateAsObservable()
            .Where(_ => Input.GetMouseButton(1) && _dominoStatus == DominoStatus.Move)
            .Subscribe(_ => DominoMove())
            .AddTo(this);

            // 操作対象ドミノの変更
            _targetDomino.Subscribe(_ => TargetDominoChanged())
            .AddTo(this);
        }