Bugfixes / Font changed / Zone tweaks

This commit is contained in:
Anuken
2019-03-08 19:07:23 -05:00
parent 3776b99c39
commit 64533de597
47 changed files with 1401 additions and 1482 deletions

View File

@@ -17,7 +17,7 @@ public class Mindustry extends ApplicationCore{
public void setup(){
Time.setDeltaProvider(() -> {
float result = Core.graphics.getDeltaTime() * 60f;
return Float.isNaN(result) || Float.isInfinite(result) ? 1f : Math.min(result, 60f / 10f);
return (Float.isNaN(result) || Float.isInfinite(result)) ? 1f : Math.min(result, 60f / 10f);
});
Time.mark();

View File

@@ -2,21 +2,21 @@ package io.anuke.mindustry;
import io.anuke.arc.Application.ApplicationType;
import io.anuke.arc.Core;
import io.anuke.mindustry.entities.Entities;
import io.anuke.mindustry.entities.EntityGroup;
import io.anuke.mindustry.entities.impl.EffectEntity;
import io.anuke.mindustry.entities.traits.DrawTrait;
import io.anuke.arc.files.FileHandle;
import io.anuke.arc.graphics.Color;
import io.anuke.arc.util.Structs;
import io.anuke.mindustry.core.*;
import io.anuke.mindustry.entities.type.Player;
import io.anuke.mindustry.entities.type.TileEntity;
import io.anuke.mindustry.entities.Entities;
import io.anuke.mindustry.entities.EntityGroup;
import io.anuke.mindustry.entities.bullet.Bullet;
import io.anuke.mindustry.entities.effect.Fire;
import io.anuke.mindustry.entities.effect.Puddle;
import io.anuke.mindustry.entities.impl.EffectEntity;
import io.anuke.mindustry.entities.traits.DrawTrait;
import io.anuke.mindustry.entities.traits.SyncTrait;
import io.anuke.mindustry.entities.type.BaseUnit;
import io.anuke.mindustry.entities.type.Player;
import io.anuke.mindustry.entities.type.TileEntity;
import io.anuke.mindustry.game.GlobalData;
import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.game.Version;
@@ -24,11 +24,14 @@ import io.anuke.mindustry.gen.Serialization;
import io.anuke.mindustry.net.Net;
import io.anuke.mindustry.world.blocks.defense.ForceProjector.ShieldEntity;
import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.Locale;
@SuppressWarnings("unchecked")
public class Vars{
/**global charset*/
public static final Charset charset = Charset.forName("UTF-8");
/**main application name, capitalized*/
public static final String appName = "Mindustry";
/**URL for discord invite.*/

View File

@@ -280,7 +280,7 @@ public class BlockIndexer{
outer:
for(int x = quadrantX * structQuadrantSize; x < world.width() && x < (quadrantX + 1) * structQuadrantSize; x++){
for(int y = quadrantY * structQuadrantSize; y < world.height() && y < (quadrantY + 1) * structQuadrantSize; y++){
Tile result = world.tile(x, y);
Tile result = world.tile(x, y).target();
//when a targetable block is found, mark this quadrant as occupied and stop searching
if(result.entity != null && result.getTeam() == data.team){
structQuadrants[data.team.ordinal()].set(index);

View File

@@ -146,6 +146,7 @@ public class Pathfinder{
while(path.frontier.size > 0 && (nsToRun < 0 || Time.timeSinceNanos(start) <= nsToRun)){
Tile tile = world.tile(path.frontier.removeLast());
if(tile == null || path.weights == null) return; //something went horribly wrong, bail
float cost = path.weights[tile.x][tile.y];
//pathfinding overflowed for some reason, time to bail. the next block update will handle this, hopefully

View File

@@ -71,7 +71,7 @@ public class Blocks implements ContentList{
duo, hail, arc, wave, lancer, swarmer, salvo, fuse, ripple, cyclone, spectre, meltdown,
//units
spiritFactory, phantomFactory, wraithFactory, ghoulFactory, revenantFactory, daggerFactory, titanFactory,
spiritFactory, phantomFactory, wraithFactory, ghoulFactory, revenantFactory, daggerFactory, crawlerFactory, titanFactory,
fortressFactory, repairPoint,
//upgrades
@@ -732,7 +732,7 @@ public class Blocks implements ContentList{
rotaryPump = new Pump("rotary-pump"){{
requirements(Category.liquid, ItemStack.with(Items.copper, 140, Items.lead, 100, Items.silicon, 40, Items.titanium, 70));
pumpAmount = 0.8f;
consumes.power(1.50f);
consumes.power(0.15f);
liquidCapacity = 30f;
hasPower = true;
size = 2;
@@ -1322,6 +1322,15 @@ public class Blocks implements ContentList{
consumes.items(new ItemStack(Items.silicon, 10));
}};
crawlerFactory = new UnitFactory("crawler-factory"){{
requirements(Category.units, ItemStack.with(Items.lead, 100, Items.silicon, 80));
type = UnitTypes.crawler;
produceTime = 1200;
size = 2;
consumes.power(0.4f);
consumes.items(new ItemStack(Items.blastCompound, 10));
}};
titanFactory = new UnitFactory("titan-factory"){{
requirements(Category.units, ItemStack.with(Items.thorium, 90, Items.lead, 140, Items.silicon, 90));
type = UnitTypes.titan;

View File

@@ -684,29 +684,17 @@ public class Bullets implements ContentList{
hitEffect = Fx.pulverize;
lifetime = 23f;
speed = 1f;
splashDamageRadius = 60f;
splashDamageRadius = 50f;
splashDamage = 30f;
}
@Override
public void init(Bullet b){
if(b.getOwner() instanceof Unit){
Unit unit = (Unit)b.getOwner();
unit.damage(unit.maxHealth() + 1);
((Unit)b.getOwner()).kill();
}
b.time(b.lifetime());
}
@Override
public void hit(Bullet b, float x, float y){
super.hit(b, x, y);
for(int i = 0; i < 3; i++){
Tile tile = world.tileWorld(x + Mathf.range(8f), y + Mathf.range(8f));
Puddle.deposit(tile, Liquids.oil, 5f);
}
}
};
}
}

View File

@@ -12,8 +12,8 @@ import io.anuke.mindustry.type.Zone;
import io.anuke.mindustry.world.Block;
public class Zones implements ContentList{
public static Zone groundZero, craters, frozenForest, ruinousShores, crags, stainedMountains,
impact, desolateRift, arcticDesert, dryWastes, nuclearComplex, moltenFault;
public static Zone groundZero, craters, frozenForest, ruinousShores, stainedMountains,
desolateRift, nuclearComplex;
@Override
public void load(){
@@ -78,7 +78,7 @@ public class Zones implements ContentList{
waveSpacing = 60 * 60 * 1f;
spawns = Array.with(
new SpawnGroup(UnitTypes.crawler){{
unitScaling = 1.5f;
unitScaling = 2f;
}},
new SpawnGroup(UnitTypes.crawler){{
@@ -90,7 +90,7 @@ public class Zones implements ContentList{
new SpawnGroup(UnitTypes.dagger){{
begin = 3;
unitScaling = 1.5f;
unitScaling = 2f;
}},
new SpawnGroup(UnitTypes.crawler){{
@@ -353,91 +353,6 @@ public class Zones implements ContentList{
}};
}};
impact = new Zone("impact0079", new MapGenerator("impact0079", 2)
.dist(2.2f, true)
.decor(
new Decoration(Blocks.snow, Blocks.sporeCluster, 0.01),
new Decoration(Blocks.metalFloor, Blocks.metalFloorDamaged, 0.02)
).drops(ItemStack.with(Items.copper, 2000, Items.lead, 1500, Items.silicon, 1000, Items.graphite, 2000, Items.pyratite, 2000, Items.titanium, 2000, Items.metaglass, 1000, Items.coal, 2000))){{
loadout = Loadouts.basicFoundation;
baseLaunchCost = ItemStack.with(Items.copper, 500, Items.lead, 500, Items.silicon, 100);
startingItems = ItemStack.list(Items.copper, 2000, Items.lead, 500, Items.silicon, 200, Items.titanium, 400, Items.graphite, 200);
itemRequirements = ItemStack.with(Items.silicon, 8000, Items.titanium, 6000, Items.graphite, 4000);
conditionWave = 20;
zoneRequirements = new Zone[]{stainedMountains};
blockRequirements = new Block[]{Blocks.launchPad, Blocks.unloader, Blocks.melter, Blocks.separator};
resources = new Item[]{Items.scrap};
rules = () -> new Rules(){{
waves = true;
waveTimer = true;
waveSpacing = 60 * 60;
spawns = Array.with(
new SpawnGroup(UnitTypes.titan){{
unitScaling = 2;
spacing = 2;
end = 10;
}},
new SpawnGroup(UnitTypes.dagger){{
begin = 1;
unitScaling = 1;
spacing = 2;
}},
new SpawnGroup(UnitTypes.dagger){{
begin = 2;
unitScaling = 1;
spacing = 2;
}},
new SpawnGroup(UnitTypes.dagger){{
begin = 10;
spacing = 2;
unitScaling = 2;
unitAmount = 2;
}},
new SpawnGroup(UnitTypes.ghoul){{
begin = 5;
unitScaling = 0.5f;
unitAmount = 1;
spacing = 5;
}},
new SpawnGroup(UnitTypes.wraith){{
begin = 10;
unitScaling = 1f;
unitAmount = 1;
spacing = 5;
}},
new SpawnGroup(UnitTypes.dagger){{
begin = 2;
unitScaling = 1;
spacing = 2;
}},
new SpawnGroup(UnitTypes.wraith){{
begin = 23;
unitScaling = 1f;
unitAmount = 1;
spacing = 2;
}},
new SpawnGroup(UnitTypes.crawler){{
begin = 20;
unitScaling = 1;
spacing = 10;
unitScaling = 0.5f;
unitAmount = 10;
}},
bossGroup(UnitTypes.lich)
);
}};
}};
desolateRift = new Zone("desolateRift", new MapGenerator("desolateRift").dist(2f)){{
loadout = Loadouts.basicNucleus;
baseLaunchCost = ItemStack.with(Items.copper, 500);
@@ -511,34 +426,6 @@ public class Zones implements ContentList{
}};
}};
/*
arcticDesert = new Zone("arcticDesert", new MapGenerator("groundZero", 1)){{ //TODO implement
baseLaunchCost = ItemStack.with(Items.copper, 300);
startingItems = ItemStack.with(Items.copper, 200);
conditionWave = 15;
zoneRequirements = new Zone[]{frozenForest};
blockRequirements = new Block[]{Blocks.copperWall};
rules = () -> new Rules(){{
waves = true;
waveTimer = true;
waveSpacing = 60 * 80;
}};
}};
dryWastes = new Zone("dryWastes", new MapGenerator("groundZero", 1)){{ //TODO implement
baseLaunchCost = ItemStack.with(Items.copper, 300);
startingItems = ItemStack.with(Items.copper, 200);
conditionWave = 15;
zoneRequirements = new Zone[]{frozenForest};
blockRequirements = new Block[]{Blocks.copperWall};
rules = () -> new Rules(){{
waves = true;
waveTimer = true;
waveSpacing = 60 * 80;
}};
}};
*/
nuclearComplex = new Zone("nuclearComplex", new MapGenerator("nuclearProductionComplex", 1)
.drops(ItemStack.with(Items.copper, 2000, Items.lead, 1500, Items.silicon, 1000, Items.graphite, 1000, Items.thorium, 200, Items.titanium, 2000, Items.metaglass, 1000))
.decor(new Decoration(Blocks.snow, Blocks.sporeCluster, 0.01))){{
@@ -548,7 +435,7 @@ public class Zones implements ContentList{
itemRequirements = ItemStack.with(Items.copper, 10000, Items.titanium, 8000, Items.metaglass, 6000, Items.plastanium, 2000);
conditionWave = 30;
launchPeriod = 15;
zoneRequirements = new Zone[]{impact};
zoneRequirements = new Zone[]{desolateRift};
blockRequirements = new Block[]{Blocks.blastDrill, Blocks.thermalGenerator};
resources = new Item[]{Items.copper, Items.scrap, Items.lead, Items.coal, Items.titanium, Items.thorium, Items.sand};
rules = () -> new Rules(){{
@@ -628,19 +515,5 @@ public class Zones implements ContentList{
);
}};
}};
/*
moltenFault = new Zone("moltenFault", new MapGenerator("groundZero", 1)){{ //TODO implement
baseLaunchCost = ItemStack.with(Items.copper, 300);
startingItems = ItemStack.with(Items.copper, 200);
conditionWave = 15;
zoneRequirements = new Zone[]{frozenForest};
blockRequirements = new Block[]{Blocks.copperWall};
rules = () -> new Rules(){{
waves = true;
waveTimer = true;
waveSpacing = 60 * 80;
}};
}};*/
}
}

View File

@@ -87,10 +87,10 @@ public class Logic implements ApplicationListener{
}
private void checkGameOver(){
if(!state.rules.pvp && state.teams.get(defaultTeam).cores.size == 0 && !state.gameOver){
if(state.rules.waves && state.teams.get(defaultTeam).cores.size == 0 && !state.gameOver){
state.gameOver = true;
Events.fire(new GameOverEvent(waveTeam));
}else if(state.rules.pvp){
}else if(!state.rules.waves){
Team alive = null;
for(Team team : Team.all){

View File

@@ -230,7 +230,7 @@ public class Renderer implements ApplicationListener{
private void drawFlyerShadows(){
float trnsX = -12, trnsY = -13;
Draw.color(0, 0, 0, 0.15f);
Draw.color(0, 0, 0, 0.22f);
for(EntityGroup<? extends BaseUnit> group : unitGroups){
if(!group.isEmpty()){
@@ -287,7 +287,7 @@ public class Renderer implements ApplicationListener{
public void clampScale(){
float s = io.anuke.arc.scene.ui.layout.Unit.dp.scl(1f);
targetscale = Mathf.clamp(targetscale, s * 2.5f, Math.round(s * 5));
targetscale = Mathf.clamp(targetscale, s * 1.5f, Math.round(s * 5));
}
}

View File

@@ -114,22 +114,23 @@ public class UI implements ApplicationListener{
}
void loadCursors(){
int cursorScaling = 3;
int cursorScaling = 1, outlineThickness = 3;
Color outlineColor = Color.valueOf("444444");
drillCursor = Core.graphics.newCursor("drill", cursorScaling, outlineColor);
unloadCursor = Core.graphics.newCursor("unload", cursorScaling, outlineColor);
SystemCursor.arrow.set(Core.graphics.newCursor("cursor", cursorScaling, outlineColor));
SystemCursor.hand.set(Core.graphics.newCursor("hand", cursorScaling, outlineColor));
SystemCursor.ibeam.set(Core.graphics.newCursor("ibeam", cursorScaling, outlineColor));
drillCursor = Core.graphics.newCursor("drill", cursorScaling, outlineColor, outlineThickness);
unloadCursor = Core.graphics.newCursor("unload", cursorScaling, outlineColor, outlineThickness);
SystemCursor.arrow.set(Core.graphics.newCursor("cursor", cursorScaling, outlineColor, outlineThickness));
SystemCursor.hand.set(Core.graphics.newCursor("hand", cursorScaling, outlineColor, outlineThickness));
SystemCursor.ibeam.set(Core.graphics.newCursor("ibeam", cursorScaling, outlineColor, outlineThickness));
Core.graphics.restoreCursor();
}
void generateFonts(Skin skin){
generator = new FreeTypeFontGenerator(Core.files.internal("fonts/pixel.ttf"));
generator = new FreeTypeFontGenerator(Core.files.internal("fonts/font.ttf"));
FreeTypeFontParameter param = new FreeTypeFontParameter();
param.size = (int)(14*2 * Math.max(Unit.dp.scl(1f), 0.5f));
param.size = (int)(8*2 * Math.max(Unit.dp.scl(1f), 0.5f));
//param.size = (int)(14*2 * Math.max(Unit.dp.scl(1f), 0.5f));
param.shadowColor = Color.DARK_GRAY;
param.shadowOffsetY = 2;
param.incremental = true;

View File

@@ -797,6 +797,7 @@ public class Player extends Unit implements BuilderTrait, ShooterTrait{
if(isLocal){
stream.writeByte(mech.id);
stream.writeByte(playerIndex);
stream.writeInt(lastSpawner == null ? noSpawner : lastSpawner.getTile().pos());
super.writeSave(stream, false);
}
}
@@ -808,12 +809,17 @@ public class Player extends Unit implements BuilderTrait, ShooterTrait{
if(local && !headless){
byte mechid = stream.readByte();
int index = stream.readByte();
int spawner = stream.readInt();
if(world.tile(spawner) != null && world.tile(spawner).entity != null && world.tile(spawner).entity instanceof SpawnerTrait){
lastSpawner = (SpawnerTrait)(world.tile(spawner).entity);
}
players[index].readSaveSuper(stream);
players[index].mech = content.getByID(ContentType.mech, mechid);
players[index].dead = false;
}else if(local){
byte mechid = stream.readByte();
stream.readByte();
stream.readInt();
readSaveSuper(stream);
mech = content.getByID(ContentType.mech, mechid);
dead = false;
@@ -833,7 +839,7 @@ public class Player extends Unit implements BuilderTrait, ShooterTrait{
buffer.writeByte(Pack.byteValue(isAdmin) | (Pack.byteValue(dead) << 1) | (Pack.byteValue(isBoosting) << 2));
buffer.writeInt(Color.rgba8888(color));
buffer.writeByte(mech.id);
buffer.writeInt(mining == null ? -1 : mining.pos());
buffer.writeInt(mining == null ? noSpawner : mining.pos());
buffer.writeInt(spawner == null ? noSpawner : spawner.getTile().pos());
buffer.writeShort((short) (baseRotation * 2));

View File

@@ -165,6 +165,7 @@ public class BlockRenderer{
for(int y = miny; y <= maxy; y++){
boolean expanded = (Math.abs(x - avgx) > rangex || Math.abs(y - avgy) > rangey);
Tile tile = world.rawTile(x, y);
if(tile == null) continue; //how is this possible?
Block block = tile.block();
if(block != Blocks.air && block.cacheLayer == CacheLayer.normal){

View File

@@ -2,21 +2,24 @@ package io.anuke.mindustry.io;
import io.anuke.annotations.Annotations.ReadClass;
import io.anuke.annotations.Annotations.WriteClass;
import io.anuke.arc.graphics.Color;
import io.anuke.mindustry.entities.Effects;
import io.anuke.mindustry.entities.Effects.Effect;
import io.anuke.mindustry.entities.Entities;
import io.anuke.arc.graphics.Color;
import io.anuke.mindustry.entities.type.Player;
import io.anuke.mindustry.entities.type.Unit;
import io.anuke.mindustry.entities.bullet.Bullet;
import io.anuke.mindustry.entities.bullet.BulletType;
import io.anuke.mindustry.entities.traits.BuilderTrait.BuildRequest;
import io.anuke.mindustry.entities.traits.ShooterTrait;
import io.anuke.mindustry.entities.type.BaseUnit;
import io.anuke.mindustry.entities.type.Player;
import io.anuke.mindustry.entities.type.Unit;
import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.net.Packets.AdminAction;
import io.anuke.mindustry.net.Packets.KickReason;
import io.anuke.mindustry.type.*;
import io.anuke.mindustry.type.ContentType;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.type.Liquid;
import io.anuke.mindustry.type.Mech;
import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.Pos;
import io.anuke.mindustry.world.Tile;
@@ -25,7 +28,6 @@ import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import static io.anuke.mindustry.Vars.*;
@@ -253,7 +255,7 @@ public class TypeIO{
@WriteClass(String.class)
public static void writeString(ByteBuffer buffer, String string){
if(string != null){
byte[] bytes = string.getBytes(StandardCharsets.UTF_8);
byte[] bytes = string.getBytes(charset);
buffer.putShort((short) bytes.length);
buffer.put(bytes);
}else{
@@ -267,7 +269,7 @@ public class TypeIO{
if(slength != -1){
byte[] bytes = new byte[slength];
buffer.get(bytes);
return new String(bytes, StandardCharsets.UTF_8);
return new String(bytes, charset);
}else{
return null;
}
@@ -289,7 +291,7 @@ public class TypeIO{
public static void writeStringData(DataOutput buffer, String string) throws IOException{
if(string != null){
byte[] bytes = string.getBytes(StandardCharsets.UTF_8);
byte[] bytes = string.getBytes(charset);
buffer.writeShort((short) bytes.length);
buffer.write(bytes);
}else{
@@ -302,7 +304,7 @@ public class TypeIO{
if(slength != -1){
byte[] bytes = new byte[slength];
buffer.readFully(bytes);
return new String(bytes, StandardCharsets.UTF_8);
return new String(bytes, charset);
}else{
return null;
}

View File

@@ -3,8 +3,8 @@ package io.anuke.mindustry.net;
import io.anuke.arc.Core;
import io.anuke.arc.collection.ObjectMap;
import io.anuke.arc.collection.ObjectMap.Entry;
import io.anuke.mindustry.entities.Entities;
import io.anuke.arc.util.Time;
import io.anuke.mindustry.entities.Entities;
import io.anuke.mindustry.entities.type.Player;
import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.game.Teams;
@@ -17,7 +17,6 @@ import io.anuke.mindustry.world.Tile;
import java.io.*;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import static io.anuke.mindustry.Vars.*;
@@ -149,17 +148,17 @@ public class NetworkIO{
ByteBuffer buffer = ByteBuffer.allocate(128);
buffer.put((byte) host.getBytes(StandardCharsets.UTF_8).length);
buffer.put(host.getBytes(StandardCharsets.UTF_8));
buffer.put((byte) host.getBytes(charset).length);
buffer.put(host.getBytes(charset));
buffer.put((byte) map.getBytes(StandardCharsets.UTF_8).length);
buffer.put(map.getBytes(StandardCharsets.UTF_8));
buffer.put((byte) map.getBytes(charset).length);
buffer.put(map.getBytes(charset));
buffer.putInt(playerGroup.size());
buffer.putInt(state.wave);
buffer.putInt(Version.build);
buffer.put((byte)Version.type.getBytes(StandardCharsets.UTF_8).length);
buffer.put(Version.type.getBytes(StandardCharsets.UTF_8));
buffer.put((byte)Version.type.getBytes(charset).length);
buffer.put(Version.type.getBytes(charset));
return buffer;
}
@@ -172,8 +171,8 @@ public class NetworkIO{
byte[] mb = new byte[mlength];
buffer.get(mb);
String host = new String(hb, StandardCharsets.UTF_8);
String map = new String(mb, StandardCharsets.UTF_8);
String host = new String(hb, charset);
String map = new String(mb, charset);
int players = buffer.getInt();
int wave = buffer.getInt();
@@ -181,7 +180,7 @@ public class NetworkIO{
byte tlength = buffer.get();
byte[] tb = new byte[tlength];
buffer.get(tb);
String vertype = new String(tb, StandardCharsets.UTF_8);
String vertype = new String(tb, charset);
return new Host(host, hostAddress, map, wave, players, version, vertype);
}

View File

@@ -78,6 +78,7 @@ public class Bar extends Element{
GlyphLayout lay = Pools.obtain(GlyphLayout.class, GlyphLayout::new);
lay.setText(font, name);
font.setColor(Color.WHITE);
font.draw(name, x + width/2f - lay.width/2f, y + height/2f + lay.height/2f + 1);
Pools.free(lay);

View File

@@ -29,6 +29,7 @@ public class BlockConfigFragment extends Fragment{
@Override
public void build(Group parent){
table.visible(false);
parent.addChild(table);
}

View File

@@ -54,8 +54,6 @@ public class HudFragment extends Fragment{
cont.top().left().visible(() -> !state.is(State.menu));
if(mobile){
cont.table(t -> {});
cont.row();
cont.table(select -> {
select.left();
select.defaults().size(dsize).left();

View File

@@ -43,7 +43,7 @@ public class MenuFragment extends Fragment{
}
//version info
parent.fill(c -> c.bottom().left().add(Strings.formatArgs("Mindustry v{0} {1}-{2} {3}{4}", Version.number, Version.modifier, Version.type,
parent.fill(c -> c.bottom().left().add(Strings.format("Mindustry v{0} {1}-{2} {3}{4}", Version.number, Version.modifier, Version.type,
(Version.build == -1 ? "custom build" : "build " + Version.build), Version.revision == 0 ? "" : "." + Version.revision))
.visible(() -> state.is(State.menu)));
}

View File

@@ -13,8 +13,6 @@ import io.anuke.arc.graphics.g2d.Lines;
import io.anuke.arc.graphics.g2d.TextureRegion;
import io.anuke.arc.math.Mathf;
import io.anuke.arc.scene.ui.layout.Table;
import io.anuke.arc.util.Log;
import io.anuke.arc.util.Strings;
import io.anuke.arc.util.Time;
import io.anuke.mindustry.entities.Damage;
import io.anuke.mindustry.entities.bullet.Bullet;
@@ -157,6 +155,8 @@ public class Block extends BlockStorage{
public Array<Tile> getPowerConnections(Tile tile, Array<Tile> out){
out.clear();
if(tile == null || tile.entity == null || tile.entity.power == null) return out;
for(Tile other : tile.entity.proximity()){
if(other.entity.power != null && !(consumesPower && other.block().consumesPower && !outputsPower && !other.block().outputsPower)
&& !tile.entity.power.links.contains(other.pos())){
@@ -284,10 +284,6 @@ public class Block extends BlockStorage{
setBars();
consumes.checkRequired(this);
if(buildRequirements.length > 0 && !Core.bundle.has("block." + name + ".name")){
Log.warn("No name for block '{0}' found. Add the following to bundle.properties:\nblock.{0}.name = {1}", name, Strings.capitalize(name));
}
}
@Override

View File

@@ -182,7 +182,7 @@ public class Conveyor extends Block{
entity.minitem = 1f;
Tile next = tile.getNearby(tile.getRotation());
float nextMax = next.block() instanceof Conveyor ? 1f - Math.max(itemSpace - next.<ConveyorEntity>entity().minitem, 0) : 1f;
float nextMax = next != null && next.block() instanceof Conveyor ? 1f - Math.max(itemSpace - next.<ConveyorEntity>entity().minitem, 0) : 1f;
int minremove = Integer.MAX_VALUE;
for(int i = entity.convey.size - 1; i >= 0; i--){

View File

@@ -91,7 +91,7 @@ public class ItemBridge extends Block{
}
public Tile findLink(int x, int y){
if(linkValid(world.tile(x, y), world.tile(lastPlaced)) && lastPlaced != Pos.get(x, y)){
if(world.tile(x, y) != null && linkValid(world.tile(x, y), world.tile(lastPlaced)) && lastPlaced != Pos.get(x, y)){
return world.tile(lastPlaced);
}
@@ -312,7 +312,7 @@ public class ItemBridge extends Block{
}
public boolean linkValid(Tile tile, Tile other, boolean checkDouble){
if(other == null) return false;
if(other == null || tile == null) return false;
if(tile.x == other.x){
if(Math.abs(tile.y - other.y) > range) return false;
}else if(tile.y == other.y){

View File

@@ -52,7 +52,7 @@ public class ImpactReactor extends PowerGenerator{
bars.add("poweroutput", entity -> new Bar(() ->
Core.bundle.format("blocks.poweroutput",
Strings.toFixed(Math.max(entity.tile.block().getPowerProduction(entity.tile) - consumes.get(ConsumePower.class).powerPerTick, 0)*60, 1)),
Strings.toFixed(Math.max(entity.tile.block().getPowerProduction(entity.tile) - consumes.get(ConsumePower.class).powerPerTick, 0)*60 * entity.delta(), 1)),
() -> Pal.powerBar,
() -> ((GeneratorEntity)entity).productionEfficiency));
}

View File

@@ -167,9 +167,6 @@ public class Drill extends Block{
public void update(Tile tile){
DrillEntity entity = tile.entity();
if(Float.isNaN(entity.drillTime)) entity.drillTime = 0f;
if(Float.isNaN(entity.warmup)) entity.warmup = 0f;
if(entity.dominantItem == null){
oreCount.clear();
itemArray.clear();

View File

@@ -21,6 +21,7 @@ import java.io.DataOutput;
import java.io.IOException;
import static io.anuke.mindustry.Vars.content;
import static io.anuke.mindustry.Vars.control;
public class LiquidSource extends Block{
@@ -71,8 +72,10 @@ public class LiquidSource extends Block{
for(int i = 0; i < items.size; i++){
final int f = i;
ImageButton button = cont.addImageButton("clear", "clear-toggle", 24,
() -> Call.setLiquidSourceLiquid(null, tile, items.get(f))).size(38).group(group).get();
ImageButton button = cont.addImageButton("clear", "clear-toggle", 24, () -> {
Call.setLiquidSourceLiquid(null, tile, items.get(f));
control.input(0).frag.config.hideConfig();
}).size(38).group(group).get();
button.getStyle().imageUp = new TextureRegionDrawable(items.get(i).iconRegion);
button.setChecked(entity.source.id == f);

View File

@@ -8,7 +8,7 @@ public class StringValue implements StatValue{
private final String value;
public StringValue(String value, Object... args){
this.value = Strings.formatArgs(value, args);
this.value = Strings.format(value, args);
}
@Override