Example #1
0
        public void UpdateLogic(uint checkPos)
        {
            uint curFrameNum = Singleton <FrameSynchr> .GetInstance().CurFrameNum;

            if (curFrameNum % this._checkFreq == checkPos % this._checkFreq)
            {
                int count = this._waitCheckRef.get_Count();
                for (int i = 0; i < count; i++)
                {
                    PoolObjHandle <ActorRoot> actor = this._waitCheckRef.get_Item(i);
                    if (this._actorAreaFunc == null || this._actorAreaFunc(ref actor))
                    {
                        if (this._aroundRecords.ContainsKey(actor.get_handle().ObjID))
                        {
                            AreaCheck.AroundRecord aroundRecord = this._aroundRecords.get_Item(actor.get_handle().ObjID);
                            aroundRecord.frame = (ulong)curFrameNum;
                            this._actorProcess(actor, AreaCheck.ActorAction.Hover);
                        }
                        else
                        {
                            this._aroundRecords.Add(actor.get_handle().ObjID, new AreaCheck.AroundRecord(actor, (ulong)curFrameNum));
                            this._actorProcess(actor, AreaCheck.ActorAction.Enter);
                        }
                    }
                }
                if (this._aroundRecords.get_Count() > 0)
                {
                    uint num = 0u;
                    AreaCheck.AroundRecord aroundRecord2 = null;
                    ulong num2 = (ulong)curFrameNum;
                    DictionaryView <uint, AreaCheck.AroundRecord> .Enumerator enumerator = this._aroundRecords.GetEnumerator();
                    while (enumerator.MoveNext())
                    {
                        KeyValuePair <uint, AreaCheck.AroundRecord> current = enumerator.get_Current();
                        AreaCheck.AroundRecord value = current.get_Value();
                        if (value.frame < num2)
                        {
                            num2 = value.frame;
                            KeyValuePair <uint, AreaCheck.AroundRecord> current2 = enumerator.get_Current();
                            num           = current2.get_Key();
                            aroundRecord2 = value;
                        }
                    }
                    if (aroundRecord2 != null)
                    {
                        this._aroundRecords.Remove(num);
                        this._actorProcess(aroundRecord2.actor, AreaCheck.ActorAction.Leave);
                    }
                }
            }
        }
Example #2
0
        public int CountActors(ActorFilterDelegate actorFilter)
        {
            int num = 0;

            DictionaryView <uint, AreaCheck.AroundRecord> .Enumerator enumerator = this._aroundRecords.GetEnumerator();
            while (enumerator.MoveNext())
            {
                if (actorFilter != null)
                {
                    KeyValuePair <uint, AreaCheck.AroundRecord> current = enumerator.get_Current();
                    if (!actorFilter(ref current.get_Value().actor))
                    {
                        continue;
                    }
                }
                num++;
            }
            return(num);
        }