ET框架学习——EventSystem类

        EventSysterm类中维护了许多字典和队列,如下:

如下:

       UnOrderMultiMap是无序的MultMap字典,可以参见之前的文章。

       IEvent接口内部提供的是四个重载的Hnadle方法。IAwakeSystem接口提供一个Type返回值的方法,返回继承该接口的泛型类型。IStartSystem接口和IAwakeSystem接口类似,不过多提供了一个Run方法。IDestroySystem接口和IStartSystem接口一样,后面几个接口都和IStartSystem接口一样。

      assemblies字典应该是用于存储DellType枚举类型的反射信息。

      Add(DLLType dllType, Assembly assembly)方法用于向assemblies字典中添加元素。同时会清空type字典。遍历assembiles字典的值, 通过值的Type获取BaseAttribute特性,并且将所得数组的第一个元素添加进type字典中。清空所有接口字典。遍历type[ObjectSystemAttribute]list对象,同时获取ObjectSystemAttribute特性对象,如果不为空,则根据list的元素创建对象(Activator.CreateInstance方法,详见:http://www.cnblogs.com/lmfeng/archive/2012/01/30/2331666.html),并将对象添加到接口字典中。

中。

遍历type[EventAttribute]list对象,获取对应特性的对象,同样创建对象,将其添加进allEvents接口中。最后会走一个Load方法。当loaders这个队列不为空时, 根据队列元素,遍历allComponent字典得到对应的值,再根据该值的Type,遍历loadSystems接口字典,得到List<ILoadSystem>,将loaders的元素放入loaders2中,同时遍历List<ILoadSystem>,执行其重写方法Run。最后交换loaders2loaders两个队列。

       还有一个Add的重载方法,需要一个Component参数,将其加入allComponent字典中。获取该component的type,如果接口字典中存在该键,则将其加入到对应的队列中去。

       Awake的重载方法,接受一个Component参数(和几个泛型参数)。在awakeSystems字典中,根据Component参数的type类型,获取相应的值List<IAwakeSystem>。遍历该list,将其元素强转为IAwake类型,执行IAwake接口的Run方法。Run方法接受一个Component参数,就是传入Awake方法的参数,同时重载方法的其他参数也是相应的传递到Run方法中。

       Change方法和Awake方法功能类似,该方法是找到对应Compnent参数的type在changeSystems字典中的值,遍历执行值中的IChangeSystem接口的Run方法

       Start方法,当starts队列不为空的时候,遍历取出队列元素,根据该元素得到allComponent字典中对应的值。根据值的type,在startSystems字典中,获取List<IStartSystem>。遍历list,执行IStartSystem接口的Run方法。后面的Destroy方法也是基于同样的思路。

       Updata方法的实现思路也和上面几个方法差不多。不同点在于,有一步交换updatas中出对的元素会放入updatas2中,updatas队列遍历结束后,两个队列会进行交换。LateUpdata方法和Updata方法一样。

       Run重载方法,接受一个string类型参数type(和几个泛型参数)。根据该string参数,获取allEvent字典中的值List<IEvent> ,遍历该list,执行IEvent接口的Handle方法

      总的来说,EventSystem类的主要功能就是将制定特性的类按照接口类别分别存放到不同的字典中,然后统一执行接口的重写方法。

猜你喜欢

转载自blog.csdn.net/Tong1993222/article/details/82192845