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 )); } } }
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)); }
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)); }