From 20077738d29684551e016f7a08b78d6529208b85 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 24 Jul 2020 23:56:14 -0400 Subject: [PATCH] Research fixes --- .../blocks/defense/overdrive-dome-top.png | Bin 0 -> 516 bytes .../sprites/blocks/defense/overdrive-dome.png | Bin 0 -> 1333 bytes core/assets/bundles/bundle.properties | 2 +- core/src/mindustry/content/SectorPresets.java | 48 +++++++++--------- core/src/mindustry/content/TechTree.java | 2 + .../mindustry/ctype/UnlockableContent.java | 4 ++ core/src/mindustry/game/Objectives.java | 16 +++--- .../mindustry/ui/dialogs/ResearchDialog.java | 11 ++-- .../world/blocks/units/Reconstructor.java | 3 +- 9 files changed, 48 insertions(+), 38 deletions(-) create mode 100644 core/assets-raw/sprites/blocks/defense/overdrive-dome-top.png create mode 100644 core/assets-raw/sprites/blocks/defense/overdrive-dome.png diff --git a/core/assets-raw/sprites/blocks/defense/overdrive-dome-top.png b/core/assets-raw/sprites/blocks/defense/overdrive-dome-top.png new file mode 100644 index 0000000000000000000000000000000000000000..4daa23ba53a6f620e90c37b3a57cb93ff576abb0 GIT binary patch literal 516 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofy`glX=O&z_`!T z#WAE}&f7Z&9S<7_xLoAD+v2t$j=ng4Sd2@Rn)LVbbwdN4f<{ahY@D4B_#en9DKwco9AJ1?{ejg(BEIMQqyHRMGK^<965JS!nPvzc z=wV1>F;H%hgbV#-;`zh;bHC*Kqrasm2pp{8|JSeZoPp7v;U7cjJVmBs>%BMwu3CGX z_z~*KxT>m+Q)<7KuEW(kjfak{e>A^Xzw^)Yn9d#nt2$Bsj6Erx>?SHoPCtHx+AR65 z?rpb3eYJbUFT>DC(?eqXS*NoEw^fBUt`SN+J-yVUs%33_xbjNDzKX=jOI$5pO--F7 y^zg*=Z=KeMF0NlI5_d=H!If}vW>`EhRR3n3Te&IX@}uUjATdu@KbLh*2~7Z;CDUmD literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/defense/overdrive-dome.png b/core/assets-raw/sprites/blocks/defense/overdrive-dome.png new file mode 100644 index 0000000000000000000000000000000000000000..61515689d04adcc92ce857510a0d27fe68d3e4e9 GIT binary patch literal 1333 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^SB{&>1LhE&{od)K<}ih~I2 zg(zjE`LYU5hd3jdl+qYIQZksB!VW7*q^KwdUwK~puKNAA3yqs+zWQW)S8sP+p1fUM z)xSSqrT_f+`BbpTuX3_cw9iWa>VWINDs zpihD?pz}bTq&M>lhlKnSml=%&Z{(+*W>_T9XHv(aO=O69k^S z%qjiDyuk57$O89-8Igg#1#2J2GYGMqW}nZY6CAB2_{-`a^9H96E7t$pmK9(pofvXl z@c_p`;eV@cI|)e%IegZ3R66s@f^~1+*d8tfC=^c_F6#Wymr zN{Dvw)VDTp*-Ix*na-IIy5Q;TjlY-13hqhf=3qI`+qO*hmR-l!&t-jqYOlWrHa*~# zZ%oL2-k0;MIKaN+tlyJ4S4#N4M!px?vVG4yMPKfwuX^v#ES>*n>8q|8bB~mU-7MX6 zmC3-_p*`Pm!#D9*C6InJm zWlUNgs@<^kU~I4YnY7@=`tFmqIdU6lFMsQ_nQ4Lb&$8f~dpT}J2Xh}-F-PsC)(M6W zE&UEBm|mRD+I?UZgAGS z8%y1@zt7oFk~+Q2-I)JGhM-C8O%rCLGtQHwShyw5PEh&0pyrC4Yf1B`Gna#m4lSQC zEy&i8yK}=Wk*=zwu&Y;GR1UrQZ@PJt_j0u~|8rLrBKXg)$>}<|GxG9fV*!)Rn^rDc z?yi5~gu{h1r|JZ`O(t+$IvKIsGb*TMcEqA7tq*=)jX3q;PC|?BrS6DjTAW9#Z(f?V zIqG=KHXqZZh1*ydFXm;Oidvhj7rjDuV`w7_+}#o(9=U)~McUI- z;KA(Dl$@)F_!Mrw*GSnt>x`~!B%{i2+18vJAsg4HnJ_8+5oD@4y{W^s;9@S*uMZ_3 zF6Kp7YIDq!3;Wd@eN%AN;dZ7wQcdMKjY0}Z#li2N-F@*fA* ze3fMy8|oUJk67mmaOi%r%69FjYV|x~oxg`ech|1HN`RW$-)<=RIYtU^4B)MUKF)4$3CWJ}f?bdRFK{$BdkZ?y+{8mT&VA vluG{bg3V-=97oGBDZ5u !i.item.alwaysUnlocked).map(i -> new Research(i.item)).toArray(Objective.class); + map.put(content, this); context = this; children.run(); diff --git a/core/src/mindustry/ctype/UnlockableContent.java b/core/src/mindustry/ctype/UnlockableContent.java index a74241a518..211854c453 100644 --- a/core/src/mindustry/ctype/UnlockableContent.java +++ b/core/src/mindustry/ctype/UnlockableContent.java @@ -42,6 +42,10 @@ public abstract class UnlockableContent extends MappableContent{ } + public String emoji(){ + return Fonts.getUnicodeStr(name); + } + /** Returns a specific content icon, or the region {contentType}-{name} if not found.*/ public TextureRegion icon(Cicon icon){ if(cicons[icon.ordinal()] == null){ diff --git a/core/src/mindustry/game/Objectives.java b/core/src/mindustry/game/Objectives.java index 6f8913b9e2..27f5bcf5c3 100644 --- a/core/src/mindustry/game/Objectives.java +++ b/core/src/mindustry/game/Objectives.java @@ -3,29 +3,29 @@ package mindustry.game; import arc.*; import arc.scene.ui.layout.*; import arc.util.ArcAnnotate.*; +import mindustry.ctype.*; import mindustry.type.*; -import mindustry.world.*; /** Holds objective classes. */ public class Objectives{ - public static class Unlock implements Objective{ - public @NonNull Block block; + public static class Research implements Objective{ + public @NonNull UnlockableContent content; - public Unlock(Block block){ - this.block = block; + public Research(UnlockableContent content){ + this.content = content; } - protected Unlock(){} + protected Research(){} @Override public boolean complete(){ - return block.unlocked(); + return content.unlocked(); } @Override public String display(){ - return Core.bundle.format("requirement.unlock", block.localizedName); + return Core.bundle.format("requirement.research", content.emoji() + " " + content.localizedName); } } diff --git a/core/src/mindustry/ui/dialogs/ResearchDialog.java b/core/src/mindustry/ui/dialogs/ResearchDialog.java index ed7b7bc32b..126096d565 100644 --- a/core/src/mindustry/ui/dialogs/ResearchDialog.java +++ b/core/src/mindustry/ui/dialogs/ResearchDialog.java @@ -256,7 +256,7 @@ public class ResearchDialog extends BaseDialog{ } }); } - }else if(items().has(node.node.requirements) && locked(node.node)){ + }else if(canUnlock(node.node) && locked(node.node)){ unlock(node.node); } }); @@ -313,6 +313,10 @@ public class ResearchDialog extends BaseDialog{ panY = ry - bounds.y - oy; } + boolean canUnlock(TechNode node){ + return items().has(node.requirements) && !Structs.contains(node.objectives, o -> !o.complete()); + } + void unlock(TechNode node){ node.content.unlock(); items().remove(node.requirements); @@ -378,8 +382,7 @@ public class ResearchDialog extends BaseDialog{ r.add("$complete").colspan(2).left(); r.row(); for(Objective o : node.objectives){ - r.image(Icon.right).padRight(4); - r.add(o.display()).color(Color.lightGray); + r.add(o.display()).color(Color.lightGray).left().padLeft(15f); r.image(o.complete() ? Icon.ok : Icon.cancel, o.complete() ? Color.lightGray : Color.scarlet).padLeft(3); r.row(); } @@ -395,7 +398,7 @@ public class ResearchDialog extends BaseDialog{ if(mobile && locked(node)){ b.row(); b.button("$research", Icon.ok, Styles.nodet, () -> unlock(node)) - .disabled(i -> !items().has(node.requirements)).growX().height(44f).colspan(3); + .disabled(i -> !canUnlock(node)).growX().height(44f).colspan(3); } }); diff --git a/core/src/mindustry/world/blocks/units/Reconstructor.java b/core/src/mindustry/world/blocks/units/Reconstructor.java index 38e02628d3..0920efbb00 100644 --- a/core/src/mindustry/world/blocks/units/Reconstructor.java +++ b/core/src/mindustry/world/blocks/units/Reconstructor.java @@ -150,7 +150,8 @@ public class Reconstructor extends UnitBlock{ } public boolean hasUpgrade(UnitType type){ - return upgrade(type) != null; + UnitType t = upgrade(type); + return t != null && t.unlockedNow(); } public UnitType upgrade(UnitType type){