Skip to content
Snippets Groups Projects
Select Git revision
  • ae61b8078d7dc8b27f74f8f6ca9b8577c0f784d5
  • master default
2 results

getRouteRules.py

  • Field.java 5.57 KiB
    package mapobjs.defobjs;
    
    import java.util.ArrayList;
    
    import exceptions.DamagedException;
    import game.Direction;
    import mapobjs.movobjs.Bullet;
    import mapobjs.movobjs.Player;
    import mapobjs.movobjs.Replicator;
    
    public class Field implements IElement {
    
    	private ArrayList<DefaultElement> toRemove = new ArrayList<>();
    	private ArrayList<DefaultElement> elements = new ArrayList<DefaultElement>();
    	public  Field[] neighbours = new  Field[4];
    
    	public Field() {
    	}
    
    	public boolean addElement (DefaultElement elem){
    		elements.add(elem);
    		return true;
    	}
    
    	public void setNeighbour (Direction dir, Field ne ){
    		switch (dir) {
            case UP:
                neighbours[0] = ne;
                break;
    
            case RIGHT:
            	neighbours[1] = ne;
                break;
    
            case DOWN:
            	neighbours[2] = ne;
                break;
    
            case LEFT:
            	neighbours[3] = ne;
                break;
    		}
    	}
    
    	public Field getNeighbour(Direction dir){
    		switch (dir) {
            case UP:
                return neighbours[0];
            case RIGHT:
            	return neighbours[1];
            case DOWN:
            	return neighbours[2];
            case LEFT:
            	return neighbours[3];
            default:
                return null;
    		}
    
    	}
    	@Override
    	public boolean meet(Player colonel) {
    		boolean isValid = true;
    		for (DefaultElement defaultElement : elements) {
    			if (!defaultElement.meet(colonel)) {
    				for(DefaultElement element : elements)
    				{
    					element.leave(colonel);
    					if(element == defaultElement)
    					{
    						break;
    					}
    				}
    				isValid = false;
    			}
    
    		}
    		if(!toRemove.isEmpty())
    		{
    			for(DefaultElement toRemElement : toRemove)
    			{
    				if(elements.contains(toRemElement))
    				{
    					elements.remove(toRemElement);
    				}
    			}
    			toRemove.clear();
    		}
    		if(isValid)
    		{
    			this.elements.add(colonel);
    		}
    		
    		return isValid;
    	}
    
    	@Override
    	public boolean meet(Bullet bullet) {
    		boolean isValid = true;
    		for (DefaultElement defaultElement : elements) {
    			if (!defaultElement.meet(bullet)) {
    				isValid = false;
    			}
    
    		}
    		if(!toRemove.isEmpty())
    		{
    			for(DefaultElement toRemElement : toRemove)
    			{
    				if(elements.contains(toRemElement))
    				{
    					elements.remove(toRemElement);
    				}
    			}
    			toRemove.clear();
    		}
    		/*
    		 * No need to add bullet to the list of elements,
    		 * because it moves through the field in atomic time.
    		 */
    		return isValid;
    	}
    
    	@Override
    	public boolean meet(Box box) {
    		if(box == null)
    		{
    			return false;
    		}
    		for (DefaultElement defaultElement : elements) {
    			try {
    				if (!defaultElement.meet(box)) {
    					for(DefaultElement element : elements)
    					{
    						element.leave();
    						if(element == defaultElement)
    						{
    							break;
    						}
    					}
    					return false;
    				}
    			} catch (DamagedException e) {
    				return true;
    			}
    		}
    		if(!toRemove.isEmpty())
    		{
    			for(DefaultElement toRemElement : toRemove)
    			{
    				if(elements.contains(toRemElement))
    				{
    					elements.remove(toRemElement);
    				}
    			}
    			toRemove.clear();
    		}
    		this.elements.add(box);
    		return true;
    	}
    
    	@Override
    	public boolean leave(Player colonel) {
    		boolean isValid = true;
    		for (DefaultElement defaultElement : elements) {
    			if (!defaultElement.leave(colonel)) {
    				isValid = false;
    			}
    		}
    		if(!toRemove.isEmpty())
    		{
    			for(DefaultElement toRemElement : toRemove)
    			{
    				if(elements.contains(toRemElement))
    				{
    					elements.remove(toRemElement);
    				}
    			}
    			toRemove.clear();
    		}
    		if(isValid)
    		{
    			this.elements.remove(colonel);
    			return true;
    		}
    		else
    			return false;
    	}
    
    	@Override
    	public Box leave() {
    		Box tmp = null;
    		for (DefaultElement defaultElement : elements) {
    			Box box = defaultElement.leave();
    			if (box != null) {
    				tmp = box;
    			}
    		}
    		if(!toRemove.isEmpty())
    		{
    			for(DefaultElement toRemElement : toRemove)
    			{
    				if(elements.contains(toRemElement))
    				{
    					elements.remove(toRemElement);
    				}
    			}
    			toRemove.clear();
    		}
    		if(tmp != null)
    		{
    			this.elements.remove(tmp);
    			return tmp;
    		}
    		else
    		{
    			return null;
    		}
    	}
    
    	public boolean leave(Portal portal) {
    		DefaultElement tmp = null;
    		for (DefaultElement defaultElement : elements) {
    			if (defaultElement.leave(portal)) {
    				tmp = defaultElement;
    				break;
    			}
    		}
    		if(!toRemove.isEmpty())
    		{
    			for(DefaultElement toRemElement : toRemove)
    			{
    				if(elements.contains(toRemElement))
    				{
    					elements.remove(toRemElement);
    				}
    			}
    			toRemove.clear();
    		}
    		if(tmp != null)
    		{
    			this.elements.remove(tmp);
    			return true;
    		}
    		return false;
    	}
    
    
    	@Override
    	public void damaged() {}
    
    	public boolean leave(Replicator replicator) {
    		this.elements.remove(replicator);
    		return true;
    	}
    
    	public boolean meet(Replicator replicator) {
    		boolean isValid = true;
    		for(DefaultElement element : elements)
    		{
    			if(!element.meet(replicator))
    			{
    				isValid = false;
    			}
    		}
    		if(isValid)
    		{
    			this.elements.add(replicator);
    			
    			if(toRemove.size() == 1)	// TODO: bűn ronda, és hibához vezethet
    			{
    				toRemove.add(replicator);
    			}
    		}
    		if(!toRemove.isEmpty())
    		{
    			for(DefaultElement toRemElement : toRemove)
    			{
    				if(elements.contains(toRemElement))
    				{
    					elements.remove(toRemElement);
    				}
    			}
    			toRemove.clear();
    		}
    		
    		return isValid;
    	}
    
    	public boolean deleteElement(IElement elem)
    	{
    		return this.elements.remove(elem);
    	}
    	
    	public boolean deleteAllElement()
    	{
    		this.elements.clear();
    		return true;
    	}
    
    	@Override
    	public void pickedUp(Box box) {
    		for (DefaultElement defaultElement : elements)
    			 defaultElement.pickedUp(box);
    	}
    	
    	public void addToRemove(DefaultElement element)
    	{
    		toRemove.add(element);
    	}
    	
    	public boolean hasElementOn()
    	{
    		return !elements.isEmpty();
    	}
    }