package com.imyeyu.fx.ui;

import javafx.scene.Node;
import javafx.scene.text.Font;

/**
 * Minecraft 字体，此字体为点阵字体，不会模糊渲染，在 16，32，64，128 像素时最为清晰
 *
 * @author 夜雨
 * @since 2021-04-14 00:11
 */
public class MinecraftFont implements TimiFXUI {

	/** 小号，16 像素 */
	public static int X16 = 16;

	/** 中号，32 像素 */
	public static int X32 = 32;

	/** 大号，64 像素 */
	public static int X64 = 64;

	/** 特大号，128 像素 */
	public static int X128 = 128;

	private static Font F_X16, F_X32, F_X64, F_X128;
	private static final String NAME = "MinecraftAE.ttf";

	/**
	 * 通过 CSS 修改字号，请置于组件样式修改的最后
	 *
	 * @param node 组件
	 * @param size 字号，单位：像素
	 */
	public static void css(Node node, int size) {
		node.setStyle(node.getStyle() + "; -fx-font-size: " + size);
	}

	/**
	 * 获取小号字体 X16
	 *
	 * @return 小号字体
	 */
	public static Font X16() {
		return F_X16 == null ? F_X16 = build(X16) : F_X16;
	}

	/**
	 * 获取中号字体 X32
	 *
	 * @return 中号字体
	 */
	public static Font X32() {
		return F_X32 == null ? F_X32 = build(X32) : F_X32;
	}

	/**
	 * 获取大号字体 X64
	 *
	 * @return 大号字体
	 */
	public static Font X64() {
		return F_X64 == null ? F_X64 = build(X64) : F_X64;
	}

	/**
	 * 获取特大号字体 X128
	 *
	 * @return 特大号字体
	 */
	public static Font X128() {
		return F_X128 == null ? F_X128 = build(X128) : F_X128;
	}

	/**
	 * 构建字体，Minecraft 字体在 16 的公倍数时渲染最佳
	 *
	 * @param size 字号
	 * @return 字体
	 */
	public static Font build(int size) {
		return Font.loadFont(MinecraftFont.class.getResourceAsStream(RESOURCE + NAME), size);
	}
}