parent
9835cd0023
commit
e14be3ec1b
@ -0,0 +1,6 @@ |
|||||||
|
package mightypork.rogue.world; |
||||||
|
|
||||||
|
|
||||||
|
public class LocalWorldAccess implements WorldAccess { |
||||||
|
|
||||||
|
} |
@ -0,0 +1,6 @@ |
|||||||
|
package mightypork.rogue.world; |
||||||
|
|
||||||
|
|
||||||
|
public interface WorldAccess { |
||||||
|
|
||||||
|
} |
@ -0,0 +1,93 @@ |
|||||||
|
package mightypork.rogue.world; |
||||||
|
|
||||||
|
|
||||||
|
import java.io.IOException; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.Map; |
||||||
|
import mightypork.rogue.world.map.Level; |
||||||
|
import mightypork.util.control.timing.Updateable; |
||||||
|
import mightypork.util.ion.IonBundle; |
||||||
|
import mightypork.util.ion.IonBundled; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* World server. To a server, all players and levels are equal. |
||||||
|
* |
||||||
|
* @author MightyPork |
||||||
|
*/ |
||||||
|
public class WorldServer implements IonBundled, Updateable { |
||||||
|
|
||||||
|
private final ArrayList<Level> levels = new ArrayList<>(); |
||||||
|
|
||||||
|
private final Map<String, Player> players = new HashMap<>(); |
||||||
|
|
||||||
|
/** This seed can be used to re-create identical world. */ |
||||||
|
private long seed; |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public void load(IonBundle in) throws IOException |
||||||
|
{ |
||||||
|
seed = in.get("seed", 0L); |
||||||
|
in.loadSequence("levels", levels); |
||||||
|
in.loadMap("players", players); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public void save(IonBundle out) throws IOException |
||||||
|
{ |
||||||
|
out.put("seed", seed); |
||||||
|
out.putSequence("levels", levels); |
||||||
|
out.putMap("players", players); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public void addLevel(Level level) |
||||||
|
{ |
||||||
|
levels.add(level); |
||||||
|
} |
||||||
|
|
||||||
|
public void addPlayer(String name, Player player) |
||||||
|
{ |
||||||
|
players.put(name, player); |
||||||
|
} |
||||||
|
|
||||||
|
public void removePlayer(String name) |
||||||
|
{ |
||||||
|
players.remove(name); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void update(double delta) |
||||||
|
{ |
||||||
|
// food meters and such
|
||||||
|
for (final Player pl : players.values()) { |
||||||
|
pl.updateLogic(delta); |
||||||
|
} |
||||||
|
|
||||||
|
for (int level = 0; level < levels.size(); level++) { |
||||||
|
|
||||||
|
// more than 1 player can be on floor, update for all of them
|
||||||
|
for (final Player pl : players.values()) { |
||||||
|
if (pl.getPosition().floor == level) { |
||||||
|
levels.get(level).updateLogic(pl, delta); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public void setSeed(long seed) |
||||||
|
{ |
||||||
|
this.seed = seed; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public long getSeed() |
||||||
|
{ |
||||||
|
return seed; |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue