package ncrashed.warp.api;

public interface ICoreAction 
{
	public static final int TICKS_PER_SECOND = 20;
	
	/**
	 * Получение количетсва необходимой энергии для прыжка.
	 * @param multCounter
	 * @param north
	 * @param south
	 * @param west
	 * @param east
	 * @return
	 */
	public int getRequiredEnergy(IWarpCore core, int multCounter, int north, int south, int west, int east, int up, int down);
	
	/**
	 * Попытка выполнение действия, закодированного каунтерами. Вернет true при успешном выполнении.
	 * @param core
	 * @param multCounter
	 * @param north
	 * @param south
	 * @param west
	 * @param east
	 * @return
	 */
	public boolean performAction(IWarpCore core, int multCounter, int north, int south, int west, int east, int up, int down);
	
	/**
	 * Получение нижней границы значений каунтера множителей.
	 * @return
	 */
	public int getLowMultCounter();
	
	/**
	 * Получение верхней границы значений каунтера множителей.
	 * @return
	 */
	public int getHighMultCounter();
	
	/**
	 * Кулдаун ядра при успешном действии.
	 * @return
	 */
	public int getSuccessCooldown(IWarpCore core, int multCounter, int north,
			int south, int west, int east, int up, int down);

	/**
	 * Кулдаун ядра при неуспешном действии.
	 * @return
	 */
	public int getFailCooldown(IWarpCore core, int multCounter, int north,
			int south, int west, int east, int up, int down);
	
	/**
	 * Минимальный кулдаун, который будет независимо от успешности действия.
	 * @param core
	 * @param multCounter
	 * @param north
	 * @param south
	 * @param west
	 * @param east
	 * @param up
	 * @param down
	 * @return
	 */
	public int getMinimumCooldown(IWarpCore core, int multCounter, int north,
			int south, int west, int east, int up, int down);
	
	/**
	 * Выводить ли результат действия на экспандер после его выполенения.
	 * @return
	 */
	public boolean printActionResult();
	
	/**
	 * К сигналу об ошибке последнего действия можно приложить и спец бит, который
	 * объяснит почему произошла ошибка. Метод выдает номер бита, который зажжется,
	 * при ошибке. Не выводит, если printActionResult == false. 
	 * @return Если не хотите иметь подвиды ошибок, верните -1.
	 */
	public int getErrorBit();
}
