Pixel Cohesion screen sizing implementation

Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
gpu
sigonasr2 2 years ago
parent 087cd3bcb5
commit cb255277a4
  1. 6
      src/sig/JavaProjectTemplate.java
  2. 73
      src/sig/engine/Panel.java

@ -25,10 +25,8 @@ class Player{
public class JavaProjectTemplate {
public static final String PROGRAM_NAME="Sig's Java Project Template";
public static int WINDOW_WIDTH=256;
public static int WINDOW_HEIGHT=240;
public static int PIXEL_SIZE_X=4;
public static int PIXEL_SIZE_Y=4;
public static int WINDOW_WIDTH=1280;
public static int WINDOW_HEIGHT=720;
public static Panel game;
Player pl = new Player();

@ -66,8 +66,28 @@ public class Panel extends JPanel implements Runnable,KeyListener {
public static JFrame f;
int ACTUAL_WINDOW_WIDTH,ACTUAL_WINDOW_HEIGHT;
Point<Integer> vViewSize = new Point<Integer>(1,1);
Point<Integer> vViewPos = new Point<Integer>(1,1);
static Cursor currentCursor = new Cursor(Cursor.DEFAULT_CURSOR);
// Recursive function to return gcd of a and b in single line
static int gcd(int a, int b)
{
return b == 0 ? a : gcd(b, a % b);
}
static void setupNonPixelCohesion(){
Dimension d = p.getSize();
int ww = JavaProjectTemplate.WINDOW_WIDTH;
int wh = JavaProjectTemplate.WINDOW_HEIGHT;
double wasp = (double)ww/(double)wh;
p.vViewSize.x=(int)d.getWidth();
p.vViewSize.y=(int)((double)p.vViewSize.x/wasp);
if (p.vViewSize.y>d.getHeight()) {
p.vViewSize.y=(int)d.getHeight();
p.vViewSize.x=(int)((double)p.vViewSize.y*wasp);
}
}
public static void InitializeEngine(JavaProjectTemplate instance){
System.setProperty("sun.java2d.transaccel", "True");
@ -87,36 +107,30 @@ public class Panel extends JPanel implements Runnable,KeyListener {
f.setSize(JavaProjectTemplate.WINDOW_WIDTH,JavaProjectTemplate.WINDOW_HEIGHT);
f.addComponentListener(new ComponentAdapter() {
public void componentResized(ComponentEvent e) {
Dimension d = p.getSize();
p.pixel=new int[(int)d.getWidth()*(int)d.getHeight()];
p.ACTUAL_WINDOW_WIDTH=(int)d.getWidth();
p.ACTUAL_WINDOW_HEIGHT=(int)d.getHeight();
p.init(false);
/*{
int32_t ww = vScreenSize.x * vPixelSize.x;
int32_t wh = vScreenSize.y * vPixelSize.y;
float wasp = (float)ww / (float)wh;
if (bPixelCohesion)
{
vScreenPixelSize = (vWindowSize / vScreenSize);
vViewSize = (vWindowSize / vScreenSize) * vScreenSize;
}
else
{
vViewSize.x = (int32_t)vWindowSize.x;
vViewSize.y = (int32_t)((float)vViewSize.x / wasp);
p.ACTUAL_WINDOW_WIDTH=JavaProjectTemplate.WINDOW_WIDTH;
p.ACTUAL_WINDOW_HEIGHT=JavaProjectTemplate.WINDOW_HEIGHT;
int bw = p.ACTUAL_WINDOW_WIDTH;
int bh = p.ACTUAL_WINDOW_HEIGHT;
if (vViewSize.y > vWindowSize.y)
{
vViewSize.y = vWindowSize.y;
vViewSize.x = (int32_t)((float)vViewSize.y * wasp);
Dimension d = p.getSize();
int xmult = (int)d.getWidth()/bw;
if (xmult!=0) {
p.vViewSize.x=(int)(d.getWidth()/bw)*bw;
p.vViewSize.y=bh*xmult;
if (d.getWidth()/bw>d.getHeight()/bh){
int ymult=(int)d.getHeight()/bh;
if (ymult==0) {
setupNonPixelCohesion();
} else {
p.vViewSize.y=(int)(d.getHeight()/bh)*bh;
p.vViewSize.x=bw*ymult;
}
}
vViewPos = (vWindowSize - vViewSize) / 2;
} else {
setupNonPixelCohesion();
}
*/
p.vViewPos.set((int)((d.getWidth()-p.vViewSize.x)/2),(int)((d.getHeight()-p.vViewSize.y)/2));
p.init(false);
}
});
p = new Panel(f);
@ -254,7 +268,9 @@ public class Panel extends JPanel implements Runnable,KeyListener {
mImageProducer = new MemoryImageSource(ACTUAL_WINDOW_WIDTH, ACTUAL_WINDOW_HEIGHT, cm, pixel,0, ACTUAL_WINDOW_WIDTH);
mImageProducer.setAnimated(true);
mImageProducer.setFullBufferUpdates(true);
imageBuffer = Toolkit.getDefaultToolkit().createImage(mImageProducer);
if (p.ACTUAL_WINDOW_WIDTH!=0&&p.ACTUAL_WINDOW_HEIGHT!=0) {
imageBuffer = Toolkit.getDefaultToolkit().createImage(mImageProducer).getScaledInstance(ACTUAL_WINDOW_WIDTH,ACTUAL_WINDOW_HEIGHT,Image.SCALE_FAST);
}
if(runThread && thread.isInterrupted() || !thread.isAlive()){
thread.start();
}
@ -264,7 +280,8 @@ public class Panel extends JPanel implements Runnable,KeyListener {
public void paintComponent(Graphics g) {
// perform draws on pixels
long startTime = System.currentTimeMillis();
g.drawImage(this.imageBuffer,0,0,ACTUAL_WINDOW_WIDTH,ACTUAL_WINDOW_HEIGHT,0,0,ACTUAL_WINDOW_WIDTH,ACTUAL_WINDOW_HEIGHT,this);
g.fillRect(0,0,getWidth(),getHeight());
g.drawImage(imageBuffer,vViewPos.x,vViewPos.y,vViewSize.x+vViewPos.x,vViewSize.y+vViewPos.y,0,0,ACTUAL_WINDOW_WIDTH,ACTUAL_WINDOW_HEIGHT,this);
scaleTime=System.currentTimeMillis()-startTime;
}

Loading…
Cancel
Save