mirror of
https://github.com/Anuken/Mindustry.git
synced 2025-07-20 20:57:59 +07:00
Tech tree selection fixes
This commit is contained in:
@ -1168,7 +1168,7 @@ public class Blocks{
|
||||
size = 3;
|
||||
|
||||
itemCapacity = 20;
|
||||
heatRequirement = 5f;
|
||||
heatRequirement = 10f;
|
||||
craftTime = 60f * 3f;
|
||||
liquidCapacity = 80f * 5;
|
||||
|
||||
|
@ -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, () -> {
|
||||
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -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;
|
||||
|
@ -17,8 +17,13 @@ public class TechTree{
|
||||
public static Seq<TechNode> 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. */
|
||||
|
@ -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();
|
||||
|
Reference in New Issue
Block a user