Beispiel #1
0
        void UpdateAttachedScene()
        {
            bool needSceneCreate = false;

            if (createdViewport != null)
            {
                Component_Scene scene = null;
                if (DisplayScene)
                {
                    scene = Scene.ReferenceSpecified ? Scene.Value : ParentScene;
                }

                if (scene != null)
                {
                    var ins        = ComponentUtility.GetResourceInstanceByComponent(scene);
                    var isResource = ins != null && ins.InstanceType == Resource.InstanceType.Resource;

                    if (isResource)
                    {
                        SceneRecreateIfNeeded(scene);
                        scene           = createdScene;
                        needSceneCreate = true;
                    }
                }

                createdViewport.AttachedScene = scene;
            }

            if (!needSceneCreate)
            {
                SceneDestroy();
            }
        }
Beispiel #2
0
        public void UpdateSubscription()
        {
            if (duringUpdate)
            {
                return;
            }
            duringUpdate = true;

            try
            {
                if (EnabledInHierarchy)
                {
                    var whenEnable = WhenEnable.Value;
                    if (whenEnable.HasFlag(WhenEnableEnum.Editor) && EngineApp.ApplicationType == EngineApp.ApplicationTypeEnum.Editor ||
                        whenEnable.HasFlag(WhenEnableEnum.Simulation) && EngineApp.ApplicationType == EngineApp.ApplicationTypeEnum.Simulation)
                    {
                        var ins        = ComponentUtility.GetResourceInstanceByComponent(this);
                        var isResource = ins != null && ins.InstanceType == Resource.InstanceType.Resource;

                        if (whenEnable.HasFlag(WhenEnableEnum.Resource) && isResource ||
                            whenEnable.HasFlag(WhenEnableEnum.Instance) && !isResource)
                        {
                            Subscribe();
                        }
                    }
                }
                else
                {
                    Unsubscribe();
                }
            }
            finally
            {
                duringUpdate = false;
            }
        }