Logic icon support for all blocks

This commit is contained in:
Anuken
2024-06-16 01:11:54 -04:00
parent 5c23abf2d8
commit 7f9eb87313
5 changed files with 18 additions and 34 deletions

View File

@@ -889,17 +889,25 @@ public class LExecutor{
exec.textBuffer.setLength(0);
}
}else{
int num1 = p1.numi(), xval = packSign(x.numi()), yval = packSign(y.numi());
int num1 = p1.numi(), num4 = p4.numi(), xval = packSign(x.numi()), yval = packSign(y.numi());
if(type == LogicDisplay.commandImage){
num1 = p1.obj() instanceof UnlockableContent u ? u.iconId : 0;
if(p1.obj() instanceof UnlockableContent u){
//TODO: with mods, this will overflow (ID >= 512), but that's better than the previous system, at least
num1 = u.id;
num4 = u.getContentType().ordinal();
}else{
num1 = -1;
num4 = -1;
}
//num1 = p1.obj() instanceof UnlockableContent u ? u.iconId : 0;
}else if(type == LogicDisplay.commandScale){
xval = packSign((int)(x.numf() / LogicDisplay.scaleStep));
yval = packSign((int)(y.numf() / LogicDisplay.scaleStep));
}
//add graphics calls, cap graphics buffer size
exec.graphicsBuffer.add(DisplayCmd.get(type, xval, yval, packSign(num1), packSign(p2.numi()), packSign(p3.numi()), packSign(p4.numi())));
exec.graphicsBuffer.add(DisplayCmd.get(type, xval, yval, packSign(num1), packSign(p2.numi()), packSign(p3.numi()), packSign(num4)));
}
}

View File

@@ -20,7 +20,6 @@ import arc.struct.*;
import arc.util.*;
import mindustry.*;
import mindustry.core.*;
import mindustry.ctype.*;
import mindustry.game.*;
import mindustry.gen.*;
@@ -33,15 +32,9 @@ public class Fonts{
private static IntMap<String> unicodeToName = new IntMap<>();
private static ObjectMap<String, String> stringIcons = new ObjectMap<>();
private static ObjectMap<String, TextureRegion> largeIcons = new ObjectMap<>();
private static TextureRegion[] iconTable;
private static int lastCid;
public static Font def, outline, icon, iconLarge, tech, logic;
public static TextureRegion logicIcon(int id){
return iconTable[id];
}
public static int getUnicode(String content){
return unicodeIcons.get(content, 0);
}
@@ -160,19 +153,6 @@ public class Fonts{
stringIcons.put("alphachan", stringIcons.get("alphaaaa"));
iconTable = new TextureRegion[512];
iconTable[0] = Core.atlas.find("error");
lastCid = 1;
Vars.content.each(c -> {
if(c instanceof UnlockableContent u){
TextureRegion region = Core.atlas.find(u.name + "-icon-logic");
if(region.found()){
iconTable[u.iconId = lastCid++] = region;
}
}
});
for(Team team : Team.baseTeams){
team.emoji = stringIcons.get(team.name, "");
}

View File

@@ -10,6 +10,7 @@ import arc.util.*;
import arc.util.io.*;
import mindustry.*;
import mindustry.annotations.Annotations.*;
import mindustry.ctype.*;
import mindustry.gen.*;
import mindustry.graphics.*;
import mindustry.ui.*;
@@ -120,8 +121,10 @@ public class LogicDisplay extends Block{
case commandColor -> Draw.color(this.color = Color.toFloatBits(x, y, p1, p2));
case commandStroke -> Lines.stroke(this.stroke = x);
case commandImage -> {
var icon = Fonts.logicIcon(p1);
Draw.rect(Fonts.logicIcon(p1), x, y, p2, p2 / icon.ratio(), p3);
if(p4 >= 0 && p4 < ContentType.all.length && Vars.content.getByID(ContentType.all[p4], p1) instanceof UnlockableContent u){
var icon = u.fullIcon;
Draw.rect(icon, x, y, p2, p2 / icon.ratio(), p3);
}
}
case commandPrint -> {
var glyph = Fonts.logic.getData().getGlyph((char)p1);