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); }
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); }
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); }
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); }