All pastes #48244 Raw Edit

Something

public java v1 · immutable
#48244 ·published 2006-04-05 20:31 UTC
rendered paste body
/** *  */package net.sf.l2j.gameserver.taskmanager;import java.util.List;import javolution.util.FastList;import net.sf.l2j.gameserver.ClientScheduler;import net.sf.l2j.gameserver.model.L2Character;/** * @author zabbix * Lets drink to code! */public class AITaskManager{	private List<AIJob> _jobs = new FastList<AIJob>();	private List<AIJob> _cleanup = new FastList<AIJob>();		enum AIJobType	{		JOB_FOLLOW,		JOB_FOLLOW_ATTACK	}	public AITaskManager()	{		// tick every 200msec		ClientScheduler.getInstance().scheduleMedAtFixedRate(new FollowScheduler(),60000,100);	}		public void AddFollowTask(L2Character actor, int range)	{		_jobs.add(new FollowTaskJob(actor,range));	}		public void RemoveFollowTask(L2Character actor)	{		for(AIJob job : _jobs)		{			if(job instanceof FollowTaskJob					&& ((FollowTaskJob)job)._owner.getObjectId() == actor.getObjectId())			{				_cleanup.add(job);				break;			}					}	}    private class FollowScheduler implements Runnable    {           public void run()        {        	for(AIJob job : _jobs)        	{        		long delay = (System.currentTimeMillis() - job._lastFrame);        		        		if(job._type == AIJobType.JOB_FOLLOW && delay >= 1000)        			job.Tick();        		else if(job._type == AIJobType.JOB_FOLLOW_ATTACK && delay >= 500)        			job.Tick();        	}        	        	for(AIJob clean : _cleanup)        	{        		_jobs.remove(clean);        	}        	        	_cleanup.clear();        }    }        private abstract class AIJob    {    	public AIJobType _type;    	public long _lastFrame;    	    	public AIJob()    	{    		_lastFrame = System.currentTimeMillis();    	}    	    	public void Terminate()    	{    		_cleanup.add(this);    	}    	public abstract void Tick();    }        private class FollowTaskJob extends AIJob    {    	public int _range;    	public L2Character _owner;    	    	public FollowTaskJob(L2Character actor, int range)    	{    		super();    		_owner = actor;    		_range = range;    	}    	    	public void Terminate()    	{    		_owner.getAI().stopFollow();    		super.Terminate();    	}    	    	public void Tick()    	{    		if(_owner.getAI().getFollowTarget() != null)    		{    			_owner.getAI().moveToPawn(_owner.getAI().getFollowTarget(),_range);    		}    		else    		{    			Terminate();    		}    	}    }    }