//Defines entity spawner script. Creates entity archetype. To be attached to in game game object. public static void Define(ComponentAsset component, StreamWriter sw) { if (component.type == TypeOf.COMPOSITE) { for (int i = 0; i < component.components.Length; i++) { if (component.components[i].type == TypeOf.TAG) { //Do Nothing } else { sw.WriteLine("public " + component.components[i].ComponentToText() + ";"); } } } else if (component.type == TypeOf.TAG) { //Do Nothing } else { sw.WriteLine("public " + component.ComponentToText() + ";"); } }
//Create script for systems that act on single (non-composite) components, or creates a script for a single (non-composite) component; public static void Write(StreamWriter sw, string name, ComponentAsset component) { ECSType type = ECSType.COMPONENT; Header(type, sw, false); Class_StructDefinition(type, sw, name); Define(component, sw); Terminate(sw); }
void Awake() { if (instance == null) { instance = this; } else { Destroy(gameObject); } DontDestroyOnLoad(gameObject); }
//Defines system script. Creates script based on componets to be altered. public static void Define(SystemAsset system, StreamWriter sw) { sw.WriteLine("protected override JobHandle OnUpdate(JobHandle inputDeps) {"); sw.WriteLine("Entities"); //Try and find a component with TAG type. ComponentAsset asset = null; for (int i = 0; i < system.components.Length; i++) { if (system.components[i].type == TypeOf.TAG) { asset = system.components[i]; break; } for (int k = 0; k < system.components[i].components.Length; k++) { if (system.components[i].components[k].type == TypeOf.TAG) { asset = system.components[i].components[k]; break; } } } for (int i = 0; i < system.entities.Length; i++) { for (int j = 0; j < system.entities[i].components.Length; j++) { if (system.entities[i].components[j].type == TypeOf.TAG) { asset = system.entities[i].components[j]; break; } for (int k = 0; k < system.entities[i].components[j].components.Length; k++) { if (system.entities[i].components[j].components[k].type == TypeOf.TAG) { asset = system.entities[i].components[j].components[k]; break; } } } } sw.WriteLine(".WithoutBurst() //Remove this if Burst compilation is possible."); if (asset != null) { sw.WriteLine(".WithAll<" + asset.name + ">()"); } sw.Write(".ForEach((Entity entity, "); List <ComponentAsset> assets = new List <ComponentAsset>(); for (int i = 0; i < system.components.Length; i++) { if (system.components[i].type != TypeOf.TAG && system.components[i].type != TypeOf.COMPOSITE) { assets.Add(system.components[i]); } else if (system.components[i].type == TypeOf.COMPOSITE) { for (int k = 0; k < system.components[i].components.Length; k++) { if (system.components[i].components[k].type != TypeOf.TAG) { assets.Add(system.components[i].components[k]); } } } } for (int i = 0; i < system.entities.Length; i++) { for (int j = 0; j < system.entities[i].components.Length; j++) { if (system.entities[i].components[j].type != TypeOf.TAG && system.entities[i].components[j].type != TypeOf.COMPOSITE) { assets.Add(system.entities[i].components[j]); break; } else if (system.entities[i].components[j].type == TypeOf.COMPOSITE) { for (int k = 0; k < system.entities[i].components[j].components.Length; k++) { if (system.entities[i].components[j].components[k].type != TypeOf.TAG) { assets.Add(system.entities[i].components[j].components[k]); } } } } } for (int i = 0; i < assets.Count; i++) { if (i != assets.Count - 1) { sw.Write("ref " + assets[i].name + " " + assets[i].name.ToLower() + ", "); } else { sw.Write("ref " + assets[i].name + " " + assets[i].name.ToLower() + ") => {"); } } sw.WriteLine(); sw.WriteLine("//Logic goes here!"); if (system.isMainThread) { sw.WriteLine("}).Run();"); sw.WriteLine("return default;"); sw.WriteLine("}"); } else { sw.WriteLine("}).Schedule(inputDeps);"); sw.WriteLine("}"); } }