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
        private static void CreateScenario(string name)
        {
            ScenarioConfig scenario = JsonConvert.DeserializeObject <ScenarioConfig>(File.ReadAllText("scenario/" + name));


            var providerMap = new Dictionary <string, Task <CSLogicProvider> >();

            foreach (var e in scenario.entities)
            {
                LogicInstantiation inst = new LogicInstantiation(e.logic);



                Task <CSLogicProvider> prov;
                if (!providerMap.TryGetValue(inst.AssemblyName, out prov))
                {
                    string code = File.ReadAllText("scenario/Logic/" + inst.AssemblyName + ".cs");
                    prov = DB.PutCompiledLogicProviderAsync(inst.AssemblyName, code);
                    providerMap[inst.AssemblyName] = prov;
                }
            }

            Random rng = new Random(1024);

            SetupScenario(new BaseDB.ConfigContainer()
            {
                extent = new Int3(scenario.worldSize[0], scenario.worldSize[1], scenario.worldSize[2]),
                m      = scenario.M,
                r      = scenario.R
            },
                          Translate(scenario.entities, providerMap, rng));
            //			GenerateEntities(1000));
        }