forked from MagicBane/Server
FatBoy-DOTC
5 months ago
4 changed files with 80 additions and 0 deletions
@ -0,0 +1,68 @@ |
|||||||
|
package engine.gameManager; |
||||||
|
|
||||||
|
import engine.objects.PlayerCharacter; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.concurrent.locks.ReentrantReadWriteLock; |
||||||
|
|
||||||
|
public class MultiboxManager { |
||||||
|
public static HashMap<String, ArrayList<PlayerCharacter>> activeCharacters = new HashMap<>(); |
||||||
|
public static ReentrantReadWriteLock updateLock = new ReentrantReadWriteLock(); |
||||||
|
|
||||||
|
public static void addPlayer(PlayerCharacter player){ |
||||||
|
updateLock.writeLock().lock(); |
||||||
|
try { |
||||||
|
|
||||||
|
//get the machine ID for the key of the map
|
||||||
|
String machineID = player.getClientConnection().machineID; |
||||||
|
|
||||||
|
//cleanup and remove inactive players from the list
|
||||||
|
ArrayList<PlayerCharacter> purgeList = new ArrayList<>(); |
||||||
|
for(PlayerCharacter pc : activeCharacters.get(machineID)) |
||||||
|
if(!pc.isEnteredWorld() || !pc.isActive()) |
||||||
|
purgeList.add(pc); |
||||||
|
|
||||||
|
activeCharacters.get(machineID).removeAll(purgeList); |
||||||
|
|
||||||
|
//remove empty key
|
||||||
|
if(activeCharacters.get(machineID).size() < 1) |
||||||
|
activeCharacters.remove(machineID); |
||||||
|
|
||||||
|
|
||||||
|
if(activeCharacters.containsKey(machineID)){ |
||||||
|
//already has an entry for this machine ID
|
||||||
|
player.isBoxed = true; |
||||||
|
activeCharacters.get(machineID).add(player); |
||||||
|
}else{ |
||||||
|
//does not have an entry for this machine ID
|
||||||
|
player.isBoxed = false; |
||||||
|
ArrayList<PlayerCharacter> newList = new ArrayList<>(); |
||||||
|
newList.add(player); |
||||||
|
activeCharacters.put(machineID,newList); |
||||||
|
} |
||||||
|
} finally { |
||||||
|
updateLock.writeLock().unlock(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static void removePlayer(PlayerCharacter player){ |
||||||
|
|
||||||
|
//get the machine ID for the key of the map
|
||||||
|
String machineID = player.getClientConnection().machineID; |
||||||
|
|
||||||
|
if(activeCharacters.containsKey(machineID)){ |
||||||
|
//remove player from existing list
|
||||||
|
activeCharacters.get(machineID).remove(player); |
||||||
|
|
||||||
|
//check if there are still players in the machine ID key list
|
||||||
|
if(activeCharacters.get(machineID).size() > 1){ |
||||||
|
//list still has characters, make one of them active
|
||||||
|
activeCharacters.get(machineID).get(0).isBoxed = false; |
||||||
|
}else{ |
||||||
|
//list is now empty, remove it from the map
|
||||||
|
activeCharacters.remove(machineID); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue