示例#1
0
文件: Touch.cs 项目: barronds/XNARTS
        public void Update(GameTime game_time)
        {
            mCurrentGameTime = game_time;

            // cache touches every update in case it's expensive to get
            mTouches = Microsoft.Xna.Framework.Input.Touch.TouchPanel.GetState();

            // gather what is needed to update triggers first
            eContactChange count_change = UpdateTouchCount();

            // update state machine last, possibly in new state
            mStateMachine.Update(count_change);
        }
示例#2
0
文件: Touch.cs 项目: barronds/XNARTS
        private eContactChange State_SingleDrag()
        {
            // we can go quickly to multidrag but if in single drag deliberately, then no
            const double k_thresh_seconds = 0.1;

            if (mContactCount == eContactCount.Two)
            {
                double elapsed = mCurrentGameTime.TotalGameTime.TotalSeconds - mSingleDragStartTimeSec;

                eContactChange change = (elapsed > k_thresh_seconds)                            ?
                                        eContactChange.SingleDragToMultiDragTooSlow :
                                        eContactChange.SingleDragToMultiDrag;

                return(change);
            }

            return(eContactChange.NoChange);
        }
示例#3
0
文件: Touch.cs 项目: barronds/XNARTS
        // state/transition helper functions
        private eContactChange UpdateTouchCount()
        {
            int            num_touches        = mTouches.Count();
            eContactCount  prev_contact_count = mContactCount;
            eContactChange count_change       = eContactChange.NoChange;

            eContactCount new_count = num_touches == 5 ? eContactCount.Five :
                                      num_touches == 4 ? eContactCount.Four :
                                      num_touches > 2 ? eContactCount.Many :
                                      num_touches > 1 ? eContactCount.Two :
                                      num_touches > 0 ? eContactCount.One :
                                      eContactCount.Zero;

            if (prev_contact_count == eContactCount.Zero)
            {
                count_change = new_count == eContactCount.One ? eContactChange.ZeroToOne :
                               new_count == eContactCount.Two ? eContactChange.ZeroToTwo :
                               new_count == eContactCount.Many ? eContactChange.ZeroToMany :
                               new_count == eContactCount.Four ? eContactChange.AnyToFour :
                               new_count == eContactCount.Five ? eContactChange.AnyToFive :
                               eContactChange.NoChange;
            }
            else if (prev_contact_count == eContactCount.One)
            {
                count_change = new_count == eContactCount.Zero ? eContactChange.OneToZero :
                               new_count == eContactCount.Two ? eContactChange.OneToTwo :
                               new_count == eContactCount.Many ? eContactChange.OneToMany :
                               new_count == eContactCount.Four ? eContactChange.AnyToFour :
                               new_count == eContactCount.Five ? eContactChange.AnyToFive :
                               eContactChange.NoChange;
            }
            else if (prev_contact_count == eContactCount.Two)
            {
                count_change = new_count == eContactCount.Zero ? eContactChange.TwoToZero :
                               new_count == eContactCount.One ? eContactChange.TwoToOne :
                               new_count == eContactCount.Many ? eContactChange.TwoToMany :
                               new_count == eContactCount.Four ? eContactChange.AnyToFour :
                               new_count == eContactCount.Five ? eContactChange.AnyToFive :
                               eContactChange.NoChange;
            }
            else if (prev_contact_count == eContactCount.Many)
            {
                count_change = new_count == eContactCount.Zero ? eContactChange.ManyToZero :
                               new_count == eContactCount.One ? eContactChange.ManyToOne :
                               new_count == eContactCount.Two ? eContactChange.ManyToTwo :
                               new_count == eContactCount.Four ? eContactChange.AnyToFour :
                               new_count == eContactCount.Five ? eContactChange.AnyToFive :
                               eContactChange.NoChange;
            }
            else if (prev_contact_count == eContactCount.Four)
            {
                count_change = new_count == eContactCount.Four ? eContactChange.NoChange :
                               new_count == eContactCount.Zero ? eContactChange.FourToZero :
                               eContactChange.FourToAnyPositive;
            }
            else if (prev_contact_count == eContactCount.Five)
            {
                count_change = new_count == eContactCount.Five ? eContactChange.NoChange :
                               new_count == eContactCount.Zero ? eContactChange.FiveToZero :
                               eContactChange.FiveToAnyPositive;
            }
            else if (prev_contact_count == eContactCount.Unknown)
            {
                count_change = (new_count == eContactCount.Zero) ?
                               eContactChange.NoInitialContacts :
                               eContactChange.InitialContacts;
            }
            else
            {
                XUtils.Assert(false);
            }

            mContactCount = new_count;
            return(count_change);
        }