//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);
    }
Esempio n. 3
0
 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("}");
        }
    }