Search in sources :

Example 51 with Skin

use of riskyken.armourersWorkshop.common.skin.data.Skin in project Armourers-Workshop by RiskyKen.

the class BlockHighlightRenderHandler method drawSkinnableBlockHelper.

private void drawSkinnableBlockHelper(World world, int x, int y, int z, int side, EntityPlayer player, float partialTicks, ISkinPointer skinPointer) {
    // int meta = world.getBlockMetadata(x, y, z);
    // Rectangle3D[][][] blockGrid;
    Skin skin = ClientSkinCache.INSTANCE.getSkin(skinPointer, false);
    if (skin != null) {
    // blockGrid = skin.getParts().get(0).getBlockGrid();
    } else {
        return;
    }
    double xOff = player.lastTickPosX + (player.posX - player.lastTickPosX) * partialTicks;
    double yOff = player.lastTickPosY + (player.posY - player.lastTickPosY) * partialTicks;
    double zOff = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * partialTicks;
    float f1 = 0.002F;
    float scale = 0.0625F;
    ForgeDirection dir = UtilPlayer.getDirectionSide(player).getOpposite();
    for (int ix = 0; ix < 3; ix++) {
        for (int iy = 0; iy < 3; iy++) {
            for (int iz = 0; iz < 3; iz++) {
                float[] bounds = TileEntitySkinnable.getBlockBounds(skin, -ix + 2, iy, iz, dir);
                if (bounds != null) {
                    double minX = bounds[0];
                    double minY = bounds[1];
                    double minZ = bounds[2];
                    double maxX = bounds[3];
                    double maxY = bounds[4];
                    double maxZ = bounds[5];
                    AxisAlignedBB aabb = AxisAlignedBB.getBoundingBox(minX, minY, minZ, maxX, maxY, maxZ);
                    aabb.offset(-xOff - 1, -yOff, -zOff - 1);
                    aabb.offset(dir.offsetX * -1, 0, dir.offsetZ * -1);
                    aabb.offset(x, y, z);
                    aabb.offset(ix, iy, iz);
                    GL11.glEnable(GL11.GL_BLEND);
                    OpenGlHelper.glBlendFunc(770, 771, 1, 0);
                    GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.75F);
                    if (!world.isAirBlock(x + ix - 1 - dir.offsetX, y + iy, z + iz - 1 - dir.offsetZ)) {
                        GL11.glColor4f(1.0F, 0.0F, 0.0F, 0.75F);
                    }
                    GL11.glLineWidth(1F);
                    GL11.glDisable(GL11.GL_TEXTURE_2D);
                    GL11.glDepthMask(false);
                    GL11.glDisable(GL11.GL_DEPTH_TEST);
                    RenderGlobal.drawOutlinedBoundingBox(aabb.contract(f1, f1, f1), -1);
                    GL11.glEnable(GL11.GL_DEPTH_TEST);
                    GL11.glDepthMask(true);
                    GL11.glEnable(GL11.GL_TEXTURE_2D);
                    GL11.glDisable(GL11.GL_BLEND);
                }
            }
        }
    }
}
Also used : AxisAlignedBB(net.minecraft.util.AxisAlignedBB) ForgeDirection(net.minecraftforge.common.util.ForgeDirection) Skin(riskyken.armourersWorkshop.common.skin.data.Skin)

Example 52 with Skin

use of riskyken.armourersWorkshop.common.skin.data.Skin in project Armourers-Workshop by RiskyKen.

the class ClientSkinCache method getModelCount.

public int getModelCount() {
    int count = 0;
    synchronized (skinIDMap) {
        Object[] keySet = skinIDMap.getKeySet().toArray();
        for (int i = 0; i < keySet.length; i++) {
            ISkinIdentifier key = (ISkinIdentifier) keySet[i];
            Skin skin = skinIDMap.getQuiet(key);
            if (skin != null) {
                count += skin.getModelCount();
            }
        }
    }
    return count;
}
Also used : ISkinIdentifier(riskyken.armourersWorkshop.api.common.skin.data.ISkinIdentifier) Skin(riskyken.armourersWorkshop.common.skin.data.Skin) BakedSkin(riskyken.armourersWorkshop.client.model.bake.ModelBakery.BakedSkin)

Example 53 with Skin

use of riskyken.armourersWorkshop.common.skin.data.Skin in project Armourers-Workshop by RiskyKen.

the class ClientSkinCache method clearCache.

public void clearCache() {
    synchronized (skinIDMap) {
        Object[] keySet = skinIDMap.getKeySet().toArray();
        for (int i = 0; i < keySet.length; i++) {
            ISkinIdentifier key = (ISkinIdentifier) keySet[i];
            Skin customArmourItemData = skinIDMap.get(key);
            skinIDMap.remove(key);
            customArmourItemData.cleanUpDisplayLists();
        }
    }
    synchronized (requestedSkinIDs) {
        requestedSkinIDs.clear();
    }
}
Also used : ISkinIdentifier(riskyken.armourersWorkshop.api.common.skin.data.ISkinIdentifier) Skin(riskyken.armourersWorkshop.common.skin.data.Skin) BakedSkin(riskyken.armourersWorkshop.client.model.bake.ModelBakery.BakedSkin)

Example 54 with Skin

use of riskyken.armourersWorkshop.common.skin.data.Skin in project Armourers-Workshop by RiskyKen.

the class ItemStackRenderHelper method renderSkinWithoutHelper.

public static void renderSkinWithoutHelper(ISkinPointer skinPointer, boolean doLodLoading) {
    Skin skin = ClientSkinCache.INSTANCE.getSkin(skinPointer);
    if (skin == null) {
        return;
    }
    float scale = 1F / 16F;
    for (int i = 0; i < skin.getParts().size(); i++) {
        GL11.glPushMatrix();
        SkinPart skinPart = skin.getParts().get(i);
        IPoint3D offset = skinPart.getPartType().getOffset();
        GL11.glTranslated(offset.getX() * scale, (offset.getY() + 1) * scale, offset.getZ() * scale);
        SkinPartRenderer.INSTANCE.renderPart(skinPart, 0.0625F, skinPointer.getSkinDye(), null, doLodLoading);
        GL11.glPopMatrix();
    }
}
Also used : IPoint3D(riskyken.armourersWorkshop.api.common.IPoint3D) Skin(riskyken.armourersWorkshop.common.skin.data.Skin) SkinPart(riskyken.armourersWorkshop.common.skin.data.SkinPart)

Example 55 with Skin

use of riskyken.armourersWorkshop.common.skin.data.Skin in project Armourers-Workshop by RiskyKen.

the class ModelRendererAttachment method render.

@Override
public void render(float scale) {
    if (ClientProxy.getSkinRenderType() != SkinRenderType.MODEL_ATTACHMENT) {
        return;
    }
    mc.mcProfiler.startSection("armourers player render");
    SkinModelRenderer modelRenderer = SkinModelRenderer.INSTANCE;
    EntityPlayer player = modelRenderer.targetPlayer;
    if (player == null) {
        mc.mcProfiler.endSection();
        return;
    }
    if (player instanceof MannequinFakePlayer) {
        mc.mcProfiler.endSection();
        return;
    }
    double distance = Minecraft.getMinecraft().thePlayer.getDistance(player.posX, player.posY, player.posZ);
    if (distance > ConfigHandlerClient.maxSkinRenderDistance) {
        return;
    }
    EquipmentWardrobeData ewd = ClientProxy.equipmentWardrobeHandler.getEquipmentWardrobeData(new PlayerPointer(player));
    byte[] extraColours = null;
    if (ewd != null) {
        Color skinColour = new Color(ewd.skinColour);
        Color hairColour = new Color(ewd.hairColour);
        extraColours = new byte[] { (byte) skinColour.getRed(), (byte) skinColour.getGreen(), (byte) skinColour.getBlue(), (byte) hairColour.getRed(), (byte) hairColour.getGreen(), (byte) hairColour.getBlue() };
    }
    for (int skinIndex = 0; skinIndex < ExPropsPlayerSkinData.MAX_SLOTS_PER_SKIN_TYPE; skinIndex++) {
        Skin data = modelRenderer.getPlayerCustomArmour(player, skinType, skinIndex);
        if (data == null) {
            continue;
        }
        ISkinDye skinDye = modelRenderer.getPlayerDyeData(player, skinType, skinIndex);
        MovementType movmentType = MovementType.valueOf(SkinProperties.PROP_WINGS_MOVMENT_TYPE.getValue(data.getProperties()));
        int size = data.getParts().size();
        for (int i = 0; i < size; i++) {
            SkinPart partData = data.getParts().get(i);
            if (partData.getPartType() == skinPart) {
                GL11.glPushMatrix();
                if (skinType == SkinTypeRegistry.skinLegs && skinPart.getRegistryName().equals("armourers:legs.skirt")) {
                    GL11.glTranslatef(0, 12 * scale, 0);
                    if (player.isSneaking()) {
                        GL11.glRotatef(-30, 1, 0, 0);
                        GL11.glTranslatef(0, -1.25F * scale, -2F * scale);
                    }
                    if (player.isRiding()) {
                        GL11.glRotated(-70, 1F, 0F, 0F);
                    }
                }
                if (skinType == SkinTypeRegistry.skinWings) {
                    GL11.glTranslated(0, 0, scale * 2);
                    double angle = SkinUtils.getFlapAngleForWings(player, data);
                    Point3D point = new Point3D(0, 0, 0);
                    ForgeDirection axis = ForgeDirection.DOWN;
                    if (partData.getMarkerCount() > 0) {
                        point = partData.getMarker(0);
                        axis = partData.getMarkerSide(0);
                    }
                    GL11.glTranslated(scale * 0.5F, scale * 0.5F, scale * 0.5F);
                    GL11.glTranslated(scale * point.getX(), scale * point.getY(), scale * point.getZ());
                    if (skinPart.getRegistryName().equals("armourers:wings.rightWing")) {
                        angle = -angle;
                    }
                    switch(axis) {
                        case UP:
                            GL11.glRotated(angle, 0, 1, 0);
                            break;
                        case DOWN:
                            GL11.glRotated(angle, 0, -1, 0);
                            break;
                        case SOUTH:
                            GL11.glRotated(angle, 0, 0, -1);
                            break;
                        case NORTH:
                            GL11.glRotated(angle, 0, 0, 1);
                            break;
                        case EAST:
                            GL11.glRotated(angle, 1, 0, 0);
                            break;
                        case WEST:
                            GL11.glRotated(angle, -1, 0, 0);
                            break;
                        case UNKNOWN:
                            break;
                    }
                    GL11.glTranslated(scale * -point.getX(), scale * -point.getY(), scale * -point.getZ());
                    GL11.glTranslated(scale * -0.5F, scale * -0.5F, scale * -0.5F);
                }
                GL11.glEnable(GL11.GL_CULL_FACE);
                GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
                GL11.glEnable(GL11.GL_BLEND);
                SkinPartRenderer.INSTANCE.renderPart(partData, scale, skinDye, extraColours, distance, true);
                GL11.glDisable(GL11.GL_CULL_FACE);
                GL11.glPopMatrix();
                break;
            }
        }
    }
    if (ClientProxy.useSafeTextureRender()) {
        if (player instanceof AbstractClientPlayer) {
            AbstractClientPlayer clientPlayer = (AbstractClientPlayer) player;
            Minecraft.getMinecraft().renderEngine.bindTexture(clientPlayer.getLocationSkin());
        }
    }
    mc.mcProfiler.endSection();
}
Also used : SkinModelRenderer(riskyken.armourersWorkshop.client.render.SkinModelRenderer) PlayerPointer(riskyken.armourersWorkshop.common.data.PlayerPointer) ISkinDye(riskyken.armourersWorkshop.api.common.skin.data.ISkinDye) Color(java.awt.Color) SkinPart(riskyken.armourersWorkshop.common.skin.data.SkinPart) MovementType(riskyken.armourersWorkshop.common.skin.type.wings.SkinWings.MovementType) AbstractClientPlayer(net.minecraft.client.entity.AbstractClientPlayer) MannequinFakePlayer(riskyken.armourersWorkshop.client.render.MannequinFakePlayer) EquipmentWardrobeData(riskyken.armourersWorkshop.common.skin.EquipmentWardrobeData) Point3D(riskyken.armourersWorkshop.api.common.skin.Point3D) ForgeDirection(net.minecraftforge.common.util.ForgeDirection) EntityPlayer(net.minecraft.entity.player.EntityPlayer) Skin(riskyken.armourersWorkshop.common.skin.data.Skin)

Aggregations

Skin (riskyken.armourersWorkshop.common.skin.data.Skin)69 SkinPointer (riskyken.armourersWorkshop.common.skin.data.SkinPointer)19 ItemStack (net.minecraft.item.ItemStack)11 ISkinPointer (riskyken.armourersWorkshop.api.common.skin.data.ISkinPointer)11 LibraryFile (riskyken.armourersWorkshop.common.library.LibraryFile)10 SkinIdentifier (riskyken.armourersWorkshop.common.skin.data.SkinIdentifier)10 SkinPart (riskyken.armourersWorkshop.common.skin.data.SkinPart)10 ForgeDirection (net.minecraftforge.common.util.ForgeDirection)9 IOException (java.io.IOException)6 ISkinIdentifier (riskyken.armourersWorkshop.api.common.skin.data.ISkinIdentifier)6 AbstractModelSkin (riskyken.armourersWorkshop.client.model.skin.AbstractModelSkin)6 ItemSkin (riskyken.armourersWorkshop.common.items.ItemSkin)6 Color (java.awt.Color)4 ByteArrayInputStream (java.io.ByteArrayInputStream)4 DataInputStream (java.io.DataInputStream)4 AbstractClientPlayer (net.minecraft.client.entity.AbstractClientPlayer)4 BakedSkin (riskyken.armourersWorkshop.client.model.bake.ModelBakery.BakedSkin)4 SideOnly (cpw.mods.fml.relauncher.SideOnly)3 BufferedInputStream (java.io.BufferedInputStream)3 ArrayList (java.util.ArrayList)3