forked from MagicBane/Server
				
			
				 4 changed files with 108 additions and 0 deletions
			
			
		| @ -0,0 +1,88 @@ | |||||||
|  | package engine.objects; | ||||||
|  | 
 | ||||||
|  | import engine.InterestManagement.WorldGrid; | ||||||
|  | import engine.gameManager.ZergManager; | ||||||
|  | import engine.math.Vector3fImmutable; | ||||||
|  | import engine.server.MBServerStatics; | ||||||
|  | 
 | ||||||
|  | import java.util.ArrayList; | ||||||
|  | import java.util.HashMap; | ||||||
|  | import java.util.HashSet; | ||||||
|  | 
 | ||||||
|  | public class ZergTracker { | ||||||
|  |     public ArrayList<PlayerCharacter> inRangeCurrent; | ||||||
|  |     public HashMap<Guild,ArrayList<PlayerCharacter>> playersByNation; | ||||||
|  |     public HashMap<PlayerCharacter,Long> leaveQue; | ||||||
|  |     public ArrayList<PlayerCharacter> totalAttended; | ||||||
|  | 
 | ||||||
|  |     public ZergTracker(){ | ||||||
|  |         this.inRangeCurrent = new ArrayList<>(); | ||||||
|  |         this.playersByNation = new HashMap<>(); | ||||||
|  |         this.leaveQue = new HashMap<>(); | ||||||
|  |         this.totalAttended = new ArrayList<>(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void compileCurrent(Vector3fImmutable loc, float range){ | ||||||
|  |         this.inRangeCurrent = new ArrayList<>(); | ||||||
|  |         HashSet<AbstractWorldObject> current = WorldGrid.getObjectsInRangePartial(loc,range, MBServerStatics.MASK_PLAYER); | ||||||
|  |         for(AbstractWorldObject awo : current){ | ||||||
|  |             this.inRangeCurrent.add((PlayerCharacter)awo); | ||||||
|  |             if(!this.totalAttended.contains((PlayerCharacter)awo)) | ||||||
|  |                 this.totalAttended.add((PlayerCharacter)awo); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void sortByNation(){ | ||||||
|  |         this.playersByNation = new HashMap<>(); | ||||||
|  |         for(PlayerCharacter pc : this.inRangeCurrent){ | ||||||
|  |             Guild nation = pc.guild.getNation(); | ||||||
|  |             if(this.playersByNation.containsKey(nation)){ | ||||||
|  |                 this.playersByNation.get(nation).add(pc); | ||||||
|  |             }else{ | ||||||
|  |                 ArrayList<PlayerCharacter> newList = new ArrayList<>(); | ||||||
|  |                 newList.add(pc); | ||||||
|  |                 this.playersByNation.put(nation,newList); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         for(PlayerCharacter pc : this.leaveQue.keySet()){ | ||||||
|  |             Guild nation = pc.guild.getNation(); | ||||||
|  |             if(this.playersByNation.containsKey(nation)){ | ||||||
|  |                 this.playersByNation.get(nation).add(pc); | ||||||
|  |             }else{ | ||||||
|  |                 ArrayList<PlayerCharacter> newList = new ArrayList<>(); | ||||||
|  |                 newList.add(pc); | ||||||
|  |                 this.playersByNation.put(nation,newList); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void processLeaveQue(){ | ||||||
|  |         ArrayList<PlayerCharacter> toRemove = new ArrayList<>(); | ||||||
|  |         for(PlayerCharacter pc : this.leaveQue.keySet()){ | ||||||
|  |             if(System.currentTimeMillis() > this.leaveQue.get(pc) + MBServerStatics.THREE_MINUTES){ | ||||||
|  |                 toRemove.add(pc); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         for(PlayerCharacter pc : toRemove){ | ||||||
|  |             this.leaveQue.remove(pc); | ||||||
|  |             pc.ZergMultiplier = 1.0f; | ||||||
|  |             this.totalAttended.remove(pc); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void compileLeaveQue(Vector3fImmutable loc, float range){ | ||||||
|  |         HashSet<AbstractWorldObject> current = WorldGrid.getObjectsInRangePartial(loc,range, MBServerStatics.MASK_PLAYER); | ||||||
|  |         for(PlayerCharacter pc : totalAttended){ | ||||||
|  |             if(!current.contains(pc) && !this.leaveQue.containsKey(pc)){ | ||||||
|  |                 this.leaveQue.put(pc,System.currentTimeMillis()); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void applyMultiplier(int cap){ | ||||||
|  |         for(PlayerCharacter pc : this.inRangeCurrent){ | ||||||
|  |             int count = this.playersByNation.get(pc.guild.getNation()).size(); | ||||||
|  |             pc. ZergMultiplier = ZergManager.getCurrentMultiplier(cap,count); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
					Loading…
					
					
				
		Reference in new issue