Beispiel #1
0
        public List <Entity> CreateEntitiesFromFragment(MapFragmentModel model, Vector3 position)
        {
            List <Entity> entityTemplates;
            List <Entity> createdEntities;

            if (_entityTemplatesByFragmentId.TryGetValue(model.Id, out entityTemplates))
            {
                createdEntities = entityTemplates.Select(e => EntitySystem.CreateInstance(e, true)).ToList();
            }
            else
            {
                var entitiesToMerge = new List <Entity>();
                foreach (var entityDefinition in model.Entities)
                {
                    foreach (var entityPlacing in entityDefinition.Placing)
                    {
                        entitiesToMerge.AddRange(PlaceEntities(entityDefinition, entityPlacing, Vector3.Zero));
                    }
                }

                if (entitiesToMerge.Count > 0)
                {
                    var merged = EntitySystem.MergeStaticVisualEntities(entitiesToMerge);
                    if (merged.Count < entitiesToMerge.Count)
                    {
                        _entityTemplatesByFragmentId.Add(model.Id, merged.Select(Entity.CreateTemplate).ToList());
                        createdEntities = merged;
                    }
                    else
                    {
                        createdEntities = entitiesToMerge;
                    }
                }
                else
                {
                    createdEntities = entitiesToMerge;
                }
            }

            createdEntities.ForEach(e => e.Position = position);
            return(createdEntities);
        }
Beispiel #2
0
        public List<Entity> CreateEntitiesFromFragment(MapFragmentModel model, Vector3 position)
        {
            List<Entity> entityTemplates;
            List<Entity> createdEntities;
            
            if (_entityTemplatesByFragmentId.TryGetValue(model.Id, out entityTemplates))
            {
                createdEntities = entityTemplates.Select(e => EntitySystem.CreateInstance(e, true)).ToList();
            }
            else
            {
                var entitiesToMerge = new List<Entity>();
                foreach (var entityDefinition in model.Entities)
                {
                    foreach (var entityPlacing in entityDefinition.Placing)
                    {
                        entitiesToMerge.AddRange(PlaceEntities(entityDefinition, entityPlacing, Vector3.Zero));
                    }
                }

                if(entitiesToMerge.Count > 0)
                {
                    var merged = EntitySystem.MergeStaticVisualEntities(entitiesToMerge);
                    if(merged.Count < entitiesToMerge.Count)
                    {
                        _entityTemplatesByFragmentId.Add(model.Id, merged.Select(Entity.CreateTemplate).ToList());
                        createdEntities = merged;
                    }
                    else
                    {
                        createdEntities = entitiesToMerge;
                    }
                }
                else
                {
                    createdEntities = entitiesToMerge;
                }
            }

            createdEntities.ForEach(e => e.Position = position);
            return createdEntities;
        }