Removed serverPaused

This commit is contained in:
Anuken 2022-11-01 08:47:00 -04:00
parent bc2664994e
commit 7f37b97861
7 changed files with 37 additions and 25 deletions

View file

@ -269,6 +269,9 @@ public class Control implements ApplicationListener, Loadable{
Events.on(SaveWriteEvent.class, e -> forcePlaceAll());
Events.on(HostEvent.class, e -> forcePlaceAll());
Events.on(HostEvent.class, e -> {
state.set(State.playing);
});
}
private void forcePlaceAll(){

View file

@ -24,8 +24,6 @@ public class GameState{
public boolean gameOver = false;
/** Whether the player's team won the match. */
public boolean won = false;
/** If true, the server has been put into the paused state on multiplayer. This is synced. */
public boolean serverPaused = false;
/** Server ticks/second. Only valid in multiplayer. */
public int serverTps = -1;
/** Map that is currently being played on. */
@ -51,12 +49,8 @@ public class GameState{
}
public void set(State astate){
//horrible horrible horrible
if(astate == State.paused && net.server() && !headless) serverPaused = true;
if(astate != State.paused && net.server() && !headless) serverPaused = false;
//cannot pause when in multiplayer
if(astate == State.paused && net.active()) return;
//nothing to change.
if(state == astate) return;
Events.fire(new StateChangeEvent(state, astate));
state = astate;
@ -88,7 +82,7 @@ public class GameState{
}
public boolean isPaused(){
return (is(State.paused) && !net.active()) || (serverPaused && !isMenu());
return is(State.paused);
}
public boolean isPlaying(){

View file

@ -488,7 +488,9 @@ public class NetClient implements ApplicationListener{
state.wavetime = waveTime;
state.wave = wave;
state.enemies = enemies;
state.serverPaused = paused;
if(!state.isMenu()){
state.set(paused ? State.paused : State.playing);
}
state.serverTps = tps & 0xff;
//note that this is far from a guarantee that random state is synced - tiny changes in delta and ping can throw everything off again.

View file

@ -96,7 +96,7 @@ public class NetServer implements ApplicationListener{
}
};
private boolean closing = false;
private boolean closing = false, pvpAutoPaused = true;
private Interval timer = new Interval(10);
private IntSet buildHealthChanged = new IntSet();
@ -862,7 +862,18 @@ public class NetServer implements ApplicationListener{
if(state.isGame() && net.server()){
if(state.rules.pvp){
state.serverPaused = isWaitingForPlayers();
boolean waiting = isWaitingForPlayers(), paused = state.isPaused();
if(waiting != paused){
if(waiting){
//is now waiting, enable pausing, flag it correctly
pvpAutoPaused = true;
state.set(State.paused);
}else if(pvpAutoPaused){
//no longer waiting, stop pausing
state.set(State.playing);
pvpAutoPaused = false;
}
}
}
sync();
@ -941,7 +952,7 @@ public class NetServer implements ApplicationListener{
dataStream.close();
//write basic state data.
Call.stateSnapshot(player.con, state.wavetime, state.wave, state.enemies, state.serverPaused, state.gameOver,
Call.stateSnapshot(player.con, state.wavetime, state.wave, state.enemies, state.isPaused(), state.gameOver,
universe.seconds(), tps, GlobalVars.rand.seed0, GlobalVars.rand.seed1, syncStream.toByteArray());
syncStream.reset();

View file

@ -116,13 +116,13 @@ public class LogicDialog extends BaseDialog{
buttons.button("@variables", Icon.menu, () -> {
BaseDialog dialog = new BaseDialog("@variables");
dialog.hidden(() -> {
if(!wasPaused){
if(!wasPaused && !net.active()){
state.set(State.paused);
}
});
dialog.shown(() -> {
if(!wasPaused){
if(!wasPaused && !net.active()){
state.set(State.playing);
}
});

View file

@ -24,10 +24,8 @@ public class BaseDialog extends Dialog{
.growX().height(3f).pad(4f);
hidden(() -> {
if(shouldPause && state.isGame() && !net.active()){
if(!wasPaused || net.active()){
state.set(State.playing);
}
if(shouldPause && state.isGame() && !net.active() && !wasPaused){
state.set(State.playing);
}
Sounds.back.play();
});

View file

@ -272,8 +272,8 @@ public class ServerControl implements ApplicationListener{
});
Events.on(PlayerJoin.class, e -> {
if(state.serverPaused && autoPaused && Config.autoPause.bool()){
state.serverPaused = false;
if(state.isPaused() && autoPaused && Config.autoPause.bool()){
state.set(State.playing);
autoPaused = false;
}
});
@ -281,8 +281,8 @@ public class ServerControl implements ApplicationListener{
Events.on(PlayerLeave.class, e -> {
// The player list length is compared with 1 and not 0 here,
// because when PlayerLeave gets fired, the player hasn't been removed from the player list yet
if(!state.serverPaused && Config.autoPause.bool() && Groups.player.size() == 1){
state.serverPaused = true;
if(!state.isPaused() && Config.autoPause.bool() && Groups.player.size() == 1){
state.set(State.paused);
autoPaused = true;
}
});
@ -372,7 +372,7 @@ public class ServerControl implements ApplicationListener{
netServer.openServer();
if(Config.autoPause.bool()){
state.serverPaused = true;
state.set(State.paused);
autoPaused = true;
}
}catch(MapException e){
@ -489,9 +489,13 @@ public class ServerControl implements ApplicationListener{
});
handler.register("pause", "<on/off>", "Pause or unpause the game.", arg -> {
if(!state.isMenu()){
err("Cannot pause without a game running.");
return;
}
boolean pause = arg[0].equals("on");
autoPaused = false;
state.serverPaused = pause;
state.set(state.isPaused() ? State.playing : State.paused);
info(pause ? "Game paused." : "Game unpaused.");
});