diff --git a/core/assets-raw/sprites/blocks/turrets/salvo.png b/core/assets-raw/sprites/blocks/turrets/salvo.png index 2af563f821..f43f7bbd47 100644 Binary files a/core/assets-raw/sprites/blocks/turrets/salvo.png and b/core/assets-raw/sprites/blocks/turrets/salvo.png differ diff --git a/core/src/io/anuke/mindustry/core/NetServer.java b/core/src/io/anuke/mindustry/core/NetServer.java index dbc09ca4c4..7da3a47a24 100644 --- a/core/src/io/anuke/mindustry/core/NetServer.java +++ b/core/src/io/anuke/mindustry/core/NetServer.java @@ -40,7 +40,7 @@ import static io.anuke.mindustry.Vars.*; public class NetServer implements ApplicationListener{ public final static int maxSnapshotSize = 430; - private final static float serverSyncTime = 20, kickDuration = 30 * 1000; + private final static float serverSyncTime = 15, kickDuration = 30 * 1000; private final static Vector2 vector = new Vector2(); private final static Rectangle viewport = new Rectangle(); /** If a player goes away of their server-side coordinates by this distance, they get teleported back. */ diff --git a/core/src/io/anuke/mindustry/entities/type/BaseUnit.java b/core/src/io/anuke/mindustry/entities/type/BaseUnit.java index 334b21db3c..440cab7a2b 100644 --- a/core/src/io/anuke/mindustry/entities/type/BaseUnit.java +++ b/core/src/io/anuke/mindustry/entities/type/BaseUnit.java @@ -80,6 +80,10 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{ return type.drag; } + public Tile getSpawner(){ + return world.tile(spawner); + } + /** Initialize the type and team of this unit. Only call once! */ public void init(UnitType type, Team team){ if(this.type != null) throw new RuntimeException("This unit is already initialized!"); diff --git a/core/src/io/anuke/mindustry/entities/type/base/Drone.java b/core/src/io/anuke/mindustry/entities/type/base/Drone.java index 6fd10ba022..bc34545637 100644 --- a/core/src/io/anuke/mindustry/entities/type/base/Drone.java +++ b/core/src/io/anuke/mindustry/entities/type/base/Drone.java @@ -25,8 +25,6 @@ import java.io.*; import static io.anuke.mindustry.Vars.*; public class Drone extends FlyingUnit implements BuilderTrait{ - - protected Item targetItem; protected Tile mineTile; protected Queue placeQueue = new Queue<>(); @@ -77,20 +75,14 @@ public class Drone extends FlyingUnit implements BuilderTrait{ public void update(){ - retarget(() -> { - target = Units.findDamagedTile(team, x, y); + retarget(() -> target = Units.findDamagedTile(team, x, y)); - if(target == null){ - setState(mine); + if(target != null){ + if(target.dst(Drone.this) > type.range){ + circle(type.range * 0.9f); + }else{ + getWeapon().update(Drone.this, target.getX(), target.getY()); } - }); - - if(target == null) return; - - if(target.dst(Drone.this) > type.range){ - circle(type.range * 0.9f); - }else{ - getWeapon().update(Drone.this, target.getX(), target.getY()); } } }, @@ -196,10 +188,14 @@ public class Drone extends FlyingUnit implements BuilderTrait{ if(health >= maxHealth()){ state.set(attack); }else if(!targetHasFlag(BlockFlag.repair)){ - if(timer.get(timerTarget, 20)){ - Tile target = Geometry.findClosest(x, y, world.indexer.getAllied(team, BlockFlag.repair)); - if(target != null) Drone.this.target = target.entity; - } + retarget(() -> { + Tile repairPoint = Geometry.findClosest(x, y, world.indexer.getAllied(team, BlockFlag.repair)); + if(repairPoint != null){ + target = repairPoint; + }else if(getSpawner() != null){ + target = getSpawner(); + } + }); }else{ circle(40f); } @@ -300,8 +296,7 @@ public class Drone extends FlyingUnit implements BuilderTrait{ @Override public void behavior(){ - if(health <= health * type.retreatPercent && - Geometry.findClosest(x, y, world.indexer.getAllied(team, BlockFlag.repair)) != null){ + if(health <= health * type.retreatPercent){ setState(retreat); } } diff --git a/core/src/io/anuke/mindustry/net/CrashSender.java b/core/src/io/anuke/mindustry/net/CrashSender.java index f771091b7a..c551cf8828 100644 --- a/core/src/io/anuke/mindustry/net/CrashSender.java +++ b/core/src/io/anuke/mindustry/net/CrashSender.java @@ -7,6 +7,7 @@ import io.anuke.arc.util.Log; import io.anuke.arc.util.OS; import io.anuke.arc.util.Strings; import io.anuke.arc.util.io.PropertiesUtils; +import io.anuke.arc.util.io.Streams; import io.anuke.arc.util.serialization.JsonValue; import io.anuke.arc.util.serialization.JsonValue.ValueType; import io.anuke.arc.util.serialization.JsonWriter.OutputType; @@ -66,7 +67,7 @@ public class CrashSender{ try{ File file = new File(OS.getAppDataDirectoryString(Vars.appName), "crashes/crash-report-" + DateTimeFormatter.ofPattern("MM_dd_yyyy_HH_mm_ss").format(LocalDateTime.now()) + ".txt"); new File(OS.getAppDataDirectoryString(Vars.appName)).mkdir(); - new BufferedOutputStream(new FileOutputStream(file), 2048).write(parseException(exception).getBytes()); + new BufferedOutputStream(new FileOutputStream(file), Streams.DEFAULT_BUFFER_SIZE).write(parseException(exception).getBytes()); Files.createDirectories(Paths.get(OS.getAppDataDirectoryString(Vars.appName), "crashes")); writeListener.accept(file); diff --git a/core/src/io/anuke/mindustry/type/UnitType.java b/core/src/io/anuke/mindustry/type/UnitType.java index d187380fb0..1500fb2738 100644 --- a/core/src/io/anuke/mindustry/type/UnitType.java +++ b/core/src/io/anuke/mindustry/type/UnitType.java @@ -28,7 +28,7 @@ public class UnitType extends UnlockableContent{ public boolean rotateWeapon = false; public float drag = 0.1f; public float maxVelocity = 5f; - public float retreatPercent = 0.2f; + public float retreatPercent = 0.6f; public int itemCapacity = 30; public ObjectSet toMine = ObjectSet.with(Items.lead, Items.copper); public float buildPower = 0.3f, minePower = 0.7f; diff --git a/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java b/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java index 4a044323c5..fe8672b53b 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java @@ -142,9 +142,14 @@ public class HudFragment extends Fragment{ }); Table wavesMain, editorMain; + boolean[] prev = {false}; cont.stack(wavesMain = new Table(), editorMain = new Table()).height(wavesMain.getPrefHeight()).update(s -> { - ((Table)s.getParent()).getCell(s).height(wavesMain.isVisible() ? wavesMain.getPrefHeight() : editorMain.getPrefHeight()); + ((Table)s.getParent()).getCell(s).height((wavesMain.isVisible() ? wavesMain.getPrefHeight() : editorMain.getPrefHeight()) / Unit.dp.scl(1f)); + if(prev[0] != wavesMain.isVisible()){ + s.getParent().pack(); + prev[0] = wavesMain.isVisible(); + } }); {