package resonantinduction.old.api.coding; import java.util.List; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ResourceLocation; import resonantinduction.old.api.coding.args.ArgumentData; import universalelectricity.api.vector.Vector2; import calclavia.lib.utility.ISaveObj; /** @author DarkGuardsman */ public interface ITask extends Cloneable, ISaveObj { /** Called each time the program is loaded or changed */ public void refresh(); /** Called when this task is asked to return to default */ public void reset(); /** Sets the task's program reference letting it know what it is part of */ public void setProgram(IProgram program); /** Location in the program */ public int getRow(); public int getCol(); /** Sets the tasks position in the program */ public void setPosition(int col, int row); /** * Method name or rather command name this will be called. Uses both to ID this command, and do * basic command structuring. */ public String getMethodName(); /** Type of task used mainly for GUI displays */ public TaskType getType(); /** Get an argument by a given name */ public Object getArg(String name); /** Get all given arguments */ public List getArgs(); public void setArg(String arg, Object data); /** Reads the progress of the command if it was saved mid process */ public ITask loadProgress(NBTTagCompound nbt); /** Saves the current progress of the current command */ public NBTTagCompound saveProgress(NBTTagCompound nbt); /** * Can this task function for this machine. Only do basic checks here as its only used to make * sure the machine, or task will not crash while running. */ public boolean canUseTask(IProgrammableMachine device); /** * Used to create a new task from this task. Make sure to return a fresh copy without anything. * This includes no arguments, progress, variables, etc. As this is used to make new tasks from * the TaskRegistry */ public ITask clone(); /** * Texture used by encoder's to render the icon for the task. Make sure not to create a new * instance of the resource location each call. Doing so will cause the client to experience * increase RAM usage */ public ResourceLocation getTextureSheet(); /** Location of the texture in the sheet */ public Vector2 getTextureUV(); /** Passes in a list so that the task can add to the tool tip render */ public void getToolTips(List list); /** Used mainly for display purposes in the encoder */ public static enum TaskType { DATA("Data", 120, 40), DEFINEDPROCESS("Defined Process", 40, 40), PROCESS("Process", 60, 40), DECISION("Decision", 80, 40), START("Start", 20, 40), END("End", 100, 40); public final String name; public final Vector2 UV; /** * This is only loaded when assembly line is installed, and only used as a backup if tasks * don't return textures */ public static final ResourceLocation TEXTURE = new ResourceLocation("al", "textures/gui/gui_coder_icons.png"); private TaskType(String name, int uu, int vv) { this.name = name; this.UV = new Vector2(uu, vv); } } }