Skip to content

Commit

Permalink
fix players in force
Browse files Browse the repository at this point in the history
  • Loading branch information
FlorianWege committed Feb 24, 2019
1 parent 9ccae0e commit 29adf37
Showing 1 changed file with 29 additions and 24 deletions.
53 changes: 29 additions & 24 deletions src/main/java/net/moonlightflower/wc3libs/bin/app/W3I.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@
import java.io.IOException;
import java.io.PrintStream;
import java.util.*;
import java.util.function.Function;
import java.util.function.IntConsumer;
import java.util.function.Predicate;
import java.util.stream.Collectors;

/**
* info file for wrapping war3map.w3i
Expand Down Expand Up @@ -1064,50 +1068,45 @@ public void setFlag(@Nonnull Flags.Flag flag, boolean val) {
_flags.setFlag(flag, val);
}

private int _players = 0;
private BitSet _players = new BitSet();

public int getPlayers() {
@Nonnull
public BitSet getPlayers() {
return _players;
}

public void setPlayers(int val) {
public void setPlayers(@Nonnull BitSet val) {
_players = val;
}

public Set<Integer> getPlayerNums() {
Set<Integer> ret = new LinkedHashSet<>();

int players = _players;
int c = 0;
ret.addAll(_players.stream().boxed().collect(Collectors.toList()));

while (players != 0) {
if ((players & 1) == 1) ret.add(c);
return ret;
}

c++;
players >>= 1;
}
public Set<Integer> getPlayerNums(@Nonnull List<Player> definedPlayers) {
Set<Integer> definedPlayerNums = definedPlayers.stream().map(Player::getNum).collect(Collectors.toSet());

Set<Integer> ret = getPlayerNums();

ret.removeIf(playerNum -> !definedPlayerNums.contains(playerNum));

return ret;
}

public void removePlayerNums(int... players) {
int rem = 0;

for (int player : players) {
rem |= (1 << player);
_players.clear(player);
}

_players &= ~rem;
}

public void addPlayerNums(int... players) {
int add = 0;

for (int player : players) {
add |= (1 << player);
_players.set(player);
}

_players |= add;
}

private String _name;
Expand All @@ -1123,7 +1122,7 @@ public void setName(@Nullable String val) {

@Override
public String toString() {
String playersS = String.format("%12s", Integer.toBinaryString(getPlayers()));
String playersS = String.format("%12s", _players);

playersS = playersS.substring(playersS.length() - 12).replaceAll(" ", "0");

Expand All @@ -1133,15 +1132,21 @@ public String toString() {
private void read_0x12(@Nonnull Wc3BinInputStream stream) throws BinInputStream.StreamException {
setFlags(Flags.valueOf(stream.readInt32("forceFlags")));

setPlayers(stream.readInt32("forcePlayers"));
long playersL = stream.readUInt32("forcePlayers");

BitSet players = BitSet.valueOf(new long[]{playersL});

setPlayers(players);

setName(stream.readString("forceName"));
}

private void write_0x12(@Nonnull Wc3BinOutputStream stream) {
stream.writeInt32(getFlags().toInt());

stream.writeInt32(getPlayers());
long playersL = _players.toLongArray().length != 0 ? _players.toLongArray()[0] : Long.parseLong("0", 2);

stream.writeUInt32(playersL);

stream.writeString(getName());
}
Expand Down Expand Up @@ -2353,7 +2358,7 @@ public FuncImpl makeInitCustomTeams() {
}

for (Force force : getForces()) {
for (Integer playerNum : force.getPlayerNums()) {
for (Integer playerNum : force.getPlayerNums(getPlayers())) {
Player player = numToPlayerMap.get(playerNum);

stmts.add(Statement.create("call SetPlayerTeam(Player(" + player.getNum() + ")" + ", " + getForces().indexOf(force) + ")"));
Expand Down

0 comments on commit 29adf37

Please sign in to comment.