예제 #1
0
        /// <summary>
        /// Generates and build prototype with resources informations within.
        /// </summary>
        public void Generate()
        {
            _dataLayer = new DataLayerManager(_configProvider, _prototype);

            Type data =
                Utils.LoadTypes(AppDomain.CurrentDomain.BaseDirectory)
                .Where(y => !y.IsAbstract && y.GetInterfaces().Contains(typeof(IBuilder)))
                .FirstOrDefault(type => ((IBuilder)Activator.CreateInstance(type)).IsPlatformSupported(_dataLayer.Platform));

            if (data == null)
            {
                throw new ArgumentException("Data cannot be prepared.");
            }
            _dataLayerBuilder = (IBuilder)Activator.CreateInstance(data);


            _prototypeGenerator.Generate(_dataLayer.GetGenerable(), _configProvider);
            _dataLayerBuilder.Build(_configProvider, _dataLayer);

            var supportedStorages = _entityGenerator.Setup(_prototype, _dataLayer, _configProvider);

            _entityGenerator.Generate();
            _dataLayer.Dispose();
            CleanOutput();

            GenerateApplications();
            BuildApplications();
        }
    public IEntitySplat GenerateSplat(MapAreaPosition position, int entityLodLevel)
    {
        List <GrassEntity> outEntities = new List <GrassEntity>();

        for (int i = 0; i < _entitiesCountProvider.GetCount(); i++)
        {
            GrassEntitiesSet grassEntities = _entitiesGenerator.Generate();
            _positionProvider.SetPosition(grassEntities, position);
            _settingGenerator.SetSettings(grassEntities);

            Vector4 color = new Vector4(1, 1, 1, 1);
            if (entityLodLevel == 0)
            {
                color = new Vector4(1, 0, 0, 1);
            }
            else if (entityLodLevel == 1)
            {
                color = new Vector4(1, 1, 0, 1);
            }
            else if (entityLodLevel == 2)
            {
                color = new Vector4(0, 1, 0, 1);
            }
            else if (entityLodLevel == 3)
            {
                color = new Vector4(0, 1, 1, 1);
            }
            else if (entityLodLevel == 4)
            {
                color = new Vector4(0, 0, 1, 1);
            }
            else if (entityLodLevel == 5)
            {
                color = new Vector4(1, 0, 1, 1);
            }
            else if (entityLodLevel == 6)
            {
                color = new Vector4(0.5f, 0.5f, 0, 1);
            }
            else if (entityLodLevel == 7)
            {
                color = new Vector4(0.5f, 0, 0, 1);
            }
            grassEntities.EntitiesBeforeTransform.ForEach(c => c.AddUniform(ShaderUniformName._Color, color));
            // todo repair it

            outEntities.AddRange(grassEntities.EntitiesAfterTransform);
        }
        return(CreateSplat(outEntities, _grassMaterial, _meshProvider.GetMesh(entityLodLevel)));
    }