예제 #1
0
파일: ObjectEvents.cs 프로젝트: zzd-will/ET
        public void Add(string name, Assembly assembly)
        {
            this.assemblies[name] = assembly;

            this.disposerEvents = new Dictionary <Type, IObjectEvent>();
            foreach (Assembly ass in this.assemblies.Values)
            {
                Type[] types = ass.GetTypes();
                foreach (Type type in types)
                {
                    object[] attrs = type.GetCustomAttributes(typeof(ObjectEventAttribute), false);

                    if (attrs.Length == 0)
                    {
                        continue;
                    }

                    object       obj         = Activator.CreateInstance(type);
                    IObjectEvent objectEvent = obj as IObjectEvent;
                    if (objectEvent == null)
                    {
                        Log.Error($"组件事件没有继承IObjectEvent: {type.Name}");
                        continue;
                    }
                    this.disposerEvents[objectEvent.Type()] = objectEvent;
                }
            }

            this.Load();
        }
예제 #2
0
        public static IGeneratorObjectEvent Convert(IObjectEvent eventObject)
        {
            IGeneratorObjectEvent Result;

            Result = new GeneratorObjectEvent(eventObject);

            GeneratorObjectEventMap.Add(eventObject, Result);
            return(Result);
        }
예제 #3
0
        public void Add(string name, Type[] types)
        {
            if (types == null || types.Length == 0)
            {
                return;
            }

            for (int i = 0; i < types.Length; i++)
            {
                Type type = types[i];

                //if (GameSetup.instance.useILRuntime)
                //{
                //    if (type.BaseType != null && (type.BaseType == typeof(Attribute) || type.BaseType.Name == "Attribute"))
                //        continue;

                //    if (type.Name == "Void")
                //        continue;

                //    if (type.IsValueType)
                //        continue;

                //    if (type == typeof(System.Object))
                //        continue;
                //}

                object[] attrs = type.GetCustomAttributes(typeof(ObjectEventAttribute), false);

                if (attrs == null || attrs.Length == 0)
                {
                    continue;
                }

                ObjectEventAttribute objectEventAttribute = attrs[0] as ObjectEventAttribute;

                if (objectEventAttribute == null)
                {
                    continue;
                }

                object       obj         = Activator.CreateInstance(type);
                IObjectEvent objectEvent = obj as IObjectEvent;
                if (objectEvent == null)
                {
                    UnityEngine.Debug.LogError(string.Format("组件事件没有继承IObjectEvent: {0}", type.Name));
                    continue;
                }
                this.disposerEvents[objectEvent.Type()] = objectEvent;
            }
        }
예제 #4
0
파일: Page.cs 프로젝트: dlebansais/Wrist
        private void ConnectQueryEvent(IDomain domain, ref bool IsConnected)
        {
            if (QueryEvent != null && (QueryObject == null || QueryObjectEvent == null))
            {
                IObject      Object      = null;
                IObjectEvent ObjectEvent = null;
                QueryEvent.Connect(domain, ref Object, ref ObjectEvent);
                QueryObject      = Object;
                QueryObjectEvent = ObjectEvent;
                QueryObjectEvent.SetIsProvidingCustomPageName(QueryEvent.EventSource, true);

                IsConnected = true;
                SetIsReachable();
            }
        }
예제 #5
0
        public bool Connect(IDomain domain, ref IObject obj, ref IObjectEvent objectEvent)
        {
            bool IsConnected = false;

            if (obj == null)
            {
                foreach (IObject Item in domain.Objects)
                {
                    if (Item.Name == ObjectSource.Name)
                    {
                        obj = Item;
                        break;
                    }
                }

                if (obj == null)
                {
                    throw new ParsingException(135, ObjectSource.Source, $"Unknown object '{ObjectSource.Name}'.");
                }

                obj.SetIsUsed();

                IsConnected = true;
            }

            if (objectEvent == null)
            {
                foreach (IObjectEvent Event in obj.Events)
                {
                    if (Event.NameSource.Name == ObjectEventSource.Name)
                    {
                        objectEvent = Event;
                        break;
                    }
                }

                if (objectEvent == null)
                {
                    throw new ParsingException(136, ObjectEventSource.Source, $"Unknown event '{ObjectEventSource.Name}'.");
                }

                objectEvent.SetIsUsed();

                IsConnected = true;
            }

            return(IsConnected);
        }
예제 #6
0
 private void ConnectBefore(IDomain domain, IComponentEvent beforeEvent)
 {
     if (beforeEvent != null)
     {
         IObject      Object      = null;
         IObjectEvent ObjectEvent = null;
         beforeEvent.Connect(domain, ref Object, ref ObjectEvent);
         BeforeObject      = Object;
         BeforeObjectEvent = ObjectEvent;
     }
     else
     {
         BeforeObject      = null;
         BeforeObjectEvent = null;
     }
 }
예제 #7
0
 private void ConnectAfter(IDomain domain, IComponentEvent afterEvent)
 {
     if (afterEvent != null)
     {
         IObject      Object      = null;
         IObjectEvent ObjectEvent = null;
         afterEvent.Connect(domain, ref Object, ref ObjectEvent);
         AfterObject      = Object;
         AfterObjectEvent = ObjectEvent;
     }
     else
     {
         AfterObject      = null;
         AfterObjectEvent = null;
     }
 }
예제 #8
0
파일: EventSystem.cs 프로젝트: shawnmc00/ET
        public void Add(DLLType dllType, Assembly assembly)
        {
            this.assemblies[dllType] = assembly;

            this.disposerEvents.Clear();

            Type[] types = DllHelper.GetMonoTypes();
            foreach (Type type in types)
            {
                object[] attrs = type.GetCustomAttributes(typeof(ObjectSystemAttribute), false);

                if (attrs.Length == 0)
                {
                    continue;
                }

                object       obj         = Activator.CreateInstance(type);
                IObjectEvent objectEvent = obj as IObjectEvent;
                if (objectEvent == null)
                {
                    Log.Error($"组件事件没有继承IObjectEvent: {type.Name}");
                    continue;
                }
                this.disposerEvents[objectEvent.Type()] = objectEvent;
            }


            allEvents.Clear();
            foreach (Type type in types)
            {
                object[] attrs = type.GetCustomAttributes(typeof(EventAttribute), false);

                foreach (object attr in attrs)
                {
                    EventAttribute aEventAttribute = (EventAttribute)attr;
                    object         obj             = Activator.CreateInstance(type);
                    if (!this.allEvents.ContainsKey((EventIdType)aEventAttribute.Type))
                    {
                        this.allEvents.Add((EventIdType)aEventAttribute.Type, new List <object>());
                    }
                    this.allEvents[(EventIdType)aEventAttribute.Type].Add(obj);
                }
            }

            this.Load();
        }
예제 #9
0
        public ObjectEvents()
        {
            Type[] types = DllHelper.GetHotfixTypes();
            foreach (Type type in types)
            {
                object[] attrs = type.GetCustomAttributes(typeof(ObjectEventAttribute), false);

                if (attrs.Length == 0)
                {
                    continue;
                }

                object       obj         = Activator.CreateInstance(type);
                IObjectEvent objectEvent = obj as IObjectEvent;
                if (objectEvent == null)
                {
                    Log.Error($"组件事件没有继承IObjectEvent: {type.Name}");
                    continue;
                }
                this.disposerEvents[objectEvent.Type()] = objectEvent;
            }
        }
예제 #10
0
        private List <IObjectEvent> ParseEvents(IParsingSourceStream sourceStream, ref string line)
        {
            List <IObjectEvent> ObjectEventList = new List <IObjectEvent>();

            if (line != "events")
            {
                sourceStream.ReadLine();
                string HeaderLine = sourceStream.Line;
                if (HeaderLine != "events")
                {
                    throw new ParsingException(105, sourceStream, "'events' expected.");
                }
            }

            while (!sourceStream.EndOfStream)
            {
                sourceStream.ReadLine();
                line = sourceStream.Line.Trim();
                if (string.IsNullOrEmpty(line))
                {
                    break;
                }

                foreach (IObjectEvent ObjectEvent in ObjectEventList)
                {
                    if (ObjectEvent.NameSource.Name == line)
                    {
                        throw new ParsingException(106, sourceStream, $"Event name '{line}' specified more than once.");
                    }
                }

                IObjectEvent NewEvent = ParseEvent(sourceStream, line);
                ObjectEventList.Add(NewEvent);
            }

            return(ObjectEventList);
        }
예제 #11
0
 public GeneratorObjectEvent(IObjectEvent eventObject)
 {
     NameSource = eventObject.NameSource;
     CSharpName = eventObject.CSharpName;
     IsProvidingCustomPageName = eventObject.IsProvidingCustomPageName.HasValue && eventObject.IsProvidingCustomPageName.Value;
 }