private void AddStatue(Statues name) { IGestureSegment[] segments = null; switch (name) { case Statues.HandUp: segments = new IGestureSegment[NB_FRAME]; for (int i = 0; i < NB_FRAME; i++) { segments[i] = new HandUpSegment(); } break; case Statues.HandRight: segments = new IGestureSegment[NB_FRAME]; for (int i = 0; i < NB_FRAME; i++) { segments[i] = new HandRightSegment(); } break; case Statues.HandLeft: segments = new IGestureSegment[NB_FRAME]; for (int i = 0; i < NB_FRAME; i++) { segments[i] = new HandLeftSegment(); } break; case Statues.HandBottom: segments = new IGestureSegment[NB_FRAME]; for (int i = 0; i < NB_FRAME; i++) { segments[i] = new HandBottomSegment(); } break; case Statues.Reset: segments = new IGestureSegment[NB_FRAME]; for (int i = 0; i < NB_FRAME; i++) { segments[i] = new ResetSegment(); } break; case Statues.Jump: segments = new IGestureSegment[NB_FRAME]; for (int i = 0; i < NB_FRAME; i++) { segments[i] = new JumpSegment(); } break; case Statues.TurnRight: segments = new IGestureSegment[NB_FRAME]; for (int i = 0; i < NB_FRAME; i++) { segments[i] = new TurnRightSegment(); } break; case Statues.TurnLeft: segments = new IGestureSegment[NB_FRAME]; for (int i = 0; i < NB_FRAME; i++) { segments[i] = new TurnLeftSegment(); } break; case Statues.OpenRepeat: segments = new IGestureSegment[NB_FRAME]; for (int i = 0; i < NB_FRAME; i++) { segments[i] = new OpenRepeatSegment(); } break; case Statues.CloseRepeat: segments = new IGestureSegment[NB_FRAME]; for (int i = 0; i < NB_FRAME; i++) { segments[i] = new CloseRepeatSegment(); } break; case Statues.Stop: segments = new IGestureSegment[15]; for (int i = 0; i < 15; i++) { segments[i] = new StopSegment(); } break; case Statues.GreenFlag: segments = new IGestureSegment[15]; for (int i = 0; i < 15; i++) { segments[i] = new GreenFlagSegment(); } break; case Statues.Grow: segments = new IGestureSegment[NB_FRAME]; for (int i = 0; i < NB_FRAME; i++) { segments[i] = new GrowSegment(); } break; case Statues.Shrink: segments = new IGestureSegment[NB_FRAME]; for (int i = 0; i < NB_FRAME; i++) { segments[i] = new ShrinkSegment(); } break; case Statues.ChangeScene: segments = new IGestureSegment[NB_FRAME]; for (int i = 0; i < NB_FRAME; i++) { segments[i] = new ChangeSceneSegment(); } break; case Statues.NormalSize: segments = new IGestureSegment[NB_FRAME]; for (int i = 0; i < NB_FRAME; i++) { segments[i] = new NormalSizeSegment(); } break; case Statues.Show: segments = new IGestureSegment[NB_FRAME]; for (int i = 0; i < NB_FRAME; i++) { segments[i] = new ShowSegment(); } break; case Statues.Hide: segments = new IGestureSegment[NB_FRAME]; for (int i = 0; i < NB_FRAME; i++) { segments[i] = new HideSegment(); } break; case Statues.Speed: segments = new IGestureSegment[NB_FRAME]; for (int i = 0; i < NB_FRAME; i++) { segments[i] = new SpeedSegment(); } break; case Statues.Wait: segments = new IGestureSegment[NB_FRAME]; for (int i = 0; i < NB_FRAME; i++) { segments[i] = new WaitSegment(); } break; case Statues.TouchAnotherSprite: segments = new IGestureSegment[NB_FRAME]; for (int i = 0; i < NB_FRAME; i++) { segments[i] = new TouchAnotherSpriteSegment(); } break; case Statues.WaveRight: segments = new IGestureSegment[2 * NB_FRAME]; for (int i = 0; i < NB_FRAME; i++) { segments[i] = new WaveRightSegment1(); } for (int i = NB_FRAME; i < 2 * NB_FRAME; i++) { segments[i] = new WaveRightSegment2(); } break; case Statues.FingerCount: segments = new IGestureSegment[20]; for (int i = 0; i < 20; i++) { segments[i] = new FingerCount(); } break; default: break; } Gesture gesture = new Gesture(name.ToString(), segments); gesture.GestureDetected += OnGestureDetected; _gestures.Add(gesture); }
private void Update() { if (!_isDetail) { if (_isModelCanRotate) { if (Input.GetMouseButtonDown(0)) { _lastOnePos = Input.mousePosition; return; } if (Input.GetMouseButton(0)) { _currOnePos = Input.mousePosition; Vector2 delta = (_currOnePos - _lastOnePos) * _rotateSpeed * Time.deltaTime; _modelX.Rotate(new Vector3(delta.y, 0, 0)); _modelY.Rotate(new Vector3(0, -delta.x, 0)); if (Vector3.Cross(_modelX.up, Vector3.up).x <= 0) { _modelX.localRotation = Quaternion.Euler(0, 0, 0); } else { if (Vector3.Angle(_modelX.up, Vector3.up) > 90f) { _modelX.localRotation = Quaternion.Euler(270f, 0, 0); } } if (Vector3.Cross(_modelY.forward, Vector3.forward).y >= 0.7f) { _modelY.localRotation = Quaternion.Euler(0, -45f, 0); } if (Vector3.Cross(_modelY.forward, Vector3.forward).y <= -0.7f) { _modelY.localRotation = Quaternion.Euler(0, 45f, 0); } _lastOnePos = _currOnePos; } if (Input.touchCount == 0) { _fingerCount = FingerCount.zero; } if (Input.touchCount == 1) { if (_fingerCount != FingerCount.one) { _lastOnePos = Input.GetTouch(0).position; _fingerCount = FingerCount.one; return; } if (Input.GetTouch(0).phase == TouchPhase.Moved && _fingerCount == FingerCount.one) { _currOnePos = Input.GetTouch(0).position; Vector2 delta = (_currOnePos - _lastOnePos) * _rotateSpeed * Time.deltaTime; _modelX.Rotate(new Vector3(delta.y, 0, 0)); _modelY.Rotate(new Vector3(0, -delta.x, 0)); if (Vector3.Cross(_modelX.up, Vector3.up).x <= 0) { _modelX.localRotation = Quaternion.Euler(0, 0, 0); } else { if (Vector3.Angle(_modelX.up, Vector3.up) > 90f) { _modelX.localRotation = Quaternion.Euler(270f, 0, 0); } } if (Vector3.Cross(_modelY.forward, Vector3.forward).y >= 0.7f) { _modelY.localRotation = Quaternion.Euler(0, -45f, 0); } if (Vector3.Cross(_modelY.forward, Vector3.forward).y <= -0.7f) { _modelY.localRotation = Quaternion.Euler(0, 45f, 0); } _lastOnePos = _currOnePos; } } if (Input.touchCount == 2) { if (_fingerCount != FingerCount.two) { _lastTwoDistance = Vector2.Distance(Input.GetTouch(0).position, Input.GetTouch(1).position); _fingerCount = FingerCount.two; return; } if (_fingerCount == FingerCount.two) { if (Input.GetTouch(0).phase == TouchPhase.Moved || Input.GetTouch(1).phase == TouchPhase.Moved) { _currTwoDistance = Vector2.Distance(Input.GetTouch(0).position, Input.GetTouch(1).position); float delta = _currTwoDistance - _lastTwoDistance; _model.localScale += Vector3.one * delta * Time.deltaTime * _changeSpeed; if (_model.localScale.x >= 2) { _model.localScale = Vector3.one * 2f; } if (_model.localScale.x <= 0.5f) { _model.localScale = Vector3.one * 0.5f; } _lastTwoDistance = _currTwoDistance; } } if (_fingerCount == FingerCount.threeOrAbove) { return; } } if (Input.touchCount >= 3) { _fingerCount = FingerCount.threeOrAbove; } } } else { if (Input.GetMouseButtonDown(0)) { _lastOnePos = Input.mousePosition; return; } if (Input.GetMouseButton(0)) { _currOnePos = Input.mousePosition; Vector2 delta = (_currOnePos - _lastOnePos) * _rotateSpeed * Time.deltaTime; _cameraTransform.Rotate(_currentDetailPoint.up, delta.x, Space.World); _cameraTransform.Rotate(_currentDetailPoint.right, -delta.y, Space.World); _cameraTransform.rotation = Quaternion.Euler(_cameraTransform.localEulerAngles.x, _cameraTransform.localEulerAngles.y, 0); if (Vector3.Cross(_cameraTransform.forward, _currentDetailPoint.forward).x >= 0.7f) { _cameraTransform.rotation = Quaternion.Euler(-45f, _cameraTransform.localEulerAngles.y, 0); } if (Vector3.Cross(_cameraTransform.forward, _currentDetailPoint.forward).x <= -0.7f) { _cameraTransform.rotation = Quaternion.Euler(45f, _cameraTransform.localEulerAngles.y, 0); } if (Vector3.Cross(_cameraTransform.forward, _currentDetailPoint.forward).z >= 0.7f) { _cameraTransform.rotation = Quaternion.Euler(-45f, _cameraTransform.localEulerAngles.y, 0); } if (Vector3.Cross(_cameraTransform.forward, _currentDetailPoint.forward).z <= -0.7f) { _cameraTransform.rotation = Quaternion.Euler(45f, _cameraTransform.localEulerAngles.y, 0); } if (Vector3.Cross(_cameraTransform.forward, _currentDetailPoint.forward).y >= 0.7f) { _cameraTransform.localRotation = Quaternion.Euler(_cameraTransform.localEulerAngles.x, -45f - Vector3.Angle(_currentDetailPoint.forward, Vector3.forward), 0); } if (Vector3.Cross(_cameraTransform.forward, _currentDetailPoint.forward).y <= -0.7f) { _cameraTransform.localRotation = Quaternion.Euler(_cameraTransform.localEulerAngles.x, 45f - Vector3.Angle(_currentDetailPoint.forward, Vector3.forward), 0); } _lastOnePos = _currOnePos; } if (Input.touchCount == 0) { _fingerCount = FingerCount.zero; } if (Input.touchCount == 1) { if (_fingerCount != FingerCount.one) { _lastOnePos = Input.GetTouch(0).position; _fingerCount = FingerCount.one; return; } if (Input.GetTouch(0).phase == TouchPhase.Moved && _fingerCount == FingerCount.one) { _currOnePos = Input.GetTouch(0).position; Vector2 delta = (_currOnePos - _lastOnePos) * _rotateSpeed * Time.deltaTime; _cameraTransform.Rotate(_currentDetailPoint.up, delta.x, Space.World); _cameraTransform.Rotate(_currentDetailPoint.right, -delta.y, Space.World); _cameraTransform.rotation = Quaternion.Euler(_cameraTransform.localEulerAngles.x, _cameraTransform.localEulerAngles.y, 0); if (Vector3.Cross(_cameraTransform.forward, _currentDetailPoint.forward).x >= 0.7f) { _cameraTransform.rotation = Quaternion.Euler(-45f, _cameraTransform.localEulerAngles.y, 0); } if (Vector3.Cross(_cameraTransform.forward, _currentDetailPoint.forward).x <= -0.7f) { _cameraTransform.rotation = Quaternion.Euler(45f, _cameraTransform.localEulerAngles.y, 0); } if (Vector3.Cross(_cameraTransform.forward, _currentDetailPoint.forward).z >= 0.7f) { _cameraTransform.rotation = Quaternion.Euler(-45f, _cameraTransform.localEulerAngles.y, 0); } if (Vector3.Cross(_cameraTransform.forward, _currentDetailPoint.forward).z <= -0.7f) { _cameraTransform.rotation = Quaternion.Euler(45f, _cameraTransform.localEulerAngles.y, 0); } if (Vector3.Cross(_cameraTransform.forward, _currentDetailPoint.forward).y >= 0.7f) { _cameraTransform.localRotation = Quaternion.Euler(_cameraTransform.localEulerAngles.x, -45f - Vector3.Angle(_currentDetailPoint.forward, Vector3.forward), 0); } if (Vector3.Cross(_cameraTransform.forward, _currentDetailPoint.forward).y <= -0.7f) { _cameraTransform.localRotation = Quaternion.Euler(_cameraTransform.localEulerAngles.x, 45f - Vector3.Angle(_currentDetailPoint.forward, Vector3.forward), 0); } _lastOnePos = _currOnePos; } } if (Input.touchCount == 2) { _fingerCount = FingerCount.two; } if (Input.touchCount >= 3) { _fingerCount = FingerCount.threeOrAbove; } } }