From 4a59bc952f39bb14c8e5c5a8cfee97ca957cf6ca Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 10 Dec 2021 12:25:35 -0500 Subject: [PATCH] Tech tree selection fixes --- core/src/mindustry/content/Blocks.java | 2 +- .../src/mindustry/content/ErekirTechTree.java | 46 ++++++++++--------- core/src/mindustry/content/Liquids.java | 1 - core/src/mindustry/content/TechTree.java | 7 +++ .../mindustry/ui/dialogs/ResearchDialog.java | 21 ++++++++- 5 files changed, 53 insertions(+), 24 deletions(-) diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 813b7cced2..a6af38a9b2 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -1168,7 +1168,7 @@ public class Blocks{ size = 3; itemCapacity = 20; - heatRequirement = 5f; + heatRequirement = 10f; craftTime = 60f * 3f; liquidCapacity = 80f * 5; diff --git a/core/src/mindustry/content/ErekirTechTree.java b/core/src/mindustry/content/ErekirTechTree.java index 2855ab91c8..7caac5a5b9 100644 --- a/core/src/mindustry/content/ErekirTechTree.java +++ b/core/src/mindustry/content/ErekirTechTree.java @@ -6,7 +6,7 @@ import static mindustry.content.TechTree.*; public class ErekirTechTree{ public static void load(){ - Planets.erekir.techTree = nodeRoot("erekir", coreBastion, () -> { + Planets.erekir.techTree = nodeRoot("erekir", coreBastion, true, () -> { node(duct, () -> { node(ductRouter, () -> { node(ductBridge, () -> { @@ -57,9 +57,11 @@ public class ErekirTechTree{ node(turbineCondenser, () -> { node(beamNode, () -> { - node(chemicalCombustionChamber, () -> { - node(pyrolysisGenerator, () -> { + node(ventCondenser, () -> { + node(chemicalCombustionChamber, () -> { + node(pyrolysisGenerator, () -> { + }); }); }); @@ -75,38 +77,40 @@ public class ErekirTechTree{ }); }); - node(ventCondenser, () -> { - node(siliconArcFurnace, () -> { - node(electrolyzer, () -> { - node(oxidationChamber, () -> { - node(electricHeater, () -> { - node(atmosphericConcentrator, () -> { - node(cyanogenSynthesizer, () -> { + node(siliconArcFurnace, () -> { + node(electrolyzer, () -> { + node(oxidationChamber, () -> { + node(electricHeater, () -> { + node(heatRedirector, () -> { + + }); + + node(atmosphericConcentrator, () -> { + node(cyanogenSynthesizer, () -> { - }); }); + }); - node(carbideCrucible, () -> { - node(surgeCrucible, () -> { - node(phaseSynthesizer, () -> { - node(phaseHeater, () -> { + node(carbideCrucible, () -> { + node(surgeCrucible, () -> { + node(phaseSynthesizer, () -> { + node(phaseHeater, () -> { - }); }); }); }); }); }); + }); - node(slagIncinerator, () -> { + node(slagIncinerator, () -> { - node(slagCentrifuge, () -> { + node(slagCentrifuge, () -> { - }); + }); - node(heatReactor, () -> { + node(heatReactor, () -> { - }); }); }); }); diff --git a/core/src/mindustry/content/Liquids.java b/core/src/mindustry/content/Liquids.java index a7f1dfb1c8..afdd53df20 100644 --- a/core/src/mindustry/content/Liquids.java +++ b/core/src/mindustry/content/Liquids.java @@ -56,7 +56,6 @@ public class Liquids{ colorTo = Color.valueOf("9e172c"); }}; - //TODO arkycite = new Liquid("arkycite", Color.valueOf("84a94b")){{ flammability = 0.4f; viscosity = 0.7f; diff --git a/core/src/mindustry/content/TechTree.java b/core/src/mindustry/content/TechTree.java index 0621e511d9..5c07be4701 100644 --- a/core/src/mindustry/content/TechTree.java +++ b/core/src/mindustry/content/TechTree.java @@ -17,8 +17,13 @@ public class TechTree{ public static Seq roots = new Seq<>(); public static TechNode nodeRoot(String name, UnlockableContent content, Runnable children){ + return nodeRoot(name, content, false, children); + } + + public static TechNode nodeRoot(String name, UnlockableContent content, boolean requireUnlock, Runnable children){ var root = node(content, content.researchRequirements(), children); root.name = name; + root.requiresUnlock = requireUnlock; roots.add(root); return root; } @@ -81,6 +86,8 @@ public class TechTree{ public @Nullable Drawable icon; /** Name for root node - used in tech tree selector. */ public @Nullable String name; + /** For roots only. If true, this needs to be unlocked before it is selectable in the research dialog. Does not apply when you are on the planet itself. */ + public boolean requiresUnlock = false; /** Requirement node. */ public @Nullable TechNode parent; /** Content to be researched. */ diff --git a/core/src/mindustry/ui/dialogs/ResearchDialog.java b/core/src/mindustry/ui/dialogs/ResearchDialog.java index 7d3d095994..6c421640a9 100644 --- a/core/src/mindustry/ui/dialogs/ResearchDialog.java +++ b/core/src/mindustry/ui/dialogs/ResearchDialog.java @@ -45,7 +45,9 @@ public class ResearchDialog extends BaseDialog{ public ResearchDialog(){ super(""); + titleTable.remove(); titleTable.clear(); + titleTable.top(); titleTable.button(b -> { //TODO custom icon here. b.imageDraw(() -> root.node.icon()).padRight(8).size(iconMed); @@ -59,6 +61,8 @@ public class ResearchDialog extends BaseDialog{ t.table(Tex.button, in -> { in.defaults().width(300f).height(60f); for(TechNode node : TechTree.roots){ + if(node.requiresUnlock && !node.content.unlocked() && node != getPrefRoot()) continue; + in.button(node.localizedName(), Styles.cleart, () -> { rebuildTree(node); hide(); @@ -72,12 +76,20 @@ public class ResearchDialog extends BaseDialog{ }).minWidth(300f); margin(0f).marginBottom(8); - cont.stack(view = new View(), itemDisplay = new ItemsDisplay()).grow(); + cont.stack(titleTable, view = new View(), itemDisplay = new ItemsDisplay()).grow(); titleTable.toFront(); shouldPause = true; + onResize(() -> { + if(Core.graphics.isPortrait()){ + itemDisplay.marginTop(60f); + }else{ + itemDisplay.marginTop(0f); + } + }); + shown(() -> { Planet currPlanet = ui.planet.isShown() ? ui.planet.state.planet : @@ -210,6 +222,13 @@ public class ResearchDialog extends BaseDialog{ }); } + public @Nullable TechNode getPrefRoot(){ + Planet currPlanet = ui.planet.isShown() ? + ui.planet.state.planet : + state.isCampaign() ? state.rules.sector.planet : null; + return currPlanet == null ? null : currPlanet.techTree; + } + public void switchTree(TechNode node){ if(lastNode == node || node == null) return; nodes.clear();