diff --git a/core/src/mindustry/core/GameState.java b/core/src/mindustry/core/GameState.java index 668fbd0b71..4ffc24dd06 100644 --- a/core/src/mindustry/core/GameState.java +++ b/core/src/mindustry/core/GameState.java @@ -59,7 +59,7 @@ public class GameState{ } public boolean hasSpawns(){ - return rules.waves && !(isCampaign() && rules.attackMode); + return rules.waves && ((rules.waveTeam.cores().size > 0 && rules.attackMode) || rules.spawns.size > 0); } /** Note that being in a campaign does not necessarily mean having a sector. */ diff --git a/core/src/mindustry/ui/dialogs/ResearchDialog.java b/core/src/mindustry/ui/dialogs/ResearchDialog.java index b22315dfc5..762051b93d 100644 --- a/core/src/mindustry/ui/dialogs/ResearchDialog.java +++ b/core/src/mindustry/ui/dialogs/ResearchDialog.java @@ -381,11 +381,9 @@ public class ResearchDialog extends BaseDialog{ this.parent = parent; this.width = this.height = nodeSize; nodes.add(this); - if(node.children != null){ - children = new TechTreeNode[node.children.size]; - for(int i = 0; i < children.length; i++){ - children[i] = new TechTreeNode(node.children.get(i), this); - } + children = new TechTreeNode[node.children.size]; + for(int i = 0; i < children.length; i++){ + children[i] = new TechTreeNode(node.children.get(i), this); } } } diff --git a/core/src/mindustry/ui/layout/TreeLayout.java b/core/src/mindustry/ui/layout/TreeLayout.java index 6de2442bcf..a4ee3ac419 100644 --- a/core/src/mindustry/ui/layout/TreeLayout.java +++ b/core/src/mindustry/ui/layout/TreeLayout.java @@ -11,7 +11,7 @@ public interface TreeLayout{ public T parent; //internal stuff - public float mode, prelim, change, shift; + public float mode, prelim, change, shift, cachedWidth = -1f; public int number = -1, leaves; public TreeNode thread, ancestor; @@ -21,12 +21,13 @@ public interface TreeLayout{ public float calcWidth(){ if(children == null) return width; + if(cachedWidth > 0) return cachedWidth; float cWidth = 0; for(T node : children){ cWidth += node.calcWidth(); } - return Math.max(width, cWidth); + return cachedWidth = Math.max(width, cWidth); } } }