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 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) {
|
||||
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();
|
||||
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);
|
||||
|
||||
if (vViewSize.y > vWindowSize.y)
|
||||
{
|
||||
vViewSize.y = vWindowSize.y;
|
||||
vViewSize.x = (int32_t)((float)vViewSize.y * wasp);
|
||||
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…
x
Reference in New Issue
Block a user