mirror of
https://github.com/Anuken/Mindustry.git
synced 2025-03-09 04:09:07 +07:00
Added chat icons for in-game items and blocks
This commit is contained in:
parent
d9e5dc8ba2
commit
8d61ddbbd4
@ -72,10 +72,10 @@ public class AssetsAnnotationProcessor extends AbstractProcessor{
|
||||
ichtype.addField(FieldSpec.builder(char.class, name, Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL).initializer("(char)" + code).build());
|
||||
|
||||
ictype.addField(TextureRegionDrawable.class, name + "Sm", Modifier.PUBLIC, Modifier.STATIC);
|
||||
icload.addStatement(name + "Sm = mindustry.Vars.ui.getGlyph(mindustry.ui.Fonts.def, (char)" + code + ")");
|
||||
icload.addStatement(name + "Sm = mindustry.ui.Fonts.getGlyph(mindustry.ui.Fonts.def, (char)" + code + ")");
|
||||
|
||||
ictype.addField(TextureRegionDrawable.class, name, Modifier.PUBLIC, Modifier.STATIC);
|
||||
icload.addStatement(name + " = mindustry.Vars.ui.getGlyph(mindustry.ui.Fonts.icon, (char)" + code + ")");
|
||||
icload.addStatement(name + " = mindustry.ui.Fonts.getGlyph(mindustry.ui.Fonts.icon, (char)" + code + ")");
|
||||
|
||||
icload.addStatement("icons.put($S, " + name + ")", name);
|
||||
}
|
||||
|
219
core/assets/icons/icons.properties
Executable file
219
core/assets/icons/icons.properties
Executable file
@ -0,0 +1,219 @@
|
||||
63743=spawn|block-spawn-medium
|
||||
63742=deepwater|block-deepwater-medium
|
||||
63741=water|block-water-medium
|
||||
63740=tainted-water|block-tainted-water-medium
|
||||
63739=darksand-tainted-water|block-darksand-tainted-water-medium
|
||||
63738=sand-water|block-sand-water-medium
|
||||
63737=darksand-water|block-darksand-water-medium
|
||||
63736=tar|block-tar-medium
|
||||
63735=stone|block-stone-medium
|
||||
63734=craters|block-craters-medium
|
||||
63733=char|block-char-medium
|
||||
63732=ignarock|block-ignarock-medium
|
||||
63731=hotrock|block-hotrock-medium
|
||||
63730=magmarock|block-magmarock-medium
|
||||
63729=sand|block-sand-medium
|
||||
63728=darksand|block-darksand-medium
|
||||
63727=holostone|block-holostone-medium
|
||||
63726=grass|block-grass-medium
|
||||
63725=salt|block-salt-medium
|
||||
63724=snow|block-snow-medium
|
||||
63723=ice|block-ice-medium
|
||||
63722=ice-snow|block-ice-snow-medium
|
||||
63721=cliffs|block-cliffs-medium
|
||||
63720=rocks|block-rocks-medium
|
||||
63719=sporerocks|block-sporerocks-medium
|
||||
63718=rock|block-rock-medium
|
||||
63717=snowrock|block-snowrock-medium
|
||||
63716=icerocks|block-icerocks-medium
|
||||
63715=snowrocks|block-snowrocks-medium
|
||||
63714=dunerocks|block-dunerocks-medium
|
||||
63713=sandrocks|block-sandrocks-medium
|
||||
63712=saltrocks|block-saltrocks-medium
|
||||
63711=spore-pine|block-spore-pine-medium
|
||||
63710=snow-pine|block-snow-pine-medium
|
||||
63709=pine|block-pine-medium
|
||||
63708=shrubs|block-shrubs-medium
|
||||
63707=white-tree-dead|block-white-tree-dead-medium
|
||||
63706=white-tree|block-white-tree-medium
|
||||
63705=spore-cluster|block-spore-cluster-medium
|
||||
63704=shale|block-shale-medium
|
||||
63703=shalerocks|block-shalerocks-medium
|
||||
63702=shale-boulder|block-shale-boulder-medium
|
||||
63701=sand-boulder|block-sand-boulder-medium
|
||||
63700=moss|block-moss-medium
|
||||
63699=spore-moss|block-spore-moss-medium
|
||||
63698=metal-floor|block-metal-floor-medium
|
||||
63697=metal-floor-damaged|block-metal-floor-damaged-medium
|
||||
63696=metal-floor-2|block-metal-floor-2-medium
|
||||
63695=metal-floor-3|block-metal-floor-3-medium
|
||||
63694=metal-floor-5|block-metal-floor-5-medium
|
||||
63693=dark-panel-1|block-dark-panel-1-medium
|
||||
63692=dark-panel-2|block-dark-panel-2-medium
|
||||
63691=dark-panel-3|block-dark-panel-3-medium
|
||||
63690=dark-panel-4|block-dark-panel-4-medium
|
||||
63689=dark-panel-5|block-dark-panel-5-medium
|
||||
63688=dark-panel-6|block-dark-panel-6-medium
|
||||
63687=dark-metal|block-dark-metal-medium
|
||||
63686=pebbles|block-pebbles-medium
|
||||
63685=tendrils|block-tendrils-medium
|
||||
63684=ore-copper|block-ore-copper-medium
|
||||
63683=ore-lead|block-ore-lead-medium
|
||||
63682=ore-scrap|block-ore-scrap-medium
|
||||
63681=ore-coal|block-ore-coal-medium
|
||||
63680=ore-titanium|block-ore-titanium-medium
|
||||
63679=ore-thorium|block-ore-thorium-medium
|
||||
63678=graphite-press|block-graphite-press-medium
|
||||
63677=multi-press|block-multi-press-medium
|
||||
63676=silicon-smelter|block-silicon-smelter-medium
|
||||
63675=kiln|block-kiln-medium
|
||||
63674=plastanium-compressor|block-plastanium-compressor-medium
|
||||
63673=phase-weaver|block-phase-weaver-medium
|
||||
63672=alloy-smelter|block-alloy-smelter-medium
|
||||
63671=cryofluidmixer|block-cryofluidmixer-medium
|
||||
63670=blast-mixer|block-blast-mixer-medium
|
||||
63669=pyratite-mixer|block-pyratite-mixer-medium
|
||||
63668=melter|block-melter-medium
|
||||
63667=separator|block-separator-medium
|
||||
63666=spore-press|block-spore-press-medium
|
||||
63665=pulverizer|block-pulverizer-medium
|
||||
63664=coal-centrifuge|block-coal-centrifuge-medium
|
||||
63663=incinerator|block-incinerator-medium
|
||||
63662=copper-wall|block-copper-wall-medium
|
||||
63661=copper-wall-large|block-copper-wall-large-medium
|
||||
63660=titanium-wall|block-titanium-wall-medium
|
||||
63659=titanium-wall-large|block-titanium-wall-large-medium
|
||||
63658=plastanium-wall|block-plastanium-wall-medium
|
||||
63657=plastanium-wall-large|block-plastanium-wall-large-medium
|
||||
63656=thorium-wall|block-thorium-wall-medium
|
||||
63655=thorium-wall-large|block-thorium-wall-large-medium
|
||||
63654=phase-wall|block-phase-wall-medium
|
||||
63653=phase-wall-large|block-phase-wall-large-medium
|
||||
63652=surge-wall|block-surge-wall-medium
|
||||
63651=surge-wall-large|block-surge-wall-large-medium
|
||||
63650=door|block-door-medium
|
||||
63649=door-large|block-door-large-medium
|
||||
63648=scrap-wall|block-scrap-wall-medium
|
||||
63647=scrap-wall-large|block-scrap-wall-large-medium
|
||||
63646=scrap-wall-huge|block-scrap-wall-huge-medium
|
||||
63645=scrap-wall-gigantic|block-scrap-wall-gigantic-medium
|
||||
63644=thruster|block-thruster-medium
|
||||
63643=mender|block-mender-medium
|
||||
63642=mend-projector|block-mend-projector-medium
|
||||
63641=overdrive-projector|block-overdrive-projector-medium
|
||||
63640=force-projector|block-force-projector-medium
|
||||
63639=shock-mine|block-shock-mine-medium
|
||||
63638=conveyor|block-conveyor-medium
|
||||
63637=titanium-conveyor|block-titanium-conveyor-medium
|
||||
63636=armored-conveyor|block-armored-conveyor-medium
|
||||
63635=junction|block-junction-medium
|
||||
63634=bridge-conveyor|block-bridge-conveyor-medium
|
||||
63633=phase-conveyor|block-phase-conveyor-medium
|
||||
63632=sorter|block-sorter-medium
|
||||
63631=inverted-sorter|block-inverted-sorter-medium
|
||||
63630=router|block-router-medium
|
||||
63629=distributor|block-distributor-medium
|
||||
63628=overflow-gate|block-overflow-gate-medium
|
||||
63627=mass-driver|block-mass-driver-medium
|
||||
63626=mechanical-pump|block-mechanical-pump-medium
|
||||
63625=rotary-pump|block-rotary-pump-medium
|
||||
63624=thermal-pump|block-thermal-pump-medium
|
||||
63623=conduit|block-conduit-medium
|
||||
63622=pulse-conduit|block-pulse-conduit-medium
|
||||
63621=plated-conduit|block-plated-conduit-medium
|
||||
63620=liquid-router|block-liquid-router-medium
|
||||
63619=liquid-tank|block-liquid-tank-medium
|
||||
63618=liquid-junction|block-liquid-junction-medium
|
||||
63617=bridge-conduit|block-bridge-conduit-medium
|
||||
63616=phase-conduit|block-phase-conduit-medium
|
||||
63615=power-node|block-power-node-medium
|
||||
63614=power-node-large|block-power-node-large-medium
|
||||
63613=surge-tower|block-surge-tower-medium
|
||||
63612=diode|block-diode-medium
|
||||
63611=battery|block-battery-medium
|
||||
63610=battery-large|block-battery-large-medium
|
||||
63609=combustion-generator|block-combustion-generator-medium
|
||||
63608=thermal-generator|block-thermal-generator-medium
|
||||
63607=turbine-generator|block-turbine-generator-medium
|
||||
63606=differential-generator|block-differential-generator-medium
|
||||
63605=rtg-generator|block-rtg-generator-medium
|
||||
63604=solar-panel|block-solar-panel-medium
|
||||
63603=solar-panel-large|block-solar-panel-large-medium
|
||||
63602=thorium-reactor|block-thorium-reactor-medium
|
||||
63601=impact-reactor|block-impact-reactor-medium
|
||||
63600=mechanical-drill|block-mechanical-drill-medium
|
||||
63599=pneumatic-drill|block-pneumatic-drill-medium
|
||||
63598=laser-drill|block-laser-drill-medium
|
||||
63597=blast-drill|block-blast-drill-medium
|
||||
63596=water-extractor|block-water-extractor-medium
|
||||
63595=cultivator|block-cultivator-medium
|
||||
63594=oil-extractor|block-oil-extractor-medium
|
||||
63593=core-shard|block-core-shard-medium
|
||||
63592=core-foundation|block-core-foundation-medium
|
||||
63591=core-nucleus|block-core-nucleus-medium
|
||||
63590=vault|block-vault-medium
|
||||
63589=container|block-container-medium
|
||||
63588=unloader|block-unloader-medium
|
||||
63587=launch-pad|block-launch-pad-medium
|
||||
63586=launch-pad-large|block-launch-pad-large-medium
|
||||
63585=duo|block-duo-medium
|
||||
63584=scatter|block-scatter-medium
|
||||
63583=scorch|block-scorch-medium
|
||||
63582=hail|block-hail-medium
|
||||
63581=wave|block-wave-medium
|
||||
63580=lancer|block-lancer-medium
|
||||
63579=arc|block-arc-medium
|
||||
63578=swarmer|block-swarmer-medium
|
||||
63577=salvo|block-salvo-medium
|
||||
63576=fuse|block-fuse-medium
|
||||
63575=ripple|block-ripple-medium
|
||||
63574=cyclone|block-cyclone-medium
|
||||
63573=spectre|block-spectre-medium
|
||||
63572=meltdown|block-meltdown-medium
|
||||
63571=draug-factory|block-draug-factory-medium
|
||||
63570=spirit-factory|block-spirit-factory-medium
|
||||
63569=phantom-factory|block-phantom-factory-medium
|
||||
63568=command-center|block-command-center-medium
|
||||
63567=wraith-factory|block-wraith-factory-medium
|
||||
63566=ghoul-factory|block-ghoul-factory-medium
|
||||
63565=revenant-factory|block-revenant-factory-medium
|
||||
63564=dagger-factory|block-dagger-factory-medium
|
||||
63563=crawler-factory|block-crawler-factory-medium
|
||||
63562=titan-factory|block-titan-factory-medium
|
||||
63561=fortress-factory|block-fortress-factory-medium
|
||||
63560=repair-point|block-repair-point-medium
|
||||
63559=dart-mech-pad|block-dart-mech-pad-medium
|
||||
63558=delta-mech-pad|block-delta-mech-pad-medium
|
||||
63557=tau-mech-pad|block-tau-mech-pad-medium
|
||||
63556=omega-mech-pad|block-omega-mech-pad-medium
|
||||
63555=javelin-ship-pad|block-javelin-ship-pad-medium
|
||||
63554=trident-ship-pad|block-trident-ship-pad-medium
|
||||
63553=glaive-ship-pad|block-glaive-ship-pad-medium
|
||||
63552=power-source|block-power-source-medium
|
||||
63551=power-void|block-power-void-medium
|
||||
63550=item-source|block-item-source-medium
|
||||
63549=item-void|block-item-void-medium
|
||||
63548=liquid-source|block-liquid-source-medium
|
||||
63547=liquid-void|block-liquid-void-medium
|
||||
63546=message|block-message-medium
|
||||
63545=illuminator|block-illuminator-medium
|
||||
63544=copper|item-copper-icon
|
||||
63543=lead|item-lead-icon
|
||||
63542=metaglass|item-metaglass-icon
|
||||
63541=graphite|item-graphite-icon
|
||||
63540=sand|item-sand-icon
|
||||
63539=coal|item-coal-icon
|
||||
63538=titanium|item-titanium-icon
|
||||
63537=thorium|item-thorium-icon
|
||||
63536=scrap|item-scrap-icon
|
||||
63535=silicon|item-silicon-icon
|
||||
63534=plastanium|item-plastanium-icon
|
||||
63533=phase-fabric|item-phase-fabric-icon
|
||||
63532=surge-alloy|item-surge-alloy-icon
|
||||
63531=spore-pod|item-spore-pod-icon
|
||||
63530=blast-compound|item-blast-compound-icon
|
||||
63529=pyratite|item-pyratite-icon
|
||||
63528=water|liquid-water-icon
|
||||
63527=slag|liquid-slag-icon
|
||||
63526=oil|liquid-oil-icon
|
||||
63525=cryofluid|liquid-cryofluid-icon
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Before Width: | Height: | Size: 744 KiB After Width: | Height: | Size: 722 KiB |
Binary file not shown.
Before Width: | Height: | Size: 905 KiB After Width: | Height: | Size: 896 KiB |
@ -18,6 +18,7 @@ import mindustry.graphics.*;
|
||||
import mindustry.maps.*;
|
||||
import mindustry.mod.*;
|
||||
import mindustry.net.Net;
|
||||
import mindustry.ui.*;
|
||||
|
||||
import static arc.Core.*;
|
||||
import static mindustry.Vars.*;
|
||||
@ -55,15 +56,15 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform
|
||||
Vars.net = new Net(platform.getNet());
|
||||
mods = new Mods();
|
||||
|
||||
UI.loadSystemCursors();
|
||||
Fonts.loadSystemCursors();
|
||||
|
||||
assets.load(new Vars());
|
||||
|
||||
UI.loadDefaultFont();
|
||||
Fonts.loadDefaultFont();
|
||||
|
||||
assets.load(new AssetDescriptor<>("sprites/sprites.atlas", TextureAtlas.class)).loaded = t -> {
|
||||
atlas = (TextureAtlas)t;
|
||||
UI.cleanAtlas(atlas);
|
||||
Fonts.mergeFontAtlas(atlas);
|
||||
};
|
||||
|
||||
assets.loadRun("maps", Map.class, () -> maps.loadPreviews());
|
||||
|
@ -2,26 +2,13 @@ package mindustry.core;
|
||||
|
||||
import arc.*;
|
||||
import arc.Graphics.*;
|
||||
import arc.Graphics.Cursor.*;
|
||||
import arc.Input.*;
|
||||
import arc.assets.*;
|
||||
import arc.assets.loaders.*;
|
||||
import arc.assets.loaders.resolvers.*;
|
||||
import arc.files.*;
|
||||
import arc.freetype.*;
|
||||
import arc.freetype.FreeTypeFontGenerator.*;
|
||||
import arc.freetype.FreetypeFontLoader.*;
|
||||
import arc.func.*;
|
||||
import arc.graphics.*;
|
||||
import arc.graphics.Pixmap.*;
|
||||
import arc.graphics.Texture.*;
|
||||
import arc.graphics.g2d.*;
|
||||
import arc.graphics.g2d.BitmapFont.*;
|
||||
import arc.graphics.g2d.PixmapPacker.*;
|
||||
import arc.graphics.g2d.TextureAtlas.*;
|
||||
import arc.input.*;
|
||||
import arc.math.*;
|
||||
import arc.math.geom.*;
|
||||
import arc.scene.*;
|
||||
import arc.scene.actions.*;
|
||||
import arc.scene.event.*;
|
||||
@ -85,7 +72,7 @@ public class UI implements ApplicationListener, Loadable{
|
||||
public Cursor drillCursor, unloadCursor;
|
||||
|
||||
public UI(){
|
||||
setupFonts();
|
||||
Fonts.loadFonts();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -107,6 +94,7 @@ public class UI implements ApplicationListener, Loadable{
|
||||
Icon.load();
|
||||
Styles.load();
|
||||
Tex.loadStyles();
|
||||
Fonts.loadContentIcons();
|
||||
|
||||
Dialog.setShowAction(() -> sequence(alpha(0f), fadeIn(0.1f)));
|
||||
Dialog.setHideAction(() -> sequence(fadeOut(0.1f)));
|
||||
@ -124,7 +112,9 @@ public class UI implements ApplicationListener, Loadable{
|
||||
Colors.put("unlaunched", Color.valueOf("8982ed"));
|
||||
Colors.put("highlight", Pal.accent.cpy().lerp(Color.white, 0.3f));
|
||||
Colors.put("stat", Pal.stat);
|
||||
loadExtraCursors();
|
||||
|
||||
drillCursor = Core.graphics.newCursor("drill");
|
||||
unloadCursor = Core.graphics.newCursor("unload");
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -132,134 +122,6 @@ public class UI implements ApplicationListener, Loadable{
|
||||
return Array.with(new AssetDescriptor<>(Control.class), new AssetDescriptor<>("outline", BitmapFont.class), new AssetDescriptor<>("default", BitmapFont.class), new AssetDescriptor<>("chat", BitmapFont.class));
|
||||
}
|
||||
|
||||
/** Called from a static context to make the cursor appear immediately upon startup.*/
|
||||
public static void loadSystemCursors(){
|
||||
SystemCursor.arrow.set(Core.graphics.newCursor("cursor"));
|
||||
SystemCursor.hand.set(Core.graphics.newCursor("hand"));
|
||||
SystemCursor.ibeam.set(Core.graphics.newCursor("ibeam"));
|
||||
|
||||
Core.graphics.restoreCursor();
|
||||
}
|
||||
|
||||
/** Called from a static context for use in the loading screen.*/
|
||||
public static void loadDefaultFont(){
|
||||
packer = new PixmapPacker(2048, 2048, Format.RGBA8888, 2, true);
|
||||
FileHandleResolver resolver = new InternalFileHandleResolver();
|
||||
Core.assets.setLoader(FreeTypeFontGenerator.class, new FreeTypeFontGeneratorLoader(resolver));
|
||||
Core.assets.setLoader(BitmapFont.class, null, new FreetypeFontLoader(resolver){
|
||||
@Override
|
||||
public BitmapFont loadSync(AssetManager manager, String fileName, Fi file, FreeTypeFontLoaderParameter parameter){
|
||||
if(fileName.equals("outline")){
|
||||
parameter.fontParameters.borderWidth = Scl.scl(2f);
|
||||
parameter.fontParameters.spaceX -= parameter.fontParameters.borderWidth;
|
||||
}
|
||||
parameter.fontParameters.magFilter = TextureFilter.Linear;
|
||||
parameter.fontParameters.minFilter = TextureFilter.Linear;
|
||||
parameter.fontParameters.packer = packer;
|
||||
return super.loadSync(manager, fileName, file, parameter);
|
||||
}
|
||||
});
|
||||
|
||||
FreeTypeFontParameter param = new FreeTypeFontParameter(){{
|
||||
borderColor = Color.darkGray;
|
||||
size = (int)(Scl.scl(18f));
|
||||
incremental = true;
|
||||
}};
|
||||
|
||||
Core.assets.load("outline", BitmapFont.class, new FreeTypeFontLoaderParameter("fonts/font.ttf", param)).loaded = t -> Fonts.outline = (BitmapFont)t;
|
||||
}
|
||||
|
||||
public static void cleanAtlas(TextureAtlas atlas){
|
||||
//grab all textures from the ui page, remove all the regions assigned to it, then copy them over to Fonts.packer and replace the texture in this atlas.
|
||||
|
||||
//grab old UI texture and regions...
|
||||
Texture texture = atlas.find("logo").getTexture();
|
||||
|
||||
Page page = packer.getPages().first();
|
||||
|
||||
Array<AtlasRegion> regions = atlas.getRegions().select(t -> t.getTexture() == texture);
|
||||
for(AtlasRegion region : regions){
|
||||
//get new pack rect
|
||||
page.setDirty(false);
|
||||
Rect rect = packer.pack(region.name + (region.splits != null ? ".9" : ""), atlas.getPixmap(region));
|
||||
//set new texture
|
||||
region.setTexture(packer.getPages().first().getTexture());
|
||||
//set its new position
|
||||
region.set((int)rect.x, (int)rect.y, (int)rect.width, (int)rect.height);
|
||||
//add old texture
|
||||
atlas.getTextures().add(region.getTexture());
|
||||
}
|
||||
|
||||
//remove old texture, it will no longer be used
|
||||
atlas.getTextures().remove(texture);
|
||||
texture.dispose();
|
||||
atlas.disposePixmap(texture);
|
||||
|
||||
page.setDirty(true);
|
||||
page.updateTexture(TextureFilter.Linear, TextureFilter.Linear, false);
|
||||
}
|
||||
|
||||
void loadExtraCursors(){
|
||||
drillCursor = Core.graphics.newCursor("drill");
|
||||
unloadCursor = Core.graphics.newCursor("unload");
|
||||
}
|
||||
|
||||
public TextureRegionDrawable getGlyph(BitmapFont font, char glyph){
|
||||
Glyph g = font.getData().getGlyph(glyph);
|
||||
if(g == null) throw new IllegalArgumentException("No glyph: " + glyph + " (" + (int)glyph + ")");
|
||||
|
||||
float size = Math.max(g.width, g.height);
|
||||
float aspect = (float)g.height / g.width;
|
||||
TextureRegionDrawable draw = new TextureRegionDrawable(new TextureRegion(font.getRegion().getTexture(), g.u, g.v2, g.u2, g.v)){
|
||||
@Override
|
||||
public void draw(float x, float y, float width, float height){
|
||||
Draw.color(Tmp.c1.set(tint).mul(Draw.getColor()).toFloatBits());
|
||||
float cx = x + width/2f - g.width/2f, cy = y + height/2f - g.height/2f;
|
||||
cx = (int)cx;
|
||||
cy = (int)cy;
|
||||
Draw.rect(region, cx + g.width/2f, cy + g.height/2f, g.width, g.height);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float imageSize(){
|
||||
return size;
|
||||
}
|
||||
};
|
||||
|
||||
draw.setMinWidth(size);
|
||||
draw.setMinHeight(size);
|
||||
return draw;
|
||||
}
|
||||
|
||||
public void setupFonts(){
|
||||
String fontName = "fonts/font.ttf";
|
||||
|
||||
FreeTypeFontParameter param = fontParameter();
|
||||
|
||||
Core.assets.load("default", BitmapFont.class, new FreeTypeFontLoaderParameter(fontName, param)).loaded = f -> Fonts.def = (BitmapFont)f;
|
||||
Core.assets.load("chat", BitmapFont.class, new FreeTypeFontLoaderParameter(fontName, param)).loaded = f -> Fonts.chat = (BitmapFont)f;
|
||||
Core.assets.load("icon", BitmapFont.class, new FreeTypeFontLoaderParameter("fonts/icon.ttf", new FreeTypeFontParameter(){{
|
||||
size = (int)(Scl.scl(30f));
|
||||
incremental = true;
|
||||
}})).loaded = f -> Fonts.icon = (BitmapFont)f;
|
||||
}
|
||||
|
||||
public TextureRegionDrawable getIcon(String name){
|
||||
if(Icon.icons.containsKey(name)){
|
||||
return Icon.icons.get(name);
|
||||
}
|
||||
return Core.atlas.getDrawable("error");
|
||||
}
|
||||
|
||||
static FreeTypeFontParameter fontParameter(){
|
||||
return new FreeTypeFontParameter(){{
|
||||
size = (int)(Scl.scl(18f));
|
||||
shadowColor = Color.darkGray;
|
||||
shadowOffsetY = 2;
|
||||
incremental = true;
|
||||
}};
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(){
|
||||
if(disableUI || Core.scene == null) return;
|
||||
@ -355,6 +217,13 @@ public class UI implements ApplicationListener, Loadable{
|
||||
}
|
||||
}
|
||||
|
||||
public TextureRegionDrawable getIcon(String name){
|
||||
if(Icon.icons.containsKey(name)){
|
||||
return Icon.icons.get(name);
|
||||
}
|
||||
return Core.atlas.getDrawable("error");
|
||||
}
|
||||
|
||||
public void loadAnd(Runnable call){
|
||||
loadAnd("$loading", call);
|
||||
}
|
||||
|
@ -1,6 +1,29 @@
|
||||
package mindustry.ui;
|
||||
|
||||
import arc.*;
|
||||
import arc.Graphics.Cursor.*;
|
||||
import arc.assets.*;
|
||||
import arc.assets.loaders.*;
|
||||
import arc.assets.loaders.resolvers.*;
|
||||
import arc.files.*;
|
||||
import arc.freetype.*;
|
||||
import arc.freetype.FreeTypeFontGenerator.*;
|
||||
import arc.freetype.FreetypeFontLoader.*;
|
||||
import arc.graphics.*;
|
||||
import arc.graphics.Pixmap.*;
|
||||
import arc.graphics.Texture.*;
|
||||
import arc.graphics.g2d.*;
|
||||
import arc.graphics.g2d.BitmapFont.*;
|
||||
import arc.graphics.g2d.PixmapPacker.*;
|
||||
import arc.graphics.g2d.TextureAtlas.*;
|
||||
import arc.math.geom.*;
|
||||
import arc.scene.style.*;
|
||||
import arc.scene.ui.layout.*;
|
||||
import arc.struct.*;
|
||||
import arc.util.*;
|
||||
import mindustry.core.*;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class Fonts{
|
||||
public static BitmapFont def;
|
||||
@ -8,4 +31,156 @@ public class Fonts{
|
||||
public static BitmapFont chat;
|
||||
public static BitmapFont icon;
|
||||
|
||||
/** Called from a static context to make the cursor appear immediately upon startup.*/
|
||||
public static void loadSystemCursors(){
|
||||
SystemCursor.arrow.set(Core.graphics.newCursor("cursor"));
|
||||
SystemCursor.hand.set(Core.graphics.newCursor("hand"));
|
||||
SystemCursor.ibeam.set(Core.graphics.newCursor("ibeam"));
|
||||
|
||||
Core.graphics.restoreCursor();
|
||||
}
|
||||
|
||||
public static void loadFonts(){
|
||||
String fontName = "fonts/font.ttf";
|
||||
|
||||
FreeTypeFontParameter param = fontParameter();
|
||||
|
||||
Core.assets.load("default", BitmapFont.class, new FreeTypeFontLoaderParameter(fontName, param)).loaded = f -> Fonts.def = (BitmapFont)f;
|
||||
Core.assets.load("chat", BitmapFont.class, new FreeTypeFontLoaderParameter(fontName, param)).loaded = f -> Fonts.chat = (BitmapFont)f;
|
||||
Core.assets.load("icon", BitmapFont.class, new FreeTypeFontLoaderParameter("fonts/icon.ttf", new FreeTypeFontParameter(){{
|
||||
size = (int)(Scl.scl(30f));
|
||||
incremental = true;
|
||||
}})).loaded = f -> Fonts.icon = (BitmapFont)f;
|
||||
}
|
||||
|
||||
public static void loadContentIcons(){
|
||||
Array<BitmapFont> fonts = Array.with(Fonts.chat, Fonts.def, Fonts.outline);
|
||||
Texture uitex = Core.atlas.find("logo").getTexture();
|
||||
int size = (int)(Fonts.def.getData().lineHeight/Fonts.def.getData().scaleY);
|
||||
|
||||
try(Scanner scan = new Scanner(Core.files.internal("icons/icons.properties").read(512))){
|
||||
while(scan.hasNextLine()){
|
||||
String line = scan.nextLine();
|
||||
String[] split = line.split("=");
|
||||
String character = split[0], texture = split[1].split("\\|")[1];
|
||||
int ch = Integer.parseInt(character);
|
||||
TextureRegion region = Core.atlas.find(texture);
|
||||
|
||||
if(region.getTexture() != uitex) throw new IllegalArgumentException("Font icon '" + texture + "' is not in the UI texture.");
|
||||
|
||||
Glyph glyph = new Glyph();
|
||||
glyph.id = ch;
|
||||
glyph.srcX = 0;
|
||||
glyph.srcY = 0;
|
||||
glyph.width = size;
|
||||
glyph.height = size;
|
||||
glyph.u = region.getU();
|
||||
glyph.v = region.getV2();
|
||||
glyph.u2 = region.getU2();
|
||||
glyph.v2 = region.getV();
|
||||
glyph.xoffset = 0;
|
||||
glyph.yoffset = -size;
|
||||
glyph.xadvance = size;
|
||||
glyph.kerning = null;
|
||||
glyph.fixedWidth = true;
|
||||
glyph.page = 0;
|
||||
fonts.each(f -> f.getData().setGlyph(ch, glyph));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** Called from a static context for use in the loading screen.*/
|
||||
public static void loadDefaultFont(){
|
||||
UI.packer = new PixmapPacker(2048, 2048, Format.RGBA8888, 2, true);
|
||||
FileHandleResolver resolver = new InternalFileHandleResolver();
|
||||
Core.assets.setLoader(FreeTypeFontGenerator.class, new FreeTypeFontGeneratorLoader(resolver));
|
||||
Core.assets.setLoader(BitmapFont.class, null, new FreetypeFontLoader(resolver){
|
||||
@Override
|
||||
public BitmapFont loadSync(AssetManager manager, String fileName, Fi file, FreeTypeFontLoaderParameter parameter){
|
||||
if(fileName.equals("outline")){
|
||||
parameter.fontParameters.borderWidth = Scl.scl(2f);
|
||||
parameter.fontParameters.spaceX -= parameter.fontParameters.borderWidth;
|
||||
}
|
||||
parameter.fontParameters.magFilter = TextureFilter.Linear;
|
||||
parameter.fontParameters.minFilter = TextureFilter.Linear;
|
||||
parameter.fontParameters.packer = UI.packer;
|
||||
return super.loadSync(manager, fileName, file, parameter);
|
||||
}
|
||||
});
|
||||
|
||||
FreeTypeFontParameter param = new FreeTypeFontParameter(){{
|
||||
borderColor = Color.darkGray;
|
||||
size = (int)(Scl.scl(18f));
|
||||
incremental = true;
|
||||
}};
|
||||
|
||||
Core.assets.load("outline", BitmapFont.class, new FreeTypeFontLoaderParameter("fonts/font.ttf", param)).loaded = t -> Fonts.outline = (BitmapFont)t;
|
||||
}
|
||||
|
||||
/** Merges the UI and font atlas together for better performance. */
|
||||
public static void mergeFontAtlas(TextureAtlas atlas){
|
||||
//grab all textures from the ui page, remove all the regions assigned to it, then copy them over to Fonts.packer and replace the texture in this atlas.
|
||||
|
||||
//grab old UI texture and regions...
|
||||
Texture texture = atlas.find("logo").getTexture();
|
||||
|
||||
Page page = UI.packer.getPages().first();
|
||||
|
||||
Array<AtlasRegion> regions = atlas.getRegions().select(t -> t.getTexture() == texture);
|
||||
for(AtlasRegion region : regions){
|
||||
//get new pack rect
|
||||
page.setDirty(false);
|
||||
Rect rect = UI.packer.pack(region.name + (region.splits != null ? ".9" : ""), atlas.getPixmap(region));
|
||||
//set new texture
|
||||
region.setTexture(UI.packer.getPages().first().getTexture());
|
||||
//set its new position
|
||||
region.set((int)rect.x, (int)rect.y, (int)rect.width, (int)rect.height);
|
||||
//add old texture
|
||||
atlas.getTextures().add(region.getTexture());
|
||||
}
|
||||
|
||||
//remove old texture, it will no longer be used
|
||||
atlas.getTextures().remove(texture);
|
||||
texture.dispose();
|
||||
atlas.disposePixmap(texture);
|
||||
|
||||
page.setDirty(true);
|
||||
page.updateTexture(TextureFilter.Linear, TextureFilter.Linear, false);
|
||||
}
|
||||
|
||||
public static TextureRegionDrawable getGlyph(BitmapFont font, char glyph){
|
||||
Glyph g = font.getData().getGlyph(glyph);
|
||||
if(g == null) throw new IllegalArgumentException("No glyph: " + glyph + " (" + (int)glyph + ")");
|
||||
|
||||
float size = Math.max(g.width, g.height);
|
||||
float aspect = (float)g.height / g.width;
|
||||
TextureRegionDrawable draw = new TextureRegionDrawable(new TextureRegion(font.getRegion().getTexture(), g.u, g.v2, g.u2, g.v)){
|
||||
@Override
|
||||
public void draw(float x, float y, float width, float height){
|
||||
Draw.color(Tmp.c1.set(tint).mul(Draw.getColor()).toFloatBits());
|
||||
float cx = x + width/2f - g.width/2f, cy = y + height/2f - g.height/2f;
|
||||
cx = (int)cx;
|
||||
cy = (int)cy;
|
||||
Draw.rect(region, cx + g.width/2f, cy + g.height/2f, g.width, g.height);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float imageSize(){
|
||||
return size;
|
||||
}
|
||||
};
|
||||
|
||||
draw.setMinWidth(size);
|
||||
draw.setMinHeight(size);
|
||||
return draw;
|
||||
}
|
||||
|
||||
static FreeTypeFontParameter fontParameter(){
|
||||
return new FreeTypeFontParameter(){{
|
||||
size = (int)(Scl.scl(18f));
|
||||
shadowColor = Color.darkGray;
|
||||
shadowOffsetY = 2;
|
||||
incremental = true;
|
||||
}};
|
||||
}
|
||||
}
|
||||
|
@ -1,3 +1,3 @@
|
||||
org.gradle.daemon=true
|
||||
org.gradle.jvmargs=-Xms256m -Xmx1024m
|
||||
archash=e1b23af5b5e426fdd32c3940a00ffbcb429dd77e
|
||||
archash=1d6a93973f44e4ef310cd959168ed611f2dbfef9
|
||||
|
@ -176,6 +176,10 @@ public class Generators{
|
||||
Image image = new Image(icon.size, icon.size);
|
||||
image.drawScaled(base);
|
||||
image.save(item.getContentType().name() + "-" + item.name + "-" + icon.name(), false);
|
||||
|
||||
if(icon == Cicon.medium){
|
||||
image.save("../ui/" + item.getContentType() + "-" + item.name + "-icon");
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
@ -254,12 +258,11 @@ public class Generators{
|
||||
image.save("../blocks/environment/ore-" + item.name + (i + 1));
|
||||
image.save("../editor/editor-ore-" + item.name + (i + 1));
|
||||
|
||||
//save icons
|
||||
image.save("block-" + ore.name + "-full");
|
||||
for(Cicon icon : Cicon.scaled){
|
||||
Image scaled = new Image(icon.size, icon.size);
|
||||
scaled.drawScaled(image);
|
||||
scaled.save("block-" + ore.name + "-" + icon.name());
|
||||
scaled.save("../ui/block-" + ore.name + "-" + icon.name());
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -7,8 +7,13 @@ import arc.graphics.g2d.TextureAtlas.*;
|
||||
import arc.struct.*;
|
||||
import arc.util.*;
|
||||
import arc.util.Log.*;
|
||||
import arc.util.io.*;
|
||||
import mindustry.*;
|
||||
import mindustry.content.*;
|
||||
import mindustry.core.*;
|
||||
import mindustry.ctype.*;
|
||||
import mindustry.world.*;
|
||||
import mindustry.world.blocks.*;
|
||||
|
||||
import javax.imageio.*;
|
||||
import java.awt.image.*;
|
||||
@ -93,6 +98,42 @@ public class ImagePacker{
|
||||
Log.info("&ly[Generator]&lc Total time to generate: &lg{0}&lcms", Time.elapsed());
|
||||
Log.info("&ly[Generator]&lc Total images created: &lg{0}", Image.total());
|
||||
Image.dispose();
|
||||
|
||||
//format:
|
||||
//character-ID=contentname:texture-name
|
||||
Fi iconfile = Fi.get("../../../assets/icons/icons.properties");
|
||||
OrderedMap<String, String> map = new OrderedMap<>();
|
||||
PropertiesUtils.load(map, iconfile.reader(256));
|
||||
|
||||
ObjectMap<String, String> content2id = new ObjectMap<>();
|
||||
map.each((key, val) -> content2id.put(val.split("\\|")[0], key));
|
||||
|
||||
Array<UnlockableContent> cont = Array.withArrays(Vars.content.blocks(), Vars.content.items(), Vars.content.liquids());
|
||||
cont.removeAll(u -> u instanceof BlockPart || u instanceof BuildBlock || u == Blocks.air);
|
||||
|
||||
int minid = 0xF8FF;
|
||||
for(String key : map.keys()){
|
||||
minid = Math.min(Integer.parseInt(key) - 1, minid);
|
||||
}
|
||||
|
||||
for(UnlockableContent c : cont){
|
||||
if(!content2id.containsKey(c.name)){
|
||||
map.put(minid + "", c.name + "|" + texname(c));
|
||||
minid --;
|
||||
}
|
||||
}
|
||||
|
||||
Writer writer = iconfile.writer(false);
|
||||
for(String key : map.keys()){
|
||||
writer.write(key + "=" + map.get(key) + "\n");
|
||||
}
|
||||
|
||||
writer.close();
|
||||
}
|
||||
|
||||
static String texname(UnlockableContent c){
|
||||
if(c instanceof Block) return "block-" + c.name + "-medium";
|
||||
return c.getContentType() + "-" + c.name + "-icon";
|
||||
}
|
||||
|
||||
static void generate(String name, Runnable run){
|
||||
|
Loading…
Reference in New Issue
Block a user