Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        /// <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);
                }
            });
        }