public void DragMove(DragMessage msg)
    {
		if( !ControllerEnabled ) return;
		float turnAngle = - msg.DeltaPosition.x;
		if( msg.StartPosition.x < - mCenter.x ) {
			turnAngle -= msg.DeltaPosition.y;
		}
		else turnAngle += msg.DeltaPosition.y;
		
		SetWheelRotationAngle( mTotalAngle + turnAngle );
		if( mTotalAngle > MaxAngle ) { 
			turnAngle -= (mTotalAngle - MaxAngle);
            SetWheelRotationAngle(MaxAngle);
			mCurrentSpeed = 0.0f;
		}
		else if( mTotalAngle < MinAngle ) {
			turnAngle -= (mTotalAngle - MinAngle);
            SetWheelRotationAngle(MinAngle);
			mCurrentSpeed = 0.0f;
		}
		else {
			mCurrentSpeed = turnAngle / msg.DeltaTime;
			if( mCurrentSpeed > MaxRotationSpeed ) mCurrentSpeed = MaxRotationSpeed;
		}
		transform.rotation = transform.rotation * Quaternion.Euler( 0, 0, turnAngle );
		mLastMessage = msg;
    }
예제 #2
0
        private void Drag(DragMessage _action)
        {
            // Update the position of the node within the Canvas.
            if (SelectedNode == _action.Node)
            {
                Vector displacement = new Vector(_action.DeltaX, _action.DeltaY);
                //check for clipping
                bool willClip = Utilities.WillClip(_action.Node.Visual, displacement, Visual);
                //if (!willClip)
                {
                    Debug.WriteLine(string.Format("@{0},{1}", _action.Node.X, _action.Node.Y));
                    //Translate the selected node
                    _action.Node.X += _action.DeltaX;
                    _action.Node.Y += _action.DeltaY;



                    //Update the edge positions as well, allowing easier edge collision detection
                    _action.Node.LeftEdgeViewModel.X = _action.DeltaX;
                    _action.Node.LeftEdgeViewModel.Y = _action.DeltaY;

                    _action.Node.RightEdgeViewModel.X += _action.DeltaX;
                    _action.Node.RightEdgeViewModel.Y += _action.DeltaY;
                }
                //else
                {
                    //If the vector magnitude will take the node outside the network visual
                    //set the position of the node to the edge of the visual, and not beyond.
                }
            }
        }
예제 #3
0
    void KeyBoardDrive(float x)
    {
        if (mLastMessage == null)
        {
            mLastMessage = new DragMessage();
            mLastMessage.StartPosition = Vector2.zero;
        }

        Vector2 endPosition = mLastMessage.StartPosition;

        endPosition.x             -= x * MaxAngle;
        mLastMessage.EndPosition   = endPosition;
        mLastMessage.DeltaTime     = Time.deltaTime;
        mLastMessage.DeltaPosition = mLastMessage.StartPosition - mLastMessage.EndPosition;
        DragMove(mLastMessage);
    }
예제 #4
0
    public void DragMove(DragMessage msg)
    {
        if (!ControllerEnabled)
        {
            return;
        }
        float turnAngle = -msg.DeltaPosition.x;

        if (msg.StartPosition.x < -mCenter.x)
        {
            turnAngle -= msg.DeltaPosition.y;
        }
        else
        {
            turnAngle += msg.DeltaPosition.y;
        }

        SetWheelRotationAngle(mTotalAngle + turnAngle);
        if (mTotalAngle > MaxAngle)
        {
            turnAngle -= (mTotalAngle - MaxAngle);
            SetWheelRotationAngle(MaxAngle);
            mCurrentSpeed = 0.0f;
        }
        else if (mTotalAngle < MinAngle)
        {
            turnAngle -= (mTotalAngle - MinAngle);
            SetWheelRotationAngle(MinAngle);
            mCurrentSpeed = 0.0f;
        }
        else
        {
            mCurrentSpeed = turnAngle / msg.DeltaTime;
            if (mCurrentSpeed > MaxRotationSpeed)
            {
                mCurrentSpeed = MaxRotationSpeed;
            }
        }
        transform.rotation = transform.rotation * Quaternion.Euler(0, 0, turnAngle);
        mLastMessage       = msg;
    }
예제 #5
0
 void Update()
 {
     if (Input.GetMouseButtonDown(MouseButton))
     {
         if( !mStartDrag)
         {
             Vector2 mousePos = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
             if (mDragArea.Contains(mousePos))
             {
                 mStartDrag = true;
                 mPositionRec = mousePos;
                 GlobalMethods.SendMessage(MessageTarget, "DragStart");
             }
         }
     }
     else if (Input.GetMouseButtonUp(MouseButton))
     {
         if (mStartDrag)
         {
             Vector2 mousePos = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
             DragMessage msg = new DragMessage();
             msg.Index = MouseButton;
             msg.StartPosition = mPositionRec;
             msg.EndPosition = mousePos;
             msg.DeltaPosition = mousePos - mPositionRec;
             msg.DeltaTime = Time.deltaTime;
             mStartDrag = false;
             mPositionRec = Vector2.zero;
             if (MessageTarget != null)
             {
                 GlobalMethods.SendMessage(MessageTarget, "DragMove", msg);
                 GlobalMethods.SendMessage(MessageTarget, "DragEnd");
             }
         }
     }
     else if (mStartDrag)
     {
         Vector2 mousePos = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
         if (mDragArea.Contains(mousePos))
         {
             if (mousePos != mPositionRec)
             {
                 DragMessage msg = new DragMessage();
                 msg.Index = MouseButton;
                 msg.StartPosition = mPositionRec;
                 msg.EndPosition = mousePos;
                 msg.DeltaPosition = mousePos - mPositionRec;
                 msg.DeltaTime = Time.deltaTime;
                 mPositionRec = mousePos;
                 if (MessageTarget != null) GlobalMethods.SendMessage(MessageTarget, "DragMove", msg);
             }
         }
         else
         {
             mStartDrag = false;
             DragMessage msg = new DragMessage();
             msg.Index = MouseButton;
             msg.StartPosition = mPositionRec;
             msg.EndPosition = mousePos;
             msg.DeltaPosition = mousePos - mPositionRec;
             msg.DeltaTime = Time.deltaTime;
             mPositionRec = Vector2.zero;
             if (MessageTarget != null)
             {
                 GlobalMethods.SendMessage(MessageTarget, "DragMove", msg);
                 GlobalMethods.SendMessage(MessageTarget, "DragEnd");
             }
         }
     }
 }
	void KeyBoardDrive(float x)
	{
		if( mLastMessage == null ) {
			mLastMessage = new DragMessage();
			mLastMessage.StartPosition = Vector2.zero;
		}
		
		Vector2 endPosition = mLastMessage.StartPosition;
		endPosition.x -= x * MaxAngle;
		mLastMessage.EndPosition = endPosition;
		mLastMessage.DeltaTime = Time.deltaTime;
		mLastMessage.DeltaPosition = mLastMessage.StartPosition - mLastMessage.EndPosition;
		DragMove(mLastMessage);
	}
예제 #7
0
 private void OnDragMessage(DragMessage msg)
 {
     ResizeInProgress = msg.Start;
 }
예제 #8
0
 void Update()
 {
     if (Input.GetMouseButtonDown(MouseButton))
     {
         if (!mStartDrag)
         {
             Vector2 mousePos = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
             if (mDragArea.Contains(mousePos))
             {
                 mStartDrag   = true;
                 mPositionRec = mousePos;
                 GlobalMethods.SendMessage(MessageTarget, "DragStart");
             }
         }
     }
     else if (Input.GetMouseButtonUp(MouseButton))
     {
         if (mStartDrag)
         {
             Vector2     mousePos = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
             DragMessage msg      = new DragMessage();
             msg.Index         = MouseButton;
             msg.StartPosition = mPositionRec;
             msg.EndPosition   = mousePos;
             msg.DeltaPosition = mousePos - mPositionRec;
             msg.DeltaTime     = Time.deltaTime;
             mStartDrag        = false;
             mPositionRec      = Vector2.zero;
             if (MessageTarget != null)
             {
                 GlobalMethods.SendMessage(MessageTarget, "DragMove", msg);
                 GlobalMethods.SendMessage(MessageTarget, "DragEnd");
             }
         }
     }
     else if (mStartDrag)
     {
         Vector2 mousePos = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
         if (mDragArea.Contains(mousePos))
         {
             if (mousePos != mPositionRec)
             {
                 DragMessage msg = new DragMessage();
                 msg.Index         = MouseButton;
                 msg.StartPosition = mPositionRec;
                 msg.EndPosition   = mousePos;
                 msg.DeltaPosition = mousePos - mPositionRec;
                 msg.DeltaTime     = Time.deltaTime;
                 mPositionRec      = mousePos;
                 if (MessageTarget != null)
                 {
                     GlobalMethods.SendMessage(MessageTarget, "DragMove", msg);
                 }
             }
         }
         else
         {
             mStartDrag = false;
             DragMessage msg = new DragMessage();
             msg.Index         = MouseButton;
             msg.StartPosition = mPositionRec;
             msg.EndPosition   = mousePos;
             msg.DeltaPosition = mousePos - mPositionRec;
             msg.DeltaTime     = Time.deltaTime;
             mPositionRec      = Vector2.zero;
             if (MessageTarget != null)
             {
                 GlobalMethods.SendMessage(MessageTarget, "DragMove", msg);
                 GlobalMethods.SendMessage(MessageTarget, "DragEnd");
             }
         }
     }
 }