/// <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: スキルポイント的なやつの消費 }
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; } }); }
/// <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: スキルポイント的なやつの消費 }
/// <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); }