Deregister empty scenes if a player leaves them

This commit is contained in:
Melledy 2022-04-18 23:00:12 -07:00
parent c65443f422
commit dd8d1752ed
2 changed files with 15 additions and 1 deletions

View File

@ -117,6 +117,7 @@ public class GenshinScene {
} }
public void removePlayer(GenshinPlayer player) { public void removePlayer(GenshinPlayer player) {
// Remove player from scene
getPlayers().remove(player); getPlayers().remove(player);
player.setScene(null); player.setScene(null);
@ -127,6 +128,11 @@ public class GenshinScene {
for (EntityGadget gadget : player.getTeamManager().getGadgets()) { for (EntityGadget gadget : player.getTeamManager().getGadgets()) {
this.removeEntity(gadget); this.removeEntity(gadget);
} }
// Deregister scene if not in use
if (this.getEntities().size() <= 0) {
this.getWorld().deregisterScene(this);
}
} }
private void setupPlayerAvatars(GenshinPlayer player) { private void setupPlayerAvatars(GenshinPlayer player) {

View File

@ -111,7 +111,7 @@ public class World implements Iterable<GenshinPlayer> {
SceneData sceneData = GenshinData.getSceneDataMap().get(sceneId); SceneData sceneData = GenshinData.getSceneDataMap().get(sceneId);
if (sceneData != null) { if (sceneData != null) {
scene = new GenshinScene(this, sceneData); scene = new GenshinScene(this, sceneData);
this.getScenes().put(sceneId, scene); this.registerScene(scene);
return scene; return scene;
} }
@ -198,6 +198,14 @@ public class World implements Iterable<GenshinPlayer> {
} }
} }
public void registerScene(GenshinScene scene) {
this.getScenes().put(scene.getId(), scene);
}
public void deregisterScene(GenshinScene scene) {
this.getScenes().remove(scene.getId());
}
public boolean transferPlayerToScene(GenshinPlayer player, int sceneId, Position pos) { public boolean transferPlayerToScene(GenshinPlayer player, int sceneId, Position pos) {
if (player.getScene().getId() == sceneId || GenshinData.getSceneDataMap().get(sceneId) == null) { if (player.getScene().getId() == sceneId || GenshinData.getSceneDataMap().get(sceneId) == null) {
return false; return false;