Fast-forward master to working and delete working #1
|
@ -0,0 +1,96 @@
|
||||||
|
package org.plutoengine.graphics.font;
|
||||||
|
|
||||||
|
import org.plutoengine.graphics.texture.MagFilter;
|
||||||
|
import org.plutoengine.graphics.texture.MinFilter;
|
||||||
|
import org.plutoengine.graphics.texture.Texture;
|
||||||
|
import org.plutoengine.graphics.texture.WrapMode;
|
||||||
|
import org.plutoengine.graphics.texture.texture2d.RectangleTexture;
|
||||||
|
import org.plutoengine.gui.font.CharacterInfo;
|
||||||
|
import org.plutoengine.gui.font.Font;
|
||||||
|
import org.plutoengine.logger.Logger;
|
||||||
|
import org.plutoengine.logger.SmartSeverity;
|
||||||
|
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class FontManager
|
||||||
|
{
|
||||||
|
private static final Map<String, Font> fonts = new HashMap<>();
|
||||||
|
|
||||||
|
public static void loadFont(Path address)
|
||||||
|
{
|
||||||
|
String fontname = null;
|
||||||
|
int width = 0;
|
||||||
|
int height = 0;
|
||||||
|
var def = new HashMap<Character, CharacterInfo>();
|
||||||
|
|
||||||
|
int row = 0;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var lines = Files.readAllLines(address.resolve("definitions#txt"));
|
||||||
|
|
||||||
|
for (var line : lines)
|
||||||
|
{
|
||||||
|
if (line.startsWith("//"))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (row == 0)
|
||||||
|
{
|
||||||
|
String[] fontinfo = line.split(",");
|
||||||
|
|
||||||
|
fontname = fontinfo[0];
|
||||||
|
|
||||||
|
String[] dim = fontinfo[1].split("x");
|
||||||
|
|
||||||
|
width = Integer.parseInt(dim[0]);
|
||||||
|
height = Integer.parseInt(dim[1]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
String[] offs = line.split(" ")[1].split(";");
|
||||||
|
|
||||||
|
def.put(line.charAt(0), new CharacterInfo(row - 1, Integer.parseInt(offs[0]), Integer.parseInt(offs[1])));
|
||||||
|
}
|
||||||
|
|
||||||
|
row++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Logger.log(SmartSeverity.ERROR, "Could not load font: " + address.toString());
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
Font font = new Font(fontname, width, height, def);
|
||||||
|
RectangleTexture texture = new RectangleTexture();
|
||||||
|
texture.load(address.resolve("tex#png"), MagFilter.NEAREST, MinFilter.LINEAR, WrapMode.CLAMP_TO_EDGE, WrapMode.CLAMP_TO_EDGE);
|
||||||
|
font.setTexture(texture);
|
||||||
|
|
||||||
|
fonts.put(fontname, font);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void unloadAll()
|
||||||
|
{
|
||||||
|
fonts.values()
|
||||||
|
.stream()
|
||||||
|
.map(Font::getTexture)
|
||||||
|
.forEach(Texture::delete);
|
||||||
|
fonts.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Font getFontByName(String fontname)
|
||||||
|
{
|
||||||
|
var font = fonts.get(fontname);
|
||||||
|
|
||||||
|
if (font == null)
|
||||||
|
{
|
||||||
|
// Logger.log(SmartSeverity.WARNING, "Font with name " + fontname + " could not be found, using the default one instead (if there is one).");
|
||||||
|
return fonts.get("default");
|
||||||
|
}
|
||||||
|
|
||||||
|
return font;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
package org.plutoengine.gui.font;
|
||||||
|
|
||||||
|
public record CharacterInfo(int number, int leftOffset, int rightOffset)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,63 @@
|
||||||
|
package org.plutoengine.graphics;
|
||||||
|
|
||||||
|
import org.plutoengine.ModLWJGL;
|
||||||
|
import org.plutoengine.Pluto;
|
||||||
|
import org.plutoengine.graphics.spritesheet.FramebufferTiledSpriteSheet;
|
||||||
|
import org.plutoengine.mod.IModEntryPoint;
|
||||||
|
import org.plutoengine.mod.Mod;
|
||||||
|
import org.plutoengine.mod.ModEntry;
|
||||||
|
import org.plutoengine.shader.PlutoShaderMod;
|
||||||
|
import org.plutoengine.shader.RenderShaderBuilder;
|
||||||
|
|
||||||
|
@ModEntry(modID = PlutoSpriteSheetMod.MOD_ID,
|
||||||
|
version = Pluto.VERSION,
|
||||||
|
dependencies = { ModLWJGL.class, PlutoShaderMod.class })
|
||||||
|
public class PlutoSpriteSheetMod implements IModEntryPoint
|
||||||
|
{
|
||||||
|
public static final String MOD_ID = "tefek.plutospritesheet";
|
||||||
|
|
||||||
|
public static Mod instance;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Strictly internal use only, do NOT use this outside of plutospritesheet
|
||||||
|
*/
|
||||||
|
private static Shader2D shader2D;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Strictly internal use only, do NOT use this outside of plutospritesheet
|
||||||
|
*/
|
||||||
|
private static ShaderRectangle2D shaderRectangle2D;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Strictly internal use only, do NOT use this outside of plutospritesheet
|
||||||
|
*/
|
||||||
|
private static ShaderRectangle2D spriteSheetShader;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoad(Mod mod)
|
||||||
|
{
|
||||||
|
instance = mod;
|
||||||
|
|
||||||
|
shader2D = new RenderShaderBuilder(mod.getResource("shaders.v2D#glsl"), mod.getResource("shaders.f2D#glsl")).build(Shader2D.class, false);
|
||||||
|
shaderRectangle2D = new RenderShaderBuilder(mod.getResource("shaders.VertexRectangle2D#glsl"), mod.getResource("shaders.FragmentRectangle2D#glsl")).build(ShaderRectangle2D.class, false);
|
||||||
|
spriteSheetShader = new RenderShaderBuilder(mod.getResource("shaders.VertexSpriteSheet#glsl"), mod.getResource("shaders.FragmentSpriteSheet#glsl")).build(ShaderRectangle2D.class, false);
|
||||||
|
|
||||||
|
Renderer2D.load(shader2D);
|
||||||
|
RectangleRenderer2D.load(shaderRectangle2D);
|
||||||
|
|
||||||
|
FramebufferTiledSpriteSheet.setSpriteShader(spriteSheetShader);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onUnload()
|
||||||
|
{
|
||||||
|
FramebufferTiledSpriteSheet.setSpriteShader(null);
|
||||||
|
|
||||||
|
spriteSheetShader.dispose();
|
||||||
|
shaderRectangle2D.dispose();
|
||||||
|
shader2D.dispose();
|
||||||
|
|
||||||
|
RectangleRenderer2D.unload();
|
||||||
|
Renderer2D.unload();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue