Merge branch 'master' of https://github.com/angelickite/Mindustry
This commit is contained in:
@@ -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>
|
||||||
@@ -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);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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)){
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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)),
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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()));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user