diff --git a/src/main/java/me/braydon/mc/common/renderer/IsometricSkinRenderer.java b/src/main/java/me/braydon/mc/common/renderer/IsometricSkinRenderer.java new file mode 100644 index 0000000..0e2fcf9 --- /dev/null +++ b/src/main/java/me/braydon/mc/common/renderer/IsometricSkinRenderer.java @@ -0,0 +1,56 @@ +/* + * MIT License + * + * Copyright (c) 2024 Braydon (Rainnny). + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package me.braydon.mc.common.renderer; + +import lombok.NonNull; +import me.braydon.mc.model.skin.ISkinPart; + +import java.awt.*; +import java.awt.geom.AffineTransform; +import java.awt.image.BufferedImage; + +/** + * A isometric renderer for a {@link ISkinPart}. + * + * @param the type of part to render + * @author Braydon + */ +public abstract class IsometricSkinRenderer extends SkinRenderer { + /** + * Draw a part onto the texture. + * + * @param graphics the graphics to draw to + * @param partImage the part image to draw + * @param transform the transform to apply + * @param x the x position to draw at + * @param y the y position to draw at + * @param width the part image width + * @param height the part image height + */ + protected final void drawPart(@NonNull Graphics2D graphics, @NonNull BufferedImage partImage, @NonNull AffineTransform transform, + double x, double y, int width, int height) { + graphics.setTransform(transform); + graphics.drawImage(partImage, (int) x, (int) y, width, height, null); + } +} \ No newline at end of file diff --git a/src/main/java/me/braydon/mc/common/renderer/SkinRenderer.java b/src/main/java/me/braydon/mc/common/renderer/SkinRenderer.java index 185df5b..f209d6c 100644 --- a/src/main/java/me/braydon/mc/common/renderer/SkinRenderer.java +++ b/src/main/java/me/braydon/mc/common/renderer/SkinRenderer.java @@ -71,7 +71,7 @@ public abstract class SkinRenderer { coordinates = part.getLegacyCoordinates(); } int width = part.getWidth(); // The width of the part - if (skin.getModel() == Skin.Model.SLIM && part.isArm()) { + if (skin.getModel() == Skin.Model.SLIM && part.isFrontArm()) { width--; } BufferedImage partTexture = getSkinPartTexture(skinImage, coordinates.getX(), coordinates.getY(), width, part.getHeight(), size); diff --git a/src/main/java/me/braydon/mc/common/renderer/impl/BodySkinPartRenderer.java b/src/main/java/me/braydon/mc/common/renderer/impl/BodySkinPartRenderer.java index 50e38f2..361508c 100644 --- a/src/main/java/me/braydon/mc/common/renderer/impl/BodySkinPartRenderer.java +++ b/src/main/java/me/braydon/mc/common/renderer/impl/BodySkinPartRenderer.java @@ -33,7 +33,7 @@ import java.awt.*; import java.awt.image.BufferedImage; /** - * A basic 2D renderer for a {@link ISkinPart.Custom#BODY}. + * A basic 2D renderer for a {@link ISkinPart.Custom#BODY_FLAT}. * * @author Braydon */ @@ -58,10 +58,10 @@ public final class BodySkinPartRenderer extends SkinRenderer { // Get the Vanilla skin parts to draw BufferedImage face = getVanillaSkinPart(skin, ISkinPart.Vanilla.FACE, -1); BufferedImage body = getVanillaSkinPart(skin, ISkinPart.Vanilla.BODY_FRONT, -1); - BufferedImage leftArm = getVanillaSkinPart(skin, ISkinPart.Vanilla.LEFT_ARM, -1); - BufferedImage rightArm = getVanillaSkinPart(skin, ISkinPart.Vanilla.RIGHT_ARM, -1); - BufferedImage leftLeg = getVanillaSkinPart(skin, ISkinPart.Vanilla.LEFT_LEG, -1); - BufferedImage rightLeg = getVanillaSkinPart(skin, ISkinPart.Vanilla.RIGHT_LEG, -1); + BufferedImage leftArm = getVanillaSkinPart(skin, ISkinPart.Vanilla.LEFT_ARM_FRONT, -1); + BufferedImage rightArm = getVanillaSkinPart(skin, ISkinPart.Vanilla.RIGHT_ARM_FRONT, -1); + BufferedImage leftLeg = getVanillaSkinPart(skin, ISkinPart.Vanilla.LEFT_LEG_FRONT, -1); + BufferedImage rightLeg = getVanillaSkinPart(skin, ISkinPart.Vanilla.RIGHT_LEG_FRONT, -1); // Draw the body parts graphics.drawImage(face, 4, 0, null); diff --git a/src/main/java/me/braydon/mc/common/renderer/impl/IsometricHeadSkinPartRenderer.java b/src/main/java/me/braydon/mc/common/renderer/impl/IsometricHeadSkinPartRenderer.java index e8cd4c8..5705afe 100644 --- a/src/main/java/me/braydon/mc/common/renderer/impl/IsometricHeadSkinPartRenderer.java +++ b/src/main/java/me/braydon/mc/common/renderer/impl/IsometricHeadSkinPartRenderer.java @@ -24,7 +24,7 @@ package me.braydon.mc.common.renderer.impl; import lombok.NonNull; -import me.braydon.mc.common.renderer.SkinRenderer; +import me.braydon.mc.common.renderer.IsometricSkinRenderer; import me.braydon.mc.model.skin.ISkinPart; import me.braydon.mc.model.skin.Skin; @@ -37,7 +37,7 @@ import java.awt.image.BufferedImage; * * @author Braydon */ -public final class IsometricHeadSkinPartRenderer extends SkinRenderer { +public final class IsometricHeadSkinPartRenderer extends IsometricSkinRenderer { public static final IsometricHeadSkinPartRenderer INSTANCE = new IsometricHeadSkinPartRenderer(); private static final double SKEW_A = 26D / 45D; // 0.57777777 @@ -84,21 +84,4 @@ public final class IsometricHeadSkinPartRenderer extends SkinRenderer