Clamping of tree views
This commit is contained in:
@@ -1,29 +1,25 @@
|
|||||||
package io.anuke.mindustry.ui.dialogs;
|
package io.anuke.mindustry.ui.dialogs;
|
||||||
|
|
||||||
import io.anuke.arc.Core;
|
import io.anuke.arc.*;
|
||||||
import io.anuke.arc.collection.Array;
|
import io.anuke.arc.collection.*;
|
||||||
import io.anuke.arc.collection.ObjectSet;
|
import io.anuke.arc.collection.ObjectSet.*;
|
||||||
import io.anuke.arc.collection.ObjectSet.ObjectSetIterator;
|
import io.anuke.arc.graphics.*;
|
||||||
import io.anuke.arc.graphics.Color;
|
import io.anuke.arc.graphics.g2d.*;
|
||||||
import io.anuke.arc.graphics.Texture;
|
import io.anuke.arc.math.*;
|
||||||
import io.anuke.arc.graphics.g2d.Draw;
|
import io.anuke.arc.math.geom.*;
|
||||||
import io.anuke.arc.graphics.g2d.Lines;
|
import io.anuke.arc.scene.*;
|
||||||
import io.anuke.arc.math.Mathf;
|
import io.anuke.arc.scene.ui.*;
|
||||||
import io.anuke.arc.scene.Group;
|
|
||||||
import io.anuke.arc.scene.ui.Image;
|
|
||||||
import io.anuke.arc.scene.ui.TextButton;
|
|
||||||
import io.anuke.arc.scene.ui.layout.*;
|
import io.anuke.arc.scene.ui.layout.*;
|
||||||
import io.anuke.arc.util.*;
|
import io.anuke.arc.util.*;
|
||||||
import io.anuke.mindustry.content.Zones;
|
import io.anuke.mindustry.content.*;
|
||||||
import io.anuke.mindustry.core.GameState.State;
|
import io.anuke.mindustry.core.GameState.*;
|
||||||
import io.anuke.mindustry.game.Saves.SaveSlot;
|
import io.anuke.mindustry.game.Saves.*;
|
||||||
import io.anuke.mindustry.graphics.Pal;
|
import io.anuke.mindustry.graphics.*;
|
||||||
import io.anuke.mindustry.io.SaveIO.SaveException;
|
import io.anuke.mindustry.io.SaveIO.*;
|
||||||
import io.anuke.mindustry.type.Zone;
|
import io.anuke.mindustry.type.*;
|
||||||
import io.anuke.mindustry.type.Zone.ZoneRequirement;
|
import io.anuke.mindustry.type.Zone.*;
|
||||||
import io.anuke.mindustry.ui.ItemsDisplay;
|
import io.anuke.mindustry.ui.*;
|
||||||
import io.anuke.mindustry.ui.TreeLayout;
|
import io.anuke.mindustry.ui.TreeLayout.*;
|
||||||
import io.anuke.mindustry.ui.TreeLayout.TreeNode;
|
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.*;
|
import static io.anuke.mindustry.Vars.*;
|
||||||
|
|
||||||
@@ -31,6 +27,7 @@ public class DeployDialog extends FloatingDialog{
|
|||||||
private final float nodeSize = Unit.dp.scl(210f);
|
private final float nodeSize = Unit.dp.scl(210f);
|
||||||
private ObjectSet<ZoneNode> nodes = new ObjectSet<>();
|
private ObjectSet<ZoneNode> nodes = new ObjectSet<>();
|
||||||
private ZoneInfoDialog info = new ZoneInfoDialog();
|
private ZoneInfoDialog info = new ZoneInfoDialog();
|
||||||
|
private Rectangle bounds = new Rectangle();
|
||||||
|
|
||||||
public DeployDialog(){
|
public DeployDialog(){
|
||||||
super("", "fulldialog");
|
super("", "fulldialog");
|
||||||
@@ -40,6 +37,8 @@ public class DeployDialog extends FloatingDialog{
|
|||||||
TreeLayout layout = new TreeLayout();
|
TreeLayout layout = new TreeLayout();
|
||||||
layout.gapBetweenLevels = layout.gapBetweenNodes = Unit.dp.scl(50f);
|
layout.gapBetweenLevels = layout.gapBetweenNodes = Unit.dp.scl(50f);
|
||||||
layout.layout(root);
|
layout.layout(root);
|
||||||
|
bounds.set(layout.getBounds());
|
||||||
|
bounds.y += nodeSize*0.4f;
|
||||||
|
|
||||||
addCloseButton();
|
addCloseButton();
|
||||||
buttons.addImageTextButton("$techtree", "icon-tree", iconsize, () -> ui.tech.show()).size(230f, 64f);
|
buttons.addImageTextButton("$techtree", "icon-tree", iconsize, () -> ui.tech.show()).size(230f, 64f);
|
||||||
@@ -187,11 +186,25 @@ public class DeployDialog extends FloatingDialog{
|
|||||||
dragged((x, y) -> {
|
dragged((x, y) -> {
|
||||||
panX += x;
|
panX += x;
|
||||||
panY += y;
|
panY += y;
|
||||||
|
clamp();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void clamp(){
|
||||||
|
float pad = nodeSize;
|
||||||
|
|
||||||
|
float ox = width/2f, oy = height/2f;
|
||||||
|
float rx = bounds.x + panX + ox, ry = panY + oy + bounds.y;
|
||||||
|
float rw = bounds.width, rh = bounds.height;
|
||||||
|
rx = Mathf.clamp(rx, -rw + pad, Core.graphics.getWidth() - pad);
|
||||||
|
ry = Mathf.clamp(ry, pad, Core.graphics.getHeight() - rh - pad);
|
||||||
|
panX = rx - bounds.x - ox;
|
||||||
|
panY = ry - bounds.y - oy;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(){
|
public void draw(){
|
||||||
|
clamp();
|
||||||
float offsetX = panX + width / 2f + x, offsetY = panY + height / 2f + y;
|
float offsetX = panX + width / 2f + x, offsetY = panY + height / 2f + y;
|
||||||
|
|
||||||
for(ZoneNode node : nodes){
|
for(ZoneNode node : nodes){
|
||||||
|
|||||||
@@ -1,32 +1,25 @@
|
|||||||
package io.anuke.mindustry.ui.dialogs;
|
package io.anuke.mindustry.ui.dialogs;
|
||||||
|
|
||||||
import io.anuke.arc.Core;
|
import io.anuke.arc.*;
|
||||||
import io.anuke.arc.collection.Array;
|
import io.anuke.arc.collection.*;
|
||||||
import io.anuke.arc.collection.ObjectSet;
|
import io.anuke.arc.graphics.*;
|
||||||
import io.anuke.arc.graphics.Color;
|
import io.anuke.arc.graphics.g2d.*;
|
||||||
import io.anuke.arc.graphics.g2d.Draw;
|
import io.anuke.arc.math.*;
|
||||||
import io.anuke.arc.graphics.g2d.Lines;
|
import io.anuke.arc.math.geom.*;
|
||||||
import io.anuke.arc.math.Interpolation;
|
import io.anuke.arc.scene.*;
|
||||||
import io.anuke.arc.math.geom.Rectangle;
|
import io.anuke.arc.scene.actions.*;
|
||||||
import io.anuke.arc.scene.Element;
|
import io.anuke.arc.scene.event.*;
|
||||||
import io.anuke.arc.scene.Group;
|
import io.anuke.arc.scene.style.*;
|
||||||
import io.anuke.arc.scene.actions.Actions;
|
import io.anuke.arc.scene.ui.*;
|
||||||
import io.anuke.arc.scene.actions.RelativeTemporalAction;
|
import io.anuke.arc.scene.ui.layout.*;
|
||||||
import io.anuke.arc.scene.event.Touchable;
|
import io.anuke.arc.util.*;
|
||||||
import io.anuke.arc.scene.style.TextureRegionDrawable;
|
import io.anuke.mindustry.content.*;
|
||||||
import io.anuke.arc.scene.ui.ImageButton;
|
import io.anuke.mindustry.content.TechTree.*;
|
||||||
import io.anuke.arc.scene.ui.layout.Table;
|
import io.anuke.mindustry.graphics.*;
|
||||||
import io.anuke.arc.scene.ui.layout.Unit;
|
import io.anuke.mindustry.type.*;
|
||||||
import io.anuke.arc.util.Align;
|
import io.anuke.mindustry.ui.*;
|
||||||
import io.anuke.mindustry.content.TechTree;
|
import io.anuke.mindustry.ui.TreeLayout.*;
|
||||||
import io.anuke.mindustry.content.TechTree.TechNode;
|
import io.anuke.mindustry.world.Block.*;
|
||||||
import io.anuke.mindustry.graphics.Pal;
|
|
||||||
import io.anuke.mindustry.type.Item;
|
|
||||||
import io.anuke.mindustry.type.ItemStack;
|
|
||||||
import io.anuke.mindustry.ui.ItemsDisplay;
|
|
||||||
import io.anuke.mindustry.ui.TreeLayout;
|
|
||||||
import io.anuke.mindustry.ui.TreeLayout.TreeNode;
|
|
||||||
import io.anuke.mindustry.world.Block.Icon;
|
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.*;
|
import static io.anuke.mindustry.Vars.*;
|
||||||
|
|
||||||
@@ -71,6 +64,7 @@ public class TechTreeDialog extends FloatingDialog{
|
|||||||
LayoutNode node = new LayoutNode(root, null);
|
LayoutNode node = new LayoutNode(root, null);
|
||||||
layout.layout(node);
|
layout.layout(node);
|
||||||
bounds.set(layout.getBounds());
|
bounds.set(layout.getBounds());
|
||||||
|
bounds.y += nodeSize*1.5f;
|
||||||
copyInfo(node);
|
copyInfo(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -218,9 +212,22 @@ public class TechTreeDialog extends FloatingDialog{
|
|||||||
moved = true;
|
moved = true;
|
||||||
panX += x;
|
panX += x;
|
||||||
panY += y;
|
panY += y;
|
||||||
|
clamp();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void clamp(){
|
||||||
|
float pad = nodeSize;
|
||||||
|
|
||||||
|
float ox = width/2f, oy = height/2f;
|
||||||
|
float rx = bounds.x + panX + ox, ry = panY + oy + bounds.y;
|
||||||
|
float rw = bounds.width, rh = bounds.height;
|
||||||
|
rx = Mathf.clamp(rx, -rw + pad, Core.graphics.getWidth() - pad);
|
||||||
|
ry = Mathf.clamp(ry, pad, Core.graphics.getHeight() - rh - pad);
|
||||||
|
panX = rx - bounds.x - ox;
|
||||||
|
panY = ry - bounds.y - oy;
|
||||||
|
}
|
||||||
|
|
||||||
void unlock(TechNode node){
|
void unlock(TechNode node){
|
||||||
data.unlockContent(node.block);
|
data.unlockContent(node.block);
|
||||||
data.removeItems(node.requirements);
|
data.removeItems(node.requirements);
|
||||||
@@ -303,6 +310,7 @@ public class TechTreeDialog extends FloatingDialog{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(){
|
public void draw(){
|
||||||
|
clamp();
|
||||||
float offsetX = panX + width / 2f + x, offsetY = panY + height / 2f + y;
|
float offsetX = panX + width / 2f + x, offsetY = panY + height / 2f + y;
|
||||||
|
|
||||||
for(TechTreeNode node : nodes){
|
for(TechTreeNode node : nodes){
|
||||||
@@ -315,8 +323,6 @@ public class TechTreeDialog extends FloatingDialog{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Lines.rect(bounds.x + Core.graphics.getWidth()/2f, bounds.y + Core.graphics.getHeight()/2f, bounds.width, bounds.height);
|
|
||||||
|
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
super.draw();
|
super.draw();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user