internal void Update(FingerPhase newPhase, Vector2 newPos) { // validate phase transitions if (phase != newPhase) { // In low framerate situations, it is possible to miss some input updates and thus // skip the "Ended" phase if (newPhase == FingerPhase.None && phase != FingerPhase.Ended) { Debug.LogWarning("Correcting bad FingerPhase transition (FingerPhase.Ended skipped)"); Update(FingerPhase.Ended, PreviousPosition); return; } // cannot get a Moved or Stationary phase without being down first if (!down && (newPhase == FingerPhase.Moved || newPhase == FingerPhase.Stationary)) { Debug.LogWarning("Correcting bad FingerPhase transition (FingerPhase.Began skipped)"); Update(FingerPhase.Began, newPos); return; } if ((down && newPhase == FingerPhase.Began) || (!down && newPhase == FingerPhase.Ended)) { Debug.LogWarning("Invalid state FingerPhase transition from " + phase + " to " + newPhase + " - Skipping."); return; } } else // same phase as before { if (newPhase == FingerPhase.Began || newPhase == FingerPhase.Ended) { Debug.LogWarning("Duplicated FingerPhase." + newPhase.ToString() + " - skipping."); return; } } if (newPhase != FingerPhase.None) { if (newPhase == FingerPhase.Ended) { // release down = false; } else { if (newPhase == FingerPhase.Began) { // activate down = true; startPos = newPos; prevPos = newPos; startTime = Time.time; } prevPos = pos; pos = newPos; deltaPos = pos - prevPos; } } phase = newPhase; }