示例#1
0
        static public FilteredMsgTypeList Filtered(GameObject inGameObject, MsgFlags inAll, MsgFlags inAny = MsgFlags.None)
        {
            if (inGameObject == null && (inAll == MsgFlags.None && inAny == MsgFlags.None))
            {
                return(All());
            }

            Initialize();

            List <MsgType> types = null;

            MsgUtil.GetAvailableMsgTypes(inGameObject, ref types);
            List <Metadata> metadatas = new List <Metadata>(types.Count);

            for (int i = 0; i < types.Count; ++i)
            {
                Metadata metadata = Manager.Get().Database.Find(types[i]);
                if (metadata == null)
                {
                    continue;
                }

                if ((inAll == MsgFlags.None || metadata.HasFlags(inAll)) &&
                    (inAny == MsgFlags.None || metadata.HasAnyFlags(inAny)) &&
                    !metadatas.Contains(metadata))
                {
                    metadatas.Add(metadata);
                }
            }
            metadatas.Sort();

            return(new FilteredMsgTypeList(metadatas));
        }