Пример #1
0
        public List <ScenePrefabDataSet> Import(IPoolDataSetFactory dataSetFactory, IPoolDataSetItemFactory dataSetItemFactory)
        {
            var result = new List <ScenePrefabDataSet>();

            foreach (var prefabToObject in PrefabToObjects)
            {
                var dataset = dataSetFactory.Create();
                var newItem = new ScenePrefabDataSet(dataset, prefabToObject.Key);

                foreach (var objectInScene in prefabToObject.Value)
                {
                    var newDataSetItem = dataSetItemFactory.Create();

                    newDataSetItem.Position = objectInScene.transform.position;
                    newDataSetItem.Rotation = objectInScene.transform.rotation.eulerAngles;
                    newDataSetItem.Scale    = objectInScene.transform.lossyScale;

                    dataset.Add(newDataSetItem);
                }

                result.Add(newItem);
            }

            return(result);
        }
Пример #2
0
 public PoolingConfigurationMerger(ITargetableFactory <IPool <GameObject> > poolFactory,
                                   IPoolDataSetFactory datasetFactory,
                                   IPoolDataSetItemFactory itemFactory,
                                   ITargetableFactory <IDatasetProxy> datasetProxyFactory,
                                   ITargetableFactory <IPositionUpdater> positionUpdaterFactory)
 {
     PoolFactory            = poolFactory;
     DatasetFactory         = datasetFactory;
     ItemFactory            = itemFactory;
     DatasetProxyFactory    = datasetProxyFactory;
     PositionUpdaterFactory = positionUpdaterFactory;
 }
Пример #3
0
        public List <ScenePrefabDataSet> Import(IPoolDataSetFactory dataSetFactory, IPoolDataSetItemFactory dataSetItemFactory)
        {
            var result = new List <ScenePrefabDataSet>();

            var datasets = new Dictionary <GameObject, IDataset>();

            foreach (var prefabsPrototype in PrefabsPrototypes)
            {
                var dataset = dataSetFactory.Create();
                datasets.Add(prefabsPrototype, dataset);
                result.Add(new ScenePrefabDataSet(dataset, prefabsPrototype));
            }

            foreach (var terrain in Terrains)
            {
                var prototypes = new HashSet <int>();

                for (int i = 0; i < terrain.terrainData.treePrototypes.Length; i++)
                {
                    if (PrefabsPrototypes.Contains(terrain.terrainData.treePrototypes[i].prefab))
                    {
                        prototypes.Add(i);
                    }
                }

                for (int i = 0; i < terrain.terrainData.treeInstanceCount; i++)
                {
                    var newDataSetItem = dataSetItemFactory.Create();

                    var treeInstance = terrain.terrainData.treeInstances[i];
                    if (!prototypes.Contains(treeInstance.prototypeIndex))
                    {
                        continue;
                    }

                    newDataSetItem.Position = terrain.transform.position +
                                              Vector3.Scale(terrain.terrainData.size, treeInstance.position);

                    newDataSetItem.Rotation = new Vector3(0, treeInstance.rotation, 0);

                    newDataSetItem.Scale = new Vector3(treeInstance.widthScale, treeInstance.heightScale, treeInstance.widthScale);

                    datasets[terrain.terrainData.treePrototypes[treeInstance.prototypeIndex].prefab].Add(newDataSetItem);
                }
            }

            return(result);
        }