Fixed black blocks/units after quit / Fixed intense wave spawn lag

This commit is contained in:
Anuken
2019-06-12 18:07:19 -04:00
parent 73c48afc99
commit 18328320c1
14 changed files with 36 additions and 96 deletions

View File

@@ -124,6 +124,7 @@ public class Vars{
public static GameState state;
public static GlobalData data;
public static EntityCollisions collisions;
public static DefaultWaves defaultWaves;
public static Control control;
public static Logic logic;
@@ -172,6 +173,7 @@ public class Vars{
content.setVerbose();
}
defaultWaves = new DefaultWaves();
collisions = new EntityCollisions();
playerGroup = Entities.addGroup(Player.class).enableMapping();

View File

@@ -72,15 +72,17 @@ public class WaveSpawner{
Time.run(Math.min(i * 5, 60 * 2), () -> spawnEffect(unit));
}
if(doShockwave){
Time.run(20f, () -> Effects.effect(Fx.spawnShockwave, spawnX, spawnY, state.rules.dropZoneRadius));
Time.run(40f, () -> Damage.damage(waveTeam, spawnX, spawnY, state.rules.dropZoneRadius, 99999999f, true));
}
});
}
}
eachGroundSpawn((spawnX, spawnY, doShockwave) -> {
if(doShockwave){
Time.run(20f, () -> Effects.effect(Fx.spawnShockwave, spawnX, spawnY, state.rules.dropZoneRadius));
Time.run(40f, () -> Damage.damage(waveTeam, spawnX, spawnY, state.rules.dropZoneRadius, 99999999f, true));
}
});
Time.runTask(121f, () -> spawning = false);
}

View File

@@ -583,7 +583,7 @@ public class Fx implements ContentList{
spawnShockwave = new Effect(20f, 400f, e -> {
Draw.color(Color.WHITE, Color.LIGHT_GRAY, e.fin());
Lines.stroke(e.fout() * 3f + 0.5f);
Lines.poly(e.x, e.y, 60, e.fin() * (e.rotation + 50f));
Lines.poly(e.x, e.y, 40, e.fin() * (e.rotation + 50f));
Draw.reset();
});

View File

@@ -5,6 +5,8 @@ import io.anuke.arc.collection.Array;
import io.anuke.arc.graphics.Color;
import io.anuke.arc.input.KeyCode;
import io.anuke.arc.math.Mathf;
import io.anuke.arc.scene.event.Touchable;
import io.anuke.arc.scene.ui.Label;
import io.anuke.arc.scene.ui.TextField.TextFieldFilter;
import io.anuke.arc.scene.ui.layout.Table;
import io.anuke.arc.util.*;
@@ -21,7 +23,7 @@ import static io.anuke.mindustry.game.SpawnGroup.never;
public class WaveInfoDialog extends FloatingDialog{
private final static int displayed = 20;
private Array<SpawnGroup> groups;
private Array<SpawnGroup> groups = new Array<>();
private Table table, preview;
private int start = 0;
@@ -65,7 +67,7 @@ public class WaveInfoDialog extends FloatingDialog{
}).disabled(b -> Core.app.getClipboard().getContents() == null || Core.app.getClipboard().getContents().isEmpty());
dialog.cont.row();
dialog.cont.addButton("$settings.reset", () -> ui.showConfirm("$confirm", "$settings.clear.confirm", () -> {
groups = JsonIO.copy(DefaultWaves.get());
groups = JsonIO.copy(defaultWaves.get());
buildGroups();
dialog.hide();
}));
@@ -74,10 +76,10 @@ public class WaveInfoDialog extends FloatingDialog{
}
void setup(){
groups = JsonIO.copy(state.rules.spawns);
groups = JsonIO.copy(state.rules.spawns.isEmpty() ? defaultWaves.get() : state.rules.spawns);
cont.clear();
cont.table("clear", main -> {
cont.stack(new Table("clear", main -> {
main.pane(t -> table = t).growX().growY().get().setScrollingDisabled(true, false);
main.row();
main.addButton("$add", () -> {
@@ -85,7 +87,13 @@ public class WaveInfoDialog extends FloatingDialog{
groups.add(new SpawnGroup(lastType));
buildGroups();
}).growX().height(70f);
}).width(390f).growY();
}), new Label("$waves.none"){{
visible(groups::isEmpty);
touchable(Touchable.disabled);
setWrap(true);
setAlignment(Align.center, Align.center);
}}).width(390f).growY();
cont.table("clear", m -> {
m.add("$waves.preview").color(Color.LIGHT_GRAY).growX().center().get().setAlignment(Align.center, Align.center);
m.row();

View File

@@ -5,9 +5,9 @@ import io.anuke.mindustry.content.*;
import io.anuke.mindustry.type.ItemStack;
public class DefaultWaves{
private static Array<SpawnGroup> spawns;
private Array<SpawnGroup> spawns;
public static Array<SpawnGroup> get(){
public Array<SpawnGroup> get(){
if(spawns == null && UnitTypes.dagger != null){
spawns = Array.with(
new SpawnGroup(UnitTypes.dagger){{

View File

@@ -51,8 +51,8 @@ public class Rules{
public float launchWaveMultiplier = 2f;
/** Zone for saves that have them.*/
public Zone zone;
/** Spawn layout. Should be assigned on save load based on map or zone. */
public Array<SpawnGroup> spawns = DefaultWaves.get();
/** Spawn layout. */
public Array<SpawnGroup> spawns = new Array<>();
/** Determines if there should be limited respawns. */
public boolean limitedRespawns = false;
/** How many times player can respawn during one wave. */

View File

@@ -76,7 +76,7 @@ public abstract class SaveVersion extends SaveFileReader{
state.wavetime = map.getFloat("wavetime", state.rules.waveSpacing);
state.stats = JsonIO.read(Stats.class, map.get("stats", "{}"));
state.rules = JsonIO.read(Rules.class, map.get("rules", "{}"));
if(state.rules.spawns.isEmpty()) state.rules.spawns = DefaultWaves.get();
if(state.rules.spawns.isEmpty()) state.rules.spawns = defaultWaves.get();
Map worldmap = world.maps.byName(map.get("mapname", "\\\\\\"));
world.setMap(worldmap == null ? new Map(StringMap.of(
"name", map.get("mapname", "Unknown"),

View File

@@ -5,7 +5,6 @@ import io.anuke.arc.collection.StringMap;
import io.anuke.arc.files.FileHandle;
import io.anuke.arc.graphics.Texture;
import io.anuke.mindustry.Vars;
import io.anuke.mindustry.game.DefaultWaves;
import io.anuke.mindustry.game.Rules;
import io.anuke.mindustry.io.JsonIO;
@@ -59,7 +58,7 @@ public class Map implements Comparable<Map>{
/** This creates a new instance.*/
public Rules rules(){
Rules result = JsonIO.read(Rules.class, tags.get("rules", "{}"));
if(result.spawns.isEmpty()) result.spawns = DefaultWaves.get();
if(result.spawns.isEmpty()) result.spawns = Vars.defaultWaves.get();
return result;
}

View File

@@ -11,8 +11,8 @@ import static io.anuke.mindustry.Vars.defaultTeam;
import static io.anuke.mindustry.Vars.world;
public class Loadout extends Content{
private final static Array<Tile> outArray = new Array<>();
private final static IntMap<BlockEntry> entries = new IntMap<BlockEntry>(){{
private final Array<Tile> outArray = new Array<>();
private final IntMap<BlockEntry> entries = new IntMap<BlockEntry>(){{
put('>', new BlockEntry(Blocks.conveyor, 0));
put('^', new BlockEntry(Blocks.conveyor, 1));
put('<', new BlockEntry(Blocks.conveyor, 2));

View File

@@ -93,7 +93,7 @@ public class CustomRulesDialog extends FloatingDialog{
}
void check(String text, BooleanConsumer cons, BooleanProvider prov, BooleanProvider condition){
main.addCheck(text, cons).checked(prov.get()).update(a -> a.setDisabled(!condition.get())).padRight(100f);
main.addCheck(text, cons).checked(prov.get()).update(a -> a.setDisabled(!condition.get())).padRight(100f).get().left();
main.row();
}

View File

@@ -79,7 +79,7 @@ public class MapsDialog extends FloatingDialog{
ScrollPane pane = new ScrollPane(maps);
pane.setFadeScrollBars(false);
int maxwidth = 4;
int maxwidth = Core.graphics.isPortrait() ? 2 : 4;
float mapsize = 200f;
int i = 0;