package mindustry.logic; import arc.*; import arc.func.*; import arc.math.*; import arc.scene.*; import arc.scene.actions.*; import arc.scene.ui.*; import arc.scene.ui.layout.*; import arc.struct.*; import arc.util.*; import mindustry.gen.*; import mindustry.logic.LCanvas.*; import mindustry.logic.LExecutor.*; import mindustry.ui.*; /** * A statement is an intermediate representation of an instruction, to be used mostly in UI. * Contains all relevant variable information. */ public abstract class LStatement{ public transient @Nullable StatementElem elem; public abstract void build(Table table); public abstract LCategory category(); public abstract LInstruction build(LAssembler builder); public LStatement copy(){ StringBuilder build = new StringBuilder(); write(build); Seq read = LAssembler.read(build.toString()); return read.size == 0 ? null : read.first(); } public boolean hidden(){ return false; } //protected methods are only for internal UI layout utilities protected Cell field(Table table, String value, Cons setter){ return table.field(value, Styles.nodeField, setter) .size(144f, 40f).pad(2f).color(table.color).addInputDialog(); } protected Cell fields(Table table, String desc, String value, Cons setter){ table.add(desc).padLeft(10).left(); return field(table, value, setter).width(85f).padRight(10).left(); } protected void fields(Table table, String value, Cons setter){ field(table, value, setter).width(85f); } protected void row(Table table){ if(LCanvas.useRows()){ table.row(); } } protected void showSelect(Button b, T[] values, T current, Cons getter, int cols, Cons sizer){ showSelectTable(b, (t, hide) -> { ButtonGroup