Made friendly fire an option

This commit is contained in:
Anuken
2018-01-16 15:00:46 -05:00
parent c2a10193c6
commit 1e63236cc4
13 changed files with 76 additions and 22 deletions

View File

@@ -75,6 +75,7 @@ public class Control extends Module{
float respawntime;
InputHandler input;
boolean friendlyFire;
private InputProxy proxy;
private float controlx, controly;
@@ -218,14 +219,6 @@ public class Control extends Module{
saves.load();
}
public Saves getSaves(){
return saves;
}
public boolean showCursor(){
return controlling;
}
public void reset(){
weapons.clear();
@@ -277,7 +270,26 @@ public class Control extends Module{
GameState.set(State.playing);
}
public Saves getSaves(){
return saves;
}
public boolean showCursor(){
return controlling;
}
public boolean isFriendlyFire() {
return friendlyFire;
}
public void setFriendlyFire(boolean friendlyFire) {
if(this.friendlyFire != friendlyFire && Net.active() && Net.server()){
Vars.netServer.handleFriendlyFireChange(friendlyFire);
}
this.friendlyFire = friendlyFire;
}
public Tile getCore(){
return core;
}

View File

@@ -13,7 +13,7 @@ import io.anuke.mindustry.entities.SyncEntity;
import io.anuke.mindustry.entities.enemies.Enemy;
import io.anuke.mindustry.entities.enemies.EnemyType;
import io.anuke.mindustry.graphics.Fx;
import io.anuke.mindustry.io.NetworkIO;
import io.anuke.mindustry.net.NetworkIO;
import io.anuke.mindustry.net.Net;
import io.anuke.mindustry.net.Net.SendMode;
import io.anuke.mindustry.net.Packets.*;
@@ -319,6 +319,8 @@ public class NetClient extends Module {
kicked = true;
Gdx.app.postRunnable(ui.restart::show);
});
Net.handle(FriendlyFireChangePacket.class, packet -> Vars.control.setFriendlyFire(packet.enabled));
}
@Override

View File

@@ -9,7 +9,7 @@ import io.anuke.mindustry.entities.Player;
import io.anuke.mindustry.entities.SyncEntity;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.entities.enemies.Enemy;
import io.anuke.mindustry.io.NetworkIO;
import io.anuke.mindustry.net.NetworkIO;
import io.anuke.mindustry.net.Net;
import io.anuke.mindustry.net.Net.SendMode;
import io.anuke.mindustry.net.Packets.*;
@@ -220,6 +220,15 @@ public class NetServer extends Module{
Gdx.app.postRunnable(() -> Vars.ui.chatfrag.addMessage(message, null));
}
public void handleFriendlyFireChange(boolean enabled){
FriendlyFireChangePacket packet = new FriendlyFireChangePacket();
packet.enabled = enabled;
sendMessage(enabled ? "[accent]Friendly fire enabled." : "[accent]Friendly fire disabled.");
Net.send(packet, SendMode.tcp);
}
public void handleGameOver(){
Net.send(new GameOverPacket(), SendMode.tcp);
Timers.runTask(30f, () -> GameState.set(State.menu));
@@ -303,7 +312,6 @@ public class NetServer extends Module{
current = ByteBuffer.wrap(bytes);
//write the group ID so the client knows which group this is
current.put((byte)group.getID());
UCore.log(" Writing new packet: " + i);
}
SyncEntity entity = (SyncEntity) group.all().get(i);

View File

@@ -50,6 +50,12 @@ public class Player extends SyncEntity{
@Override
public boolean collides(SolidEntity other){
if(other instanceof Bullet){
Bullet b = (Bullet)other;
if(!Vars.control.isFriendlyFire() && b.owner instanceof Player){
return false;
}
}
return super.collides(other) && !isAndroid;
}

View File

@@ -1,4 +1,4 @@
package io.anuke.mindustry.io;
package io.anuke.mindustry.net;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.utils.ByteArray;
@@ -19,7 +19,7 @@ import io.anuke.ucore.entities.Entities;
import java.io.*;
public class NetworkIO {
private static final int fileVersionID = 15;
private static final int fileVersionID = 16;
public static void write(int playerID, ByteArray upgrades, OutputStream os){
@@ -38,6 +38,7 @@ public class NetworkIO {
stream.writeFloat(Vars.control.getWaveCountdown()); //wave countdown
stream.writeInt(Vars.control.enemyGroup.amount()); //enemy amount
stream.writeBoolean(Vars.control.isFriendlyFire()); //friendly fire state
stream.writeInt(playerID); //player remap ID
//--INVENTORY--
@@ -168,9 +169,11 @@ public class NetworkIO {
int wave = stream.readInt();
float wavetime = stream.readFloat();
int enemies = stream.readInt();
boolean friendlyfire = stream.readBoolean();
Vars.control.setWaveData(enemies, wave, wavetime);
Vars.control.setMode(GameMode.values()[mode]);
Vars.control.setFriendlyFire(friendlyfire);
int pid = stream.readInt();

View File

@@ -137,4 +137,8 @@ public class Packets {
public static class GameOverPacket{
}
public static class FriendlyFireChangePacket{
public boolean enabled;
}
}

View File

@@ -39,6 +39,7 @@ public class Registrator {
EntityRequestPacket.class,
ConnectConfirmPacket.class,
GameOverPacket.class,
FriendlyFireChangePacket.class,
Class.class,
byte[].class,

View File

@@ -31,6 +31,13 @@ public class PlayerListFragment implements Fragment{
pane.setScrollingDisabled(true, false);
pane.setFadeScrollBars(false);
add(pane).grow();
row();
new table("pane"){{
margin(12f);
get().addCheck("$text.server.friendlyfire", b -> {
Vars.control.setFriendlyFire(b);
}).growX().update(i -> i.setChecked(Vars.control.isFriendlyFire())).disabled(b -> Net.client());
}}.pad(10f).growX().end();
}}.end();
update(t -> {

View File

@@ -18,8 +18,6 @@ import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.AbstractList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import static io.anuke.mindustry.Vars.tilesize;
@@ -74,6 +72,8 @@ public class Conveyor extends Block{
for(int i = 0; i < entity.convey.size; i ++){
ItemPos pos = pos1.set(entity.convey.get(i));
if(pos.item == null) continue;
Tmp.v1.set(tilesize, 0).rotate(rotation * 90);
Tmp.v2.set(-tilesize / 2, pos.x*tilesize/2).rotate(rotation * 90);
@@ -97,6 +97,11 @@ public class Conveyor extends Block{
for(int i = 0; i < entity.convey.size; i ++){
int value = entity.convey.get(i);
ItemPos pos = pos1.set(value);
if(pos.item == null){
removals.add(value);
continue;
}
boolean canmove = i == entity.convey.size - 1 ||
!(pos2.set(entity.convey.get(i + 1)).y - pos.y < itemSpace * Timers.delta());
@@ -230,10 +235,10 @@ public class Conveyor extends Block{
}
};
Collections.sort(wrapper, new Comparator(){public int compare(Object a, Object b){ return compareItems((Integer)a, (Integer)b); }});
wrapper.sort(Conveyor::compareItems);
}
private static int compareItems(int a, int b){
private static int compareItems(Integer a, Integer b){
pos1.set(a);
pos2.set(b);
return Float.compare(pos1.y, pos2.y);
@@ -249,7 +254,12 @@ public class Conveyor extends Block{
ItemPos set(int value){
byte[] values = Bits.getBytes(value);
item = Item.getAllItems().get(values[0]);
if(values[0] > Item.getAllItems().size)
item = null;
else
item = Item.getAllItems().get(values[0]);
x = values[1] / 127f;
y = ((int)values[2] + 128) / 255f;
seed = values[3];