private static void GenerateNewProjectAssets( DirectoryInfo projectDirectory, string name, IWorldManager worldManager, IArchetypeManager archetypeManager, IPersistenceManager persistenceManager ) { // Create config entity var configEntity = worldManager.CreateEntity(archetypeManager.Config); worldManager.EntityManager.SetComponentData(configEntity, DisplayInfo.Default); // Generate main scene var cameraEntity = worldManager.CreateEntity("Camera", archetypeManager.Camera); worldManager.EntityManager.SetComponentData(cameraEntity, Camera2D.Default); worldManager.EntityManager.SetComponentData(cameraEntity, DomainCache.GetDefaultValue <Camera2D>()); worldManager.EntityManager.SetComponentData(cameraEntity, DomainCache.GetDefaultValue <Rotation>()); worldManager.EntityManager.SetComponentData(cameraEntity, DomainCache.GetDefaultValue <NonUniformScale>()); using (var entities = new NativeArray <Entity>(cameraEntity.AsArray(), Allocator.Temp)) { var scene = SceneManager.Create(worldManager.EntityManager, entities, Guid.NewGuid()); var sceneFile = projectDirectory.Combine("Scenes").GetFile("MainScene.scene"); sceneFile.Directory.EnsureExists(); persistenceManager.SaveScene(worldManager.EntityManager, scene, sceneFile.FullName); var sceneReference = new SceneReference { SceneGuid = scene.SceneGuid.Guid }; AddScene(worldManager.EntityManager, worldManager.GetConfigEntity(), sceneReference); AddStartupScene(worldManager.EntityManager, worldManager.GetConfigEntity(), sceneReference); } // Generate configuration scene using (var entities = new NativeArray <Entity>(configEntity.AsArray(), Allocator.Temp)) { var configurationScene = SceneManager.Create(worldManager.EntityManager, entities, ConfigurationScene.Guid); var configurationFile = projectDirectory.GetFile(name).ChangeExtension("configuration"); configurationFile.Directory.EnsureExists(); persistenceManager.SaveScene(worldManager.EntityManager, configurationScene, configurationFile.FullName); // Hack: remove scene guid/instance id and persistence id worldManager.EntityManager.RemoveComponent <SceneGuid>(configEntity); worldManager.EntityManager.RemoveComponent <SceneInstanceId>(configEntity); } }
/// <summary> /// Workaround since we need to rely on the existence of the ConfigEntity /// </summary> private void EnsureComponentDataExists() { var entityManager = m_WorldManager.EntityManager; var entity = m_WorldManager.GetConfigEntity(); if (!entityManager.HasComponent <WorkspaceScenes>(entity)) { entityManager.AddBuffer <WorkspaceScenes>(entity); } if (!entityManager.HasComponent <ActiveScene>(entity)) { entityManager.AddComponentData(entity, new ActiveScene()); } }
public void BuildFromInspector <TProperty, TContainer>(IPropertyVisitor visitor, TProperty property, ref TContainer container, ref Entity value, InspectorContext context) where TProperty : IProperty <TContainer, Entity> { var configEntity = WorldManager.GetConfigEntity(); if (value == configEntity) { return; } context.GetParent(out var parent); var headerRoot = this; parent.contentContainer.Add(headerRoot); var headerTemplate = StyleSheets.EntityHeader; headerTemplate.Template.CloneTree(headerRoot); headerRoot.AddStyleSheetSkinVariant(headerTemplate.StyleSheet); m_EnabledField = headerRoot.Q <Toggle>(k_EnabledToggle); m_EnabledField.value = !EntityManager.HasComponent <Disabled>(value); m_EnabledField.RegisterValueChangedCallback(evt => { var enabled = evt.newValue; for (var i = 0; i < Targets.Length; ++i) { var entity = Targets[i]; if (EntityManager.HasComponent <Disabled>(entity)) { if (enabled) { EntityManager.RemoveComponent <Disabled>(entity); } } else { if (!enabled) { EntityManager.AddComponentData <Disabled>(entity, default); } } } }); m_NameField = headerRoot.Q <TextField>(k_EntityNameLabel); name = WorldManager.GetEntityName(value); m_NameField.value = name; m_NameField.RegisterValueChangedCallback(evt => { if (string.IsNullOrEmpty(evt.newValue)) { m_NameField.SetValueWithoutNotify(evt.previousValue); return; } for (var i = 0; i < Targets.Length; ++i) { WorldManager.SetEntityName(Targets[i], evt.newValue); } }); }