Exemple #1
0
            public async Task UpdatesExistingStartMessageFromContext(ComponentStatus changeStatus, ComponentStatus existingStatus)
            {
                var changedChild  = new TestComponent("child");
                var existingChild = new TestComponent("existing");
                var root          = new TreeComponent("hi", "", new[] { changedChild, existingChild });

                var affectedComponent = root.GetByNames <IComponent>(root.Name, changedChild.Name);
                var change            = new MessageChangeEvent(
                    DefaultTimestamp,
                    affectedComponent.Path,
                    changeStatus,
                    MessageType.Start);

                var existingAffectedComponent = root.GetByNames <IComponent>(root.Name, existingChild.Name);
                var context = new ExistingStartMessageContext(
                    new DateTime(2018, 10, 9),
                    existingAffectedComponent,
                    existingStatus);

                var result = await Processor.ProcessAsync(change, EventEntity, root, context);

                Assert.Equal(context.Timestamp, result.Timestamp);
                Assert.Equal(root, result.AffectedComponent);
                Assert.Equal(root.Status, result.AffectedComponentStatus);

                Factory
                .Verify(
                    x => x.UpdateMessageAsync(
                        EventEntity,
                        context.Timestamp,
                        MessageType.Start,
                        root),
                    Times.Once());
            }
Exemple #2
0
            public async Task ThrowsWhenUpdatingStartMessageFromContextWithoutLeastCommonAncestor(ComponentStatus changeStatus, ComponentStatus existingStatus)
            {
                var child = new TestComponent("child");
                var root  = new TreeComponent("hi", "", new[] { child });

                var affectedComponent = root.GetByNames <IComponent>(root.Name, child.Name);
                var change            = new MessageChangeEvent(
                    DefaultTimestamp,
                    affectedComponent.Path,
                    changeStatus,
                    MessageType.Start);

                var context = new ExistingStartMessageContext(
                    new DateTime(2018, 10, 9),
                    new TestComponent("no common ancestor"),
                    existingStatus);

                await Assert.ThrowsAsync <ArgumentException>(() => Processor.ProcessAsync(change, EventEntity, root, context));

                Factory
                .Verify(
                    x => x.UpdateMessageAsync(
                        It.IsAny <EventEntity>(),
                        It.IsAny <DateTime>(),
                        It.IsAny <MessageType>(),
                        It.IsAny <IComponent>()),
                    Times.Never());
            }
Exemple #3
0
        private void FeedCategoryTree_SelectItem(TreeComponent item)
        {
            if (item == null)
            {
                return;
            }

            if (item.Item is Channel)
            {
                var channel   = item.Item as Channel;
                var feedItems = _feedService.GetFeedItems(channel.ChannelId);

                SetFeedItems(feedItems, channel.Title);
            }

            if (item.Item is Category)
            {
            }

            if (item.TreeComponentType == TreeComponentType.Feed)
            {
                var feedItems = _feedService.GetFeedItems();
                SetFeedItems(feedItems);
            }

            if (item.TreeComponentType == TreeComponentType.Subscriptions)
            {
            }
        }
Exemple #4
0
            public async Task CreatesStartMessageFromNullContext(ComponentStatus status)
            {
                var child = new TestComponent("child");
                var root  = new TreeComponent("hi", "", new[] { child });

                var affectedComponent = root.GetByNames <IComponent>(root.Name, child.Name);
                var change            = new MessageChangeEvent(
                    DefaultTimestamp,
                    affectedComponent.Path,
                    status,
                    MessageType.Start);

                var result = await Processor.ProcessAsync(change, EventEntity, root, null);

                Assert.Equal(change.Timestamp, result.Timestamp);
                Assert.Equal(affectedComponent, result.AffectedComponent);
                Assert.Equal(affectedComponent.Status, result.AffectedComponentStatus);

                Factory
                .Verify(
                    x => x.CreateMessageAsync(
                        EventEntity,
                        DefaultTimestamp,
                        MessageType.Start,
                        affectedComponent),
                    Times.Once());
            }
Exemple #5
0
	public override bool checkProceduralPrecondition (GameObject agent)
	{
		// find the nearest tree that we can chop
		TreeComponent[] trees = (TreeComponent[]) UnityEngine.GameObject.FindObjectsOfType ( typeof(TreeComponent) );
		TreeComponent closest = null;
		float closestDist = 0;
		
		foreach (TreeComponent tree in trees) {
			if (closest == null) {
				// first one, so choose it for now
				closest = tree;
				closestDist = (tree.gameObject.transform.position - agent.transform.position).magnitude;
			} else {
				// is this one closer than the last?
				float dist = (tree.gameObject.transform.position - agent.transform.position).magnitude;
				if (dist < closestDist) {
					// we found a closer one, use it
					closest = tree;
					closestDist = dist;
				}
			}
		}
		if (closest == null)
			return false;

		targetTree = closest;
		target = targetTree.gameObject;
		
		return closest != null;
	}
Exemple #6
0
        private void InitializeFeed()
        {
            _feedComponent = new TreeComponent()
            {
                Name                    = "Feed",
                PopupType               = PopupType.FeedPopup,
                TreeComponentType       = TreeComponentType.Feed,
                NewFeedItemsCountManual = 0
            };

            var categories = _categoryService.GetCategories();

            _subscriptionsComponent = new TreeComponent(
                ConvertCategoriesToTreeComponents(categories))
            {
                Name              = "Subscriptions",
                PopupType         = PopupType.SubscriptionsPopup,
                TreeComponentType = TreeComponentType.Subscriptions
            };

            TreeComponents = new ObservableCollection <TreeComponent>()
            {
                _feedComponent,
                _subscriptionsComponent
            };

            FeedListItems = new ObservableCollection <FeedListItem>();
        }
Exemple #7
0
        public void update(GameTime gameTime)
        {
            if (!_paused || _singleStep)
            {
                string      levelUid    = LevelSystem.currentLevelUid;
                LevelSystem levelSystem = _systemManager.getSystem(SystemType.Level) as LevelSystem;

                if (levelSystem.finalized)
                {
                    List <int> treeEntities = _entityManager.getEntitiesPosessing(levelUid, ComponentType.Tree);

                    // Update treeAABB
                    Vector2 screenCenter = _renderSystem.screenCenter;
                    float   halfWidth    = ((float)_renderSystem.screenWidth / _renderSystem.scale) / 2f;
                    float   halfHeight   = ((float)_renderSystem.screenHeight / _renderSystem.scale) / 2f;
                    treeAABB.LowerBound.X = screenCenter.X - halfWidth;
                    treeAABB.UpperBound.X = screenCenter.X + halfWidth;
                    treeAABB.LowerBound.Y = screenCenter.Y - halfHeight;
                    treeAABB.UpperBound.Y = screenCenter.Y + halfHeight;

                    prepareCollisions();

                    for (int i = 0; i < treeEntities.Count; i++)
                    {
                        TreeComponent treeComponent = (TreeComponent)_entityManager.getComponent(levelUid, treeEntities[i], ComponentType.Tree);
                        treeComponent.tree.update();
                    }
                }
            }
            _singleStep = false;
        }
Exemple #8
0
    public override bool checkProceduralPrecondition(GameObject agent)
    {
        // find the nearest tree that we can chop
        if (trees == null)
        {
            trees = FindObjectsOfType(typeof(TreeComponent)) as TreeComponent[];
        }

        if (sortedTrees == null)
        {
            sortedTrees = trees.OrderBy(t => Vector3.Distance(transform.position, t.transform.position));
        }

        if (closest == null)
        {
            foreach (TreeComponent tree in sortedTrees)
            {
                if (tree.treeResource > 0 && tree.engaged != true)
                {
                    closest = tree;
                    break;
                }
            }
        }

        if (closest != null)
        {
            target = closest.gameObject;
        }

        return(closest != null);
    }
Exemple #9
0
 /// <summary>
 /// Set all specific values.
 /// </summary>
 /// <param name="treeComponent"></param>
 public virtual void UpdateValues(TreeComponent treeComponent)
 {
     this.id            = treeComponent.ID;
     this.key           = treeComponent.Key;
     this.componentName = treeComponent.Name;
     this.qualifier     = treeComponent.Qualifier;
     this.metrics       = treeComponent.Metrics;
 }
        /// <summary>
        /// Set the specific values.
        /// </summary>
        /// <param name="treeComponent"></param>
        public override void UpdateValues(TreeComponent treeComponent)
        {
            base.UpdateValues(treeComponent);

            foreach (TreeComponent component in ((DirComponent)treeComponent).components)
            {
                childString += "\n  <b>" + component.Name + "</b>";
            }
        }
Exemple #11
0
 private float FindSpecificMetricValue(Metric metric, TreeComponent documentComponent)
 {
     foreach (TreeMetric m in documentComponent.Metrics)
     {
         if (m.Key.Equals(metric.key))
         {
             return((float)m.Value);
         }
     }
     return((float)metric.defaultValue);
 }
Exemple #12
0
        private void RemoveSubcomponentWithItem(TreeComponent treeComponent, object itemToRemove)
        {
            foreach (var subComponent in treeComponent.SubComponents)
            {
                if (subComponent.Item == itemToRemove)
                {
                    treeComponent.SubComponents.Remove(subComponent);
                    return;
                }

                RemoveSubcomponentWithItem(subComponent, itemToRemove);
            }
        }
Exemple #13
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="args"></param>
        /// <returns></returns>
        private async Task OnClick(MouseEventArgs args)
        {
            SelfNode.SetSelected(!SelfNode.Selected);
            if (TreeComponent.OnClick.HasDelegate && args.Button == 0)
            {
                await TreeComponent.OnClick.InvokeAsync(new TreeEventArgs <TItem>(TreeComponent, SelfNode, args));
            }
            else if (TreeComponent.OnContextMenu.HasDelegate && args.Button == 2)
            {
                await TreeComponent.OnContextMenu.InvokeAsync(new TreeEventArgs <TItem>(TreeComponent, SelfNode, args));
            }

            TreeComponent.UpdateBindData();
        }
Exemple #14
0
    void SpawnObject()
    {
        GameObject _newTreePiece;

        if (SpawnOffsets.Count > 0)
        {
            _newTreePiece = Instantiate(PrefabsToSpawn[Random.Range(0, PrefabsToSpawn.Count)], transform.position + SpawnOffsets[Random.Range(0, SpawnOffsets.Count)], Quaternion.identity);
        }
        else
        {
            _newTreePiece = Instantiate(PrefabsToSpawn[Random.Range(0, PrefabsToSpawn.Count)], transform.position, Quaternion.identity);
        }

        TreeComponent _treeComponent = _newTreePiece.GetComponent <TreeComponent>();

        _treeComponent.MoveSpeed     = MoveSpeed;
        _treeComponent.RotationSpeed = RotationSpeed;
    }
Exemple #15
0
        /// <summary>
        /// Create a new package gameobject with the specific informations.
        /// </summary>
        /// <returns></returns>
        public GameObject GeneratePackage(TreeComponent packageComponent)
        {
            GameObject packageGameObject = GameObject.CreatePrimitive(PrimitiveType.Cube);

            packageGameObject.AddComponent <DirectoryInformation>();
            packageGameObject.GetComponent <DirectoryInformation>().UpdateValues(packageComponent);
            packageGameObject.AddComponent <ComponentClickListener>();
            packageGameObject.GetComponentInChildren <Renderer>().sharedMaterial       = contentMaterial;
            packageGameObject.GetComponentInChildren <Renderer>().shadowCastingMode    = ShadowCastingMode.Off;
            packageGameObject.GetComponentInChildren <Renderer>().lightProbeUsage      = LightProbeUsage.Off;
            packageGameObject.GetComponentInChildren <Renderer>().reflectionProbeUsage = ReflectionProbeUsage.Off;
            packageGameObject.GetComponentInChildren <Renderer>().receiveShadows       = false;
            packageGameObject.GetComponent <Collider>().enabled = false;
            packageGameObject.GetComponent <Renderer>().enabled = false;
            packageGameObject.name = packageComponent.Name;

            return(packageGameObject);
        }
Exemple #16
0
        private void FeedCategoryTree_CreateCategory(NewCategoryData newCategoryData)
        {
            var category = newCategoryData.Category;

            if (category == null)
            {
                return;
            }

            var createdCategory = _categoryService.CreateCategory(category);

            var treeComponent = new TreeComponent(createdCategory);

            var parentComponent = newCategoryData.ParentTreeComponent ?? _subscriptionsComponent;

            parentComponent.SubComponents.Add(treeComponent);
            parentComponent.IsExpanded = true;
        }
Exemple #17
0
    public void setMyComponents()
    {
        foreach (Transform t in components)
        {
            GameObject g = (GameObject)Instantiate(TreeGenerator.me.baseBranches [Random.Range(0, TreeGenerator.me.baseBranches.Count)], t.transform.position, Quaternion.Euler(0, 0, 0));
            if (myComponents == null)
            {
                myComponents = new List <TreeComponent> ();
            }
            g.transform.parent   = this.transform;
            g.transform.position = new Vector3(g.transform.position.x, g.transform.position.y, Random.Range(g.transform.position.z, g.transform.position.z - 1.5f));
            g.transform.rotation = Quaternion.Euler(0, 0, Random.Range(0, 360));

            TreeComponent tc = g.GetComponent <TreeComponent>();
            tc.setMyComponents(baseSortingOrder + 1);
            myComponents.Add(tc);
        }
    }
Exemple #18
0
        private void FeedCategoryTree_DeleteItem(TreeComponent item)
        {
            switch (item.TreeComponentType)
            {
            case TreeComponentType.Category:
                var category = item.Item as Category;

                var deleteCategoryResult = MessageBox.Show(
                    $"Are you sure you want to delete category {category.Title}?",
                    "Delete category", MessageBoxButton.YesNo);

                if (deleteCategoryResult == MessageBoxResult.No)
                {
                    return;
                }

                _categoryService.DeleteCategory(category.CategoryId);
                RemoveSubcomponentWithItem(_subscriptionsComponent, category);
                _feedComponent.NewFeedItemsCountManual = _feedService.GetNewFeedItemsCount();

                break;

            case TreeComponentType.Channel:
                var channel = item.Item as Channel;

                var deleteChannelResult = MessageBox.Show(
                    $"Are you sure you want to delete channel {channel.Title}?",
                    "Delete channel", MessageBoxButton.YesNo);

                if (deleteChannelResult == MessageBoxResult.No)
                {
                    return;
                }

                _channelService.DeleteChannel(channel.ChannelId);
                RemoveSubcomponentWithItem(_subscriptionsComponent, channel);
                _feedComponent.NewFeedItemsCountManual = _feedService.GetNewFeedItemsCount();

                break;

            default:
                break;
            }
        }
Exemple #19
0
    public void setMyComponents(int sortingOrder)
    {
        TreeGenerator tg = TreeGenerator.me;

        foreach (Transform t in ComponentPoints)
        {
            int r = Random.Range(0, 100);
            if (r < 25)
            {
                continue;
            }

            if (myType == TreeComponentType.branch)
            {
                GameObject g = (GameObject)Instantiate(tg.baseLeaves [Random.Range(0, tg.baseLeaves.Count)], t.transform.position, Quaternion.Euler(0, 0, 0));
                if (components == null)
                {
                    components = new List <TreeComponent> ();
                }
                g.transform.parent   = this.transform;
                g.transform.rotation = Quaternion.Euler(0, 0, Random.Range(0, 360));
                TreeComponent tc = g.GetComponent <TreeComponent>();
                tc.setMyComponents(sortingOrder + 1);
                components.Add(tc);
                g.GetComponent <SpriteRenderer> ().sortingOrder = sortingOrder;
            }
            else if (myType == TreeComponentType.trunk)
            {
                GameObject g = (GameObject)Instantiate(tg.baseBranches [Random.Range(0, tg.baseBranches.Count)], t.transform.position, Quaternion.Euler(0, 0, 0));
                if (components == null)
                {
                    components = new List <TreeComponent> ();
                }
                g.transform.parent = this.transform;

                g.transform.rotation = Quaternion.Euler(0, 0, Random.Range(0, 360));
                TreeComponent tc = g.GetComponent <TreeComponent>();
                tc.setMyComponents(sortingOrder + 1);
                components.Add(tc);
                g.GetComponent <SpriteRenderer> ().sortingOrder = sortingOrder;
            }
        }
    }
Exemple #20
0
    public override bool checkProceduralPrecondition(GameObject agent)
    {
        // find the nearest tree that we can chop
        TreeComponent[] trees       = (TreeComponent[])UnityEngine.GameObject.FindObjectsOfType(typeof(TreeComponent));
        TreeComponent   closest     = null;
        float           closestDist = 0;

        foreach (TreeComponent tree in trees)
        {
            if (tree.isInUse == false)
            {
                if (closest == null)
                {
                    // first one, so choose it for now
                    closest     = tree;
                    closestDist = (tree.gameObject.transform.position - agent.transform.position).magnitude;
                }
                else
                {
                    // is this one closer than the last?
                    float dist = (tree.gameObject.transform.position - agent.transform.position).magnitude;
                    if (dist < closestDist)
                    {
                        // we found a closer one, use it
                        closest     = tree;
                        closestDist = dist;
                    }
                }
            }
        }
        if (closest == null)
        {
            return(false);
        }

        targetTree         = closest;
        target             = targetTree.gameObject;
        targetTree.isInUse = true;

        return(closest != null);
    }
Exemple #21
0
        /// <summary>
        /// Create a new document gameobject with the specific informations.
        /// </summary>
        /// <returns></returns>
        public GameObject GenerateDocument(TreeComponent documentComponent, Metric[] selectedMetrics, float maxHeight)
        {
            GameObject documentGameObject = Instantiate(documentPrefab) as GameObject;

            documentGameObject.AddComponent <FileInformation>();
            documentGameObject.GetComponent <FileInformation>().UpdateValues(documentComponent);
            documentGameObject.AddComponent <ComponentClickListener>();
            documentGameObject.GetComponent <Renderer>().material             = contentMaterial;
            documentGameObject.GetComponent <Renderer>().shadowCastingMode    = ShadowCastingMode.Off;
            documentGameObject.GetComponent <Renderer>().lightProbeUsage      = LightProbeUsage.Off;
            documentGameObject.GetComponent <Renderer>().reflectionProbeUsage = ReflectionProbeUsage.Off;
            documentGameObject.GetComponent <Renderer>().receiveShadows       = false;
            documentGameObject.GetComponent <Collider>().enabled = false;
            documentGameObject.GetComponent <Renderer>().enabled = false;
            documentGameObject.transform.position = Vector3.zero;
            documentGameObject.name = documentComponent.Name;

            if (((FilComponent)documentComponent).Language.Equals("xml"))
            {
                float widthDepth = FindSpecificMetricValue(selectedMetrics[0], documentComponent);
                documentGameObject.transform.localScale = CalculateDocumentSize(widthDepth, 0.0f, maxHeight);
                documentGameObject.GetComponent <Renderer>().material.color = Color.gray;
                documentGameObject.GetComponent <MeshFilter>().mesh         = this.gameObject.GetComponent <Cylinder>().Mesh();
            }
            else
            {
                float defaultMetric = FindSpecificMetricValue(selectedMetrics[0], documentComponent);
                float heightMetric  = FindSpecificMetricValue(selectedMetrics[1], documentComponent);
                documentGameObject.transform.localScale = CalculateDocumentSize(defaultMetric, heightMetric, maxHeight);

                float colorMetric = FindSpecificMetricValue(selectedMetrics[2], documentComponent);
                documentGameObject.GetComponent <Renderer>().material.color = GetComponent <DocumentColorizer>().DocumentColor(colorMetric);

                float pyramidMetric = FindSpecificMetricValue(selectedMetrics[3], documentComponent);
                documentGameObject.GetComponent <MeshFilter>().mesh = CalculatePyramid(pyramidMetric);
            }


            return(documentGameObject);
        }
Exemple #22
0
        private async void FeedCategoryTree_EditChannel(TreeComponent treeComponent)
        {
            var channel = treeComponent.Item as Channel;

            if (channel == null)
            {
                return;
            }

            _channelService.UpdateChannel(channel);

            await _feedUpdater.UpdateFeedAsync(channel.ChannelId);

            UpdateChannelStats(channel.ChannelId, treeComponent);

            var channelInTree = FindChannel(_subscriptionsComponent.SubComponents, channel.ChannelId);

            if (channelInTree != null)
            {
                channelInTree.Item = channel;
                channelInTree.Name = channel.Title;
            }
        }
Exemple #23
0
    public override bool CheckProceduralPrecondition(GameObject agent, BlackBoard bb)
    {
        // find the nearest tree that we can chop
        TreeComponent[] trees       = (TreeComponent[])bb.GetData("tree");
        TreeComponent   closest     = null;
        float           closestDist = 0;

        foreach (TreeComponent tree in trees)
        {
            if (closest == null)
            {
                // first one, so choose it for now
                closest     = tree;
                closestDist = (tree.gameObject.transform.position - agent.transform.position).magnitude;
            }
            else
            {
                // is this one closer than the last?
                float dist = (tree.gameObject.transform.position - agent.transform.position).magnitude;
                if (dist < closestDist)
                {
                    // we found a closer one, use it
                    closest     = tree;
                    closestDist = dist;
                }
            }
        }
        if (closest == null)
        {
            return(false);
        }

        targetTree = closest;
        target     = targetTree.gameObject;

        return(closest != null);
    }
Exemple #24
0
        private async void FeedCategoryTree_CreateChannel(NewChannelData newChannelData)
        {
            var channel         = newChannelData.Channel;
            var parentComponent = newChannelData.ParentTreeComponent;
            var category        = (parentComponent?.Item as Category);

            if (channel == null || parentComponent == null || category == null)
            {
                return;
            }

            channel.CategoryId = category.CategoryId;

            var createdChannel = _channelService.CreateChannel(channel);

            var treeComponent = new TreeComponent(createdChannel);

            parentComponent.SubComponents.Add(treeComponent);
            parentComponent.IsExpanded = true;

            await _feedUpdater.UpdateFeedAsync(createdChannel.ChannelId);

            UpdateChannelStats(createdChannel.ChannelId, treeComponent);
        }
 public override void reset()
 {
     finished   = false;
     targetTree = null;
     startTime  = 0;
 }
Exemple #26
0
	public override void reset ()
	{
		chopped = false;
		targetTree = null;
		startTime = 0;
	}
Exemple #27
0
 /// <summary>
 /// Resets the action to its default values, so it can be used again.
 /// </summary>
 public override void Reset()
 {
     _chopped    = false;
     _targetTree = null;
     StartTime   = 0;
 }
        private void SetSelectedComponent(TreeComponent component, int selectedComponentID)
        {
            if (component == null)
            {
                return;
            }

            if (component.ID == selectedComponentID)
            {
                this.SelectedUser.SelectedComponent = component;
                return;
            }

            foreach (TreeComponent childComponent in component.Components)
            {
                this.SetSelectedComponent(childComponent, selectedComponentID);
            }
        }
Exemple #29
0
 private void UpdateChannelStats(int channelId, TreeComponent treeComponent)
 {
     _feedComponent.NewFeedItemsCountManual = _feedService.GetNewFeedItemsCount();
     treeComponent.NewFeedItemsCountManual  = _feedService.GetNewFeedItemsCount(channelId);
 }
 /// <summary>
 /// Resets the action to its default values, so it can be used again.
 /// </summary>
 public override void Reset()
 {
     _hasWood    = false;
     _targetTree = null;
     StartTime   = 0;
 }
Exemple #31
0
 public override void Reset()
 {
     chopped    = false;
     targetTree = null;
     startTime  = 0;
 }
 /// <summary>
 /// Update values.
 /// </summary>
 /// <param name="treeComponent"></param>
 public override void UpdateValues(TreeComponent treeComponent)
 {
     base.UpdateValues(treeComponent);
     this.language = ((TreeLeafComponent)treeComponent).Language;
 }
Exemple #33
0
 public override void reset()
 {
     chopped   = false;
     startTime = 0;
     closest   = null;
 }
        private bool CheckAllSystemOptionPermission(TreeComponent Component, bool Value)
        {
            bool isAll = true;
            if (SystemOptionPermissionID.Count == 0 || SystemOptionPermissionID.Contains(Component.ID))
            {
                foreach (var op in Component.OptionPermissions)
                {
                    if (op.Type == OptionType.Flag)
                    {
                        if (!op.Flag.HasValue || op.Flag.Value != Value)
                        {
                            isAll = false;
                            break;
                        }
                    }
                }

            }

            if (isAll)
            {
                foreach (TreeComponent cp in Component.Components)
                {
                    isAll = CheckAllSystemOptionPermission(cp, Value);
                    if (!isAll)
                    {
                        break;
                    }
                }
            }

            return isAll;
        }
 private void SetSystemOptionPermissionChanged(TreeComponent Component)
 {
     if (Component != null)
     {
         if (SystemOptionPermissionID.Count == 0 || SystemOptionPermissionID.Contains(Component.ID))
         {
             foreach (var op in Component.OptionPermissions)
             {
                 op.OptionPermissionChanged += op_OptionPermissionChanged;
             }
         }
         foreach (TreeComponent cp in Component.Components)
         {
             SetSystemOptionPermissionChanged(cp);
         }
     }
 }
 private void SetSystemOptionPermissionValues(TreeComponent Component, bool Value)
 {
     if (Component != null)
     {
         if (SystemOptionPermissionID.Count == 0 || SystemOptionPermissionID.Contains(Component.ID))
         {
             foreach (var op in Component.OptionPermissions)
             {
                 if (op.Type == OptionType.Flag)
                 {
                     op.Flag = Value;
                 }
             }
         }
         foreach (TreeComponent cp in Component.Components)
         {
             SetSystemOptionPermissionValues(cp, Value);
         }
     }
 }