예제 #1
0
        public static string Replace(this string template, ComponentData data, string contextName, EventData eventData)
        {
            var eventListener = data.EventListener(contextName, eventData);

            return(template
                   .Replace(data, contextName)
                   .Replace("${EventComponentName}", data.EventComponentName(eventData))
                   .Replace("${EventListenerComponent}", eventListener.AddComponentSuffix())
                   .Replace("${Event}", data.Event(contextName, eventData))
                   .Replace("${EventListener}", eventListener)
                   .Replace("${eventListener}", eventListener.UppercaseFirst())
                   .Replace("${EventType}", GetEventTypeSuffix(eventData)));
        }
		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();
		}
예제 #3
0
 public static string EventListener(this ComponentData data, string contextName, EventData eventData)
 {
     return(data.Event(contextName, eventData).AddListenerSuffix());
 }