From 3354ef246b19d8730572213c50a6f298f700a687 Mon Sep 17 00:00:00 2001 From: buthed010203 Date: Tue, 10 Aug 2021 16:08:00 -0400 Subject: [PATCH 01/18] spacing (#5732) Before: ![](https://mee6.is-terrible.com/56KMVIkGc.png) After: ![](https://xenon.is-ne.at/56KPxNfyF.png) --- core/src/mindustry/ui/dialogs/PausedDialog.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/mindustry/ui/dialogs/PausedDialog.java b/core/src/mindustry/ui/dialogs/PausedDialog.java index 1226d59324..e1a0da90bb 100644 --- a/core/src/mindustry/ui/dialogs/PausedDialog.java +++ b/core/src/mindustry/ui/dialogs/PausedDialog.java @@ -53,11 +53,11 @@ public class PausedDialog extends BaseDialog{ ui.host.show(); } } - }).disabled(b -> !((steam && net.server()) || !net.active())).colspan(2).width(dw * 2 + 20f).update(e -> e.setText(net.server() && steam ? "@invitefriends" : "@hostserver")); + }).disabled(b -> !((steam && net.server()) || !net.active())).colspan(2).width(dw * 2 + 10f).update(e -> e.setText(net.server() && steam ? "@invitefriends" : "@hostserver")); cont.row(); - cont.button("@quit", Icon.exit, this::showQuitConfirm).colspan(2).width(dw + 20f).update(s -> s.setText(control.saves.getCurrent() != null && control.saves.getCurrent().isAutosave() ? "@save.quit" : "@quit")); + cont.button("@quit", Icon.exit, this::showQuitConfirm).colspan(2).width(dw + 10f).update(s -> s.setText(control.saves.getCurrent() != null && control.saves.getCurrent().isAutosave() ? "@save.quit" : "@quit")); }else{ cont.defaults().size(130f).pad(5); From 9c626a17f0400121175894a152c7cd651174c18d Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 10 Aug 2021 17:11:22 -0400 Subject: [PATCH 02/18] Database dialog search bar --- core/src/mindustry/content/Bullets.java | 2 +- .../mindustry/ui/dialogs/DatabaseDialog.java | 40 +++++++++++++------ .../ui/fragments/PlayerListFragment.java | 17 ++++---- 3 files changed, 35 insertions(+), 24 deletions(-) diff --git a/core/src/mindustry/content/Bullets.java b/core/src/mindustry/content/Bullets.java index abef6c9c16..ee7d7574ed 100644 --- a/core/src/mindustry/content/Bullets.java +++ b/core/src/mindustry/content/Bullets.java @@ -386,7 +386,7 @@ public class Bullets implements ContentList{ hittable = false; }}; - pyraFlame = new BulletType(4f, 50f){{ + pyraFlame = new BulletType(4f, 55f){{ ammoMultiplier = 6f; hitSize = 7f; lifetime = 18f; diff --git a/core/src/mindustry/ui/dialogs/DatabaseDialog.java b/core/src/mindustry/ui/dialogs/DatabaseDialog.java index ede404aa9a..c94f69f2e2 100644 --- a/core/src/mindustry/ui/dialogs/DatabaseDialog.java +++ b/core/src/mindustry/ui/dialogs/DatabaseDialog.java @@ -20,6 +20,8 @@ import mindustry.world.*; import static mindustry.Vars.*; public class DatabaseDialog extends BaseDialog{ + private TextField search; + private Table all = new Table(); public DatabaseDialog(){ super("@database"); @@ -28,28 +30,38 @@ public class DatabaseDialog extends BaseDialog{ addCloseButton(); shown(this::rebuild); onResize(this::rebuild); + + all.margin(20).marginTop(0f); + + cont.table(s -> { + s.image(Icon.zoom).padRight(8); + search = s.field(null, text -> rebuild()).growX().get(); + search.setMessageText(Core.bundle.get("players.search")); + }).fillX().padBottom(4).row(); + + cont.pane(all); } void rebuild(){ - cont.clear(); - - Table table = new Table(); - table.margin(20); - ScrollPane pane = new ScrollPane(table); + all.clear(); + var text = search.getText(); Seq[] allContent = Vars.content.getContentMap(); for(int j = 0; j < allContent.length; j++){ ContentType type = ContentType.all[j]; - Seq array = allContent[j].select(c -> c instanceof UnlockableContent u && (!u.isHidden() || u.node() != null)); + Seq array = allContent[j] + .select(c -> c instanceof UnlockableContent u && + (!u.isHidden() || u.node() != null) && + (text.isEmpty() || u.localizedName.toLowerCase().contains(text.toLowerCase()))); if(array.size == 0) continue; - table.add("@content." + type.name() + ".name").growX().left().color(Pal.accent); - table.row(); - table.image().growX().pad(5).padLeft(0).padRight(0).height(3).color(Pal.accent); - table.row(); - table.table(list -> { + all.add("@content." + type.name() + ".name").growX().left().color(Pal.accent); + all.row(); + all.image().growX().pad(5).padLeft(0).padRight(0).height(3).color(Pal.accent); + all.row(); + all.table(list -> { list.left(); int cols = (int)Mathf.clamp((Core.graphics.getWidth() - Scl.scl(30)) / Scl.scl(32 + 10), 1, 22); @@ -94,10 +106,12 @@ public class DatabaseDialog extends BaseDialog{ } } }).growX().left().padBottom(10); - table.row(); + all.row(); } - cont.add(pane); + if(all.getChildren().isEmpty()){ + all.add("@none.found"); + } } boolean unlocked(UnlockableContent content){ diff --git a/core/src/mindustry/ui/fragments/PlayerListFragment.java b/core/src/mindustry/ui/fragments/PlayerListFragment.java index 67b101c6ab..32115c7cea 100644 --- a/core/src/mindustry/ui/fragments/PlayerListFragment.java +++ b/core/src/mindustry/ui/fragments/PlayerListFragment.java @@ -20,7 +20,7 @@ public class PlayerListFragment extends Fragment{ public Table content = new Table().marginRight(13f).marginLeft(13f); private boolean visible = false; private Interval timer = new Interval(); - private TextField sField; + private TextField search; private Seq players = new Seq<>(); @Override @@ -47,12 +47,9 @@ public class PlayerListFragment extends Fragment{ cont.table(Tex.buttonTrans, pane -> { pane.label(() -> Core.bundle.format(Groups.player.size() == 1 ? "players.single" : "players", Groups.player.size())); pane.row(); - sField = pane.field(null, text -> { - rebuild(); - }).grow().pad(8).get(); - sField.name = "search"; - sField.setMaxLength(maxNameLength); - sField.setMessageText(Core.bundle.format("players.search")); + + search = pane.field(null, text -> rebuild()).grow().pad(8).name("search").maxTextLength(maxNameLength).get(); + search.setMessageText(Core.bundle.get("players.search")); pane.row(); pane.pane(content).grow().get().setScrollingDisabled(true, false); @@ -83,8 +80,8 @@ public class PlayerListFragment extends Fragment{ Groups.player.copy(players); players.sort(Structs.comps(Structs.comparing(Player::team), Structs.comparingBool(p -> !p.admin))); - if(sField.getText().length() > 0){ - players.filter(p -> Strings.stripColors(p.name().toLowerCase()).contains(sField.getText().toLowerCase())); + if(search.getText().length() > 0){ + players.filter(p -> Strings.stripColors(p.name().toLowerCase()).contains(search.getText().toLowerCase())); } for(var user : players){ @@ -181,7 +178,7 @@ public class PlayerListFragment extends Fragment{ rebuild(); }else{ Core.scene.setKeyboardFocus(null); - sField.clearText(); + search.clearText(); } } From 14dc293a09a7e9665b6f367b9fd6c413bb335120 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 10 Aug 2021 19:56:31 -0400 Subject: [PATCH 03/18] Fixed #5734 / New derelict icon --- core/assets-raw/sprites/teams/team-derelict.png | Bin 608 -> 490 bytes core/src/mindustry/editor/MapEditorDialog.java | 2 +- core/src/mindustry/editor/MapView.java | 2 +- core/src/mindustry/input/InputHandler.java | 4 ++++ 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/core/assets-raw/sprites/teams/team-derelict.png b/core/assets-raw/sprites/teams/team-derelict.png index 38ac90dcb1ad7df85191e10d4c509c68634ec97e..7ba10089d8e0ea7835363d7ac2392d520f034119 100644 GIT binary patch delta 452 zcmaFB@``zaK|SLVPZ!6KjK;UK5B424;BYzl@4x-_>26V}qQ?)MY1ln4IaqRDui?>^ zH?Lj0Cg!-lf7Kg#QMdI6ju)QzJ3)F+bgJo|D>s5Ov>&FnrG4Mb6_<2m_7RZ}_BqT` zXI87cI^(urI{(*m7t)plxI1m$##Pf6dErGy1K+W@Ock3Ph0uz{^$!%AS9~{Nva@vv zRXTlW`KGF;6Q`d2rdgoRVr88EAa%1n_u4Kc&#>=S%Nmxq$C>Q8`Qgeb-QCM)eppu< zeo;F4pncs!=i~{D_BA(_8d`ixT{3b0c77{UHh;y3!Al>X`cQB8;)cW?F2?!q4wU4o z*>PTb7r53&_lh!GShE?oT)J^R^I}!&b7?&5xN@KAL@KjwN_skbsD|-Sl<*bE>9#*U zN&WWoUjJid-`v}Oh1NUG%}c)(!?vRTVEymwJw|)&R((s(&VFtEm2K{_5YJhc!@DxA$|9__Cmi)L`4tq{;mt0t@dm|{K$*0rI z%xuxcdn-=VhN!4kb^cQ*l35w!)za@~8T_Yzsj!jl{9kE))nA3}CSUHG5E60h#Ni`L zRnmogmk9iGnWJnyJ40z<0cT-I&9`;u^71ZSbZYJW<(^xi7yPAOdBNio%F>$ci5s{s zKDRjGrgiG#?@d7_v)sGhN!4@R`>pG}C0$4K;k{p{MQk4>y*h6?fve_~G^OO%L_U^Q*l=IbF)Vi?^RB5?^?HUlG>xP zI8P&y6P+JUJuh4}UpUj-S@8I^4^Au--)uX)m?N|C*9N7zuO|6=P2LmqN8|h3(~;cl zwhB}4nv_r5`^=YphKK!J!%r6`mWF=RQ%g1dxav<#bH3>Ns-xLT0V?;N&XQ0IRH(Om zBG0R)3c52s-rBUMiiyu6Kyi_~#wMAkmfUCSVxmj0 z3U&A8D(Q2^sM?+B&pwgXU2c0|fw@ZLqpgM}Hcz8;A3J7$Q2$`wk;u2(KU`s8U|{fc^>bP0l+XkK1K$x} diff --git a/core/src/mindustry/editor/MapEditorDialog.java b/core/src/mindustry/editor/MapEditorDialog.java index 9b51df514b..213e4e4a83 100644 --- a/core/src/mindustry/editor/MapEditorDialog.java +++ b/core/src/mindustry/editor/MapEditorDialog.java @@ -42,7 +42,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ private BaseDialog menu; private Table blockSelection; private Rules lastSavedRules; - private boolean saved = false; + private boolean saved = false; //currently never read private boolean shownWithMap = false; private Seq blocksOut = new Seq<>(); diff --git a/core/src/mindustry/editor/MapView.java b/core/src/mindustry/editor/MapView.java index 3dc9f8e239..4b603ddb28 100644 --- a/core/src/mindustry/editor/MapView.java +++ b/core/src/mindustry/editor/MapView.java @@ -196,7 +196,7 @@ public class MapView extends Element implements GestureListener{ if(Core.scene.getScrollFocus() != this) return; - zoom += Core.input.axis(KeyCode.scroll) / 10f * zoom; + zoom += Core.input.axis(Binding.zoom) / 10f * zoom; clampZoom(); } diff --git a/core/src/mindustry/input/InputHandler.java b/core/src/mindustry/input/InputHandler.java index f97385122c..0b5f2bef99 100644 --- a/core/src/mindustry/input/InputHandler.java +++ b/core/src/mindustry/input/InputHandler.java @@ -454,6 +454,10 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ public void update(){ player.typing = ui.chatfrag.shown(); + if(player.dead()){ + droppingItem = false; + } + if(player.isBuilder()){ player.unit().updateBuilding(isBuilding); } From d3a15fba96a306595e025d3f0cbc45c0eede4d58 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 10 Aug 2021 21:47:28 -0400 Subject: [PATCH 04/18] Filter locked items from stat values --- core/src/mindustry/input/DesktopInput.java | 7 ------- core/src/mindustry/world/meta/StatValues.java | 8 ++------ 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/core/src/mindustry/input/DesktopInput.java b/core/src/mindustry/input/DesktopInput.java index efe122e893..acb3795aff 100644 --- a/core/src/mindustry/input/DesktopInput.java +++ b/core/src/mindustry/input/DesktopInput.java @@ -646,13 +646,6 @@ public class DesktopInput extends InputHandler{ unit.moveAt(movement); }else{ unit.rotateMove(movement); - - unit.moveAt(Tmp.v2.trns(unit.rotation, movement.len())); - - //problem: actual unit rotation is controlled by velocity, but velocity is 1) unpredictable and 2) can be set to 0 - if(!movement.isZero()){ - unit.rotation = Angles.moveToward(unit.rotation, movement.angle(), unit.type.rotateSpeed * Math.max(Time.delta, 1)); - } } unit.aim(unit.type.faceTarget ? Core.input.mouseWorld() : Tmp.v1.trns(unit.rotation, Core.input.mouseWorld().dst(unit)).add(unit.x, unit.y)); diff --git a/core/src/mindustry/world/meta/StatValues.java b/core/src/mindustry/world/meta/StatValues.java index 8be545047a..3d60297e47 100644 --- a/core/src/mindustry/world/meta/StatValues.java +++ b/core/src/mindustry/world/meta/StatValues.java @@ -49,11 +49,7 @@ public class StatValues{ public static StatValue liquids(Boolf filter, float amount, boolean perSecond){ return table -> { - Seq list = new Seq<>(); - - for(Liquid item : content.liquids()){ - if(!item.isHidden() && filter.get(item)) list.add(item); - } + Seq list = content.liquids().select(i -> filter.get(i) && i.unlockedNow()); for(int i = 0; i < list.size; i++){ table.add(new LiquidDisplay(list.get(i), amount, perSecond)).padRight(5); @@ -91,7 +87,7 @@ public class StatValues{ public static StatValue items(float timePeriod, Boolf filter){ return table -> { - Seq list = content.items().select(filter); + Seq list = content.items().select(i -> filter.get(i) && i.unlockedNow()); for(int i = 0; i < list.size; i++){ Item item = list.get(i); From a0f66a5f949986611f6e7067ea48a374850453d9 Mon Sep 17 00:00:00 2001 From: Volas171 <60143910+Volas171@users.noreply.github.com> Date: Wed, 11 Aug 2021 08:18:36 -0500 Subject: [PATCH 05/18] Update Omega Community Server server ip (#5735) ip changed, now moved to there --- servers_v7.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v7.json b/servers_v7.json index 4e34aeb15b..01fef15fc5 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -13,7 +13,7 @@ }, { "name": "Omega", - "address": ["185.86.230.61:25571", "185.86.230.61:25570", "185.86.230.62:25572","mindustry.me:7175"] + "address": ["185.86.230.61:25571", "185.86.230.61:25570", "185.86.230.62:25572","yeet.mindustry.me:6567"] }, { "name": "MeowLand", From 5e5df8848dff7608e06e55edc49702cac252fc8a Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 11 Aug 2021 09:27:06 -0400 Subject: [PATCH 06/18] Ammo rebalancing / Possible crash fix --- core/src/mindustry/content/Blocks.java | 2 +- core/src/mindustry/content/Bullets.java | 23 ++++++++++++++----- core/src/mindustry/content/Fx.java | 10 ++++++++ core/src/mindustry/content/StatusEffects.java | 2 +- core/src/mindustry/content/UnitTypes.java | 2 +- core/src/mindustry/graphics/Pixelator.java | 7 ++++-- 6 files changed, 35 insertions(+), 11 deletions(-) diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index e890c43bde..e307848cc6 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -1853,7 +1853,7 @@ public class Blocks implements ContentList{ loopSound = Sounds.beam; loopSoundVolume = 2f; - shootType = new ContinuousLaserBulletType(75){{ + shootType = new ContinuousLaserBulletType(78){{ length = 200f; hitEffect = Fx.hitMeltdown; hitColor = Pal.meltdownHit; diff --git a/core/src/mindustry/content/Bullets.java b/core/src/mindustry/content/Bullets.java index ee7d7574ed..d04f78d622 100644 --- a/core/src/mindustry/content/Bullets.java +++ b/core/src/mindustry/content/Bullets.java @@ -3,6 +3,7 @@ package mindustry.content; import arc.graphics.*; import mindustry.ctype.*; import mindustry.entities.bullet.*; +import mindustry.entities.effect.*; import mindustry.graphics.*; public class Bullets implements ContentList{ @@ -110,6 +111,7 @@ public class Bullets implements ContentList{ backColor = Pal.lightOrange; makeFire = true; trailEffect = Fx.incendTrail; + ammoMultiplier = 4f; }}; artilleryExplosive = new ArtilleryBulletType(2f, 20, "shell"){{ @@ -120,7 +122,7 @@ public class Bullets implements ContentList{ collidesTiles = false; ammoMultiplier = 4f; splashDamageRadius = 45f * 0.75f; - splashDamage = 50f; + splashDamage = 55f; backColor = Pal.missileYellowBack; frontColor = Pal.missileYellow; @@ -317,20 +319,26 @@ public class Bullets implements ContentList{ standardHoming = new BasicBulletType(3f, 12, "bullet"){{ width = 7f; height = 9f; - homingPower = 0.08f; + homingPower = 0.1f; reloadMultiplier = 1.5f; ammoMultiplier = 5; lifetime = 60f; }}; - standardIncendiary = new BasicBulletType(3.2f, 11, "bullet"){{ + standardIncendiary = new BasicBulletType(3.2f, 16, "bullet"){{ width = 10f; height = 12f; frontColor = Pal.lightishOrange; backColor = Pal.lightOrange; status = StatusEffects.burning; + hitEffect = new MultiEffect(Fx.hitBulletSmall, Fx.fireHit); + + ammoMultiplier = 5; + + splashDamage = 10f; + splashDamageRadius = 22f; + makeFire = true; - inaccuracy = 3f; lifetime = 60f; }}; @@ -361,12 +369,15 @@ public class Bullets implements ContentList{ frontColor = Pal.lightishOrange; backColor = Pal.lightOrange; status = StatusEffects.burning; + hitEffect = new MultiEffect(Fx.hitBulletSmall, Fx.fireHit); shootEffect = Fx.shootBig; makeFire = true; pierceCap = 2; pierceBuilding = true; - knockback = 0.7f; + knockback = 0.6f; ammoMultiplier = 3; + splashDamage = 15f; + splashDamageRadius = 24f; }}; fireball = new FireBulletType(1f, 4); @@ -386,7 +397,7 @@ public class Bullets implements ContentList{ hittable = false; }}; - pyraFlame = new BulletType(4f, 55f){{ + pyraFlame = new BulletType(4f, 60f){{ ammoMultiplier = 6f; hitSize = 7f; lifetime = 18f; diff --git a/core/src/mindustry/content/Fx.java b/core/src/mindustry/content/Fx.java index d89e93f0d9..10c64ac923 100644 --- a/core/src/mindustry/content/Fx.java +++ b/core/src/mindustry/content/Fx.java @@ -880,6 +880,16 @@ public class Fx{ Drawf.light(Team.derelict, e.x, e.y, 20f * e.fslope(), Pal.lightFlame, 0.5f); }), + fireHit = new Effect(35f, e -> { + color(Pal.lightFlame, Pal.darkFlame, e.fin()); + + randLenVectors(e.id, 3, 2f + e.fin() * 10f, (x, y) -> { + Fill.circle(e.x + x, e.y + y, 0.2f + e.fout() * 1.6f); + }); + + color(); + }), + fireSmoke = new Effect(35f, e -> { color(Color.gray); diff --git a/core/src/mindustry/content/StatusEffects.java b/core/src/mindustry/content/StatusEffects.java index 793c5e3e42..8a43965754 100644 --- a/core/src/mindustry/content/StatusEffects.java +++ b/core/src/mindustry/content/StatusEffects.java @@ -21,7 +21,7 @@ public class StatusEffects implements ContentList{ burning = new StatusEffect("burning"){{ color = Color.valueOf("ffc455"); - damage = 0.12f; //over 8 seconds, this would be ~60 damage + damage = 0.167f; effect = Fx.burning; transitionDamage = 8f; diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index cbf721be16..bec005710a 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -1137,7 +1137,7 @@ public class UnitTypes implements ContentList{ hitSize = 58f; destructibleWreck = false; armor = 13f; - targetFlags = new BlockFlag[]{BlockFlag.reactor, BlockFlag.core, null}; + targetFlags = new BlockFlag[]{BlockFlag.reactor, BlockFlag.battery, BlockFlag.core, null}; ammoType = new ItemAmmoType(Items.thorium); BulletType fragBullet = new FlakBulletType(4f, 5){{ diff --git a/core/src/mindustry/graphics/Pixelator.java b/core/src/mindustry/graphics/Pixelator.java index 5bce6721e3..7d40dc8ff5 100644 --- a/core/src/mindustry/graphics/Pixelator.java +++ b/core/src/mindustry/graphics/Pixelator.java @@ -30,8 +30,11 @@ public class Pixelator implements Disposable{ py = Core.camera.position.y; Core.camera.position.set((int)px + ((int)(camera.width) % 2 == 0 ? 0 : 0.5f), (int)py + ((int)(camera.height) % 2 == 0 ? 0 : 0.5f)); - int w = (int)(Core.camera.width * renderer.landScale()); - int h = (int)(Core.camera.height * renderer.landScale()); + int w = (int)Core.camera.width, h = (int)Core.camera.height; + if(renderer.isCutscene()){ + w = (int)(Core.camera.width * renderer.landScale() / renderer.getScale()); + h = (int)(Core.camera.height * renderer.landScale() / renderer.getScale()); + } buffer.resize(w, h); From ec89db7cb1dd7963be02d7980b3ee0224f77f483 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 11 Aug 2021 09:54:30 -0400 Subject: [PATCH 07/18] Things --- core/assets-raw/sprites/teams/team-derelict.png | Bin 490 -> 503 bytes core/src/mindustry/content/Blocks.java | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/core/assets-raw/sprites/teams/team-derelict.png b/core/assets-raw/sprites/teams/team-derelict.png index 7ba10089d8e0ea7835363d7ac2392d520f034119..7123f12eae3f99310b220408d65c0054cfa8070e 100644 GIT binary patch delta 464 zcmaFG{GEA%Vf{u=7srr{#<#QYPCI14(eiTNf9u`mW&ZxxCH|!;%-R{k{Zq(EW35tj zbaXU>?Yvc=>O(B{GRq%#lxM&DFk|Y?4VUBGEondYX|d$Bo;Y_#u;SJm<@34cTY@(2Dox<2sCZF%SeloA z?VUx{Qk?m>%0%97s=+Mn2t>{$9}wUwrqyzu!gJU_H9DEWrZ2^3$lpDXC%#E+gU z_MDN)+!?Tcm2pjFukEEv+I6dvpHG|CvFq!r{ol5}HRET#as0vcf2NCl`j@XdzH#f; duQPwK&J+mofSaM#k;n9^h zuU)$)=D5Cp)f;(HxAg~(7oPY#L3&Sgs_C99H-a;?AEvgYec#L#mvm(I5s?q}Im}aM zR;#=^J^(;d^cgTvvmkn zI(=yQrmCkCr=I<$S)k8iWt{#Xb+bM9+Abx}u@m_AcpshgiB6)VjG`N&59yx-pU2(50qC+^_o?>x!swpD5b2* z`SMkP>%9d$?^ga;<<}*4{YZHfTa9SO=4IOJR&YO9-xN}kqNJs7{C-Q!ivMBhKWsip z{r2--|6^s}+}nSJ);rD3OTQJvwxa)F{qO5NMtkj6eM`>Her^4gZSJxV&smqlmoYFf OFnGH9xvX Date: Wed, 11 Aug 2021 10:31:36 -0400 Subject: [PATCH 08/18] Turret heat cleanup --- .../sprites/blocks/turrets/arc-heat.png | Bin 144 -> 262 bytes .../sprites/blocks/turrets/fuse-heat.png | Bin 0 -> 833 bytes .../sprites/blocks/turrets/hail-heat.png | Bin 148 -> 226 bytes .../sprites/blocks/turrets/lancer-heat.png | Bin 214 -> 363 bytes .../sprites/blocks/turrets/meltdown-heat.png | Bin 889 -> 1604 bytes .../sprites/blocks/turrets/ripple-heat.png | Bin 333 -> 795 bytes .../sprites/blocks/turrets/salvo-heat.png | Bin 278 -> 517 bytes .../sprites/blocks/turrets/scorch-heat.png | Bin 233 -> 329 bytes .../sprites/blocks/turrets/spectre-heat.png | Bin 0 -> 1328 bytes .../world/blocks/campaign/LaunchPad.java | 2 +- 10 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 core/assets-raw/sprites/blocks/turrets/fuse-heat.png create mode 100644 core/assets-raw/sprites/blocks/turrets/spectre-heat.png diff --git a/core/assets-raw/sprites/blocks/turrets/arc-heat.png b/core/assets-raw/sprites/blocks/turrets/arc-heat.png index de36f57ce41c81f1279d0881cd38592446b2487d..5b981cd6bb95c51f86f9cf970acfe156c049c1e5 100644 GIT binary patch delta 234 zcmbQh*v2$LrJk`k$lZxy-8q?;3=9khJY5_^B3j>0I?a2?K)}VggX=}3+=}KTji#g* zisn@w{F#Y6elVoX{d+@+y=;kwpUu3=$kbUuEBPkIc&@XRe4+WDgUQdHIit3ez6q!2ZENo<7H&{An}ls qv7%|Oz-*<;yN`3Urh5JDkK6AO*nh|Cmnj1S1B0ilpUXO@geCxd{bFqZ delta 115 zcmZo;n!q?gB`4g|#WAGfR&s&_>*5Bc5As}WXOc<`jATB{XIRkA{OZHQK=vLE_8Sim zFXofD$Hx$*;Ljsx(4F~g0%Iw|&S}AC1s$A!Of=kjwcn~i#r=ZUUkwS?#R)0Q3}XMZ W_xJDd%wS+(VDNPHb6Mw<&;$VRJ1da@ diff --git a/core/assets-raw/sprites/blocks/turrets/fuse-heat.png b/core/assets-raw/sprites/blocks/turrets/fuse-heat.png new file mode 100644 index 0000000000000000000000000000000000000000..a8b34b43815a02d6d713b80704d5e95e45b0d1f2 GIT binary patch literal 833 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofy`glX=O&!1UYG z#WAE}&f8i3+0uq0N7B8EUz;vnvV30G`@jF@FPJ`uXWtIp63)_Q&aH~6{I{FG?pmeu z_WuIGx$-mC%n$cJ-Sb67m$5~_>CgI*o$?ByKLBnU8!p!ak?L_~&i26Q0a-895g|n^ADJ?IMd7bIi{Sw){E%!kU4R3k?%m41&`f z-|zKN3y_%LEFdPlNqU07Bh^zELjBl;H%S{fXxy4%By#Wbr0i2kGkAY=rbY)mKK67` z%hiTm6XtX$nmphzHOUnl`XAxPSlqn#)r6_{FEoW^wYc{VAI- zH9auvQGN7A{?nx;wO8WyMpbnHA8vaALV85J7y_tf4ar)Ovf67GYtVX``w~*{8nx-W7iL3->7VK*ns(+@JFfX zg1ebNoI852r)F^_(}y>=qV!mMnk{E_o#)A z+YcN&;{SCrD;u+uW74BH7i5?G^2xX$`=o5*{lj&eqz@)I^aRX^juAU!tjBbG+cNd< zw{PC9ww^GVsm-;5hdqYn?QJu=#nn#}a$h8xCGbCJ{%$K`@@<`l&6%G&H4=3l+c=-U zzaPxLBA_PQS=-LxL%n0}?K-9nADyDVU+=%^v*UA8VsF3fj+&3jmD@u@YvulLd3`vj zX>_+se@htzFkO>ads1fSX?}+dY(I8 z|6Rwi4em}gY!7+0m>aJ8XgJk0EMRHn;V?<_p1G&px2BzAz`L%XnBF?KkBmvo z4L8+9l2EVR?-!3=eL#2ptu7;!tc6Af7mQR(^v#`~F||eJ3+8Ffe$!`njxgN@xNA D-U4g9 literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/turrets/hail-heat.png b/core/assets-raw/sprites/blocks/turrets/hail-heat.png index daad1ac9364adbbda4111797aa2512c2da02ad52..ef3805e18e123a952c383abfedf98d90e8034751 100644 GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}jKx9jP7LeL$-HD>V3_0S z;usRq`gW2v-ys75mvjMfPv7~!T~1kQSg;E%_nO<6?K4Y3Qrjh4y``yg61Vqm>+|vl z{zzOi^V+qaSLyd*mQNpag^n`KKa{QN*ZMGaQ*B!I$~61N)(>;EIxh&TFwcH)N07n8 z&Wt;xMci`^b2A&m^y_U;O4mkQ(tRDP`iq_Ij5?Q*+o8rAyi0_3x3y2a;+3^OG{492 dn8fG%K1qR&O-W+yl?)6F44$rjF6*2UngENCQZE1i literal 148 zcmeAS@N?(olHy`uVBq!ia0y~yV9)?z4mJh`hMs>rav2yHqCH(4Ln>~)J$IY4!9c+E zU`VQc=25FRrfx1AN)jI@Di|017yH)2U_U8n*0fUTZSxOU7sk3gYnWj^PiGrf_twVS zEOJL;x&Eja*-M_Xt<~R9neg+=+G+*{h6Gb)gP^2+U$oyoW?*1o@O1TaS?83{1OSmp BG(!LY diff --git a/core/assets-raw/sprites/blocks/turrets/lancer-heat.png b/core/assets-raw/sprites/blocks/turrets/lancer-heat.png index 1327410b66f763cb2c0366f9b344567f8528d5dc..d1494ebefbe9e4ca5c7d8a2c486775509cbde565 100644 GIT binary patch delta 336 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 delta 307 zcmbQuc9v;^ay_Gnr;B4q#jUru4+=IJh`0uFdAojdlGi*Wq;nweLa(vVR2C<<&gbX; z%-vLxe$cJmancfI6W`!H_f3m02IaQ(FJk71so7lWPM;X|bi3mFs`GP*ZN9@xaN%i#t~LLkFkg*9v&p6nAi z$}laPc_QnEkm!~jC1Okr4h*~4B&MHpVqoB4U|?iWU|?WjXkaK|eZVilfB=8w8}9%A puho>w@JC0zMODRf5-Pf6zMC=SOQhaTMcp2dE>BlKmvv4FO#uI;Y%2f& diff --git a/core/assets-raw/sprites/blocks/turrets/salvo-heat.png b/core/assets-raw/sprites/blocks/turrets/salvo-heat.png index 5022fafc1dd27afee3c6710f42867d5776ed8bec..75573a5f930184aa31a514d183c4eb6d7bddbd34 100644 GIT binary patch delta 491 zcmbQn)XFkJrJk`k$lZxy-8q?;3=E9>JzX3_D(1YMx!3QofrM-SPe}nGA!hDi_cXP8 zE$L5uXH2+ZRhINJKr_gZL)2J>@w&yz=vUcG>fBdNxz+cmICps=S6ktQ9Z}-n?$xg; zJ+kw%)ZZ0C4m$UPm0Og*vhMx9e)pBBk6daU7s&s8yrM?*%E=Y=f)30v4D$nju39}= zDW2(o_1YI&zf5B1ioEo_Q2n1{4s$xQ@4bel#qa#Cs^8@KaL@ii-=|4oCePNc&fc|6 zNX1w|VAqn^|H&o?m=0K$$8U;P;7~A}m8@8E`uh|<$BiuW7Qg4dRQ@~uQ)lt_zDMaF zq-HROJ4Wiv(wbfVT+H>S%!GPjryF5SzbqBpebo48F~n)jo!y$n)}oZGEOSkCI{RCp z8zN0Hawg^nB@JHoId7CXdGp`y&3##HZQWH8NOJ8qejIQwP7YTLjR z{ReyZ`-CNHfKWlIorQW<2Ac-+t{2M<|{lBsQUS2#qp(5OQyl7sXPON9NUMP(+wFI7#hS51opBP+zMy0NSn{@AhDqB z#XAiK73M?}PgVt8rzz5=4BU%uhO(|u+-1$haM3}+H-xdHTi|K28}EUpjIvP1td4hm zOb!MDZo(l9hm>4)1~P9@m=zn^Ahl@sVulC2Ef*`6U*Jz&?NGZx^prw85kIuJzX3_B3j>0IW2g|fX5}Ahc$qKwctc!*ouyY zN>L9TI5ivi&UhMoy6ykkB784c==3e|NF#$U?Po@18MiCjsN>;K)G&GJlc1B24pi5pMJI_p2Yw=su5BWb-9Pl|X0 zyOZ>4E%y&z4oaUh^c$*JO)gID@joi($QEQ4wltZ8VeQu0o0ljo+t^`K&gh}=<_K#s zS3~29Scv~kcEG7vq-VPc%EaFhLii$njBuAK$z8PqoxS>4kP=$gZRTGKyvzuw%$aBb#z1_lNO MPgg&ebxsLQ02Vh@hyVZp diff --git a/core/assets-raw/sprites/blocks/turrets/spectre-heat.png b/core/assets-raw/sprites/blocks/turrets/spectre-heat.png new file mode 100644 index 0000000000000000000000000000000000000000..2054d874486e88364d25d2cde04a7976667fdd1f GIT binary patch literal 1328 zcmeAS@N?(olHy`uVBq!ia0y~yU}ykg4mJh`hQoG=rx_R+7>k44ofy`glX=O&!1Bt| z#WAE}&f8mO^HfYl+8&-45O8v0;xv1+X`ZcjUSqbyqfHZbu;nFA+nhL+b+w=lQ_uw# zUv1wh@-tn-m)^ZvHuY_h?_9ro?pdYFZ>8?8>8rnDEX44jwJ5t>Vfy!f_YW@ZS3WAY z`#bydJJ)+}|98I>>2`aP%JVzZb#KR?a?dVTX#f6?-;@8~(g+5=b=B|xXWgiaxSn!* zlH4x4+39wSd%o}Y-Zix(zVQ7Ul@)6q$6d<3UVizEdc%_34?h(nv-C}!qfe}~e)HHY z@>EB#2ScX$gz~%3SE^K8sas!nf5F>*ea5`ses=83FSlxZ;Jth@!=x{MzjGBtJC-{y zC~M3XY{?A|m%p=e+xxArUwazNWw`hIKHKzv(@HMa*73w$O8k(2!i@SazyEdm zJL~8ZE&-PM$r_*HcHb;p|96`K&%d%K|AeGv^HjIrn(zMWTmBTg{G25hTjHkf6jd+^ zkoJss>H20|l(F(~c>Me4%DMcqDhrNIJ#dA~z{q=9+9$J$)}+qhtO)m2YZqqBU%Qqi zO-La*A;{A}tRpPi!E4pqi)Fg1jWbzJT;YFH_Q5V}Tk3AZ!~3@6lovib#~}HO@n7(z z@Gkw&-YklxVmDc8EiIRYH%w%{T>4>O=bmXo+1hVT3ud?PQ{1fWU{G+e(Nt?D%d~HQ zC!7>L@N3P=#IG}TR1a)jlD(Sws?+zJ>qc8v&AiDpr`SH^Ue(&Kdst zKhf!Bty21tSi5uc{}t!OCLai4a$#GM_AOr3PJRmK?N@f{r_-*OKYJj#MzwLKu|wL2 z{byIK+ONMnr*l%3`tQ7_J_$*zGdTX;KJsIO^W~Uin&g z(t;)TZj@g3On5f^fS=ZneAT(?r>0)fl+`=BG1YeayOl*N|HZHR`z_>b5YrcCso7uu ze*Ju;y!duzXn92Zt6MvHR1dz2c1YLyaq3T9M48UaqStb()wjR9@!hxn{)*H@))TyS z>s2IzpX%@W9xj>ceOvbOdW+TSjjb#bma%_VDta6Gc6!5%I|tvMK6Wac zwZ6cA)xAsqW~QWaORSRJu=saYll;BgYgu%eDi(I-W@n0pGi=_xl(G1HnkJ*y^s8%b z%D#DewCLU1h{Ue>#hzh83o0CbHO6akdNsxGJUhdKiJLP(_Rp33hN_+c#-II7IoHTB z^`Egk^YvK{yX7G}y}M!BVqp!QmIw1ED(qbIHJ$G>XMoWJ`J@YLzoxGXt>>H*rIyWJ zu<~j7%71HSYOGd0aH;u{73Z{f=c7C~{Myf|vocg@&Y_^V*OBTCCia~3ia#tBpTH1Q tD`fNifw#U2)7#XF&nT1W#8#mvv4FO#n}|Zy^8x literal 0 HcmV?d00001 diff --git a/core/src/mindustry/world/blocks/campaign/LaunchPad.java b/core/src/mindustry/world/blocks/campaign/LaunchPad.java index 8f10c7b5b9..12bcb762b3 100644 --- a/core/src/mindustry/world/blocks/campaign/LaunchPad.java +++ b/core/src/mindustry/world/blocks/campaign/LaunchPad.java @@ -141,7 +141,7 @@ public class LaunchPad extends Block{ public void display(Table table){ super.display(table); - if(!state.isCampaign() || net.client()) return; + if(!state.isCampaign() || net.client() || team != player.team()) return; table.row(); table.label(() -> { From c2720bbc3324c3fe9f369820be141e149b82e848 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 11 Aug 2021 11:36:20 -0400 Subject: [PATCH 09/18] Increased PPT range --- core/src/mindustry/content/Blocks.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index f4bf4b5207..d5887013a0 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -2035,7 +2035,7 @@ public class Blocks implements ContentList{ size = 5; reloadTime = 140f; chargeTime = 100f; - range = 600f; + range = 1000f; maxPayloadSize = 3.5f; consumes.power(6f); }}; From 4fc18d35ce81dfd672ef475c47302296bff0c335 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 11 Aug 2021 16:41:59 -0400 Subject: [PATCH 10/18] #5742 --- core/src/mindustry/audio/SoundControl.java | 7 ++++++- core/src/mindustry/content/Blocks.java | 2 +- gradle.properties | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/core/src/mindustry/audio/SoundControl.java b/core/src/mindustry/audio/SoundControl.java index 5b29b62a85..dde449ecae 100644 --- a/core/src/mindustry/audio/SoundControl.java +++ b/core/src/mindustry/audio/SoundControl.java @@ -130,7 +130,12 @@ public class SoundControl{ Core.audio.soundBus.play(); setupFilters(); }else{ - Core.audio.soundBus.replay(); + //stopping a single audio bus stops everything else, yay! + Core.audio.soundBus.stop(); + //play music bus again, as it was stopped above + Core.audio.musicBus.play(); + + Core.audio.soundBus.play(); } } diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index d5887013a0..b15d24ae7a 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -2033,7 +2033,7 @@ public class Blocks implements ContentList{ payloadPropulsionTower = new PayloadMassDriver("payload-propulsion-tower"){{ requirements(Category.units, with(Items.thorium, 300, Items.silicon, 200, Items.plastanium, 200, Items.phaseFabric, 50)); size = 5; - reloadTime = 140f; + reloadTime = 130f; chargeTime = 100f; range = 1000f; maxPayloadSize = 3.5f; diff --git a/gradle.properties b/gradle.properties index 2917c3abef..6ce5f26d99 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,4 +11,4 @@ android.useAndroidX=true #used for slow jitpack builds; TODO see if this actually works http.socketTimeout=80000 http.connectionTimeout=80000 -archash=40c21b302ccc1e74f4c2a37f937c88acaec99254 +archash=de1df819aae54e4023718a07dabf794da9f5a4de From fa9257182bd231f289f5a5d982a826b63045914a Mon Sep 17 00:00:00 2001 From: buthed010203 Date: Wed, 11 Aug 2021 17:23:34 -0400 Subject: [PATCH 11/18] Dont configure if not needed (#5745) * Dont configure if not needed * fix --- core/src/mindustry/world/blocks/logic/MessageBlock.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/core/src/mindustry/world/blocks/logic/MessageBlock.java b/core/src/mindustry/world/blocks/logic/MessageBlock.java index d279e079d9..d6bffd83f2 100644 --- a/core/src/mindustry/world/blocks/logic/MessageBlock.java +++ b/core/src/mindustry/world/blocks/logic/MessageBlock.java @@ -92,7 +92,9 @@ public class MessageBlock extends Block{ text = message.toString(); multiline = true; maxLength = maxTextLength; - accepted = str -> configure(str); + accepted = str -> { + if(!str.equals(text)) configure(str); + }; }}); }else{ BaseDialog dialog = new BaseDialog("@editmessage"); @@ -112,7 +114,7 @@ public class MessageBlock extends Block{ }); a.setMaxLength(maxTextLength); dialog.buttons.button("@ok", () -> { - configure(a.getText()); + if(!a.getText().equals(message.toString())) configure(a.getText()); dialog.hide(); }).size(130f, 60f); dialog.update(() -> { From 0cac9720612e715632a96ae6cde8404b414c016e Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 11 Aug 2021 21:18:48 -0400 Subject: [PATCH 12/18] Support for team-specific multipliers (no UI) --- .../entities/abilities/UnitSpawnAbility.java | 3 +- .../mindustry/entities/comp/BuilderComp.java | 6 ++-- .../mindustry/entities/comp/BuildingComp.java | 6 ++-- .../mindustry/entities/comp/BulletComp.java | 4 +-- core/src/mindustry/game/Rules.java | 33 +++++++++++++++++++ .../world/blocks/units/Reconstructor.java | 4 +-- .../world/blocks/units/UnitFactory.java | 4 +-- 7 files changed, 48 insertions(+), 12 deletions(-) diff --git a/core/src/mindustry/entities/abilities/UnitSpawnAbility.java b/core/src/mindustry/entities/abilities/UnitSpawnAbility.java index 92d26e59cc..c3f826e5a5 100644 --- a/core/src/mindustry/entities/abilities/UnitSpawnAbility.java +++ b/core/src/mindustry/entities/abilities/UnitSpawnAbility.java @@ -10,7 +10,6 @@ import mindustry.entities.*; import mindustry.gen.*; import mindustry.graphics.*; import mindustry.type.*; -import mindustry.ui.*; import static mindustry.Vars.*; @@ -33,7 +32,7 @@ public class UnitSpawnAbility extends Ability{ @Override public void update(Unit unit){ - timer += Time.delta * state.rules.unitBuildSpeedMultiplier; + timer += Time.delta * state.rules.unitBuildSpeed(unit.team); if(timer >= spawnTime && Units.canCreate(unit.team, this.unit)){ float x = unit.x + Angles.trnsx(unit.rotation, spawnY, spawnX), y = unit.y + Angles.trnsy(unit.rotation, spawnY, spawnX); diff --git a/core/src/mindustry/entities/comp/BuilderComp.java b/core/src/mindustry/entities/comp/BuilderComp.java index 288150e938..81b59a632f 100644 --- a/core/src/mindustry/entities/comp/BuilderComp.java +++ b/core/src/mindustry/entities/comp/BuilderComp.java @@ -124,11 +124,13 @@ abstract class BuilderComp implements Posc, Statusc, Teamc, Rotc{ return; } + float bs = 1f / entity.buildCost * Time.delta * type.buildSpeed * buildSpeedMultiplier * state.rules.buildSpeed(team); + //otherwise, update it. if(current.breaking){ - entity.deconstruct(self(), core, 1f / entity.buildCost * Time.delta * type.buildSpeed * buildSpeedMultiplier * state.rules.buildSpeedMultiplier); + entity.deconstruct(self(), core, bs); }else{ - entity.construct(self(), core, 1f / entity.buildCost * Time.delta * type.buildSpeed * buildSpeedMultiplier * state.rules.buildSpeedMultiplier, current.config); + entity.construct(self(), core, bs, current.config); } current.stuck = Mathf.equal(current.progress, entity.progress); diff --git a/core/src/mindustry/entities/comp/BuildingComp.java b/core/src/mindustry/entities/comp/BuildingComp.java index 5dc11a407e..d4ce1bdf9c 100644 --- a/core/src/mindustry/entities/comp/BuildingComp.java +++ b/core/src/mindustry/entities/comp/BuildingComp.java @@ -1378,10 +1378,12 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, public void damage(float damage){ if(dead()) return; - if(Mathf.zero(state.rules.blockHealthMultiplier)){ + float dm = state.rules.blockHealth(team); + + if(Mathf.zero(dm)){ damage = health + 1; }else{ - damage /= state.rules.blockHealthMultiplier; + damage /= dm; } Call.tileDamage(self(), health - handleDamage(damage)); diff --git a/core/src/mindustry/entities/comp/BulletComp.java b/core/src/mindustry/entities/comp/BulletComp.java index 86b779b82d..3d4f209734 100644 --- a/core/src/mindustry/entities/comp/BulletComp.java +++ b/core/src/mindustry/entities/comp/BulletComp.java @@ -68,8 +68,8 @@ abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Draw @Override public float damageMultiplier(){ - if(owner instanceof Unit u) return u.damageMultiplier() * state.rules.unitDamageMultiplier; - if(owner instanceof Building) return state.rules.blockDamageMultiplier; + if(owner instanceof Unit u) return u.damageMultiplier() * state.rules.unitDamage(team); + if(owner instanceof Building) return state.rules.blockDamage(team); return 1f; } diff --git a/core/src/mindustry/game/Rules.java b/core/src/mindustry/game/Rules.java index ad70638368..3354f223f4 100644 --- a/core/src/mindustry/game/Rules.java +++ b/core/src/mindustry/game/Rules.java @@ -140,6 +140,26 @@ public class Rules{ } } + public float unitBuildSpeed(Team team){ + return unitBuildSpeedMultiplier * teams.get(team).unitBuildSpeedMultiplier; + } + + public float unitDamage(Team team){ + return unitDamageMultiplier * teams.get(team).unitDamageMultiplier; + } + + public float blockHealth(Team team){ + return blockHealthMultiplier * teams.get(team).blockHealthMultiplier; + } + + public float blockDamage(Team team){ + return blockDamageMultiplier * teams.get(team).blockDamageMultiplier; + } + + public float buildSpeed(Team team){ + return buildSpeedMultiplier * teams.get(team).buildSpeedMultiplier; + } + /** A team-specific ruleset. */ public static class TeamRule{ /** Whether to use building AI. */ @@ -154,6 +174,19 @@ public class Rules{ public boolean infiniteResources; /** If true, this team has infinite unit ammo. */ public boolean infiniteAmmo; + + /** How fast unit factories build units. */ + public float unitBuildSpeedMultiplier = 1f; + /** How much damage any other units deal. */ + public float unitDamageMultiplier = 1f; + /** How much health blocks start with. */ + public float blockHealthMultiplier = 1f; + /** How much damage blocks (turrets) deal. */ + public float blockDamageMultiplier = 1f; + /** Multiplier for building speed. */ + public float buildSpeedMultiplier = 1f; + + //build cost disabled due to technical complexity } /** A simple map for storing TeamRules in an efficient way without hashing. */ diff --git a/core/src/mindustry/world/blocks/units/Reconstructor.java b/core/src/mindustry/world/blocks/units/Reconstructor.java index 9521a6c87a..b8ee614f50 100644 --- a/core/src/mindustry/world/blocks/units/Reconstructor.java +++ b/core/src/mindustry/world/blocks/units/Reconstructor.java @@ -197,7 +197,7 @@ public class Reconstructor extends UnitBlock{ if(moveInPayload()){ if(consValid()){ valid = true; - progress += edelta() * state.rules.unitBuildSpeedMultiplier; + progress += edelta() * state.rules.unitBuildSpeed(team); } //upgrade the unit @@ -214,7 +214,7 @@ public class Reconstructor extends UnitBlock{ } speedScl = Mathf.lerpDelta(speedScl, Mathf.num(valid), 0.05f); - time += edelta() * speedScl * state.rules.unitBuildSpeedMultiplier; + time += edelta() * speedScl * state.rules.unitBuildSpeed(team); } @Override diff --git a/core/src/mindustry/world/blocks/units/UnitFactory.java b/core/src/mindustry/world/blocks/units/UnitFactory.java index bbef9cb456..c614ad9e4c 100644 --- a/core/src/mindustry/world/blocks/units/UnitFactory.java +++ b/core/src/mindustry/world/blocks/units/UnitFactory.java @@ -213,8 +213,8 @@ public class UnitFactory extends UnitBlock{ } if(consValid() && currentPlan != -1){ - time += edelta() * speedScl * Vars.state.rules.unitBuildSpeedMultiplier; - progress += edelta() * Vars.state.rules.unitBuildSpeedMultiplier; + time += edelta() * speedScl * Vars.state.rules.unitBuildSpeed(team); + progress += edelta() * Vars.state.rules.unitBuildSpeed(team); speedScl = Mathf.lerpDelta(speedScl, 1f, 0.05f); }else{ speedScl = Mathf.lerpDelta(speedScl, 0f, 0.05f); From 1cf2bd48923a778b18532d0992e6e50ce2b18dd0 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 11 Aug 2021 23:36:06 -0400 Subject: [PATCH 13/18] Team-specific rules / Player+Enemy team rules --- core/assets/bundles/bundle.properties | 3 ++ core/src/mindustry/type/Sector.java | 2 +- .../ui/dialogs/CustomRulesDialog.java | 51 +++++++++++++++++-- 3 files changed, 52 insertions(+), 4 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 341e7f785d..416c3d0044 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -1020,12 +1020,15 @@ rules.deconstructrefundmultiplier = Deconstruct Refund Multiplier rules.waitForWaveToEnd = Waves Wait for Enemies rules.dropzoneradius = Drop Zone Radius:[lightgray] (tiles) rules.unitammo = Units Require Ammo +rules.enemyteam = Enemy Team +rules.playerteam = Player Team rules.title.waves = Waves rules.title.resourcesbuilding = Resources & Building rules.title.enemy = Enemies rules.title.unit = Units rules.title.experimental = Experimental rules.title.environment = Environment +rules.title.teams = Teams rules.lighting = Lighting rules.enemyLights = Enemy Lights rules.fire = Fire diff --git a/core/src/mindustry/type/Sector.java b/core/src/mindustry/type/Sector.java index da5ca2229a..39f31e75ae 100644 --- a/core/src/mindustry/type/Sector.java +++ b/core/src/mindustry/type/Sector.java @@ -130,7 +130,7 @@ public class Sector{ @Nullable public String iconChar(){ if(info.contentIcon != null) return info.contentIcon.emoji(); - if(info.icon != null) return Iconc.codes.get(info.icon) + ""; + if(info.icon != null) return (char)Iconc.codes.get(info.icon) + ""; return null; } diff --git a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java index 0bee65257d..bd177da7ef 100644 --- a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java +++ b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java @@ -13,6 +13,7 @@ import arc.util.*; import mindustry.content.*; import mindustry.ctype.*; import mindustry.game.*; +import mindustry.game.Rules.*; import mindustry.gen.*; import mindustry.graphics.*; import mindustry.type.*; @@ -200,6 +201,50 @@ public class CustomRulesDialog extends BaseDialog{ }, () -> ui.picker.show(rules.ambientLight, rules.ambientLight::set)).left().width(250f).row(); main.button("@rules.weather", this::weatherDialog).width(250f).left().row(); + + title("@rules.title.teams"); + + team("@rules.playerteam", t -> rules.defaultTeam = t, () -> rules.defaultTeam); + team("@rules.enemyteam", t -> rules.waveTeam = t, () -> rules.waveTeam); + + for(Team team : Team.baseTeams){ + boolean[] shown = {false}; + Table wasMain = main; + + + main.button("[#" + team.color + "]" + team.localized() + (team.emoji.isEmpty() ? "" : "[] " + team.emoji), Icon.downOpen, Styles.togglet, () -> { + shown[0] = !shown[0]; + }).marginLeft(14f).width(260f).height(55f).checked(a -> shown[0]).row(); + + main.collapser(t -> { + t.left().defaults().fillX().left().pad(5); + main = t; + TeamRule teams = rules.teams.get(team); + + number("@rules.blockhealthmultiplier", f -> teams.blockHealthMultiplier = f, () -> teams.blockHealthMultiplier); + number("@rules.blockdamagemultiplier", f -> teams.blockDamageMultiplier = f, () -> teams.blockDamageMultiplier); + + number("@rules.unitdamagemultiplier", f -> teams.unitDamageMultiplier = f, () -> teams.unitDamageMultiplier); + number("@rules.unitbuildspeedmultiplier", f -> teams.unitBuildSpeedMultiplier = f, () -> teams.unitBuildSpeedMultiplier, 0.001f, 50f); + + number("@rules.buildspeedmultiplier", f -> teams.buildSpeedMultiplier = f, () -> teams.buildSpeedMultiplier, 0.001f, 50f); + + main = wasMain; + }, () -> shown[0]).growX().row(); + } + } + + void team(String text, Cons cons, Prov prov){ + main.table(t -> { + t.left(); + t.add(text).left().padRight(5); + + for(Team team : Team.baseTeams){ + t.button(Tex.whiteui, Styles.clearTogglei, 38f, () -> { + cons.get(team); + }).pad(1f).checked(b -> prov.get() == team).size(60f).tooltip(team.localized()).with(i -> i.getStyle().imageUpColor = team.color); + } + }).padTop(0).row(); } void number(String text, Floatc cons, Floatp prov){ @@ -218,15 +263,15 @@ public class CustomRulesDialog extends BaseDialog{ number(text, false, cons, prov, condition, 0, Float.MAX_VALUE); } + //TODO integer param unused void number(String text, boolean integer, Intc cons, Intp prov, int min, int max){ main.table(t -> { t.left(); t.add(text).left().padRight(5); - t.field((integer ? prov.get() : prov.get()) + "", s -> cons.get(Strings.parseInt(s))) + t.field((prov.get()) + "", s -> cons.get(Strings.parseInt(s))) .padRight(100f) .valid(f -> Strings.parseInt(f) >= min && Strings.parseInt(f) <= max).width(120f).left().addInputDialog(); - }).padTop(0); - main.row(); + }).padTop(0).row(); } void number(String text, boolean integer, Floatc cons, Floatp prov, Boolp condition, float min, float max){ From a5fe8970c6b36fca6f7e80ef551d82f4531d066d Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 12 Aug 2021 09:24:20 -0400 Subject: [PATCH 14/18] Per-team AI settings / Errors for missing player cores --- core/assets/bundles/bundle.properties | 5 +++-- core/src/mindustry/core/World.java | 6 +++--- core/src/mindustry/ui/dialogs/CustomRulesDialog.java | 9 ++++++--- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 416c3d0044..1e359ee633 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -345,9 +345,9 @@ custom = Custom builtin = Built-In map.delete.confirm = Are you sure you want to delete this map? This action cannot be undone! map.random = [accent]Random Map -map.nospawn = This map does not have any cores for the player to spawn in! Add a[accent] orange[] core to this map in the editor. +map.nospawn = This map does not have any cores for the player to spawn in! Add a [#{0}]{1}[] core to this map in the editor. map.nospawn.pvp = This map does not have any enemy cores for player to spawn into! Add[scarlet] non-orange[] cores to this map in the editor. -map.nospawn.attack = This map does not have any enemy cores for player to attack! Add[scarlet] red[] cores to this map in the editor. +map.nospawn.attack = This map does not have any enemy cores for player to attack! Add [#{0}]{1}[] cores to this map in the editor. map.invalid = Error loading map: corrupted or invalid map file. workshop.update = Update Item workshop.error = Error fetching workshop details: {0} @@ -1001,6 +1001,7 @@ rules.wavetimer = Wave Timer rules.waves = Waves rules.attack = Attack Mode rules.buildai = AI Building +rules.aitier = AI Tier rules.cleanupdeadteams = Clean Up Defeated Team Buildings (PvP) rules.corecapture = Capture Core On Destruction rules.polygoncoreprotection = Polygonal Core Protection diff --git a/core/src/mindustry/core/World.java b/core/src/mindustry/core/World.java index 453ccb1c71..e4c580eff2 100644 --- a/core/src/mindustry/core/World.java +++ b/core/src/mindustry/core/World.java @@ -326,8 +326,8 @@ public class World{ invalidMap = false; if(!headless){ - if(state.teams.playerCores().size == 0 && !checkRules.pvp){ - ui.showErrorMessage("@map.nospawn"); + if(state.teams.cores(checkRules.defaultTeam).size == 0 && !checkRules.pvp){ + ui.showErrorMessage(Core.bundle.format("map.nospawn", checkRules.defaultTeam.color, checkRules.defaultTeam.localized())); invalidMap = true; }else if(checkRules.pvp){ //pvp maps need two cores to be valid if(state.teams.getActive().count(TeamData::hasCore) < 2){ @@ -337,7 +337,7 @@ public class World{ }else if(checkRules.attackMode){ //attack maps need two cores to be valid invalidMap = state.rules.waveTeam.data().noCores(); if(invalidMap){ - ui.showErrorMessage("@map.nospawn.attack"); + ui.showErrorMessage(Core.bundle.format("map.nospawn.attack", checkRules.waveTeam.color, checkRules.waveTeam.localized())); } } }else{ diff --git a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java index bd177da7ef..3a7086e727 100644 --- a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java +++ b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java @@ -211,7 +211,6 @@ public class CustomRulesDialog extends BaseDialog{ boolean[] shown = {false}; Table wasMain = main; - main.button("[#" + team.color + "]" + team.localized() + (team.emoji.isEmpty() ? "" : "[] " + team.emoji), Icon.downOpen, Styles.togglet, () -> { shown[0] = !shown[0]; }).marginLeft(14f).width(260f).height(55f).checked(a -> shown[0]).row(); @@ -224,11 +223,15 @@ public class CustomRulesDialog extends BaseDialog{ number("@rules.blockhealthmultiplier", f -> teams.blockHealthMultiplier = f, () -> teams.blockHealthMultiplier); number("@rules.blockdamagemultiplier", f -> teams.blockDamageMultiplier = f, () -> teams.blockDamageMultiplier); + check("@rules.buildai", b -> teams.ai = b, () -> teams.ai, () -> team != rules.defaultTeam); + number("@rules.aitier", false, f -> teams.aiTier = f, () -> teams.aiTier, () -> teams.ai, 0, 1); + + check("@rules.infiniteresources", b -> teams.infiniteResources = b, () -> teams.infiniteResources); + number("@rules.buildspeedmultiplier", f -> teams.buildSpeedMultiplier = f, () -> teams.buildSpeedMultiplier, 0.001f, 50f); + number("@rules.unitdamagemultiplier", f -> teams.unitDamageMultiplier = f, () -> teams.unitDamageMultiplier); number("@rules.unitbuildspeedmultiplier", f -> teams.unitBuildSpeedMultiplier = f, () -> teams.unitBuildSpeedMultiplier, 0.001f, 50f); - number("@rules.buildspeedmultiplier", f -> teams.buildSpeedMultiplier = f, () -> teams.buildSpeedMultiplier, 0.001f, 50f); - main = wasMain; }, () -> shown[0]).growX().row(); } From 4dec658a77d9bcd84a81b44a39e98dc0f99acc8e Mon Sep 17 00:00:00 2001 From: CxZxRain <88787430+CxZxRain@users.noreply.github.com> Date: Thu, 12 Aug 2021 14:32:15 +0100 Subject: [PATCH 15/18] Update servers_v6.json (#5752) --- servers_v6.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/servers_v6.json b/servers_v6.json index 1c9ccc0590..dc06079f12 100644 --- a/servers_v6.json +++ b/servers_v6.json @@ -98,5 +98,9 @@ { "name": "Xpdustry", "address": ["xpdustry.fr"] + }, + { + "name": "CxZx", + "address": ["usfr2.forcehost.net:25578"] } ] From def1094357381e9c75dfe4dac8bf7b8e865713bb Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 12 Aug 2021 10:07:30 -0400 Subject: [PATCH 16/18] Added world data progress bar --- core/src/mindustry/core/NetClient.java | 5 +++++ core/src/mindustry/net/Net.java | 4 ++++ core/src/mindustry/ui/fragments/LoadingFragment.java | 8 ++++++++ 3 files changed, 17 insertions(+) diff --git a/core/src/mindustry/core/NetClient.java b/core/src/mindustry/core/NetClient.java index 6d01275325..a73db1295d 100644 --- a/core/src/mindustry/core/NetClient.java +++ b/core/src/mindustry/core/NetClient.java @@ -507,6 +507,11 @@ public class NetClient implements ApplicationListener{ } } + /** Resets the world data timeout counter. */ + public void resetTimeout(){ + timeoutTime = 0f; + } + public boolean isConnecting(){ return connecting; } diff --git a/core/src/mindustry/net/Net.java b/core/src/mindustry/net/Net.java index 0dc711ea3d..9081b194f4 100644 --- a/core/src/mindustry/net/Net.java +++ b/core/src/mindustry/net/Net.java @@ -272,6 +272,10 @@ public class Net{ throw new RuntimeException("Received stream chunk without a StreamBegin beforehand!"); } builder.add(c.data); + + ui.loadfrag.setProgress(builder.progress()); + netClient.resetTimeout(); + if(builder.isDone()){ streams.remove(builder.id); handleClientReceived(builder.build()); diff --git a/core/src/mindustry/ui/fragments/LoadingFragment.java b/core/src/mindustry/ui/fragments/LoadingFragment.java index a5ab8eeff7..fcd18dfcbe 100644 --- a/core/src/mindustry/ui/fragments/LoadingFragment.java +++ b/core/src/mindustry/ui/fragments/LoadingFragment.java @@ -17,6 +17,7 @@ public class LoadingFragment extends Fragment{ private TextButton button; private Bar bar; private Label nameLabel; + private float progValue; @Override public void build(Group parent){ @@ -55,6 +56,13 @@ public class LoadingFragment extends Fragment{ bar.set(() -> ((int)(progress.get() * 100) + "%"), progress, Pal.accent); } + public void setProgress(float progress){ + progValue = progress; + if(!bar.visible){ + setProgress(() -> progValue); + } + } + public void setButton(Runnable listener){ button.visible = true; button.getListeners().remove(button.getListeners().size - 1); From 1b0de739f935787daf41bb814d35979fbec650e8 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 12 Aug 2021 22:16:13 -0400 Subject: [PATCH 17/18] Sector info list / Minor hint fixes --- .../assets-raw/sprites/ui/sideline-over.9.png | Bin 0 -> 241 bytes core/assets-raw/sprites/ui/sideline.9.png | Bin 0 -> 256 bytes .../sprites/ui/underline-over.9.png | Bin 0 -> 206 bytes core/assets/bundles/bundle.properties | 2 + core/src/mindustry/type/UnitType.java | 2 +- core/src/mindustry/ui/Styles.java | 23 +- .../mindustry/ui/dialogs/PlanetDialog.java | 196 ++++++++++++++---- .../ui/dialogs/SchematicsDialog.java | 2 +- .../mindustry/ui/fragments/HintsFragment.java | 4 +- gradle.properties | 2 +- 10 files changed, 181 insertions(+), 50 deletions(-) create mode 100644 core/assets-raw/sprites/ui/sideline-over.9.png create mode 100644 core/assets-raw/sprites/ui/sideline.9.png create mode 100644 core/assets-raw/sprites/ui/underline-over.9.png diff --git a/core/assets-raw/sprites/ui/sideline-over.9.png b/core/assets-raw/sprites/ui/sideline-over.9.png new file mode 100644 index 0000000000000000000000000000000000000000..fec86b6d352279066ab580608379f486af274d5f GIT binary patch literal 241 zcmeAS@N?(olHy`uVBq!ia0y~yU{GUVV36ftV_;x7)*yF)fq{XsILO_JVcj{ImkbOH zt36#DLn2z=Uf;;uV!+e-@OejRMjropk&6ZwQbpKKg_hiSQrHmuBwz8Ay0(x@h-l8z zDPDSlW&NBC`(8iKP@Y)1Ggo=r6Px7aMcHyZrKb}u#MzEK^hx#O;QS zOS$Ergug0Jy2!A4$*TVUhhkRV?{sBe!`8Dl`oT(Ryq|QUb?lUkjFnGH9xvXUj zx`!C#V?@s^=1YEUu#GR7TifnL`;~V`_ArJyhL-OTq(-7sa+8`cd`Hp%i=E^;Qso9zj3NKBfyVp%ow;a}>lX+3wZFfcGM Nc)I$ztaD0e0sx%uXC43m literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/ui/underline-over.9.png b/core/assets-raw/sprites/ui/underline-over.9.png new file mode 100644 index 0000000000000000000000000000000000000000..d138927c1a1927b1f26ee52294715a6b5c5babb8 GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0y~yU{GUVV36ftV_;x7)*yF)fq{XsILO_JVcj{ImkbOH z9iA?ZArY-_r*GsvV8Fq`SUK0^X7kKNCXyOGlNu+n`Yg%+ARdz~?RP)n%3W4frMM^i zc56q(w{@JTeS4XE*W8=YJ1+Kow|sU~`N#yesaqtxx)(x;u7%7yx$Yea<4%$I6~3y; zeB)InN!>OlZL@!Tn^PAu{W@~v*rZEpX*Z2_N!>b<@snX`q{QT#yOu3tU|?YIboFyt I=akR{0G?=3VE_OC literal 0 HcmV?d00001 diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 1e359ee633..06c77ad450 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -564,6 +564,8 @@ weather.sandstorm.name = Sandstorm weather.sporestorm.name = Sporestorm weather.fog.name = Fog +sectorlist = Sectors +sectorlist.attacked = {0} under attack sectors.unexplored = [lightgray]Unexplored sectors.resources = Resources: sectors.production = Production: diff --git a/core/src/mindustry/type/UnitType.java b/core/src/mindustry/type/UnitType.java index 0aa8f45175..bff3ae1f76 100644 --- a/core/src/mindustry/type/UnitType.java +++ b/core/src/mindustry/type/UnitType.java @@ -325,7 +325,7 @@ public class UnitType extends UnlockableContent{ singleTarget = weapons.size <= 1 && !forceMultiTarget; if(itemCapacity < 0){ - itemCapacity = Math.max(Mathf.round((int)(hitSize * 4.3), 10), 10); + itemCapacity = Math.max(Mathf.round((int)(hitSize * 4f), 10), 10); } //assume slight range margin diff --git a/core/src/mindustry/ui/Styles.java b/core/src/mindustry/ui/Styles.java index 36a3ace7d2..6a693b881c 100644 --- a/core/src/mindustry/ui/Styles.java +++ b/core/src/mindustry/ui/Styles.java @@ -26,8 +26,8 @@ import static mindustry.gen.Tex.*; public class Styles{ //TODO all these names are inconsistent and not descriptive public static Drawable black, black9, black8, black6, black3, black5, none, flatDown, flatOver, accentDrawable; - public static ButtonStyle defaultb, waveb, modsb; - public static TextButtonStyle defaultt, squaret, nodet, cleart, discordt, nonet, infot, clearPartialt, clearTogglet, logicTogglet, clearToggleMenut, togglet, transt, fullTogglet, logict; + public static ButtonStyle defaultb, waveb, modsb, underlineb; + public static TextButtonStyle defaultt, squaret, nodet, cleart, discordt, nonet, infot, clearPartialt, clearTogglet, logicTogglet, clearToggleMenut, togglet, transt, fullTogglet, squareTogglet, logict; public static ImageButtonStyle defaulti, nodei, righti, emptyi, emptytogglei, selecti, logici, geni, colori, accenti, cleari, clearFulli, clearPartiali, clearPartial2i, clearTogglei, clearTransi, clearToggleTransi, clearTogglePartiali; public static ScrollPaneStyle defaultPane, horizontalPane, smallPane, nonePane; public static KeybindDialog.KeybindDialogStyle defaultKeybindDialog; @@ -62,7 +62,14 @@ public class Styles{ modsb = new ButtonStyle(){{ down = flatOver; up = underline; - over = underlineWhite; + over = underline2; + }}; + + underlineb = new ButtonStyle(){{ + down = flatOver; + up = sideline; + over = sidelineOver; + checked = flatOver; }}; waveb = new ButtonStyle(){{ @@ -196,6 +203,16 @@ public class Styles{ disabled = black; disabledFontColor = Color.gray; }}; + squareTogglet = new TextButtonStyle(){{ + font = Fonts.def; + fontColor = Color.white; + checked = flatOver; + down = flatOver; + up = pane; + over = flatOver; + disabled = black; + disabledFontColor = Color.gray; + }}; defaulti = new ImageButtonStyle(){{ down = buttonDown; up = button; diff --git a/core/src/mindustry/ui/dialogs/PlanetDialog.java b/core/src/mindustry/ui/dialogs/PlanetDialog.java index a41428d6fc..7e1e68d2b7 100644 --- a/core/src/mindustry/ui/dialogs/PlanetDialog.java +++ b/core/src/mindustry/ui/dialogs/PlanetDialog.java @@ -61,9 +61,10 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ public Seq newPresets = new Seq<>(); public float presetShow = 0f; - public boolean showed = false; + public boolean showed = false, sectorsShown; + public String searchText = ""; - public Table sectorTop = new Table(); + public Table sectorTop = new Table(), notifs; public Label hoverLabel = new Label(""); public PlanetDialog(){ @@ -73,17 +74,22 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ planets.planet = content.getByName(ContentType.planet, Core.settings.getString("lastplanet", "serpulo")); if(planets.planet == null) planets.planet = Planets.serpulo; - keyDown(key -> { - if(key == KeyCode.escape || key == KeyCode.back || key == Core.keybinds.get(Binding.planet_map).key){ - if(showing() && newPresets.size > 1){ - //clear all except first, which is the last sector. - newPresets.truncate(1); - }else if(selected != null){ - selected = null; - updateSelected(); - }else{ - Core.app.post(this::hide); + addListener(new InputListener(){ + @Override + public boolean keyDown(InputEvent event, KeyCode key){ + if(event.targetActor == PlanetDialog.this && (key == KeyCode.escape || key == KeyCode.back || key == Core.keybinds.get(Binding.planet_map).key)){ + if(showing() && newPresets.size > 1){ + //clear all except first, which is the last sector. + newPresets.truncate(1); + }else if(selected != null){ + selected = null; + updateSelected(); + }else{ + Core.app.post(() -> hide()); + } + return true; } + return false; } }); @@ -120,8 +126,14 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ pos.rotate(Tmp.v31.set(planets.cam.up).rotate(planets.cam.direction, 90), amount); }); - scrolled(value -> { - zoom = Mathf.clamp(zoom + value / 10f, 0.5f, 2f); + addListener(new InputListener(){ + @Override + public boolean scrolled(InputEvent event, float x, float y, float amountX, float amountY){ + if(event.targetActor == PlanetDialog.this){ + zoom = Mathf.clamp(zoom + y / 10f, 0.5f, 2f); + } + return true; + } }); addCaptureListener(new ElementGestureListener(){ @@ -449,6 +461,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ } void setup(){ + searchText = ""; zoom = planets.zoom = 1f; selectAlpha = 1f; ui.minimapfrag.hide(); @@ -481,13 +494,19 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ }); } + @Override + public void act(float delta){ + if(scene.getDialog() == PlanetDialog.this && !scene.hit(input.mouseX(), input.mouseY(), true).isDescendantOf(e -> e instanceof ScrollPane)){ + scene.setScrollFocus(PlanetDialog.this); + } + + super.act(delta); + } + @Override public void draw(){ planets.orbitAlpha = selectAlpha; planets.render(PlanetDialog.this); - if(Core.scene.getDialog() == PlanetDialog.this){ - Core.scene.setScrollFocus(PlanetDialog.this); - } } }, //info text @@ -513,7 +532,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ selected = null; launchSector = null; renderer.planets.planet = planet; - Core.settings.put("lastplanet", planet.name); + settings.put("lastplanet", planet.name); }).width(200).height(40).growX().update(bb -> bb.setChecked(renderer.planets.planet == planet)); pt.row(); } @@ -522,11 +541,95 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ } }), - new Table(t -> { - t.top(); - //t.add(sectorTop); - })).grow(); + new Table(c -> { + if(!(graphics.isPortrait() && mobile) && planets.planet.sectors.contains(Sector::hasBase)){ + int attacked = planets.planet.sectors.count(Sector::isAttacked); + //sector notifications & search + c.top().right(); + c.defaults().width(280f); + + c.button(bundle.get("sectorlist") + + (attacked == 0 ? "" : "\n[red]⚠[lightgray] " + bundle.format("sectorlist.attacked", "[red]" + attacked + "[]")), + Icon.downOpen, Styles.squareTogglet, () -> sectorsShown = !sectorsShown) + .height(60f).checked(b -> { + Image image = (Image)b.getCells().first().get(); + image.setDrawable(sectorsShown ? Icon.upOpen : Icon.downOpen); + return sectorsShown; + }).with(t -> t.left().margin(7f)).with(t -> t.getLabelCell().grow().left()).row(); + + c.collapser(t -> { + t.background(Styles.black8); + + notifs = t; + rebuildList(); + }, false, () -> sectorsShown).padBottom(64f).row(); + } + })).grow(); + } + + //TODO + void rebuildList(){ + notifs.clear(); + + var all = planets.planet.sectors.select(Sector::hasBase); + all.sort(Structs.comps(Structs.comparingBool(s -> !s.isAttacked()), Structs.comparingInt(s -> s.save == null ? 0 : -(int)s.save.meta.timePlayed))); + + notifs.pane(p -> { + Runnable[] readd = {null}; + + p.table(s -> { + s.image(Icon.zoom).padRight(4); + s.field(searchText, t -> { + searchText = t; + readd[0].run(); + }).growX().height(50f).addInputDialog(); + }).growX().row(); + + Table con = p.table().growX().get(); + con.touchable = Touchable.enabled; + + readd[0] = () -> { + con.clearChildren(); + for(Sector sec : all){ + if(sec.hasBase() && (searchText.isEmpty() || sec.name().toLowerCase().contains(searchText.toLowerCase()))){ + con.button(t -> { + t.left(); + t.defaults().growX(); + + t.table(head -> { + head.left().defaults(); + + if(sec.isAttacked()){ + head.image(Icon.warningSmall).update(i -> { + i.color.set(Pal.accent).lerp(Pal.remove, Mathf.absin(Time.globalTime, 9f, 1f)); + }).padRight(4f); + } + + String ic = sec.iconChar() == null ? "" : sec.iconChar() + " "; + + head.add(ic + sec.name()).growX().wrap(); + }).growX().row(); + + if(sec.isAttacked()){ + addSurvivedInfo(sec, t, true); + } + }, Styles.underlineb, () -> { + lookAt(sec); + selected = sec; + updateSelected(); + }).margin(8f).marginLeft(13f).marginBottom(6f).marginTop(6f).padBottom(3f).padTop(3f).growX().checked(b -> selected == sec).row(); + //for resources: .tooltip(sec.info.resources.toString("", u -> u.emoji())) + } + } + + if(con.getChildren().isEmpty()){ + con.add("@none.found").pad(10f); + } + }; + + readd[0].run(); + }).grow().get().setScrollingDisabled(true, false); } @Override @@ -725,6 +828,19 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ dialog.show(); } + void addSurvivedInfo(Sector sector, Table table, boolean wrap){ + if(!wrap){ + table.add(Core.bundle.format("sectors.underattack", (int)(sector.info.damage * 100))).wrapLabel(wrap).row(); + } + + if(sector.info.wavesSurvived >= 0 && sector.info.wavesSurvived - sector.info.wavesPassed >= 0 && !sector.isBeingPlayed()){ + int toCapture = sector.info.attack || sector.info.winWave <= 1 ? -1 : sector.info.winWave - (sector.info.wave + sector.info.wavesPassed); + boolean plus = (sector.info.wavesSurvived - sector.info.wavesPassed) >= SectorDamage.maxRetWave - 1; + table.add(Core.bundle.format("sectors.survives", Math.min(sector.info.wavesSurvived - sector.info.wavesPassed, toCapture <= 0 ? 200 : toCapture) + + (plus ? "+" : "") + (toCapture < 0 ? "" : "/" + toCapture))).wrapLabel(wrap).row(); + } + } + void updateSelected(){ Sector sector = selected; Table stable = sectorTop; @@ -749,6 +865,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ ui.showTextInput("@sectors.rename", "@name", 20, sector.name(), v -> { sector.setName(v); updateSelected(); + rebuildList(); }); }).size(40f).padLeft(4); } @@ -761,6 +878,14 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ new Dialog(""){{ closeOnBack(); setFillParent(true); + + Runnable refresh = () -> { + sector.saveInfo(); + hide(); + updateSelected(); + rebuildList(); + }; + cont.pane(t -> { resized(true, () -> { t.clearChildren(); @@ -770,9 +895,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ t.button(Icon.none, Styles.clearTogglei, () -> { sector.info.icon = null; sector.info.contentIcon = null; - sector.saveInfo(); - hide(); - updateSelected(); + refresh.run(); }).checked(sector.info.icon == null && sector.info.contentIcon == null); int cols = (int)Math.min(20, Core.graphics.getWidth() / Scl.scl(52f)); @@ -784,9 +907,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ t.button(value, Styles.clearTogglei, () -> { sector.info.icon = key; sector.info.contentIcon = null; - sector.saveInfo(); - hide(); - updateSelected(); + refresh.run(); }).checked(key.equals(sector.info.icon)); if(++i % cols == 0) t.row(); @@ -803,9 +924,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ t.button(new TextureRegionDrawable(u.uiIcon), Styles.clearTogglei, iconMed, () -> { sector.info.icon = null; sector.info.contentIcon = u; - sector.saveInfo(); - hide(); - updateSelected(); + refresh.run(); }).checked(sector.info.contentIcon == u); if(++i % cols == 0) t.row(); @@ -840,16 +959,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ } if(sector.isAttacked()){ - stable.add(Core.bundle.format("sectors.underattack", (int)(sector.info.damage * 100))); - stable.row(); - - if(sector.info.wavesSurvived >= 0 && sector.info.wavesSurvived - sector.info.wavesPassed >= 0 && !sector.isBeingPlayed()){ - int toCapture = sector.info.attack || sector.info.winWave <= 1 ? -1 : sector.info.winWave - (sector.info.wave + sector.info.wavesPassed); - boolean plus = (sector.info.wavesSurvived - sector.info.wavesPassed) >= SectorDamage.maxRetWave - 1; - stable.add(Core.bundle.format("sectors.survives", Math.min(sector.info.wavesSurvived - sector.info.wavesPassed, toCapture <= 0 ? 200 : toCapture) + - (plus ? "+" : "") + (toCapture < 0 ? "" : "/" + toCapture))); - stable.row(); - } + addSurvivedInfo(sector, stable, false); }else if(sector.hasBase() && sector.near().contains(Sector::hasEnemyBase)){ stable.add("@sectors.vulnerable"); stable.row(); @@ -886,6 +996,8 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ stable.pack(); stable.setPosition(x, y, Align.center); + //do not fade out for now, TODO remove? + /* stable.update(() -> { if(selected != null){ if(launching){ @@ -901,7 +1013,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ } } } - }); + });*/ stable.act(0f); } diff --git a/core/src/mindustry/ui/dialogs/SchematicsDialog.java b/core/src/mindustry/ui/dialogs/SchematicsDialog.java index cdafcf0e80..e054772b62 100644 --- a/core/src/mindustry/ui/dialogs/SchematicsDialog.java +++ b/core/src/mindustry/ui/dialogs/SchematicsDialog.java @@ -69,7 +69,7 @@ public class SchematicsDialog extends BaseDialog{ searchField = s.field(search, res -> { search = res; rebuildPane.run(); - }).growX().get(); + }).growX().addInputDialog().get(); }).fillX().padBottom(4); cont.row(); diff --git a/core/src/mindustry/ui/fragments/HintsFragment.java b/core/src/mindustry/ui/fragments/HintsFragment.java index b548a5536c..059af19994 100644 --- a/core/src/mindustry/ui/fragments/HintsFragment.java +++ b/core/src/mindustry/ui/fragments/HintsFragment.java @@ -48,7 +48,7 @@ public class HintsFragment extends Fragment{ }else if(!current.show()){ //current became hidden hide(); } - }else if(hints.size > 0){ + }else if(hints.size > 0 && !renderer.isCutscene()){ //check one hint each frame to see if it should be shown. Hint hint = hints.find(Hint::show); if(hint != null && hint.complete()){ @@ -163,7 +163,7 @@ public class HintsFragment extends Fragment{ schematicSelect(visibleDesktop, () -> ui.hints.placedBlocks.contains(Blocks.router), () -> Core.input.keyRelease(Binding.schematic_select) || Core.input.keyTap(Binding.pick)), conveyorPathfind(() -> control.input.block == Blocks.titaniumConveyor, () -> Core.input.keyRelease(Binding.diagonal_placement) || (mobile && Core.settings.getBool("swapdiagonal"))), boost(visibleDesktop, () -> !player.dead() && player.unit().type.canBoost, () -> Core.input.keyDown(Binding.boost)), - blockInfo(() -> true, () -> ui.content.isShown()), + blockInfo(() -> !(state.isCampaign() && state.rules.sector == SectorPresets.groundZero.sector && state.wave < 3), () -> ui.content.isShown()), derelict(() -> ui.hints.events.contains("derelictmouse"), () -> false), command(() -> state.rules.defaultTeam.data().units.size > 3 && !net.active(), () -> player.unit().isCommanding()), payloadPickup(() -> !player.unit().dead && player.unit() instanceof Payloadc p && p.payloads().isEmpty(), () -> player.unit() instanceof Payloadc p && p.payloads().any()), diff --git a/gradle.properties b/gradle.properties index 6ce5f26d99..462317f276 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,4 +11,4 @@ android.useAndroidX=true #used for slow jitpack builds; TODO see if this actually works http.socketTimeout=80000 http.connectionTimeout=80000 -archash=de1df819aae54e4023718a07dabf794da9f5a4de +archash=98b38438ccb72669a73349bd5ffd60905ed231a7 From 033dadae2c456b4c2893f053dfb32c4feecc34df Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 13 Aug 2021 09:20:46 -0400 Subject: [PATCH 18/18] Removed unnecessary 'chat' font --- core/src/mindustry/core/UI.java | 2 +- core/src/mindustry/ui/Fonts.java | 4 +--- core/src/mindustry/ui/Styles.java | 8 ++++---- core/src/mindustry/ui/fragments/ChatFragment.java | 5 ++--- .../src/mindustry/ui/fragments/ScriptConsoleFragment.java | 4 ++-- gradle.properties | 2 +- 6 files changed, 11 insertions(+), 14 deletions(-) diff --git a/core/src/mindustry/core/UI.java b/core/src/mindustry/core/UI.java index e2902bca83..4024b8f72f 100644 --- a/core/src/mindustry/core/UI.java +++ b/core/src/mindustry/core/UI.java @@ -130,7 +130,7 @@ public class UI implements ApplicationListener, Loadable{ @Override public Seq getDependencies(){ - return Seq.with(new AssetDescriptor<>(Control.class), new AssetDescriptor<>("outline", Font.class), new AssetDescriptor<>("default", Font.class), new AssetDescriptor<>("chat", Font.class)); + return Seq.with(new AssetDescriptor<>(Control.class), new AssetDescriptor<>("outline", Font.class), new AssetDescriptor<>("default", Font.class)); } @Override diff --git a/core/src/mindustry/ui/Fonts.java b/core/src/mindustry/ui/Fonts.java index bbd55bbd95..9785619cba 100644 --- a/core/src/mindustry/ui/Fonts.java +++ b/core/src/mindustry/ui/Fonts.java @@ -37,7 +37,6 @@ public class Fonts{ public static Font def; public static Font outline; - public static Font chat; public static Font icon; public static Font iconLarge; public static Font tech; @@ -76,7 +75,6 @@ public class Fonts{ FreeTypeFontParameter param = fontParameter(); Core.assets.load("default", Font.class, new FreeTypeFontLoaderParameter(mainFont, param)).loaded = f -> Fonts.def = (Font)f; - Core.assets.load("chat", Font.class, new FreeTypeFontLoaderParameter(mainFont, param)).loaded = f -> Fonts.chat = (Font)f; Core.assets.load("icon", Font.class, new FreeTypeFontLoaderParameter("fonts/icon.ttf", new FreeTypeFontParameter(){{ size = 30; incremental = true; @@ -104,7 +102,7 @@ public class Fonts{ } public static void loadContentIcons(){ - Seq fonts = Seq.with(Fonts.chat, Fonts.def, Fonts.outline); + Seq fonts = Seq.with(Fonts.def, Fonts.outline); Texture uitex = Core.atlas.find("logo").texture; int size = (int)(Fonts.def.getData().lineHeight/Fonts.def.getData().scaleY); diff --git a/core/src/mindustry/ui/Styles.java b/core/src/mindustry/ui/Styles.java index 6a693b881c..f6b212fa06 100644 --- a/core/src/mindustry/ui/Styles.java +++ b/core/src/mindustry/ui/Styles.java @@ -357,7 +357,7 @@ public class Styles{ }}; defaultField = new TextFieldStyle(){{ - font = Fonts.chat; + font = Fonts.def; fontColor = Color.white; disabledFontColor = Color.gray; disabledBackground = underlineDisabled; @@ -370,7 +370,7 @@ public class Styles{ }}; nodeField = new TextFieldStyle(){{ - font = Fonts.chat; + font = Fonts.def; fontColor = Color.white; disabledFontColor = Color.gray; disabledBackground = underlineDisabled; @@ -383,7 +383,7 @@ public class Styles{ }}; areaField = new TextFieldStyle(){{ - font = Fonts.chat; + font = Fonts.def; fontColor = Color.white; disabledFontColor = Color.gray; selection = Tex.selection; @@ -394,7 +394,7 @@ public class Styles{ }}; nodeArea = new TextFieldStyle(){{ - font = Fonts.chat; + font = Fonts.def; fontColor = Color.white; disabledFontColor = Color.gray; selection = Tex.selection; diff --git a/core/src/mindustry/ui/fragments/ChatFragment.java b/core/src/mindustry/ui/fragments/ChatFragment.java index 4b4bd3e46d..c39233a8e5 100644 --- a/core/src/mindustry/ui/fragments/ChatFragment.java +++ b/core/src/mindustry/ui/fragments/ChatFragment.java @@ -9,6 +9,7 @@ import arc.math.*; import arc.scene.*; import arc.scene.ui.*; import arc.scene.ui.Label.*; +import arc.scene.ui.TextField.*; import arc.scene.ui.layout.*; import arc.struct.*; import arc.util.*; @@ -18,7 +19,6 @@ import mindustry.input.*; import mindustry.ui.*; import static arc.Core.*; -import static mindustry.Vars.net; import static mindustry.Vars.*; public class ChatFragment extends Table{ @@ -104,10 +104,9 @@ public class ChatFragment extends Table{ fieldlabel.getStyle().font = font; fieldlabel.setStyle(fieldlabel.getStyle()); - chatfield = new TextField("", new TextField.TextFieldStyle(scene.getStyle(TextField.TextFieldStyle.class))); + chatfield = new TextField("", new TextFieldStyle(scene.getStyle(TextFieldStyle.class))); chatfield.setMaxLength(Vars.maxTextLength); chatfield.getStyle().background = null; - chatfield.getStyle().font = Fonts.chat; chatfield.getStyle().fontColor = Color.white; chatfield.setStyle(chatfield.getStyle()); diff --git a/core/src/mindustry/ui/fragments/ScriptConsoleFragment.java b/core/src/mindustry/ui/fragments/ScriptConsoleFragment.java index 71704dc5e7..76e856e437 100644 --- a/core/src/mindustry/ui/fragments/ScriptConsoleFragment.java +++ b/core/src/mindustry/ui/fragments/ScriptConsoleFragment.java @@ -8,6 +8,7 @@ import arc.math.*; import arc.scene.*; import arc.scene.ui.*; import arc.scene.ui.Label.*; +import arc.scene.ui.TextField.*; import arc.scene.ui.layout.*; import arc.struct.*; import arc.util.*; @@ -93,9 +94,8 @@ public class ScriptConsoleFragment extends Table{ fieldlabel.getStyle().font = font; fieldlabel.setStyle(fieldlabel.getStyle()); - chatfield = new TextField("", new TextField.TextFieldStyle(scene.getStyle(TextField.TextFieldStyle.class))); + chatfield = new TextField("", new TextFieldStyle(scene.getStyle(TextFieldStyle.class))); chatfield.getStyle().background = null; - chatfield.getStyle().font = Fonts.chat; chatfield.getStyle().fontColor = Color.white; chatfield.setStyle(chatfield.getStyle()); diff --git a/gradle.properties b/gradle.properties index 462317f276..cec569e049 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,4 +11,4 @@ android.useAndroidX=true #used for slow jitpack builds; TODO see if this actually works http.socketTimeout=80000 http.connectionTimeout=80000 -archash=98b38438ccb72669a73349bd5ffd60905ed231a7 +archash=fbbdf8776142ba1980855c954dcfbf00e96cbeb7