Ejemplo n.º 1
0
    IEnumerator LoadCoroutine()
    {
        List <Assembly> addons = new List <Assembly> ();

        Engine.Init(addons);
        var      dirInfo           = new DirectoryInfo((Application.isEditor? "Assets/" : BasicLoader.ProjectPrefix + "_Data/") + "StreamingAssets/Mods");
        DateTime lastWriteTime     = DateTime.MinValue;
        var      ExternalFunctions = Engine.GetPlugin <ExternalFunctionsPlugin> ();

        //var bars = FindObjectOfType<ProgressBarSet> ();
        //genBar = bars.CreateBar (Color.yellow, "gen");
        //for (int i = 0; i < Engine.PluginsCount; i++)
        //	pluginBars.Add (bars.CreateBar (Color.blue, i.ToString()));
        ExternalFunctions.Load();
        foreach (var eFunctions in EFunctions)
        {
            ExternalFunctions.AddProvider(eFunctions.Provider, eFunctions.Functions);
        }
        foreach (var fileInfo in dirInfo.GetFiles("*", SearchOption.AllDirectories))
        {
            if (fileInfo.LastWriteTimeUtc > lastWriteTime)
            {
                lastWriteTime = fileInfo.LastWriteTimeUtc;
            }
        }
        var lastBuildString = PlayerPrefs.GetString(ProjectPrefix + "_last_build");

        Debug.Log(lastBuildString);
        Debug.Log(lastWriteTime);
        if (Application.isEditor || String.IsNullOrEmpty(lastBuildString) || (!String.IsNullOrEmpty(lastBuildString) && DateTime.Parse(lastBuildString) < lastWriteTime))
        {
            Debug.Log("Loading scripts");
            yield return(null);

            //loads scripts and set a date

            //		AbstractClassChildren actionsList = new AbstractClassChildren ("Generators", engine){ BaseType = typeof(EventAction) };
            AppDomain.CurrentDomain.AssemblyResolve += Resolver;
            loadedAsms.Add("ExternalCode");
            loadedAsms.Add("BlackboardsData");
            loadedAsms.Add("LocalisationTags");
            loadedAsms.Add("AgentsDatabases_" + typeof(Fact).Name);
            loadedAsms.Add("AgentsDatabases_" + typeof(BackstoryElement).Name);
            bbloader             = new BlackboardsLoader(Engine);
            reactionsLoader      = new ReactionsLoader("reactions", engine);
            factsLoader          = new AgentDatabaseLoader(engine, "facts", typeof(Fact));
            backstoryFactsLoader = new AgentDatabaseLoader(engine, "backstory", typeof(BackstoryElement));
            localisationLoader   = new LocalisationTagsLoader("ScriptedTypes", engine);
            bbloader.Init(); factsLoader.Init(); backstoryFactsLoader.Init();
            metricsLoader = new MetricsLoader("ScriptedTypes", engine);
            //eaBar = FindObjectOfType<ProgressBarSet> ().CreateBar (Color.green, "eaBar");
            compileThread = new Thread(() => {
                try
                {
                    ExternalFunctions.Setup(OnExternalsCompiled);
                } catch (Exception e)
                {
                    Debug.LogException(e);
                }
            });
            compileThread.Start();
        }
        else
        {
            Debug.Log("Loading dlls");
            yield return(null);

            //Load dlls
            var asm = Assembly.LoadFile((Application.isEditor ? "Assets/" : BasicLoader.ProjectPrefix + "_Data/") + "StreamingAssets/DLLs/ExternalCode.dll");
            ExternalFunctions.OnCompiled(asm);
            asm = Assembly.LoadFile((Application.isEditor ? "Assets/" : BasicLoader.ProjectPrefix + "_Data/") + "StreamingAssets/DLLs/" + "AgentsDatabases_" + typeof(Fact).Name + ".dll");
            Engine.AddAssembly(asm);
            asm = Assembly.LoadFile((Application.isEditor ? "Assets/" : BasicLoader.ProjectPrefix + "_Data/") + "StreamingAssets/DLLs/" + "AgentsDatabases_" + typeof(BackstoryElement).Name + ".dll");
            Engine.AddAssembly(asm);
            asm = Assembly.LoadFile((Application.isEditor ? "Assets/" : BasicLoader.ProjectPrefix + "_Data/") + "StreamingAssets/DLLs/BlackboardsData.dll");
            Engine.AddAssembly(asm);
            asm = Assembly.LoadFile((Application.isEditor ? "Assets/" : BasicLoader.ProjectPrefix + "_Data/") + "StreamingAssets/DLLs/Content.dll");
            Engine.AddAssembly(asm);
            asm = Assembly.LoadFile((Application.isEditor ? "Assets/" : BasicLoader.ProjectPrefix + "_Data/") + "StreamingAssets/DLLs/LocalisationTags.dll");
            Engine.AddAssembly(asm);

            yield return(null);

            //foreach (var bar in this.pluginBars)
            //	bar.Expire ();
            if (Loaded != null)
            {
                Loaded();
            }
            //AppDomain.CurrentDomain.Load()
        }
    }
Ejemplo n.º 2
0
    IEnumerator LoadCoroutine()
    {
        List <Assembly> addons = new List <Assembly> ();

        Engine.Init(addons);
        var      dirInfo           = new DirectoryInfo((Application.isEditor? "Assets/" : "ExperimentalProject_Data/") + "StreamingAssets/Mods");
        DateTime lastWriteTime     = DateTime.MinValue;
        var      ExternalFunctions = Engine.GetPlugin <ExternalFunctionsPlugin> ();
        var      bars = FindObjectOfType <ProgressBarSet> ();

        genBar = bars.CreateBar(Color.yellow, "gen");
        for (int i = 0; i < Engine.PluginsCount; i++)
        {
            pluginBars.Add(bars.CreateBar(Color.blue, i.ToString()));
        }
        ExternalFunctions.Load();
        foreach (var eFunctions in EFunctions)
        {
            ExternalFunctions.AddProvider(eFunctions.Provider, eFunctions.Functions);
        }
        ExternalFunctions.AddProvider(this, "Random", "Regenerate", "SetParent", "RandomFrom", "Any", "AbstractCamp", "Clamp", "Nothing", "Gameobject", "Contains", "SpawnPrefab", "Has", "Vec", "GetWorld", "GetEventsController", "SelectFrom", "Log", "String", "GetPlayer", "Destroy", "NoOne");
        foreach (var fileInfo in dirInfo.GetFiles("*", SearchOption.AllDirectories))
        {
            if (fileInfo.LastWriteTimeUtc > lastWriteTime)
            {
                lastWriteTime = fileInfo.LastWriteTimeUtc;
            }
        }
        var lastBuildString = PlayerPrefs.GetString("last_build");

        Debug.Log(lastBuildString);
        Debug.Log(lastWriteTime);
        if (String.IsNullOrEmpty(lastBuildString) || (!String.IsNullOrEmpty(lastBuildString) && DateTime.Parse(lastBuildString) < lastWriteTime))
        {
            Debug.Log("Loading scripts");
            yield return(null);

            //loads scripts and set a date

            //		AbstractClassChildren actionsList = new AbstractClassChildren ("Generators", engine){ BaseType = typeof(EventAction) };
            AppDomain.CurrentDomain.AssemblyResolve += Resolver;
            loadedAsms.Add("ExternalCode");
            loadedAsms.Add("BlackboardsData");
            bbloader = new BlackboardsLoader(Engine);
            bbloader.Init();
            eaBar         = FindObjectOfType <ProgressBarSet> ().CreateBar(Color.green, "eaBar");
            compileThread = new Thread(() => {
                try
                {
                    ExternalFunctions.Setup(OnExternalsCompiled);
                } catch (Exception e)
                {
                    Debug.LogException(e);
                }
            });
            compileThread.Start();
        }
        else
        {
            Debug.Log("Loading dlls");
            yield return(null);

            //Load dlls
            var asm = Assembly.LoadFile((Application.isEditor ? "Assets/" : "ExperimentalProject_Data/") + "StreamingAssets/DLLs/ExternalCode.dll");
            ExternalFunctions.OnCompiled(asm);
            asm = Assembly.LoadFile((Application.isEditor ? "Assets/" : "ExperimentalProject_Data/") + "StreamingAssets/DLLs/BlackboardsData.dll");
            Engine.AddAssembly(asm);
            asm = Assembly.LoadFile((Application.isEditor ? "Assets/" : "ExperimentalProject_Data/") + "StreamingAssets/DLLs/Content.dll");
            Engine.AddAssembly(asm);

            yield return(null);

            foreach (var bar in this.pluginBars)
            {
                bar.Expire();
            }
            if (Loaded != null)
            {
                Loaded();
            }
            //AppDomain.CurrentDomain.Load()
        }
    }