Пример #1
0
    public void SnapToReceiver(TouchReceiver receiver)
    {
        if (receiver == null)
        {
            return;
        }

        var position = receiver.GetPosition();

        if (!CanSnap(receiver))
        {
            return;
        }

        if (lastTouchedReceiver == null)
        {
            lastTouchedReceiver = receiver;
        }
        if (receiver.id != lastTouchedReceiver.id)
        {
            lastTouchedReceiver = receiver;
        }

        UpdatePosition(position);
    }
Пример #2
0
 private void UpdateAndroid(TouchReceiver receiver)
 {
     for(int i = 0; i<Input.touchCount; i++)
     {
         Touch t = Input.GetTouch(i);
         switch(t.phase)
         {
         case TouchPhase.Began:
             if(waiting) break;
             receiver.OnTouchBegin(t.fingerId);
             break;
         case TouchPhase.Moved:
         //case TouchPhase.Stationary:
             if(waiting) break;
             receiver.OnTouchStay(t.fingerId);
             break;
         case TouchPhase.Ended:
         case TouchPhase.Canceled:
             if(waiting)
             {
                 waiting = false;
                 //HACK, C# Y U no break from switch here?
                 return;
             }
             receiver.OnTouchEnd(t.fingerId);
             break;
         }
     }
 }
Пример #3
0
    public bool CanSnap(TouchReceiver receiver)
    {
        var position = receiver.GetPosition();

        var center = transform.position;

        if (center.x > position.x + receiver.xRange)
        {
            return(false);
        }
        if (center.x < position.x - receiver.xRange)
        {
            return(false);
        }
        if (center.y > position.y + receiver.yRange)
        {
            return(false);
        }
        if (center.y < position.y - receiver.yRange)
        {
            return(false);
        }

        return(true);
    }
 // Start is called before the first frame update
 void Start()
 {
     if (aTouchReceiverGO != null)
     {
         TouchReceiver aTouchReceiver = aTouchReceiverGO.GetComponent <TouchReceiver>();
         aTouchReceiver.smartPieceTouchStart += OnSmartPieceTouchStart;
         aTouchReceiver.smartPieceTouchEnd   += OnSmartPieceTouchEnd;
     }
 }
Пример #5
0
    public void ChangeColor(TouchReceiver receiver)
    {
        if (receiver == null)
        {
            return;
        }

        var startColor = receiver.id == id?GetColor() : receiver.GetColor();

        startColor.a = 1;

        var endColor = lastTouchedReceiver == null?GetColor() : lastTouchedReceiver.GetColor();

        endColor = receiver.id == id?GetColor() : endColor;

        endColor.a = 1;

        trail.startColor = startColor;
        trail.endColor   = endColor;
        sprite.color     = startColor;
    }
Пример #6
0
    private void ProcessTouch()
    {
        if (!Input.GetMouseButton(0))
        {
            motherReceiver.UnregisterTouch();

            foreach (var touchReceiver in touchReceivers)
            {
                touchReceiver.UnregisterTouch();
            }

            motherReceiver.ReturnDefaultStateWithDelay();

            lastTouchedReceiver = null;

            return;
        }


        var touchPosition = touchDetectorCamera.ScreenToWorldPoint(Input.mousePosition);

        touchPosition.z = 0;

        motherReceiver.ReceiveTouch(touchPosition);

        if (!motherReceiver.recievedTouch)
        {
            return;
        }

        motherReceiver.UpdatePosition(CalculateTouchReceiverPosition(touchPosition));

        touchPosition = motherReceiver.GetPosition();

        if (!_canReceiveTouch)
        {
            return;
        }

        foreach (var touchReceiver in touchReceivers)
        {
            if (!touchReceiver.IsTouchValid(touchPosition))
            {
                continue;
            }
            if (lastTouchedReceiver != touchReceiver)
            {
                _shouldChangeColor = true;
            }

            touchReceiver.ReceiveTouch(touchPosition);

//            if (lastTouchedReceiver != null)
//            {
//                var lastPosition = lastTouchedReceiver.GetPosition();
//                var distance = touchReceiver.GetPosition() - lastPosition;
//
//                Debug.DrawRay(lastPosition, distance, Color.green, 1f, false);
//            }

            lastTouchedReceiver = touchReceiver;

            break;
        }

        if (_shouldChangeColor)
        {
            motherReceiver.ChangeColor(lastTouchedReceiver);

            _shouldChangeColor = false;

            AndroidManager.HapticFeedback();

            cameraShaker.TriggerShake();

            if (OnReceivedTouch != null)
            {
                OnReceivedTouch();
            }
        }

        motherReceiver.SnapToReceiver(lastTouchedReceiver);
    }
Пример #7
0
 public void Refresh()
 {
     ChangeColor(this);
     lastTouchedReceiver = null;
 }
Пример #8
0
 public void Update(TouchReceiver receiver)
 {
     if(Application.platform==RuntimePlatform.Android) UpdateAndroid(receiver);
     else UpdateDesktop(receiver);
 }
Пример #9
0
 private void UpdateDesktop(TouchReceiver receiver)
 {
     for(int i = 0; i<2; i++)
     {
         if(Input.GetMouseButtonDown(i)) receiver.OnTouchBegin(i);
         if(Input.GetMouseButton(i)) receiver.OnTouchStay(i);
         if(Input.GetMouseButtonUp(i)) receiver.OnTouchEnd(i);
     }
 }
Пример #10
0
    //Even after all this crazyness, it's still not quite right
    private void UpdateAndroid(TouchReceiver receiver)
    {
        int appID;

        for(int i = 0; i<Input.touchCount; i++)
        {
            Touch t = Input.GetTouch(i);
            switch(t.phase)
            {
            case TouchPhase.Began:
                if(waiting) break;
                appID = NextID();
                touchMap.Add(appID);
                //print("Begin(b) " + i + ", " + appID + ", " + (touchMap.Count-1) );
                print("Touch: " + t.fingerId);
                touchCount++;
                receiver.OnTouchBegin(appID);
                break;
            case TouchPhase.Moved:
            //case TouchPhase.Stationary:
                if(waiting) break;
                appID = touchMap[i];
                receiver.OnTouchStay(touchMap[i]);
                break;
            case TouchPhase.Ended:
            case TouchPhase.Canceled:
                if(waiting)
                {
                    waiting = false;
                    //HACK, C# Y U no break from switch here?
                    return;
                }
                touchCount--;
                appID = touchMap[i];
                //print("Ended(b) " + i + ", " + appID + ", " + (touchMap.Count-1) );
                receiver.OnTouchEnd(appID);
                if(appID<nextAppID) nextAppID = appID;
                RemoveIndex(i);
                break;
            }
        }
    }