generated from sigonasr2/JavaProjectTemplate
Pixel Cohesion screen sizing implementation
Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
This commit is contained in:
parent
087cd3bcb5
commit
cb255277a4
@ -25,10 +25,8 @@ class Player{
|
|||||||
|
|
||||||
public class JavaProjectTemplate {
|
public class JavaProjectTemplate {
|
||||||
public static final String PROGRAM_NAME="Sig's Java Project Template";
|
public static final String PROGRAM_NAME="Sig's Java Project Template";
|
||||||
public static int WINDOW_WIDTH=256;
|
public static int WINDOW_WIDTH=1280;
|
||||||
public static int WINDOW_HEIGHT=240;
|
public static int WINDOW_HEIGHT=720;
|
||||||
public static int PIXEL_SIZE_X=4;
|
|
||||||
public static int PIXEL_SIZE_Y=4;
|
|
||||||
public static Panel game;
|
public static Panel game;
|
||||||
|
|
||||||
Player pl = new Player();
|
Player pl = new Player();
|
||||||
|
@ -66,8 +66,28 @@ public class Panel extends JPanel implements Runnable,KeyListener {
|
|||||||
public static JFrame f;
|
public static JFrame f;
|
||||||
|
|
||||||
int ACTUAL_WINDOW_WIDTH,ACTUAL_WINDOW_HEIGHT;
|
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);
|
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){
|
public static void InitializeEngine(JavaProjectTemplate instance){
|
||||||
System.setProperty("sun.java2d.transaccel", "True");
|
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.setSize(JavaProjectTemplate.WINDOW_WIDTH,JavaProjectTemplate.WINDOW_HEIGHT);
|
||||||
f.addComponentListener(new ComponentAdapter() {
|
f.addComponentListener(new ComponentAdapter() {
|
||||||
public void componentResized(ComponentEvent e) {
|
public void componentResized(ComponentEvent e) {
|
||||||
|
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;
|
||||||
|
|
||||||
Dimension d = p.getSize();
|
Dimension d = p.getSize();
|
||||||
p.pixel=new int[(int)d.getWidth()*(int)d.getHeight()];
|
int xmult = (int)d.getWidth()/bw;
|
||||||
p.ACTUAL_WINDOW_WIDTH=(int)d.getWidth();
|
if (xmult!=0) {
|
||||||
p.ACTUAL_WINDOW_HEIGHT=(int)d.getHeight();
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
setupNonPixelCohesion();
|
||||||
|
}
|
||||||
|
p.vViewPos.set((int)((d.getWidth()-p.vViewSize.x)/2),(int)((d.getHeight()-p.vViewSize.y)/2));
|
||||||
p.init(false);
|
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);
|
|
||||||
|
|
||||||
if (vViewSize.y > vWindowSize.y)
|
|
||||||
{
|
|
||||||
vViewSize.y = vWindowSize.y;
|
|
||||||
vViewSize.x = (int32_t)((float)vViewSize.y * wasp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
vViewPos = (vWindowSize - vViewSize) / 2;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
p = new Panel(f);
|
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 = new MemoryImageSource(ACTUAL_WINDOW_WIDTH, ACTUAL_WINDOW_HEIGHT, cm, pixel,0, ACTUAL_WINDOW_WIDTH);
|
||||||
mImageProducer.setAnimated(true);
|
mImageProducer.setAnimated(true);
|
||||||
mImageProducer.setFullBufferUpdates(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()){
|
if(runThread && thread.isInterrupted() || !thread.isAlive()){
|
||||||
thread.start();
|
thread.start();
|
||||||
}
|
}
|
||||||
@ -264,7 +280,8 @@ public class Panel extends JPanel implements Runnable,KeyListener {
|
|||||||
public void paintComponent(Graphics g) {
|
public void paintComponent(Graphics g) {
|
||||||
// perform draws on pixels
|
// perform draws on pixels
|
||||||
long startTime = System.currentTimeMillis();
|
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;
|
scaleTime=System.currentTimeMillis()-startTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user