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);
        }
Esempio n. 2
0
    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;
            }
        }
    }