From ec99daaefba81ac435bc303ea26da9ca6633ebab Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 7 Aug 2020 00:24:14 -0400 Subject: [PATCH] logic 2 --- core/src/mindustry/core/UI.java | 6 +- core/src/mindustry/logic2/LCanvas.java | 104 ++++++++++++++++++ core/src/mindustry/logic2/LCategory.java | 15 +++ .../LogicDialog.java => logic2/LDialog.java} | 10 +- core/src/mindustry/logic2/LExecutor.java | 6 + core/src/mindustry/logic2/LStatement.java | 14 +++ core/src/mindustry/logic2/LStatements.java | 60 ++++++++++ gradle.properties | 2 +- 8 files changed, 208 insertions(+), 9 deletions(-) create mode 100644 core/src/mindustry/logic2/LCanvas.java create mode 100644 core/src/mindustry/logic2/LCategory.java rename core/src/mindustry/{logic/LogicDialog.java => logic2/LDialog.java} (61%) create mode 100644 core/src/mindustry/logic2/LExecutor.java create mode 100644 core/src/mindustry/logic2/LStatement.java create mode 100644 core/src/mindustry/logic2/LStatements.java diff --git a/core/src/mindustry/core/UI.java b/core/src/mindustry/core/UI.java index 60fc3a208c..bdf5337f18 100644 --- a/core/src/mindustry/core/UI.java +++ b/core/src/mindustry/core/UI.java @@ -24,7 +24,7 @@ import mindustry.editor.*; import mindustry.game.EventType.*; import mindustry.gen.*; import mindustry.graphics.*; -import mindustry.logic.*; +import mindustry.logic2.LDialog; import mindustry.ui.*; import mindustry.ui.dialogs.*; import mindustry.ui.fragments.*; @@ -68,7 +68,7 @@ public class UI implements ApplicationListener, Loadable{ public SchematicsDialog schematics; public ModsDialog mods; public ColorPicker picker; - public LogicDialog logic; + public LDialog logic; public Cursor drillCursor, unloadCursor; @@ -181,7 +181,7 @@ public class UI implements ApplicationListener, Loadable{ research = new ResearchDialog(); mods = new ModsDialog(); schematics = new SchematicsDialog(); - logic = new LogicDialog(); + logic = new LDialog(); Group group = Core.scene.root; diff --git a/core/src/mindustry/logic2/LCanvas.java b/core/src/mindustry/logic2/LCanvas.java new file mode 100644 index 0000000000..3331a37b19 --- /dev/null +++ b/core/src/mindustry/logic2/LCanvas.java @@ -0,0 +1,104 @@ +package mindustry.logic2; + +import arc.input.*; +import arc.math.geom.*; +import arc.scene.event.*; +import arc.scene.ui.layout.*; +import arc.struct.*; +import arc.util.*; +import mindustry.gen.*; +import mindustry.logic2.LStatements.*; +import mindustry.ui.*; + +public class LCanvas extends Table{ + + private Table statements; + private Seq elems = new Seq<>(); + + public LCanvas(){ + //left(); + + pane(t -> { + t.setClip(false); + statements = t; + statements.defaults().width(300f).pad(4f); + t.marginRight(1); + }).growY().get().setClip(false); + + add(new AssignStatement()); + add(new AssignStatement()); + add(new OpStatement()); + } + + void add(LStatement statement){ + StatementElem e = new StatementElem(statement); + elems.add(e); + + statements.add(e); + statements.row(); + } + + public class StatementElem extends Table{ + LStatement st; + + public StatementElem(LStatement st){ + this.st = st; + + background(Tex.whitePane); + setColor(st.category().color); + margin(0f); + + table(Tex.whiteui, t -> { + t.color.set(color); + + t.margin(8f); + t.touchable = Touchable.enabled; + + t.add(st.name()).style(Styles.outlineLabel).color(color).padRight(8); + t.add().growX(); + t.button(Icon.cancel, Styles.onlyi, () -> { + //TODO disconnect things + remove(); + elems.remove(this); + //TODO rebuild + }); + + t.addListener(new InputListener(){ + float lastx, lasty; + + @Override + public boolean touchDown(InputEvent event, float x, float y, int pointer, KeyCode button){ + Vec2 v = localToStageCoordinates(Tmp.v1.set(x, y)); + lastx = v.x; + lasty = v.y; + toFront(); + return true; + } + + @Override + public void touchDragged(InputEvent event, float x, float y, int pointer){ + Vec2 v = localToStageCoordinates(Tmp.v1.set(x, y)); + + translation.add(v.x - lastx, v.y - lasty); + lastx = v.x; + lasty = v.y; + } + + @Override + public void touchUp(InputEvent event, float x, float y, int pointer, KeyCode button){ + translation.setZero(); + } + }); + }).growX().padBottom(6); + + row(); + + table(t -> { + t.setColor(color); + st.build(t); + }).pad(8).padTop(2); + + marginBottom(7); + } + } +} diff --git a/core/src/mindustry/logic2/LCategory.java b/core/src/mindustry/logic2/LCategory.java new file mode 100644 index 0000000000..a51d6d9efe --- /dev/null +++ b/core/src/mindustry/logic2/LCategory.java @@ -0,0 +1,15 @@ +package mindustry.logic2; + +import arc.graphics.*; +import mindustry.graphics.*; + +public enum LCategory{ + control(Pal.accentBack), + operations(Pal.place.cpy().shiftSaturation(-0.4f).mul(0.7f)); + + public final Color color; + + LCategory(Color color){ + this.color = color; + } +} diff --git a/core/src/mindustry/logic/LogicDialog.java b/core/src/mindustry/logic2/LDialog.java similarity index 61% rename from core/src/mindustry/logic/LogicDialog.java rename to core/src/mindustry/logic2/LDialog.java index dad63751ef..ba4f7ce827 100644 --- a/core/src/mindustry/logic/LogicDialog.java +++ b/core/src/mindustry/logic2/LDialog.java @@ -1,15 +1,15 @@ -package mindustry.logic; +package mindustry.logic2; import arc.scene.ui.layout.*; import mindustry.ui.dialogs.*; -public class LogicDialog extends BaseDialog{ - LogicCanvas canvas; +public class LDialog extends BaseDialog{ + LCanvas canvas; - public LogicDialog(){ + public LDialog(){ super("logic"); - canvas = new LogicCanvas(); + canvas = new LCanvas(); addCloseButton(); clear(); diff --git a/core/src/mindustry/logic2/LExecutor.java b/core/src/mindustry/logic2/LExecutor.java new file mode 100644 index 0000000000..f37cb00e1d --- /dev/null +++ b/core/src/mindustry/logic2/LExecutor.java @@ -0,0 +1,6 @@ +package mindustry.logic2; + +public class LExecutor{ + LStatement[] statements; + int counter; +} diff --git a/core/src/mindustry/logic2/LStatement.java b/core/src/mindustry/logic2/LStatement.java new file mode 100644 index 0000000000..d6f15c3b22 --- /dev/null +++ b/core/src/mindustry/logic2/LStatement.java @@ -0,0 +1,14 @@ +package mindustry.logic2; + +import arc.scene.ui.layout.*; + +public abstract class LStatement{ + + public abstract void run(LExecutor exec); + public abstract void build(Table table); + public abstract LCategory category(); + + public String name(){ + return getClass().getSimpleName(); + } +} diff --git a/core/src/mindustry/logic2/LStatements.java b/core/src/mindustry/logic2/LStatements.java new file mode 100644 index 0000000000..d1a1b000f5 --- /dev/null +++ b/core/src/mindustry/logic2/LStatements.java @@ -0,0 +1,60 @@ +package mindustry.logic2; + +import arc.scene.ui.layout.*; +import arc.util.*; +import mindustry.logic.*; +import mindustry.ui.*; + +public class LStatements{ + + public static class AssignStatement extends LStatement{ + public int output; + public double value; + + @Override + public void run(LExecutor exec){ + + } + + @Override + public void build(Table table){ + table.field(value + "", Styles.nodeField, str -> value = parseDouble(str)) + .size(100f, 40f).pad(2f).color(table.color).padRight(20); + + table.field(value + "", Styles.nodeField, str -> value = parseDouble(str)) + .size(100f, 40f).pad(2f).color(table.color); + } + + @Override + public LCategory category(){ + return LCategory.operations; + } + + static double parseDouble(String s){ + return s.equals("yes") || s.equals("true") ? 1 : + s.equals("no") || s.equals("false") ? 0 : + Strings.parseDouble(s, 0); + } + } + + public static class OpStatement extends LStatement{ + public BinaryOp op = BinaryOp.add; + public int output; + public double result; + + @Override + public void run(LExecutor exec){ + + } + + @Override + public void build(Table table){ + + } + + @Override + public LCategory category(){ + return LCategory.operations; + } + } +} diff --git a/gradle.properties b/gradle.properties index a72701f26a..2717cc73d1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=true org.gradle.jvmargs=-Xms256m -Xmx1024m -archash=d71d43f90bca3d764b79e22c868f840fc4261361 +archash=327b394e0e91a7a6d4d3320ede319b1f63d29ddb