feat: updated dialog textures compiling

This commit is contained in:
Andrey Terentev 2024-12-08 01:30:15 +07:00
parent 6ed96d082e
commit aa3e3a32ba
11 changed files with 121 additions and 43 deletions

View File

@ -19,11 +19,15 @@ import ru.dragonestia.msb3.api.glyph.glyph.image.TextureProperties;
import ru.dragonestia.msb3.api.glyph.glyph.image.multicharacter.LanguageGlyphCollection;
import ru.dragonestia.msb3.api.glyph.pack.GlyphResourcePack;
import ru.dragonestia.msb3.api.glyph.pack.StringIdentifier;
import ru.dragonestia.msb3.api.util.ImageUtil;
import ru.dragonestia.msb3.api.util.ResourceFromJar;
import ru.dragonestia.msb3.api.util.StringUtil;
import team.unnamed.creative.base.Writable;
import team.unnamed.creative.texture.Texture;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.IntStream;
@ -42,13 +46,7 @@ public class DialogueRenderer {
private static final Writable ANSWER_BUTTON_ACTIVE_4 = ResourceFromJar.of("glyphs/dialogue/answer_button_active_4.png");
private static final Writable ANSWER_NOT_ACTIVE_TEXT_FIELD = ResourceFromJar.of("glyphs/dialogue/answer_not_active_text_field.png");
private static final Writable AVATAR_FRAME = ResourceFromJar.of("glyphs/dialogue/avatar_frame.png");
private static final Writable BACKGROUND_1 = ResourceFromJar.of("glyphs/dialogue/background_1.png");
private static final Writable BACKGROUND_2 = ResourceFromJar.of("glyphs/dialogue/background_2.png");
private static final Writable BACKGROUND_3 = ResourceFromJar.of("glyphs/dialogue/background_3.png");
private static final Writable BACKGROUND_4 = ResourceFromJar.of("glyphs/dialogue/background_4.png");
private static final Writable DEFAULT_AVATAR = ResourceFromJar.of("glyphs/dialogue/default_avatar.png");
private static final Writable PHRASE_SUBSTRATE_1 = ResourceFromJar.of("glyphs/dialogue/phrase_substrate_1.png");
private static final Writable PHRASE_SUBSTRATE_2 = ResourceFromJar.of("glyphs/dialogue/phrase_substrate_2.png");
private static final Writable SCROLL_PHRASE_DOWN_BUTTON = ResourceFromJar.of("glyphs/dialogue/scroll_phrase_down_button.png");
private static final Writable SCROLL_PHRASE_UP_BUTTON = ResourceFromJar.of("glyphs/dialogue/scroll_phrase_up_button.png");
@ -127,34 +125,16 @@ public class DialogueRenderer {
AVATAR_FRAME,
DialogGlyphPositions.DEFAULT.avatar().frameHeight(),
DialogGlyphPositions.DEFAULT.avatar().y() + DialogGlyphPositions.DEFAULT.avatar().frameBorderSize());
private static final ImageGlyph GLYPH_BACKGROUND_1 = createGlyph("dialog/background_1.png",
BACKGROUND_1,
DialogGlyphPositions.DEFAULT.guiBackground().height() / 2,
DialogGlyphPositions.DEFAULT.guiBackground().topPartsY());
private static final ImageGlyph GLYPH_BACKGROUND_2 = createGlyph("dialog/background_2.png",
BACKGROUND_2,
DialogGlyphPositions.DEFAULT.guiBackground().height() / 2,
DialogGlyphPositions.DEFAULT.guiBackground().topPartsY());
private static final ImageGlyph GLYPH_BACKGROUND_3 = createGlyph("dialog/background_3.png",
BACKGROUND_3,
DialogGlyphPositions.DEFAULT.guiBackground().height() / 2,
DialogGlyphPositions.DEFAULT.guiBackground().bottomPartsY());
private static final ImageGlyph GLYPH_BACKGROUND_4 = createGlyph("dialog/background_4.png",
BACKGROUND_4,
DialogGlyphPositions.DEFAULT.guiBackground().height() / 2,
DialogGlyphPositions.DEFAULT.guiBackground().bottomPartsY());
private static final ImageGlyph GLYPH_BACKGROUND_1;
private static final ImageGlyph GLYPH_BACKGROUND_2;
private static final ImageGlyph GLYPH_BACKGROUND_3;
private static final ImageGlyph GLYPH_BACKGROUND_4;
private static final ImageGlyph GLYPH_DEFAULT_AVATAR = createGlyph("dialog/default_avatar.png",
DEFAULT_AVATAR,
DialogGlyphPositions.DEFAULT.avatar().height(),
DialogGlyphPositions.DEFAULT.avatar().y());
private static final ImageGlyph GLYPH_PHRASE_SUBSTRATE_1 = createGlyph("dialog/phrase_substrate_1.png",
PHRASE_SUBSTRATE_1,
DialogGlyphPositions.DEFAULT.phraseSubstrate().height(),
DialogGlyphPositions.DEFAULT.phraseSubstrate().y());
private static final ImageGlyph GLYPH_PHRASE_SUBSTRATE_2 = createGlyph("dialog/phrase_substrate_2.png",
PHRASE_SUBSTRATE_2,
DialogGlyphPositions.DEFAULT.phraseSubstrate().height(),
DialogGlyphPositions.DEFAULT.phraseSubstrate().y());
private static final ImageGlyph GLYPH_PHRASE_SUBSTRATE_1;
private static final ImageGlyph GLYPH_PHRASE_SUBSTRATE_2;
private static final ImageGlyph GLYPH_SCROLL_PHRASE_DOWN_BUTTON = createGlyph("dialog/scroll_phrase_down_button.png",
SCROLL_PHRASE_DOWN_BUTTON,
DialogGlyphPositions.DEFAULT.scrollPhraseButton().height(),
@ -168,6 +148,72 @@ public class DialogueRenderer {
private static final StringIdentifier<@NotNull LanguageGlyphCollection> ID_FONT = StringIdentifier.of("dialog_font", LanguageGlyphCollection.class);
static {
BufferedImage backgroundImage;
Writable b1;
Writable b2;
Writable b3;
Writable b4;
try (var steam = ResourceFromJar.streamOf("glyphs/dialogue/background.png")) {
backgroundImage = ImageIO.read(steam);
var w = backgroundImage.getWidth();
var h = backgroundImage.getHeight();
b1 = ImageUtil.imageToWritable(backgroundImage.getSubimage(0, 0, w / 2, h / 2));
b2 = ImageUtil.imageToWritable(backgroundImage.getSubimage(w / 2, 0, w / 2, h / 2));
b3 = ImageUtil.imageToWritable(backgroundImage.getSubimage(0, h / 2, w / 2, h / 2));
b4 = ImageUtil.imageToWritable(backgroundImage.getSubimage(w / 2, h / 2, w / 2, h / 2));
} catch (IOException ex) {
throw new RuntimeException(ex);
}
GLYPH_BACKGROUND_1 = createGlyph("dialog/background_1.png",
b1,
DialogGlyphPositions.DEFAULT.guiBackground().height() / 2,
DialogGlyphPositions.DEFAULT.guiBackground().topPartsY());
GLYPH_BACKGROUND_2 = createGlyph("dialog/background_2.png",
b2,
DialogGlyphPositions.DEFAULT.guiBackground().height() / 2,
DialogGlyphPositions.DEFAULT.guiBackground().topPartsY());
GLYPH_BACKGROUND_3 = createGlyph("dialog/background_3.png",
b3,
DialogGlyphPositions.DEFAULT.guiBackground().height() / 2,
DialogGlyphPositions.DEFAULT.guiBackground().bottomPartsY());
GLYPH_BACKGROUND_4 = createGlyph("dialog/background_4.png",
b4,
DialogGlyphPositions.DEFAULT.guiBackground().height() / 2,
DialogGlyphPositions.DEFAULT.guiBackground().bottomPartsY());
BufferedImage substrateImage;
Writable s1;
Writable s2;
try (var stream = ResourceFromJar.streamOf("glyphs/dialogue/phrase_substrate.png")) {
substrateImage = ImageIO.read(stream);
var w = substrateImage.getWidth();
var h = substrateImage.getHeight();
s1 = ImageUtil.imageToWritable(substrateImage.getSubimage(0, 0, w / 2, h));
s2 = ImageUtil.imageToWritable(substrateImage.getSubimage(w / 2, 0, w / 2, h));
} catch (IOException ex) {
throw new RuntimeException(ex);
}
GLYPH_PHRASE_SUBSTRATE_1 = createGlyph("dialog/phrase_substrate_1.png",
s1,
DialogGlyphPositions.DEFAULT.phraseSubstrate().height(),
DialogGlyphPositions.DEFAULT.phraseSubstrate().y());
GLYPH_PHRASE_SUBSTRATE_2 = createGlyph("dialog/phrase_substrate_2.png",
s2,
DialogGlyphPositions.DEFAULT.phraseSubstrate().height(),
DialogGlyphPositions.DEFAULT.phraseSubstrate().y());
var positions = DialogGlyphPositions.DEFAULT;
var propertiesList = Stream.concat(Stream.concat(IntStream.range(0, positions.phraseText().maxLines()).map((idx) -> {
return idx * (positions.phraseText().fontHeight() + 1) + positions.phraseText().firstLineAscent() * -1;
@ -222,8 +268,6 @@ public class DialogueRenderer {
private DialogueRenderer(Player player) {
this.player = player;
}
public static DialogueRenderer create(Player player) {

View File

@ -0,0 +1,27 @@
package ru.dragonestia.msb3.api.util;
import lombok.experimental.UtilityClass;
import team.unnamed.creative.base.Writable;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
@UtilityClass
public class ImageUtil {
public Writable imageToWritable(BufferedImage image) {
try {
return imageToWritable0(image);
} catch (Exception ex) {
throw new RuntimeException(ex);
}
}
private Writable imageToWritable0(BufferedImage image) throws Exception {
try (var stream = new ByteArrayOutputStream()) {
ImageIO.write(image, "png", stream);
return Writable.bytes(stream.toByteArray());
}
}
}

View File

@ -4,6 +4,7 @@ import ru.dragonestia.msb3.api.ServerBootstrap;
import team.unnamed.creative.base.Writable;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
@ -14,7 +15,14 @@ public interface ResourceFromJar {
}
static Writable of(ClassLoader classLoader, String fileName) {
return Writable.inputStream(() -> {
return Writable.inputStream(() -> streamOf(classLoader, fileName));
}
static InputStream streamOf(String fileName) {
return streamOf(ServerBootstrap.CLASS_LOADER, fileName);
}
static InputStream streamOf(ClassLoader classLoader, String fileName) {
try {
URL url = classLoader.getResource(fileName);
@ -28,6 +36,5 @@ public interface ResourceFromJar {
} catch (IOException ex) {
return null;
}
});
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 970 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 739 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 796 B