This commit is contained in:
angelickite
2018-02-04 23:23:22 +01:00
13 changed files with 92 additions and 50 deletions

View File

@@ -14,4 +14,5 @@
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.net.Packets" /> <extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.net.Packets" />
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.net.Packet" /> <extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.net.Packet" />
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.net.Streamable" /> <extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.net.Streamable" />
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.world.BlockBar" />
</module> </module>

View File

@@ -10,7 +10,6 @@ import io.anuke.mindustry.entities.BulletType;
import io.anuke.mindustry.entities.Player; import io.anuke.mindustry.entities.Player;
import io.anuke.mindustry.entities.SyncEntity; import io.anuke.mindustry.entities.SyncEntity;
import io.anuke.mindustry.entities.enemies.Enemy; import io.anuke.mindustry.entities.enemies.Enemy;
import io.anuke.mindustry.graphics.Fx;
import io.anuke.mindustry.io.Platform; import io.anuke.mindustry.io.Platform;
import io.anuke.mindustry.net.Net; import io.anuke.mindustry.net.Net;
import io.anuke.mindustry.net.Net.SendMode; import io.anuke.mindustry.net.Net.SendMode;
@@ -20,7 +19,6 @@ import io.anuke.mindustry.resource.Item;
import io.anuke.mindustry.world.Map; import io.anuke.mindustry.world.Map;
import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.Tile;
import io.anuke.mindustry.world.blocks.ProductionBlocks; import io.anuke.mindustry.world.blocks.ProductionBlocks;
import io.anuke.ucore.core.Effects;
import io.anuke.ucore.core.Timers; import io.anuke.ucore.core.Timers;
import io.anuke.ucore.entities.BaseBulletType; import io.anuke.ucore.entities.BaseBulletType;
import io.anuke.ucore.entities.Entities; import io.anuke.ucore.entities.Entities;
@@ -272,10 +270,10 @@ public class NetClient extends Module {
Net.handleClient(ItemTransferPacket.class, packet -> { Net.handleClient(ItemTransferPacket.class, packet -> {
Tile tile = world.tile(packet.position); Tile tile = world.tile(packet.position);
if(tile == null || tile.entity == null) return;
Tile next = tile.getNearby(packet.rotation); Tile next = tile.getNearby(packet.rotation);
tile.entity.items[packet.itemid] --; tile.entity.items[packet.itemid] --;
next.block().handleItem(Item.getByID(packet.itemid), next, tile); next.block().handleItem(Item.getByID(packet.itemid), next, tile);
Effects.effect(Fx.transfer, tile.drawx(), tile.drawy(), packet.rotation * 90);
}); });
} }

View File

@@ -277,7 +277,7 @@ public class Player extends SyncEntity{
interpolator.time = 0f; interpolator.time = 0f;
interpolator.last.set(this.x, this.y); interpolator.last.set(this.x, this.y);
interpolator.target.set(x, y); interpolator.target.set(x, y);
interpolator.spacing = Math.max(((TimeUtils.timeSinceMillis(time) / 1000f) * 60f), 4f); interpolator.spacing = Math.min(Math.max(((TimeUtils.timeSinceMillis(time) / 1000f) * 60f), 4f), 10);
} }
@Override @Override
@@ -291,6 +291,12 @@ public class Player extends SyncEntity{
x = Tmp.v2.x; x = Tmp.v2.x;
y = Tmp.v2.y; y = Tmp.v2.y;
if(i.target.dst(x, y) > 128){
set(i.target.x, i.target.y);
i.time = 0f;
i.last.set(i.target);
}
angle = Mathf.lerpAngDelta(angle, i.targetrot, 0.6f); angle = Mathf.lerpAngDelta(angle, i.targetrot, 0.6f);
if(isAndroid && i.target.dst(i.last) > 2f && Timers.get(this, "dashfx", 2)){ if(isAndroid && i.target.dst(i.last) > 2f && Timers.get(this, "dashfx", 2)){

View File

@@ -142,7 +142,7 @@ public class Enemy extends SyncEntity {
interpolator.time = 0f; interpolator.time = 0f;
interpolator.last.set(this.x, this.y); interpolator.last.set(this.x, this.y);
interpolator.target.set(x, y); interpolator.target.set(x, y);
interpolator.spacing = Math.max(((TimeUtils.timeSinceMillis(time) / 1000f) * 60f), 4f); interpolator.spacing = Math.min(Math.max(((TimeUtils.timeSinceMillis(time) / 1000f) * 60f), 4f), 10f);
} }
@Override @Override

View File

@@ -25,7 +25,7 @@ import java.io.IOException;
import static io.anuke.mindustry.Vars.*; import static io.anuke.mindustry.Vars.*;
public class Net{ public class Net{
public static final int version = 17; public static final int version = 18;
private static boolean server; private static boolean server;
private static boolean active; private static boolean active;

View File

@@ -77,7 +77,7 @@ public class Recipes {
new Recipe(power, DefenseBlocks.shieldgenerator, stack(Item.titanium, 30), stack(Item.dirium, 30)), new Recipe(power, DefenseBlocks.shieldgenerator, stack(Item.titanium, 30), stack(Item.dirium, 30)),
new Recipe(distribution, DistributionBlocks.teleporter, stack(Item.steel, 20), stack(Item.dirium, 15)), new Recipe(distribution, DistributionBlocks.teleporter, stack(Item.steel, 30), stack(Item.dirium, 40)),
new Recipe(power, DefenseBlocks.repairturret, stack(Item.iron, 30)), new Recipe(power, DefenseBlocks.repairturret, stack(Item.iron, 30)),
new Recipe(power, DefenseBlocks.megarepairturret, stack(Item.iron, 20), stack(Item.steel, 30)), new Recipe(power, DefenseBlocks.megarepairturret, stack(Item.iron, 20), stack(Item.steel, 30)),

View File

@@ -8,7 +8,8 @@ import io.anuke.ucore.core.Timers;
import io.anuke.ucore.util.Bits; import io.anuke.ucore.util.Bits;
public class Junction extends Block{ public class Junction extends Block{
float speed = 20; //frames taken to go through this junction protected float speed = 20; //frames taken to go through this junction
protected int capacity = 16;
public Junction(String name) { public Junction(String name) {
super(name); super(name);
@@ -24,37 +25,49 @@ public class Junction extends Block{
@Override @Override
public void handleItem(Item item, Tile tile, Tile source){ public void handleItem(Item item, Tile tile, Tile source){
JunctionEntity entity = tile.entity(); JunctionEntity entity = tile.entity();
entity.items[entity.index ++] = Bits.packInt((short)item.id, source.relativeTo(tile.x, tile.y)); boolean x = tile.x == source.x;
int value = Bits.packInt((short)item.id, source.relativeTo(tile.x, tile.y));
if(x){
entity.bx.add(value);
}else{
entity.by.add(value);
}
} }
@Override @Override
public void update(Tile tile){ public void update(Tile tile){
JunctionEntity entity = tile.entity(); JunctionEntity entity = tile.entity();
if(entity.index > 0){ for(int i = 0; i < 2; i ++){
entity.time += Timers.delta(); Buffer buffer = (i == 0 ? entity.bx : entity.by);
if(entity.time >= speed){ if(buffer.index > 0){
int i = entity.items[-- entity.index]; buffer.time += Timers.delta();
if(buffer.time >= speed){
int val = buffer.items[buffer.index - 1];
int item = Bits.getLeftShort(i); Item item = Item.getByID(Bits.getLeftShort(val));
int direction = Bits.getRightShort(i); int direction = Bits.getRightShort(val);
Tile dest = tile.getNearby(direction);
Tile target = tile.getNearby(direction); if(dest == null || !dest.block().acceptItem(item, dest, tile)) continue;
target.block().handleItem(Item.getByID(item), target, tile); dest.block().handleItem(item, dest, tile);
entity.time = 0f; buffer.time = 0f;
buffer.index --;
} }
}else{ }else{
entity.time = 0f; buffer.time = 0f;
}
} }
} }
@Override @Override
public boolean acceptItem(Item item, Tile tile, Tile source){ public boolean acceptItem(Item item, Tile tile, Tile source){
JunctionEntity entity = tile.entity(); JunctionEntity entity = tile.entity();
boolean x = tile.x == source.x;
if(entity.index >= entity.items.length - 1) return false; if((x && entity.bx.full()) || (!x && entity.by.full())) return false;
int dir = source.relativeTo(tile.x, tile.y); int dir = source.relativeTo(tile.x, tile.y);
if(dir == -1) return false; if(dir == -1) return false;
Tile to = tile.getNearby(dir); Tile to = tile.getNearby(dir);
@@ -67,8 +80,21 @@ public class Junction extends Block{
} }
class JunctionEntity extends TileEntity{ class JunctionEntity extends TileEntity{
int[] items = new int[16]; //16 item buffer Buffer bx = new Buffer();
Buffer by = new Buffer();
}
class Buffer{
int[] items = new int[capacity];
int index; int index;
float time; float time;
void add(int id){
items[index ++] = id;
}
boolean full(){
return index >= items.length - 1;
}
} }
} }

View File

@@ -1,14 +1,15 @@
package io.anuke.mindustry.world.blocks.types.distribution; package io.anuke.mindustry.world.blocks.types.distribution;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.resource.Item; import io.anuke.mindustry.resource.Item;
import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.core.Timers; import io.anuke.ucore.core.Timers;
import io.anuke.ucore.util.Bits;
import io.anuke.ucore.util.Log;
public class TunnelConveyor extends Junction{ public class TunnelConveyor extends Block{
protected int maxdist = 3; protected int maxdist = 3;
protected float speed = 20; //frames taken to go through this tunnel
protected int capacity = 16;
protected TunnelConveyor(String name) { protected TunnelConveyor(String name) {
super(name); super(name);
@@ -16,7 +17,6 @@ public class TunnelConveyor extends Junction{
update = true; update = true;
solid = true; solid = true;
health = 70; health = 70;
speed = 25;
} }
@Override @Override
@@ -26,43 +26,38 @@ public class TunnelConveyor extends Junction{
@Override @Override
public void handleItem(Item item, Tile tile, Tile source){ public void handleItem(Item item, Tile tile, Tile source){
TunnelEntity entity = tile.entity();
Tile tunnel = getDestTunnel(tile, item); Tile tunnel = getDestTunnel(tile, item);
if(tunnel == null) return; if(tunnel == null) return;
Tile to = tunnel.getNearby(tunnel.getRotation()); Tile to = tunnel.getNearby(tunnel.getRotation());
if(to == null) return; if(to == null) return;
Block before = to.block();
Timers.run(25, () -> { entity.buffer[entity.index ++] = item.id;
if(to.block() != before) return;
//TODO fix
try {
to.block().handleItem(item, to, tunnel);
}catch (NullPointerException e){
Log.err(e);
}
});
} }
@Override @Override
public void update(Tile tile){ public void update(Tile tile){
JunctionEntity entity = tile.entity(); TunnelEntity entity = tile.entity();
if(entity.index > 0){ if(entity.index > 0){
entity.time += Timers.delta(); entity.time += Timers.delta();
if(entity.time >= speed){ if(entity.time >= speed){
int i = entity.items[-- entity.index]; int i = entity.buffer[entity.index - 1];
entity.time = 0f;
int itemid = Bits.getLeftShort(i); Item item = Item.getByID(i);
Item item = Item.getByID(itemid);
Tile tunnel = getDestTunnel(tile, item); Tile tunnel = getDestTunnel(tile, item);
if(tunnel == null) return; if(tunnel == null) return;
Tile target = tunnel.getNearby(tunnel.getRotation()); Tile target = tunnel.getNearby(tunnel.getRotation());
if(target == null) return; if(target == null) return;
if(!target.block().acceptItem(item, target, tunnel)) return;
target.block().handleItem(item, target, tunnel); target.block().handleItem(item, target, tunnel);
entity.index --;
entity.time = 0f;
} }
}else{ }else{
entity.time = 0f; entity.time = 0f;
@@ -71,6 +66,10 @@ public class TunnelConveyor extends Junction{
@Override @Override
public boolean acceptItem(Item item, Tile tile, Tile source){ public boolean acceptItem(Item item, Tile tile, Tile source){
TunnelEntity entity = tile.entity();
if(entity.index >= entity.buffer.length - 1) return false;
int rot = source.relativeTo(tile.x, tile.y); int rot = source.relativeTo(tile.x, tile.y);
if(rot != (tile.getRotation() + 2)%4) return false; if(rot != (tile.getRotation() + 2)%4) return false;
Tile tunnel = getDestTunnel(tile, item); Tile tunnel = getDestTunnel(tile, item);
@@ -83,6 +82,11 @@ public class TunnelConveyor extends Junction{
} }
} }
@Override
public TileEntity getEntity() {
return new TunnelEntity();
}
Tile getDestTunnel(Tile tile, Item item){ Tile getDestTunnel(Tile tile, Item item){
Tile dest = tile; Tile dest = tile;
int rel = (tile.getRotation() + 2)%4; int rel = (tile.getRotation() + 2)%4;
@@ -96,4 +100,10 @@ public class TunnelConveyor extends Junction{
} }
return null; return null;
} }
class TunnelEntity extends TileEntity {
int[] buffer = new int[capacity];
int index;
float time;
}
} }

View File

@@ -161,8 +161,8 @@ public class Generator extends PowerBlock{
continue; continue;
PowerAcceptor p = (PowerAcceptor) target.block(); PowerAcceptor p = (PowerAcceptor) target.block();
float transmit = entity.power * Timers.delta(); float transmit = Math.min(powerSpeed * Timers.delta(), entity.power);
if(p.acceptsPower(target) && entity.power >= transmit){ if(p.acceptsPower(target)){
float accepted = p.addPower(target, transmit); float accepted = p.addPower(target, transmit);
entity.power -= accepted; entity.power -= accepted;
} }

View File

@@ -91,7 +91,7 @@ public class KryoClient implements ClientProvider{
}; };
if(KryoRegistrator.fakeLag){ if(KryoRegistrator.fakeLag){
client.addListener(new LagListener(0, KryoRegistrator.fakeLagAmount, listener)); client.addListener(new LagListener(KryoRegistrator.fakeLagMin, KryoRegistrator.fakeLagMax, listener));
}else{ }else{
client.addListener(listener); client.addListener(listener);
} }

View File

@@ -16,7 +16,8 @@ import static io.anuke.mindustry.Vars.playerGroup;
public class KryoRegistrator { public class KryoRegistrator {
public static boolean fakeLag = false; public static boolean fakeLag = false;
public static final int fakeLagAmount = 500; public static final int fakeLagMax = 1000;
public static final int fakeLagMin = 0;
static{ static{
Log.set(Log.LEVEL_WARN); Log.set(Log.LEVEL_WARN);

View File

@@ -105,7 +105,7 @@ public class KryoServer implements ServerProvider {
}; };
if(KryoRegistrator.fakeLag){ if(KryoRegistrator.fakeLag){
server.addListener(new LagListener(0, KryoRegistrator.fakeLagAmount, listener)); server.addListener(new LagListener(KryoRegistrator.fakeLagMin, KryoRegistrator.fakeLagMax, listener));
}else{ }else{
server.addListener(listener); server.addListener(listener);
} }

View File

@@ -174,7 +174,7 @@ public class ServerControl extends Module {
}else{ }else{
info("&lyNo players connected."); info("&lyNo players connected.");
} }
info("&lbFPS: {0}", Gdx.graphics.getFramesPerSecond()); info("&lbFPS: {0}", (int)(60f/Timers.delta()));
} }
}); });