Esempio n. 1
0
        /// <summary>
        /// 指定した遺伝子を開放する。
        /// <param name="tree">解放するGeneを含むGeneTree</param>
        /// <param name="gene">解放するGene</param>
        /// <returns>解放に成功したかどうか。</returns>
        /// </summary>
        public bool Activate(GeneTree tree, Gene gene)
        {
            if (!Trees.Contains(tree))
            {
                throw new ArgumentException("指定したGeneTreeはGeneSystemに登録されていません。");
            }
            if (!tree.Genes.Contains(gene))
            {
                throw new ArgumentException("指定したGeneはGeneTreeに含まれていません。");
            }

            if (gene.ParentGene != null && !Data.ActivatedGenes.Contains(gene.ParentGene.Guid))
            {
                //親ノードの遺伝子が解放されていなければ、解放できない
                return(false);
            }

            var entry = treeEntries.FirstOrDefault(e => e.GeneTreeAsset == tree);

            entry?.ReleaseGene.Invoke(gene.Id);
            Data.ActivatedGenes.Add(gene.Guid);
            onGeneActivated.OnNext(gene);
            return(true);

            //TODO: スキルポイント的なやつの消費
        }
Esempio n. 2
0
 public void SelectGeneTree(GeneTree tree)
 {
     if (SelectedGeneTree == tree)
     {
         return;
     }
     SelectedGeneTree = tree;
     treeView.Build(tree);
     onSelectedGeneTreeChanged.OnNext(tree);
 }
        public void Initialize(UIGenePanel panel, GeneTree tree)
        {
            this.panel = panel;
            this.tree  = tree;

            GetComponentInChildren <Text>().text = tree.DisplayName;
            GetComponent <Button>().onClick.AddListener(OnClick);

            panel.OnSelectedGeneTreeChanged.Subscribe(t =>
            {
                if (t == tree)
                {
                    Image.sprite = selectedSprite;
                }
                else
                {
                    Image.sprite = defaultSprite;
                }
            });
        }
Esempio n. 4
0
        /// <summary>
        /// 指定した遺伝子を開放する。
        /// <param name="tree">解放するGeneを含むGeneTree</param>
        /// <param name="gene">解放するGene</param>
        /// <returns>解放に成功したかどうか。</returns>
        /// </summary>
        public bool Activate(GeneTree tree, Gene gene)
        {
            if (!Trees.Contains(tree))
            {
                throw new ArgumentException("指定したGeneTreeはGeneSystemに登録されていません。");
            }
            if (!tree.Genes.Contains(gene))
            {
                throw new ArgumentException("指定したGeneはGeneTreeに含まれていません。");
            }

            if (gene.ParentGene != null && !Data.ActivatedGenes.Contains(gene.ParentGene.Guid))
            {
                //親ノードの遺伝子が解放されていなければ、解放できない
                return(false);
            }

            var entry = treeEntries.FirstOrDefault(e => e.GeneTreeAsset == tree);

            if (entry != null && entry.ReleaseGeneDefinition != null)
            {
                if (!entry.ReleaseGeneDefinition.Release(gene.Id))
                {
                    return(false);
                }
            }
            else
            {
                Debug.LogWarning("GeneSystem: 指定されたGeneに対応するGeneTreeActionが登録されていません。");
            }

            Data.ActivatedGenes.Add(gene.Guid);
            onGeneActivated.OnNext(gene);
            return(true);

            //TODO: スキルポイント的なやつの消費
        }
Esempio n. 5
0
        /// <summary>
        /// 指定したGeneTreeをもとにツリーのUIを構築します。
        /// </summary>
        /// <param name="geneTree"></param>
        public void Build(GeneTree geneTree)
        {
            foreach (var node in treeNodes)
            {
                Destroy(node.gameObject);
            }

            treeNodes.Clear();

            foreach (var edge in treeEdges)
            {
                Destroy(edge.gameObject);
            }

            treeEdges.Clear();

            CurrentGeneTree = geneTree;
            SelectedGene    = null;

            var rootNodes = geneTree.Genes.Where(g => g.IsRootGene);
            //Depth, Orderを計算
            List <int>            orders = new List <int>();
            List <UIGeneTreeNode> ends   = new List <UIGeneTreeNode>();

            foreach (var gene in rootNodes)
            {
                var n = SetupGeneNodeKernel(orders, ends, 0, gene);
                PlaceGeneNodeKernel(ends, n, 0);
            }

            float boundWidth  = (orders.Count - 1) * horizontalSpacing + padding * 2f;
            float boundHeight = (ends.Count - 1) * verticalSpacing + padding * 2f;


            contentContainer.sizeDelta = new Vector2(boundWidth, boundHeight);
        }