peasycam icon indicating copy to clipboard operation
peasycam copied to clipboard

Bug with drawing HUD.

Open unlishema opened this issue 4 years ago • 0 comments

Everything works great except if you resize the window. When you resize the window, it doesn't update the viewport width and height. This causes an issue when writing a HUD that is resizable based on window size. This isn't a hard fix but I don't know about for fixing in PeasyCam exactly.

Running the following: OS: Windows 7 Professional 32 bit Processing Version: 3.5.4 Processing Mode: java

Here is an example showing the issue as well as the fix. It opens with the bug and then if you resize you will see what the bug does. Then just press the "f" to apply or remove the fix.

import peasy.*;

PeasyCam camera;

int w = 0, h = 0;
boolean fixApplied = false;

void setup() {
  size(600, 600, P3D);
  surface.setResizable(true);
  this.camera = new PeasyCam(this, 500);
  registerMethod("pre", this);
}

void pre() {
  // HUD Fix... When fix is applied and width or height has changed
  if (this.fixApplied && (this.w != this.width || this.h != this.height)) {
    this.w = this.width;
    this.h = this.height;
    this.camera.setViewport(0, 0, this.w, this.h);
    this.camera.reset();
  }
}

void draw() {
  background(100);
  fill(255);
  box(10);

  // Draw GUI
  this.camera.beginHUD();

  // Hardcode fix for hud not resizing correctly (old) new way is to set viewport ourselves
  //ortho(0, width, -height, 0, -Float.MAX_VALUE, +Float.MAX_VALUE);

  // Darken Game
  fill(25, 25, 25, 180);
  stroke(0);
  strokeWeight(1.5);
  rectMode(RADIUS);
  rect(width / 2, height / 2, width * 0.375, height * 0.375, max(width, height) / 30);

  // Draw HUD
  textSize(21);
  fill(180, 180, 180);
  text("GUI", width * 0.125 + 20, height * 0.125 + 30);
  // TODO

  this.camera.endHUD();
}

void keyPressed() {
  if (key == 'f')
    this.fixApplied = !this.fixApplied;
}

unlishema avatar Aug 12 '20 19:08 unlishema