public static string GetEventMethodArgs(this ComponentData data, EventData eventData, string args) { if (data.GetMemberData().Length == 0) { return(string.Empty); } return(eventData.eventType == EventType.Removed ? string.Empty : args); }
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.ComponentName().LowercaseFirst() + ";"; 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()); }
CodeGenFile generate(string contextName, ComponentData data) { var template = data.GetMemberData().Length == 0 ? FLAG_TEMPLATE : STANDARD_TEMPLATE; return(new CodeGenFile( contextName + Path.DirectorySeparatorChar + "Components" + Path.DirectorySeparatorChar + data.ComponentNameWithContext(contextName).AddComponentSuffix() + ".cs", template.Replace(data, contextName), GetType().FullName )); }
CodeGenFile generateInterface(ComponentData data) { var template = data.GetMemberData().Length == 0 ? FLAG_TEMPLATE : STANDARD_TEMPLATE; return(new CodeGenFile( "Components" + Path.DirectorySeparatorChar + "Interfaces" + Path.DirectorySeparatorChar + "I" + data.ComponentName() + "Entity.cs", template.Replace(data, string.Empty), GetType().FullName )); }
CodeGenFile generateComponentMonoBehaviousClass(string contextName, ComponentData data, int index) { var memberData = data.GetMemberData(); var componentType = data.GetTypeName(); return(new CodeGenFile( contextName + Path.DirectorySeparatorChar + "ComponentsMonoBehaviours" + Path.DirectorySeparatorChar + contextName + componentType + "MonoBehaviour.cs", COMPONENT_TEMPLATE .Replace("${Context}", contextName) .Replace("${ComponentType}", componentType) .Replace("${ComponentIndex}", index.ToString()) .Replace("${memberArgs}", getMemberArgs(memberData)) .Replace("${memberAssignment}", getMemberAssignment(memberData)), GetType().FullName )); }
CodeGenFile generate(string contextName, ComponentData data) { var template = data.GetMemberData().Length == 0 ? FLAG_TEMPLATE : STANDARD_TEMPLATE; var fileContent = template .Replace("${memberAssignmentList}", getMemberAssignmentList(data.GetMemberData())) .Replace(data, contextName); return(new CodeGenFile( contextName + Path.DirectorySeparatorChar + contextName + "Components" + /*Path.DirectorySeparatorChar + * data.ComponentNameWithContext(contextName).AddComponentSuffix() +*/".cs", fileContent, GetType().FullName )); }
CodeGenFile generateSystem(string contextName, ComponentData data) { var componentName = data.GetTypeName().ToComponentName(_ignoreNamespacesConfig.ignoreNamespaces); var memberData = data.GetMemberData(); var groupEvent = memberData.Length == 0 ? "AddedOrRemoved" : "Added"; var filter = memberData.Length == 0 ? "true" : "entity.has" + componentName; var cachedAccess = memberData.Length == 0 ? "var " + data.GetUniquePrefix() + componentName + " = e." + data.GetUniquePrefix() + componentName + ";" : "var component = e." + componentName.LowercaseFirst() + ";"; var methodArgs = memberData.Length == 0 ? data.GetUniquePrefix() + componentName : getMethodArgs(memberData); var template = data.GetEventData().bindToEntity ? ENTITY_SYSTEM_TEMPLATE : SYSTEM_TEMPLATE; var fileContent = template .Replace("${ContextName}", contextName) .Replace("${contextName}", contextName.LowercaseFirst()) .Replace("${ComponentName}", componentName) .Replace("${componentName}", componentName.LowercaseFirst()) .Replace("${GroupEvent}", groupEvent) .Replace("${filter}", filter) .Replace("${cachedAccess}", cachedAccess) .Replace("${methodArgs}", methodArgs); return(new CodeGenFile( "Events" + Path.DirectorySeparatorChar + "Systems" + Path.DirectorySeparatorChar + contextName + componentName + "EventSystem.cs", fileContent, GetType().FullName )); }
CodeGenFile generateInterface(ComponentData data) { var componentName = data.GetTypeName().ToComponentName(_ignoreNamespacesConfig.ignoreNamespaces); var memberData = data.GetMemberData(); if (memberData.Length == 0) { memberData = new[] { new MemberData("bool", data.GetUniquePrefix().LowercaseFirst() + componentName) }; } var fileContent = INTERFACE_TEMPLATE .Replace("${ComponentName}", componentName) .Replace("${memberArgs}", getMemberArgs(memberData)); return(new CodeGenFile( "Events" + Path.DirectorySeparatorChar + "Interfaces" + Path.DirectorySeparatorChar + "I" + componentName + "Listener.cs", fileContent, GetType().FullName )); }
string getFilter(ComponentData data, string contextName, EventData eventData) { var filter = string.Empty; if (data.GetMemberData().Length == 0) { switch (eventData.eventType) { case EventType.Added: filter = "entity." + data.PrefixedComponentName(); break; case EventType.Removed: filter = "!entity." + data.PrefixedComponentName(); break; } } else { switch (eventData.eventType) { case EventType.Added: filter = "entity.has" + data.ComponentName(); break; case EventType.Removed: filter = "!entity.has" + data.ComponentName(); break; } } if (eventData.eventTarget == EventTarget.Self) { filter += " && entity.has" + data.EventListener(contextName, eventData); } return(filter); }
CodeGenFile[] generate(string contextName, ComponentData data) { return(data.GetEventData() .Select(eventData => { var memberData = data.GetMemberData(); if (memberData.Length == 0) { memberData = new[] { new MemberData("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()); }
CodeGenFile generateSystem(string contextName, ComponentData data) { var optionalContextName = data.GetContextNames().Length > 1 ? contextName : string.Empty; var componentName = data.GetTypeName().ToComponentName(_ignoreNamespacesConfig.ignoreNamespaces); var memberData = data.GetMemberData(); var methodArgs = ", " + (memberData.Length == 0 ? data.GetUniquePrefix() + componentName : getMethodArgs(memberData)); var eventTypeSuffix = string.Empty; var filter = string.Empty; if (data.GetMemberData().Length == 0) { switch (data.GetEventType()) { case EventType.Added: eventTypeSuffix = "Added"; methodArgs = string.Empty; filter = "entity." + data.GetUniquePrefix() + componentName; break; case EventType.Removed: eventTypeSuffix = "Removed"; methodArgs = string.Empty; filter = "!entity." + data.GetUniquePrefix() + componentName; break; case EventType.AddedOrRemoved: filter = "true"; break; } } else { switch (data.GetEventType()) { case EventType.Added: filter = "entity.has" + componentName; break; case EventType.Removed: eventTypeSuffix = "Removed"; methodArgs = string.Empty; filter = "!entity.has" + componentName; break; case EventType.AddedOrRemoved: eventTypeSuffix = "AddedOrRemoved"; filter = "true"; break; } } if (data.GetEventBindToEntity()) { if (filter == "true") { filter = "entity.has${OptionalContextName}${ComponentName}Listener"; } else { filter += " && entity.has${OptionalContextName}${ComponentName}Listener"; } } filter = filter .Replace("${OptionalContextName}", optionalContextName) .Replace("${ComponentName}", componentName); var cachedAccess = memberData.Length == 0 ? "var " + data.GetUniquePrefix() + componentName + " = e." + data.GetUniquePrefix() + componentName + ";" : "var component = e." + componentName.LowercaseFirst() + ";"; var template = data.GetEventBindToEntity() ? ENTITY_SYSTEM_TEMPLATE : SYSTEM_TEMPLATE; var fileContent = template .Replace("${ContextName}", contextName) .Replace("${contextName}", contextName.LowercaseFirst()) .Replace("${OptionalContextName}", optionalContextName) .Replace("${optionalContextName}", optionalContextName == string.Empty ? string.Empty : optionalContextName.LowercaseFirst()) .Replace("${ComponentName}", componentName) .Replace("${contextDependentComponentName}", optionalContextName == string.Empty ? componentName.LowercaseFirst() : componentName) .Replace("${GroupEvent}", data.GetEventType().ToString()) .Replace("${filter}", filter) .Replace("${cachedAccess}", cachedAccess) .Replace("${EventType}", eventTypeSuffix) .Replace("${methodArgs}", methodArgs); return(new CodeGenFile( "Events" + Path.DirectorySeparatorChar + "Systems" + Path.DirectorySeparatorChar + optionalContextName + componentName + "EventSystem.cs", fileContent, GetType().FullName )); }