diff --git a/src/sig/JavaProjectTemplate.java b/src/sig/JavaProjectTemplate.java index e57cdee..dddd1ba 100644 --- a/src/sig/JavaProjectTemplate.java +++ b/src/sig/JavaProjectTemplate.java @@ -86,8 +86,6 @@ public class JavaProjectTemplate { game.Draw(100,20,Color.BLACK); //That's not a dead pixel, it's a black one! game.Draw_Line(10,10,35,35,Color.BLACK); //Line Drawing - game.FillCircle(WINDOW_WIDTH/2, WINDOW_HEIGHT/2, 100, Color.BLACK); - game.Draw_Sprite(450,75,bookSpr,Color.GREEN); //Sprite drawing (with green tint) game.Draw_Sprite(450,75+bookSpr.getHeight(),bookSpr,Transform.VERTICAL); //Sprite drawing with vertical flip diff --git a/src/sig/engine/Panel.java b/src/sig/engine/Panel.java index 6d82b08..6a6f013 100644 --- a/src/sig/engine/Panel.java +++ b/src/sig/engine/Panel.java @@ -11,6 +11,8 @@ import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelListener; +import java.awt.event.ComponentEvent; +import java.awt.event.ComponentAdapter; import java.awt.GraphicsEnvironment; import java.awt.GraphicsConfiguration; @@ -25,6 +27,7 @@ import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.Cursor; +import java.awt.Dimension; import sig.JavaProjectTemplate; @@ -62,6 +65,8 @@ public class Panel extends JPanel implements Runnable,KeyListener { public static Panel p; public static JFrame f; + int ACTUAL_WINDOW_WIDTH,ACTUAL_WINDOW_HEIGHT; + static Cursor currentCursor = new Cursor(Cursor.DEFAULT_CURSOR); public static void InitializeEngine(JavaProjectTemplate instance){ @@ -78,12 +83,21 @@ public class Panel extends JPanel implements Runnable,KeyListener { RENDERHINTS.put(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_SPEED); f = new JFrame(JavaProjectTemplate.PROGRAM_NAME); - f.setResizable(false); + f.setResizable(true); 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); + } + }); p = new Panel(f); JavaProjectTemplate.game=p; - p.init(); + p.init(true); f.add(p); f.addKeyListener(p); @@ -206,27 +220,26 @@ public class Panel extends JPanel implements Runnable,KeyListener { /** * Call it after been visible and after resizes. */ - public void init(){ + public void init(boolean runThread){ cm = getCompatibleColorModel(); - int screenSize = JavaProjectTemplate.WINDOW_WIDTH * JavaProjectTemplate.WINDOW_HEIGHT; + int screenSize = ACTUAL_WINDOW_WIDTH * ACTUAL_WINDOW_HEIGHT; if(pixel == null || pixel.length < screenSize){ pixel = new int[screenSize]; } - mImageProducer = new MemoryImageSource(JavaProjectTemplate.WINDOW_WIDTH, JavaProjectTemplate.WINDOW_HEIGHT, cm, pixel,0, JavaProjectTemplate.WINDOW_WIDTH); + 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(thread.isInterrupted() || !thread.isAlive()){ + if(runThread && thread.isInterrupted() || !thread.isAlive()){ thread.start(); } } - @Override + @Override public void paintComponent(Graphics g) { - //super.paintComponent(g); // perform draws on pixels long startTime = System.currentTimeMillis(); - g.drawImage(this.imageBuffer,0,0,JavaProjectTemplate.WINDOW_WIDTH,JavaProjectTemplate.WINDOW_HEIGHT,0,0,JavaProjectTemplate.WINDOW_WIDTH,JavaProjectTemplate.WINDOW_HEIGHT,this); + g.drawImage(this.imageBuffer,0,0,ACTUAL_WINDOW_WIDTH,ACTUAL_WINDOW_HEIGHT,0,0,ACTUAL_WINDOW_WIDTH,ACTUAL_WINDOW_HEIGHT,this); scaleTime=System.currentTimeMillis()-startTime; } @@ -308,12 +321,12 @@ public class Panel extends JPanel implements Runnable,KeyListener { } public void Draw(int x, int y, Color col) { - if (x<0||y<0||x>=JavaProjectTemplate.WINDOW_WIDTH||y>=JavaProjectTemplate.WINDOW_HEIGHT) return; - Draw(y*JavaProjectTemplate.WINDOW_WIDTH+x,col.getColor()); + if (x<0||y<0||x>=ACTUAL_WINDOW_WIDTH||y>=ACTUAL_WINDOW_HEIGHT) return; + Draw(y*ACTUAL_WINDOW_WIDTH+x,col.getColor()); } void Draw(int index, int col) { - if (((col>>>24)&0xff)==0) return; + if (((col>>>24)&0xff)==0||index>=pixel.length) return; if (((col>>>24)&0xff)!=255) { pixel[index]=ColorLerpNoAlpha(new Color(pixel[index]),new Color(col),((col>>>24)&0xff)/255f).getColor(); } else { @@ -443,7 +456,7 @@ public class Panel extends JPanel implements Runnable,KeyListener { } px=px+2*(dy1-dx1); } - Draw(y*JavaProjectTemplate.WINDOW_WIDTH+x,col.getColor()); + Draw(y*ACTUAL_WINDOW_WIDTH+x,col.getColor()); } } else { if (dy>=0) { @@ -451,7 +464,7 @@ public class Panel extends JPanel implements Runnable,KeyListener { } else { x=x2-1;y=y2-1;ye=y1; } - Draw(y*JavaProjectTemplate.WINDOW_WIDTH+x,col.getColor()); + Draw(y*ACTUAL_WINDOW_WIDTH+x,col.getColor()); while (y=0&&y+yy>=0&&x+xx=0&&y+yy>=0&&x+xx=JavaProjectTemplate.WINDOW_WIDTH||Y-yOffset+y>=JavaProjectTemplate.WINDOW_HEIGHT) { + if (X+x-xOffset<0||Y+y-yOffset<0||X-xOffset+x>=ACTUAL_WINDOW_WIDTH||Y-yOffset+y>=ACTUAL_WINDOW_HEIGHT) { continue; } else { int index = ((vertical? sprite.getHeight()-(Y-(int)yOffset): (Y-(int)yOffset)) - +(int)y)*JavaProjectTemplate.WINDOW_WIDTH+ + +(int)y)*ACTUAL_WINDOW_WIDTH+ (horizontal? sprite.getWidth()-(X-(int)xOffset): (X-(int)xOffset)) @@ -838,7 +851,7 @@ public class Panel extends JPanel implements Runnable,KeyListener { //The mask indicates which pie slices to draw, each bit of the mask represents 1/8th of a pie slice. By default all pie slices are drawn. public void Draw_Circle(int x, int y, int radius, Color col, byte mask) { - if (radius < 0 || x < -radius || y < -radius || x - JavaProjectTemplate.WINDOW_WIDTH > radius || y - JavaProjectTemplate.WINDOW_HEIGHT > radius) + if (radius < 0 || x < -radius || y < -radius || x - ACTUAL_WINDOW_WIDTH > radius || y - ACTUAL_WINDOW_HEIGHT > radius) return; if (radius > 0) @@ -873,7 +886,7 @@ public class Panel extends JPanel implements Runnable,KeyListener { } public void Fill_Circle(int x, int y, int radius, Color col) { - if (radius < 0 || x < -radius || y < -radius || x - JavaProjectTemplate.WINDOW_WIDTH > radius || y - JavaProjectTemplate.WINDOW_HEIGHT > radius) + if (radius < 0 || x < -radius || y < -radius || x - ACTUAL_WINDOW_WIDTH > radius || y - ACTUAL_WINDOW_HEIGHT > radius) return; if (radius > 0) @@ -957,9 +970,9 @@ public class Panel extends JPanel implements Runnable,KeyListener { public void Clear(Color col){ - for (int y=0;y