forked from MagicBane/Server
FatBoy-DOTC
6 months ago
3 changed files with 0 additions and 74 deletions
@ -1,68 +0,0 @@ |
|||||||
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