コード例 #1
0
ファイル: arena.cs プロジェクト: billbai0102/Lollipop-Racer
        public GestureArenaEntry add(int pointer, GestureArenaMember member)
        {
            _GestureArena state = this._arenas.putIfAbsent(pointer, () => {
                D.assert(this._debugLogDiagnostic(pointer, () => "★ Opening new gesture arena."));
                return(state = new _GestureArena());
            });

            state.add(member);

            D.assert(this._debugLogDiagnostic(pointer, () => $"Adding: {member}"));
            return(new GestureArenaEntry(this, pointer, member));
        }
コード例 #2
0
        void _resolveByDefault(int pointer, _GestureArena state)
        {
            if (!_arenas.ContainsKey(pointer))
            {
                return;
            }

            D.assert(_arenas[pointer] == state);
            D.assert(!state.isOpen);
            D.assert(state.members.Count == 1);
            _arenas.Remove(pointer);
            D.assert(_debugLogDiagnostic(pointer,
                                         () => $"Default winner: {state.members.First()}"));
            state.members[0].acceptGesture(pointer);
        }
コード例 #3
0
ファイル: arena.cs プロジェクト: zmtzawqlp/UIWidgets
        void _resolveByDefault(int pointer, _GestureArena state)
        {
            if (!this._arenas.ContainsKey(pointer))
            {
                return;
            }

            D.assert(this._arenas[pointer] == state);
            D.assert(!state.isOpen);
            List <GestureArenaMember> members = state.members;

            D.assert(members.Count == 1);
            this._arenas.Remove(pointer);
            D.assert(this._debugLogDiagnostic(pointer,
                                              $"Default winner: {state.members.First()}"));
            state.members.First().acceptGesture(pointer);
        }
コード例 #4
0
ファイル: arena.cs プロジェクト: billbai0102/Lollipop-Racer
        bool _debugLogDiagnostic(int pointer, Func <string> message, _GestureArena state = null)
        {
            D.assert(() => {
                if (D.debugPrintGestureArenaDiagnostics)
                {
                    int?count = state?.members.Count;
                    string s  = count != 1 ? "s" : "";
                    Debug.LogFormat("Gesture arena {0} ❙ {1}{2}",
                                    pointer.ToString().PadRight(4),
                                    message(),
                                    count != null ? $" with {count} member{s}." : "");
                }

                return(true);
            });

            return(true);
        }
コード例 #5
0
ファイル: arena.cs プロジェクト: billbai0102/Lollipop-Racer
        void _resolveInFavorOf(int pointer, _GestureArena state, GestureArenaMember member)
        {
            D.assert(state == this._arenas[pointer]);
            D.assert(state != null);
            D.assert(state.eagerWinner == null || state.eagerWinner == member);
            D.assert(!state.isOpen);

            this._arenas.Remove(pointer);
            foreach (GestureArenaMember rejectedMember in state.members)
            {
                if (rejectedMember != member)
                {
                    rejectedMember.rejectGesture(pointer);
                }
            }

            member.acceptGesture(pointer);
        }
コード例 #6
0
ファイル: arena.cs プロジェクト: billbai0102/Lollipop-Racer
        void _tryToResolveArena(int pointer, _GestureArena state)
        {
            D.assert(this._arenas[pointer] == state);
            D.assert(!state.isOpen);

            if (state.members.Count == 1)
            {
                Window.instance.scheduleMicrotask(() => this._resolveByDefault(pointer, state));
            }
            else if (state.members.isEmpty())
            {
                this._arenas.Remove(pointer);
                D.assert(this._debugLogDiagnostic(pointer, () => "Arena empty."));
            }
            else if (state.eagerWinner != null)
            {
                D.assert(this._debugLogDiagnostic(pointer,
                                                  () => $"Eager winner: {state.eagerWinner}"));
                this._resolveInFavorOf(pointer, state, state.eagerWinner);
            }
        }