Exemplo n.º 1
0
            public OneTypeSystems GetOneTypeSystems(Type type)
            {
                OneTypeSystems systems = null;

                this.typeSystemsMap.TryGetValue(type, out systems);
                return(systems);
            }
Exemplo n.º 2
0
        /// <summary>
        /// 初始化EventSystem,需要先添加Type
        /// </summary>
        public void EventSystemInit()
        {
            foreach (Type type in this.GetTypes(typeof(ObjectSystemAttribute)))
            {
                object obj = Activator.CreateInstance(type);
                if (obj is ISystemType iSystemType)
                {
                    OneTypeSystems oneTypeSystems = this.typeSystems.GetOrCreateOneTypeSystems(iSystemType.Type());
                    oneTypeSystems.Add(iSystemType.SystemType(), obj);
                }
            }

            this.allEvents.Clear();
            foreach (Type type in types[typeof(EventAttribute)])
            {
                IEvent obj = Activator.CreateInstance(type) as IEvent;
                if (obj == null)
                {
                    throw new Exception($"type not is AEvent: {obj.GetType().Name}");
                }

                Type eventType = obj.GetEventType();
                if (!this.allEvents.ContainsKey(eventType))
                {
                    this.allEvents.Add(eventType, new List <object>());
                }

                this.allEvents[eventType].Add(obj);
            }

            this.Load();
        }
Exemplo n.º 3
0
        public void RegisterSystem(Entity component, bool isRegister = true)
        {
            if (!isRegister)
            {
                this.Remove(component.InstanceId);
                return;
            }
            this.allEntities.Add(component.InstanceId, component);

            Type type = component.GetType();

            OneTypeSystems oneTypeSystems = this.typeSystems.GetOneTypeSystems(type);

            if (oneTypeSystems == null)
            {
                return;
            }

            if (oneTypeSystems.ContainsKey(typeof(ILoadSystem)))
            {
                this.loaders.Enqueue(component.InstanceId);
            }

            if (oneTypeSystems.ContainsKey(typeof(IUpdateSystem)))
            {
                this.updates.Enqueue(component.InstanceId);
            }

            if (oneTypeSystems.ContainsKey(typeof(ILateUpdateSystem)))
            {
                this.lateUpdates.Enqueue(component.InstanceId);
            }
        }
Exemplo n.º 4
0
        public void Add(Dictionary <string, Type> addTypes)
        {
            this.allTypes.Clear();
            foreach (var kv in addTypes)
            {
                this.allTypes[kv.Key] = kv.Value;
            }

            this.types.Clear();
            List <Type> baseAttributeTypes = GetBaseAttributes();

            foreach (Type baseAttributeType in baseAttributeTypes)
            {
                foreach (var kv in this.allTypes)
                {
                    Type type = kv.Value;
                    if (type.IsAbstract)
                    {
                        continue;
                    }

                    object[] objects = type.GetCustomAttributes(baseAttributeType, true);
                    if (objects.Length == 0)
                    {
                        continue;
                    }

                    this.types.Add(baseAttributeType, type);
                }
            }

            this.typeSystems = new TypeSystems();

            foreach (Type type in this.GetTypes(typeof(ObjectSystemAttribute)))
            {
                object obj = Activator.CreateInstance(type);

                if (obj is ISystemType iSystemType)
                {
                    OneTypeSystems oneTypeSystems = this.typeSystems.GetOrCreateOneTypeSystems(iSystemType.Type());
                    oneTypeSystems.Add(iSystemType.SystemType(), obj);
                }
            }

            this.allEvents.Clear();
            foreach (Type type in types[typeof(EventAttribute)])
            {
                IEvent iEvent = Activator.CreateInstance(type) as IEvent;
                if (iEvent != null)
                {
                    Type eventType = iEvent.GetEventType();
                    if (!this.allEvents.ContainsKey(eventType))
                    {
                        this.allEvents.Add(eventType, new List <object>());
                    }

                    this.allEvents[eventType].Add(iEvent);
                }
            }
        }
Exemplo n.º 5
0
        public void Add(Assembly assembly)
        {
            this.assemblies[$"{assembly.GetName().Name}.dll"] = assembly;
            this.types.Clear();
            foreach (Assembly value in this.assemblies.Values)
            {
                foreach (Type type in value.GetTypes())
                {
                    if (type.IsAbstract)
                    {
                        continue;
                    }

                    object[] objects = type.GetCustomAttributes(typeof(BaseAttribute), true);
                    if (objects.Length == 0)
                    {
                        continue;
                    }

                    foreach (BaseAttribute baseAttribute in objects)
                    {
                        this.types.Add(baseAttribute.AttributeType, type);
                    }
                }
            }

            this.typeSystems = new TypeSystems();

            foreach (Type type in this.GetTypes(typeof(ObjectSystemAttribute)))
            {
                object obj = Activator.CreateInstance(type);

                if (obj is ISystemType iSystemType)
                {
                    OneTypeSystems oneTypeSystems = this.typeSystems.GetOrCreateOneTypeSystems(iSystemType.Type());
                    oneTypeSystems.Add(iSystemType.SystemType(), obj);
                }
            }

            this.allEvents.Clear();
            foreach (Type type in types[typeof(EventAttribute)])
            {
                IEvent obj = Activator.CreateInstance(type) as IEvent;
                if (obj == null)
                {
                    throw new Exception($"type not is AEvent: {obj.GetType().Name}");
                }

                Type eventType = obj.GetEventType();
                if (!this.allEvents.ContainsKey(eventType))
                {
                    this.allEvents.Add(eventType, new List <object>());
                }
                this.allEvents[eventType].Add(obj);
            }

            this.Load();
        }
Exemplo n.º 6
0
        public void Awake()
        {
            foreach (Type type in EventSystem.Instance.GetTypes(typeof(UISystemAttribute)))
            {
                object obj = Activator.CreateInstance(type);

                if (obj is ISystemType iSystemType)
                {
                    OneTypeSystems oneTypeSystems = this.typeSystems.GetOrCreateOneTypeSystems(iSystemType.Type());
                    oneTypeSystems.Add(iSystemType.SystemType(), obj);
                }
            }
        }
Exemplo n.º 7
0
 private SelectEventSystem()
 {
     typeSystems = new TypeSystems();
     foreach (Type type in EventSystem.Instance.GetTypes(typeof(SelectSystemAttribute)))
     {
         object obj = Activator.CreateInstance(type);
         if (obj is ISystemType iSystemType)
         {
             OneTypeSystems oneTypeSystems = this.typeSystems.GetOrCreateOneTypeSystems(iSystemType.Type());
             oneTypeSystems.Add(iSystemType.SystemType(), obj);
         }
     }
 }
Exemplo n.º 8
0
            public OneTypeSystems GetOrCreateOneTypeSystems(Type type)
            {
                OneTypeSystems systems = null;

                this.typeSystemsMap.TryGetValue(type, out systems);
                if (systems != null)
                {
                    return(systems);
                }

                systems = new OneTypeSystems();
                this.typeSystemsMap.Add(type, systems);
                return(systems);
            }
Exemplo n.º 9
0
            public List <object> GetSystems(Type type, Type systemType)
            {
                OneTypeSystems oneTypeSystems = null;

                if (!this.typeSystemsMap.TryGetValue(type, out oneTypeSystems))
                {
                    return(null);
                }

                if (!oneTypeSystems.TryGetValue(systemType, out List <object> systems))
                {
                    return(null);
                }
                return(systems);
            }
Exemplo n.º 10
0
        public void Add(Type[] addTypes)
        {
            this.allTypes.Clear();
            foreach (Type addType in addTypes)
            {
                this.allTypes[addType.FullName] = addType;
            }

            this.types.Clear();
            List <Type> baseAttributeTypes = GetBaseAttributes(addTypes);

            foreach (Type baseAttributeType in baseAttributeTypes)
            {
                foreach (Type type in addTypes)
                {
                    if (type.IsAbstract)
                    {
                        continue;
                    }

                    object[] objects = type.GetCustomAttributes(baseAttributeType, true);
                    if (objects.Length == 0)
                    {
                        continue;
                    }

                    this.types.Add(baseAttributeType, type);
                }
            }

            this.typeSystems = new TypeSystems();

            foreach (Type type in this.GetTypes(typeof(ObjectSystemAttribute)))
            {
                object obj = Activator.CreateInstance(type);

                if (obj is ISystemType iSystemType)
                {
                    OneTypeSystems oneTypeSystems = this.typeSystems.GetOrCreateOneTypeSystems(iSystemType.Type());
                    oneTypeSystems.Add(iSystemType.SystemType(), obj);
                }
            }

            this.allEvents.Clear();
            foreach (Type type in types[typeof(EventAttribute)])
            {
                IEvent obj = Activator.CreateInstance(type) as IEvent;
                if (obj == null)
                {
                    throw new Exception($"type not is AEvent: {obj.GetType().Name}");
                }

                Type eventType = obj.GetEventType();
                if (!this.allEvents.ContainsKey(eventType))
                {
                    this.allEvents.Add(eventType, new List <object>());
                }

                this.allEvents[eventType].Add(obj);
            }
        }