Jump to content

Recommended Posts

Posted

Hello,

So I've been working on a gui that is like the achievement gui and have been quite successful in my venture. I managed to setup boundaries and whatnot. I have one question through, I didn't base it off of the achievement gui class, rather I pawned it up myself and the only real discrepancy that I can notice is that the achievement panel seems to drag smoother. The only thing that I can think of is that the achievement pane is updated at the speed of the fps, yet mine is updated at tick speed. I just curious if this is true or not, and weather or not I can fix this.

 

//Reasource locations for the resources being used in this gui. (guidebook_frame.png, guidebook_background.png)
    private static final ResourceLocation background = new ResourceLocation(Reference.MODID, ResourceHelper.GUIDEBOOK_BACKGROUND);
    private static final ResourceLocation frame = new ResourceLocation(Reference.MODID, ResourceHelper.GUIDEBOOK_FRAME);

    //Width and Height of the background image itself.
    private float backgroundWidth = 521;
    private float backgroundHeight = 389;

    //Size of border of the image on the respective sides.
    private int borderTopSize = 45;
    private int borderBottomSize = 41;

    //Scaled width and height of the frame containing the book gui.
    private int frameWidth;
    private int frameHeight;

    //Variables used to store the x and y of the mouse upon clicking.
    private int mouseStartX;
    private int mouseStartY;

    //Variables used to store the displacement vectors of the mouse x and y, while the mouse is held.
    private int mouseDisplacementX;
    private int mouseDisplacementY;

    //Current u and v coordinates of the background image.
    private float scrollXDisplacement;
    private float scrollYDisplacement;

    //Non-formatted version of the current image location.
    private int backgroundX;
    private int backgroundY;

    //Coordinates of which to start drawing at.
    private int startX;
    private int startY;

    //Modified versions of the startX and startY variables to compensate for the border in the frame texture.
    private int backgroundStartX;
    private int backgroundStartY;

    //Offset vector in pixels of both the frame and background.
    private int verticalOffset;
    private int horizontalOffset;

    public GuiGuideBook() {
    }

    @Override
    public void initGui() {
        frameWidth = (int)(width * 0.;
        frameHeight = (int)(height * 1.00);
        startX = Math.round(((float)width / 2) - ((float) frameWidth / 2));
        startY = Math.round(((float)height / 2) - ((float) frameHeight / 2));
        verticalOffset = 0;
        horizontalOffset = -(int)(height * 0.065);
        backgroundStartX = startX;
        backgroundStartY = startY + (int)(frameHeight * ((float)(borderTopSize) / (float)backgroundHeight));
    }

    @Override
    public void updateScreen() {
    }

    @Override
    protected void mouseClicked(int mouseX, int mouseY, int mouseButton) {
        if (mouseButton == 0) {
            mouseStartX = mouseX;
            mouseStartY = mouseY;
        }
    }

    @Override
    protected void mouseReleased(int mouseX, int mouseY, int mouseButton) {
        if (mouseButton == 0) {
            backgroundX += mouseDisplacementX;
            backgroundY += mouseDisplacementY;
            mouseDisplacementX = 0;
            mouseDisplacementY = 0;
        }
    }

    @Override
    protected void mouseClickMove(int mouseX, int mouseY, int clickedMouseButton, long timeSinceLastClick) {
        if (clickedMouseButton == 0) {
            mouseDisplacementX = mouseX - mouseStartX;
            mouseDisplacementY = mouseY - mouseStartY;
            scrollXDisplacement = (float) (backgroundX + mouseDisplacementX);
            scrollYDisplacement = (float) (backgroundY + mouseDisplacementY);
            if (scrollXDisplacement > 0) {
                scrollXDisplacement = 0;
                backgroundX = 0;
            }
            if (scrollYDisplacement > 0) {
                scrollYDisplacement = 0;
                backgroundY = 0;
            }
            if (scrollXDisplacement <= -backgroundWidth) {
                scrollXDisplacement = -backgroundWidth;
                backgroundX = -(int) backgroundWidth;
            }
            if (scrollYDisplacement <= -backgroundHeight) {
                scrollYDisplacement = -backgroundHeight;
                backgroundY = -(int) backgroundHeight;
            }
        }
    }

    @Override
    public void drawScreen(int mouseX, int mouseY, float partialTicks) {
        drawSchoolPane(mouseX, mouseY, partialTicks);
        drawFrame();
    }

    @Override
    public void onGuiClosed() {

    }

    @Override
    public boolean doesGuiPauseGame() {
        return false;
    }

    public void drawSchoolPane(int mouseX, int mouseY, float partialTicks) {
        if (Mouse.isButtonDown(0)) {

        }
        GlStateManager.disableFog();
        GlStateManager.disableLighting();
        GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
        mc.getTextureManager().bindTexture(background);
        drawModalRectWithCustomSizedTexture(backgroundStartX + verticalOffset, backgroundStartY + horizontalOffset, -scrollXDisplacement, -scrollYDisplacement, frameWidth, (frameHeight - (int) (frameHeight * ((float) (borderTopSize + borderBottomSize) / backgroundHeight))) - 5, backgroundWidth * 2, backgroundHeight * 2);
    }

    public void drawFrame() {
        GlStateManager.disableFog();
        GlStateManager.disableLighting();
        GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
        mc.getTextureManager().bindTexture(frame);
        drawScaledCustomSizeModalRect(startX + verticalOffset, startY + horizontalOffset, 0, 0, 768, 768, frameWidth, frameHeight, 768, 768);
    }
}

 

Thanks in advanced, WaffleMan0310

Posted

Since 1 sec = 20 tick and drawScreen() is not called on tick, but on frame (fps), you don't want to use it (ticks). You need to utilize partialTicks passed in drawScreen() method.

They give you power of fps. Lookup (almost) any vanilla stuff.

1.7.10 is no longer supported by forge, you are on your own.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.