private CodeGenFile[] Generate(string contextName, ComponentData data)
        {
            return(data.GetEventData()
                   .Select(
                       eventData =>
            {
                var memberData = data.GetMemberData();
                if (memberData.Length == 0)
                {
                    memberData = new[]
                    {
                        new MemberData(typeof(bool), data.PrefixedComponentName())
                    };
                }

                var fileContent = TEMPLATE
                                  .Replace(
                    "${methodParameters}",
                    data.GetEventMethodArgs(eventData, ", " + memberData.GetMethodParameters(false)))
                                  .Replace(data, contextName, eventData);

                return new CodeGenFile(
                    "Events" +
                    Path.DirectorySeparatorChar +
                    "Interfaces" +
                    Path.DirectorySeparatorChar +
                    "I" +
                    data.EventListener(contextName, eventData) +
                    ".cs",
                    fileContent,
                    GetType().FullName);
            })
                   .ToArray());
        }
 private CodeGenFile[] Generate(string contextName, ComponentData data)
 {
     return(data.GetEventData()
            .Select(
                eventData => new CodeGenFile(
                    "Events" +
                    Path.DirectorySeparatorChar +
                    "Components" +
                    Path.DirectorySeparatorChar +
                    data.EventListener(contextName, eventData).AddComponentSuffix() +
                    ".cs",
                    TEMPLATE.Replace(data, contextName, eventData),
                    GetType().FullName))
            .ToArray());
 }
示例#3
0
        private CodeGenFile[] Generate(string contextName, ComponentData data)
        {
            return(data.GetEventData()
                   .Select(
                       eventData =>
            {
                var methodArgs = data.GetEventMethodArgs(
                    eventData,
                    ", " +
                    (data.GetMemberData().Length == 0
                                                                ? data.PrefixedComponentName()
                                                                : GetMethodArgs(data.GetMemberData())));

                var cachedAccess = data.GetMemberData().Length == 0
                                                        ? string.Empty
                                                        : "var component = e." + data.ComponentNameValidUppercaseFirst() + ";";

                if (eventData.eventType == EventType.Removed)
                {
                    methodArgs = string.Empty;
                    cachedAccess = string.Empty;
                }

                var template = eventData.eventTarget == EventTarget.Self
                                                        ? SELF_TARGET_TEMPLATE
                                                        : ANY_TARGET_TEMPLATE;

                var fileContent = template
                                  .Replace("${GroupEvent}", eventData.eventType.ToString())
                                  .Replace("${filter}", GetFilter(data, contextName, eventData))
                                  .Replace("${cachedAccess}", cachedAccess)
                                  .Replace("${methodArgs}", methodArgs)
                                  .Replace(data, contextName, eventData);

                return new CodeGenFile(
                    "Events" +
                    Path.DirectorySeparatorChar +
                    "Systems" +
                    Path.DirectorySeparatorChar +
                    data.Event(contextName, eventData) +
                    "EventSystem.cs",
                    fileContent,
                    GetType().FullName);
            })
                   .ToArray());
        }
示例#4
0
 private ComponentData[] CreateDataForEvents(ComponentData data)
 {
     return(data.GetContextNames()
            .SelectMany(
                contextName =>
                data.GetEventData()
                .Select(
                    eventData =>
     {
         var dataForEvent = new ComponentData(data);
         dataForEvent.IsEvent(false);
         dataForEvent.IsUnique(false);
         dataForEvent.ShouldGenerateComponent(false);
         dataForEvent.RemoveCleanupData();
         var eventComponentName = data.EventComponentName(eventData);
         var eventTypeSuffix = eventData.GetEventTypeSuffix();
         var optionalContextName =
             dataForEvent.GetContextNames().Length > 1 ? contextName : string.Empty;
         var listenerComponentName =
             optionalContextName + eventComponentName + eventTypeSuffix.AddListenerSuffix();
         dataForEvent.SetTypeName(listenerComponentName.AddComponentSuffix());
         dataForEvent.SetMemberData(
             new[]
         {
             new MemberData(
                 "System.Collections.Generic.List<I" + listenerComponentName + ">",
                 "value")
         });
         dataForEvent.SetContextNames(
             new[]
         {
             contextName
         });
         return dataForEvent;
     })
                .ToArray())
            .ToArray());
 }