diff --git a/src/sig/JavaProjectTemplate.java b/src/sig/JavaProjectTemplate.java index 78ff0af..e57cdee 100644 --- a/src/sig/JavaProjectTemplate.java +++ b/src/sig/JavaProjectTemplate.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(); diff --git a/src/sig/engine/Panel.java b/src/sig/engine/Panel.java index 795c18a..82ca280 100644 --- a/src/sig/engine/Panel.java +++ b/src/sig/engine/Panel.java @@ -66,8 +66,28 @@ public class Panel extends JPanel implements Runnable,KeyListener { public static JFrame f; int ACTUAL_WINDOW_WIDTH,ACTUAL_WINDOW_HEIGHT; + Point vViewSize = new Point(1,1); + Point vViewPos = new Point(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; }