Cullable LogicCanvas (#6699)

I like editing code with more than 10 fps
This commit is contained in:
buthed010203
2022-04-06 00:54:14 -04:00
committed by GitHub
parent 9be95020f2
commit 815a396fbd

View File

@@ -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<Element> 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){