Fixed some tech tree layout issues

This commit is contained in:
Anuken 2020-06-19 23:36:21 -04:00
parent 6bcc103cf7
commit f419de0fad
3 changed files with 34 additions and 10 deletions

View File

@ -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<TechNode> children = new Seq<>();
/** Research progress, in seconds. */

View File

@ -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;

View File

@ -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){