Added support for enforcing labels remain within screen bounds

This commit is contained in:
Collin Smith
2019-11-26 15:19:20 -08:00
parent 735fb021e9
commit 6dd75af2f7
2 changed files with 27 additions and 0 deletions

View File

@ -178,6 +178,22 @@ public class RenderSystem extends EntitySystem {
return iso;
}
public int getMinX() {
return renderMinX;
}
public int getMinY() {
return renderMinY;
}
public int getMaxX() {
return renderMaxX;
}
public int getMaxY() {
return renderMaxY;
}
@Override
public void addedToEngine(Engine engine) {
entities = engine.getEntitiesFor(family);

View File

@ -509,6 +509,7 @@ public class ClientScreen extends ScreenAdapter implements LoadingScreen.Loadabl
LabelSystem labelSystem = engine.getSystem(LabelSystem.class);
labelSystem.update(0);
Array<Actor> labels = labelSystem.getLabels();
layoutLabels(labels);
for (Actor label : labels) {
label.draw(batch, 1);
}
@ -737,6 +738,16 @@ public class ClientScreen extends ScreenAdapter implements LoadingScreen.Loadabl
left = actor;
}
private void layoutLabels(Array<Actor> labels) {
for (Actor label : labels) {
tmpVec2.x = label.getX();
tmpVec2.y = label.getY();
tmpVec2.x = MathUtils.clamp(tmpVec2.x, renderer.getMinX(), renderer.getMaxX() - label.getWidth());
tmpVec2.y = MathUtils.clamp(tmpVec2.y, renderer.getMinY(), renderer.getMaxY() - label.getHeight());
label.setPosition(tmpVec2.x, tmpVec2.y);
}
}
public void setDetails(Actor details, Item item, Actor parent, Actor slot) {
if (this.details == details) return;
this.details = details;