Esempio n. 1
0
        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;
        }