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