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); }
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; } } }
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; } }
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; }
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); }
public void Refresh() { ChangeColor(this); lastTouchedReceiver = null; }
public void Update(TouchReceiver receiver) { if(Application.platform==RuntimePlatform.Android) UpdateAndroid(receiver); else UpdateDesktop(receiver); }
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); } }
//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; } } }