More logic message types

This commit is contained in:
Anuken
2022-02-12 18:50:15 -05:00
parent 710ef89e36
commit f09e5afbe9
6 changed files with 71 additions and 10 deletions

View File

@ -1709,7 +1709,7 @@ lst.setblock = Set tile data at any location.
lst.spawnunit = Spawn unit at a location.
lst.packcolor = Pack [0, 1] RGBA components into a single number for drawing or rule-setting.
lst.setrule = Set a game rule.
lst.flushnotification = Display a notification at the top of the screen from the text buffer.\nWill wait until the previous message finishes.
lst.flushmessage = Display a message on the screen from the text buffer.\nWill wait until the previous message finishes.
logic.nounitbuild = [red]Unit building logic is not allowed here.

View File

@ -75,6 +75,8 @@ public class UI implements ApplicationListener, Loadable{
public Cursor drillCursor, unloadCursor;
private @Nullable Element lastAnnouncement;
public UI(){
Fonts.loadFonts();
}
@ -323,9 +325,9 @@ public class UI implements ApplicationListener, Loadable{
table.actions(Actions.delay(duration * 0.9f), Actions.fadeOut(duration * 0.1f, Interp.fade), Actions.remove());
table.top().table(Styles.black3, t -> t.margin(4).add(info).style(Styles.outlineLabel)).padTop(10);
Core.scene.add(table);
lastAnnouncement = table;
}
/** Shows a label at some position on the screen. Does not fade. */
public void showInfoPopup(String info, float duration, int align, int top, int left, int bottom, int right){
Table table = new Table();
@ -516,6 +518,10 @@ public class UI implements ApplicationListener, Loadable{
dialog.show();
}
public boolean hasAnnouncement(){
return lastAnnouncement != null && lastAnnouncement.parent != null;
}
/** Display text in the middle of the screen, then fade out. */
public void announce(String text){
announce(text, 3);
@ -531,6 +537,7 @@ public class UI implements ApplicationListener, Loadable{
t.pack();
t.act(0.1f);
Core.scene.add(t);
lastAnnouncement = t;
}
public void showOkText(String title, String text, Runnable confirmed){

View File

@ -1288,17 +1288,39 @@ public class LExecutor{
}
}
public static class FlushNotificationI implements LInstruction{
public static class FlushMessageI implements LInstruction{
public MessageType type = MessageType.announce;
public int duration;
public FlushMessageI(MessageType type, int duration){
this.type = type;
this.duration = duration;
}
public FlushMessageI(){
}
@Override
public void run(LExecutor exec){
if(headless) return;
//skip back to self until possible
if(ui.hudfrag.hasToast()){
if(
type == MessageType.announce && ui.hudfrag.hasToast() ||
type == MessageType.notify && ui.hasAnnouncement() ||
type == MessageType.toast && ui.hasAnnouncement()
){
exec.var(varCounter).numval --;
return;
}
ui.hudfrag.showToast(Icon.info, exec.textBuffer.toString());
String text = exec.textBuffer.toString();
switch(type){
case notify -> ui.hudfrag.showToast(Icon.info, text);
case announce -> ui.announce(text, exec.numf(duration));
case toast -> ui.showInfoToast(text, exec.numf(duration));
}
exec.textBuffer.setLength(0);
}
}

View File

@ -1272,11 +1272,34 @@ public class LStatements{
}
}
@RegisterStatement("notification")
public static class FlushNotificationStatement extends LStatement{
@RegisterStatement("message")
public static class FlushMessageStatement extends LStatement{
public MessageType type = MessageType.announce;
public String duration = "3";
@Override
public void build(Table table){
rebuild(table);
}
void rebuild(Table table){
table.clearChildren();
table.button(b -> {
b.label(() -> type.name()).growX().wrap().labelAlign(Align.center);
b.clicked(() -> showSelect(b, MessageType.all, type, o -> {
type = o;
rebuild(table);
}, 2, c -> c.width(150f)));
}, Styles.logict, () -> {}).size(160f, 40f).padLeft(2).color(table.color);
switch(type){
case announce, toast -> {
table.add(" for ");
fields(table, duration, str -> duration = str);
table.add(" secs ");
}
}
}
@Override
@ -1291,7 +1314,7 @@ public class LStatements{
@Override
public LInstruction build(LAssembler builder){
return new FlushNotificationI();
return new FlushMessageI(type, builder.var(duration));
}
}

View File

@ -0,0 +1,9 @@
package mindustry.logic;
public enum MessageType{
notify,
announce,
toast;
public static final MessageType[] all = values();
}

View File

@ -17,7 +17,7 @@ public class ItemImage extends Stack{
add(new Table(t -> {
t.left().bottom();
t.add(amount > 1000 ? UI.formatAmount(amount) : amount + "").style(Styles.outlineLabel);
t.add(amount >= 1000 ? UI.formatAmount(amount) : amount + "").style(Styles.outlineLabel);
t.pack();
}));
}
@ -32,7 +32,7 @@ public class ItemImage extends Stack{
if(stack.amount != 0){
add(new Table(t -> {
t.left().bottom();
t.add(stack.amount > 1000 ? UI.formatAmount(stack.amount) : stack.amount + "").style(Styles.outlineLabel);
t.add(stack.amount >= 1000 ? UI.formatAmount(stack.amount) : stack.amount + "").style(Styles.outlineLabel);
t.pack();
}));
}