コード例 #1
0
ファイル: PolygonDrawer.cs プロジェクト: gviaud/OS-unity-5
    // Update is called once per frame
    protected void Update()
    {
        #if (UNITY_IPHONE || UNITY_ANDROID) && !UNITY_EDITOR
        _touches = Input.touches;
        #endif
        if (_gui.GetCurrentMode () == PoolDesignerMode.PolygonEdition)
        {
            _cursor = _planTransformation.GetTransformedMousePosition ();

            // on cherche le point et l'edge qui sont sous le curseur
            FindIntersectedPoint ();
            FindIntersectedEdge ();

        //#if (UNITY_IPHONE || UNITY_ANDROID) && !UNITY_EDITOR
        //            if(Input.touchCount == 1)
        //            {
        //                _firstTouch = _planTransformation.GetTouches()[0];
        //                Touch testouch = _touches[0];
        //
        //            if (!_gui.isOnUI () && _firstTouch.phase == TouchPhase.Began)
        //            {
        //                Debug.Log("---------> firstTouch "+_firstTouch.deltaTime+", "+_firstTouch.position+", "+_firstTouch.deltaPosition+", "+_firstTouch.phase);
        //                Debug.Log("---------> testTouch  "+testouch.deltaTime+", "+testouch.position+", "+testouch.deltaPosition+", "+testouch.phase);
        //#else
          //if UNITY_STANDALONE_OSX || UNITY_STANDALONE_WIN || UNITY_EDITOR
            if (!_gui.isOnUI () && _planTransformation.GetClickBegan()/*PC.In.Click1Down()*/ && !_gui.IsOpen())
            {
        //#endif
                if(_gui.IsJustCloseMenu())
                {
                    _gui.setIsJustCloseMenu(false);
                    return;
                }
                if (_selectedPointIndexCandidate >= 0) // selection
                {
                    _selectedPointIndex = _selectedPointIndexCandidate;
                    _selectedPoint = _polygon.GetPoints ()[_selectedPointIndex];

                    if (!_polygon.IsClosed () && _selectedPointIndex == 0 /*&& _polygon.GetPoints ().Count > 2*/)
                    {
                        _polygon.Close ();
                        _selectedPointIndex = _polygon.GetPoints ().IndexOf (_selectedPoint);
                    }

                    _canMove = true;
                }
                else if (_selectedEdgeIndexCandidate >= 0) // insert point
                {
                    _selectedEdgeIndex = _selectedEdgeIndexCandidate;
                    _selectedEdge = _polygon.GetEdges ()[_selectedEdgeIndex];

                    Point2 newPoint = new Point2 (_cursor);
                    newPoint.Set(newPoint.GetX()-_offsetWidth, newPoint.GetY()-_offsetHeight);
                    _polygon.InsertPoint (_selectedEdgeIndex, newPoint);

                    _selectedPointIndex = _polygon.GetPoints ().IndexOf (newPoint);
                    _selectedPoint = newPoint;

                    _canMove = true;
                }

                else if (!_polygon.IsClosed ()) // add point
                {
                    Point2 newPoint = new Point2 (_cursor);
                    newPoint.Set(newPoint.GetX()-_offsetWidth, newPoint.GetY()-_offsetHeight);
                    _polygon.AddPoint (newPoint);

                    _selectedPointIndex = _polygon.GetPoints ().Count - 1;
                    _selectedPoint = newPoint;

                    _canMove = true;

                }
                else // deselection
                {
                    _selectedPointIndex = -1;
                    _selectedPoint = null;

                    _selectedEdgeIndex = -1;
                    _selectedEdge = null;
                }

                if (_selectedPointIndex >= 0) // update radius slider values
                {
                    _pointOffset = (Vector2)_selectedPoint - _cursor;

                    if (_selectedPoint.GetJunction () == JunctionType.Broken)
                    {
                        _gui.SetSliderValues (0, 1);
                    }
                    else if (_selectedPoint.GetJunction () == JunctionType.Curved)
                    {
                        ArchedPoint2 ar = _selectedPoint as ArchedPoint2;
                        _gui.SetSliderValues (ar.GetMeasuredRadius () / 100, ar.GetMaxRadius () / 100);
                    }
                }
            }
        //#if (UNITY_IPHONE || UNITY_ANDROID) && !UNITY_EDITOR
        //            }
        //#endif
            if (PC.In.Click1Up()) //Input.GetMouseButtonUp (0))
            {
                _canMove = false;

                if (!_polygon.IsClosed () &&
                    _polygon.GetPoints ().Count > 2 &&
                    _selectedPointIndex == _polygon.GetPoints ().Count - 1) // close polygon
                {
                    Vector2 firstPoint = _polygon.GetPoints ()[0];
                    float rectSize = 100;
                    Rect closeRect = new Rect (
                        firstPoint.x - rectSize/2,
                        firstPoint.y - rectSize/2,
                        rectSize, rectSize);

                    if (closeRect.Contains (_cursor))
                    {
                        _polygon.CloseAndFusion ();

                        _selectedPointIndex = -1;
                        _selectedPoint = null;

                        _selectedEdgeIndex = -1;
                        _selectedEdge = null;
                    }
                }
            }

            if(PC.In.Click1Hold() && _selectedPointIndex >= 0 && _canMove) // move selected point
            {
                _snapper.SetExclusionPoint (_selectedPoint);
                Vector2 pointPosition = _cursor + _pointOffset;

                if (_snapper.IsAngleSnapActivate () && _snapper.IsAngleSnapped ())
                {
                    pointPosition = _snapper.GetAngleSnapPosition ();
                }

                if (_snapper.IsAlignedPointSnapActivate ())
                {
                    if (_snapper.IsHSnapped ())
                    {
                        pointPosition.y = _snapper.GetHSnapY () /*+ _offsetHeight*/;
                    }

                    if (_snapper.IsVSnapped ())
                    {
                        pointPosition.x = _snapper.GetVSnapX () /*+ _offsetWidth*/;
                    }
                }

                if (_snapper.IsPointSnapActivate () && _snapper.IsIntersectedSnapped ())
                {
                    pointPosition = _snapper.GetIntersectedSnapPosition ();
            //		pointPosition.Set(pointPosition.x + _offsetWidth, pointPosition.y + _offsetHeight);
                }

                _polygon.MovePoint (_selectedPointIndex, pointPosition);
            }
        //#endif
        }
        if(m_isModifyingH || m_isModifyingW)
        {
            if (PC.In.Click1Up() && !PC.In.CursorOnUIs(m_cotationH,m_cotationW))
            {

                m_isModifyingW = m_isModifyingH = false;
            }
        }
    }