Exemple #1
0
        static IEnumerable <Entity> Translate(IEnumerable <ScenarioEntity> e, Dictionary <string, Task <CSLogicProvider> > providerMap, Random random)
        {
            foreach (var se in e)
            {
                LogicInstantiation inst = new LogicInstantiation(se.logic);
                var provider            = providerMap[inst.AssemblyName].Result;

                for (int i = 0; i < se.instances; i++)
                {
                    Vec3 pos = Vec3.Zero;
                    if (se.position.Length == 1)
                    {
                        pos = new Vec3(se.position[0], 0);
                    }
                    else if (se.position.Length == 2)
                    {
                        pos = random.NextVec3(Box.FromMinAndMax(new Vec3(se.position[0], 0), new Vec3(se.position[1], 0), Bool3.True));
                    }
                    else
                    {
                        throw new Exception("Invalid position declaration: " + se.position);
                    }

#if STATE_ADV
                    EntityAppearanceCollection appearances = new EntityAppearanceCollection();
#endif
                    DynamicCSLogic logic = new DynamicCSLogic(provider, inst.LogicName, inst.Parameters);
                    yield return(new Entity(new EntityID(pos), Vec3.Zero, logic
#if STATE_ADV
                                            , appearances
#endif
                                            ));
                }
            }
        }
Exemple #2
0
        public void LogicProviderTest()
        {
            CSLogicProvider.AsyncFactory = scriptName => CSLogicProvider.CompileAsync(scriptName, code);
            CSLogicProvider provider = CSLogicProvider.CompileAsync("Test", code).Get();
            var             exported = new SerialCSLogicProvider(provider);
            var             imported = exported.DeserializeAsync().Result;

            Assert.AreEqual(provider, imported);

            DynamicCSLogic logic = new DynamicCSLogic(provider, null, null);

            var serialLogic = Helper.SerializeToArray(logic);

            var logic2 = (DynamicCSLogic)Helper.Deserialize(serialLogic);

            logic2.FinishLoading(new EntityID(), TimeSpan.FromSeconds(1));



            var serialProvider = Helper.SerializeToArray(provider);
            var provider2      = (CSLogicProvider)Helper.Deserialize(serialProvider);

            DB.LogicLoader = scriptName => Task.Run(() => provider2);
            var logic3 = (DynamicCSLogic)Helper.Deserialize(serialLogic);

            logic3.FinishLoading(new EntityID(), TimeSpan.FromSeconds(1));
        }
Exemple #3
0
        public void ReferencedProviderTest2()
        {
            CSLogicProvider baseP = CSLogicProvider.CompileAsync("base", derivationTest0).Get();

            CSLogicProvider.AsyncFactory = scriptName => Task.Run(() => baseP);
            CSLogicProvider usingSharedP = CSLogicProvider.CompileAsync("using", derivationTest1).Get();
            DynamicCSLogic  logic        = new DynamicCSLogic(usingSharedP, "Test", null);

            logic.FinishLoading(new EntityID(), TimeSpan.Zero);

            var serialProvider = Helper.SerializeToArray(usingSharedP);
            var provider2      = (CSLogicProvider)Helper.Deserialize(serialProvider);

            var serialLogic = Helper.SerializeToArray(logic);

            CSLogicProvider.AsyncFactory = scriptName => Task.Run(() => scriptName == "base" ? baseP : provider2);
            var logic3 = (DynamicCSLogic)Helper.Deserialize(serialLogic);

            logic3.FinishLoading(new EntityID(), TimeSpan.FromHours(1));
        }