package vooga.rts.gamedesign.strategy.occupystrategy;
import java.util.ArrayList;
import java.util.List;
import vooga.rts.gamedesign.sprite.gamesprites.interactive.InteractiveEntity;
import vooga.rts.gamedesign.sprite.gamesprites.interactive.units.Unit;
import vooga.rts.gamedesign.sprite.gamesprites.interactive.buildings.Building;
import vooga.rts.gamedesign.strategy.Strategy;
/**
* This interface is implemented by the classes CanBeOccupied and
* CannotBeOccupied that are then used as instance variables in the classes
* that could possibly be occupied by Units. If the unit currently can be
* occupied, it will have an instance of CanBeOccupied, otherwise it will have
* an instance of CannotBeOccupied. In this way, occupying specific features
* can be refactored out of the Sprite hierarchy.
*
* @author Ryan Fishel
* @author Kevin Oh
* @author Francesco Agosti
* @author Wenshun Liu
*
*/
public interface OccupyStrategy extends Strategy {
/**
* Allows the entity that implements a occupy strategy to get occupied by a unit or entity.
* @param entity
* @param u
*/
public void getOccupied (InteractiveEntity entity, Unit u);
/**
* Creates all the actions that this occupystrategy can carry out.
* @param entity
*/
public void createOccupyActions (final InteractiveEntity entity);
/**
* Sets the current occupier to the one specified by the id.
* @param id
*/
public void setOccupierID (int id);
/**
* Returns the list of occupiers.
* @return
*/
public List<Integer> getOccupiers ();
/**
* Returns the maximum amount of entities this strategy can hold.
* @return
*/
public int getMaxOccupiers ();
/**
* Returns the id of this occupier.
* @return
*/
public int getOccupierID ();
}