From 815a396fbdfae35687df52516a658ad91360689d Mon Sep 17 00:00:00 2001 From: buthed010203 Date: Wed, 6 Apr 2022 00:54:14 -0400 Subject: [PATCH] Cullable LogicCanvas (#6699) I like editing code with more than 10 fps --- core/src/mindustry/logic/LCanvas.java | 70 +++++++++++++-------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/core/src/mindustry/logic/LCanvas.java b/core/src/mindustry/logic/LCanvas.java index 2537296566..537983a443 100644 --- a/core/src/mindustry/logic/LCanvas.java +++ b/core/src/mindustry/logic/LCanvas.java @@ -20,7 +20,7 @@ import mindustry.logic.LStatements.*; import mindustry.ui.*; public class LCanvas extends Table{ - public static final int maxJumpsDrawn = 100; + public static final int maxJumpsDrawn = 1000; // TODO Does nothing //ew static variables static LCanvas canvas; @@ -104,14 +104,23 @@ public class LCanvas extends Table{ clear(); statements = new DragLayout(); - jumps = new WidgetGroup(); + jumps = new WidgetGroup(){ + @Override + public void layout(){ + cullable = false; //culling while scrolling results in weirdness + getChildren().each(h -> { + if(!(h instanceof JumpCurve c)) return; + c.setSize(width, c.getPrefHeight()); + c.setPosition(c.button.x + c.button.getWidth()/2f, c.py); + }); + cullable = true; + } + }; pane = pane(t -> { t.center(); t.add(statements).pad(2f).center().width(targetWidth); - t.addChild(jumps); - - jumps.cullable = false; + t.add(jumps).growY().width(100f).growY(); }).grow().get(); pane.setFlickScroll(false); @@ -158,6 +167,7 @@ public class LCanvas extends Table{ } this.statements.layout(); + jumps.layout(); } StatementElem checkHovered(){ @@ -185,21 +195,17 @@ public class LCanvas extends Table{ pane.setScrollY(pane.getScrollY() + sign * Scl.scl(15f) * Time.delta); } } + + pane.scrolled(f -> jumps.layout()); //don't ask why this is needed, it just is } public class DragLayout extends WidgetGroup{ float space = Scl.scl(10f), prefWidth, prefHeight; Seq seq = new Seq<>(); int insertPosition = 0; - boolean invalidated; - - { - setTransform(true); - } @Override public void layout(){ - invalidated = true; float cy = 0; seq.clear(); @@ -247,10 +253,9 @@ public class LCanvas extends Table{ } } - invalidateHierarchy(); - - if(parent != null && parent instanceof Table){ + if(parent instanceof Table){ setCullingArea(parent.getCullingArea()); + jumps.setCullingArea(parent.getCullingArea()); } } @@ -277,16 +282,7 @@ public class LCanvas extends Table{ Tex.pane.draw(lastX, lastY - shiftAmount, width, dragging.getHeight()); } - if(invalidated){ - children.each(c -> c.cullable = false); - } - super.draw(); - - if(invalidated){ - children.each(c -> c.cullable = true); - invalidated = false; - } } void finishLayout(){ @@ -511,11 +507,17 @@ public class LCanvas extends Table{ public static class JumpCurve extends Element{ public JumpButton button; + float ph, py; public JumpCurve(JumpButton button){ this.button = button; } + @Override + public float getPrefHeight(){ + return ph; + } + @Override public void act(float delta){ super.act(delta); @@ -534,7 +536,6 @@ public class LCanvas extends Table{ } Element hover = button.to.get() == null && button.selecting ? canvas.hovered : button.to.get(); - boolean draw = false; Vec2 t = Tmp.v1, r = Tmp.v2; Group desc = canvas.pane; @@ -543,26 +544,25 @@ public class LCanvas extends Table{ if(hover != null){ hover.localToAscendantCoordinates(desc, t.set(hover.getWidth(), hover.getHeight()/2f)); - - draw = true; }else if(button.selecting){ t.set(r).add(button.mx, button.my); - draw = true; + }else{ + return; } - float offset = canvas.pane.getVisualScrollY() - canvas.pane.getMaxY(); + ph = Math.abs(t.y - r.y); + py = Math.min(t.y, r.y); + float offset = canvas.pane.getVisualScrollY() - canvas.pane.getMaxY(); t.y += offset; r.y += offset; - if(draw){ - drawCurve(r.x + button.getWidth()/2f, r.y + button.getHeight()/2f, t.x, t.y); + drawCurve(r.x + button.getWidth()/2f, r.y + button.getHeight()/2f, t.x, t.y); - float s = button.getWidth(); - Draw.color(button.color); - Tex.logicNode.draw(t.x + s*0.75f, t.y - s/2f, -s, s); - Draw.reset(); - } + float s = button.getWidth(); + Draw.color(button.color); + Tex.logicNode.draw(t.x + s*0.75f, t.y - s/2f, -s, s); + Draw.reset(); } public void drawCurve(float x, float y, float x2, float y2){