diff --git a/core/src/mindustry/content/TechTree.java b/core/src/mindustry/content/TechTree.java index 2a4de32157..4ec00f499e 100644 --- a/core/src/mindustry/content/TechTree.java +++ b/core/src/mindustry/content/TechTree.java @@ -23,6 +23,17 @@ public class TechTree implements ContentList{ map = new ObjectMap<>(); all = new Seq<>(); + root = node(coreShard, () -> { + node(Items.lead, () -> { + + }); + + node(Items.copper, () -> { + + }); + }); + + if(false) root = node(coreShard, () -> { node(conveyor, () -> { @@ -338,7 +349,7 @@ public class TechTree implements ContentList{ /** Extra objectives needed to research this. TODO implement */ public Objective[] objectives = {}; /** Time required to research this content, in seconds. */ - public float time = 60; //TODO implement + public float time = 60; /** Nodes that depend on this node. */ public final Seq children = new Seq<>(); /** Research progress, in seconds. */ diff --git a/core/src/mindustry/ui/dialogs/TechTreeDialog.java b/core/src/mindustry/ui/dialogs/TechTreeDialog.java index efc7b2881d..59299ad204 100644 --- a/core/src/mindustry/ui/dialogs/TechTreeDialog.java +++ b/core/src/mindustry/ui/dialogs/TechTreeDialog.java @@ -130,17 +130,25 @@ public class TechTreeDialog extends BaseDialog{ LayoutNode[] children = node.children; LayoutNode[] leftHalf = Arrays.copyOfRange(node.children, 0, Mathf.ceil(node.children.length/2f)); LayoutNode[] rightHalf = Arrays.copyOfRange(node.children, Mathf.ceil(node.children.length/2f), node.children.length); + node.children = leftHalf; new BranchTreeLayout(){{ gapBetweenLevels = gapBetweenNodes = spacing; rootLocation = TreeLocation.top; }}.layout(node); - node.children = rightHalf; - new BranchTreeLayout(){{ - gapBetweenLevels = gapBetweenNodes = spacing; - rootLocation = TreeLocation.bottom; - }}.layout(node); + float lastY = node.y; + + if(rightHalf.length > 0){ + + node.children = rightHalf; + new BranchTreeLayout(){{ + gapBetweenLevels = gapBetweenNodes = spacing; + rootLocation = TreeLocation.bottom; + }}.layout(node); + + shift(leftHalf, node.y - lastY); + } node.children = children; @@ -158,6 +166,13 @@ public class TechTreeDialog extends BaseDialog{ bounds.y += nodeSize*1.5f; } + void shift(LayoutNode[] children, float amount){ + for(LayoutNode node : children){ + node.y += amount; + if(node.children != null && node.children.length > 0) shift(node.children, amount); + } + } + void copyInfo(LayoutNode node){ node.node.x = node.x; node.node.y = node.y; diff --git a/core/src/mindustry/ui/layout/BranchTreeLayout.java b/core/src/mindustry/ui/layout/BranchTreeLayout.java index eaa8a5cdd9..c2739fbada 100644 --- a/core/src/mindustry/ui/layout/BranchTreeLayout.java +++ b/core/src/mindustry/ui/layout/BranchTreeLayout.java @@ -229,8 +229,7 @@ public class BranchTreeLayout implements TreeLayout{ TreeNode previousChild = null; for(TreeNode w : v.children){ firstWalk(w, previousChild); - defaultAncestor = apportion(w, defaultAncestor, previousChild, - v); + defaultAncestor = apportion(w, defaultAncestor, previousChild, v); previousChild = w; } executeShifts(v); @@ -257,8 +256,7 @@ public class BranchTreeLayout implements TreeLayout{ }else if(alignment == TreeAlignment.towardsRoot){ y = levelStart + levelChangeSign * (getNodeThickness(v) / 2); }else{ - y = levelStart + levelSize - levelChangeSign - * (getNodeThickness(v) / 2); + y = levelStart + levelSize - levelChangeSign * (getNodeThickness(v) / 2); } if(!levelChangeOnYAxis){