/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package boxadventures;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.geom.GeneralPath;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferStrategy;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JFrame;
/**
*
* @author Cyrill
*/
class MainFrame extends JFrame implements KeyListener {
public MainFrame() {
setSize(600, 400);
setLocationRelativeTo(null);
setVisible(true);
setIgnoreRepaint(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
timer = new Timer();
level = getLevel();
rect = new Rectangle2D.Float(level.getStart().x,
level.getStart().y,
level.getRectSize().width,
level.getRectSize().height);
gravitationTask = new GravitationTask(rect, level.getFloor());
createBufferStrategy(2);
addKeyListener(this);
mover = new RectangleMover(rect, 0, level.getFloor());
timer.schedule(mover, 0, 1);
timer.schedule(gravitationTask, 0, 10);
timer.schedule(new RepaintTask(), 0, 1);
}
private void paint(BufferStrategy strategy) {
Graphics2D g = (Graphics2D) strategy.getDrawGraphics();
g.setColor(Color.white);
g.fillRect(0, 0, getWidth(), getHeight());
int x = getWidth() / 2 - (int) rect.getX();
int y = getHeight() / 2 - (int) rect.getY();
g.translate(x, y);
g.setColor(Color.black);
g.draw(level.getFloor());
g.setColor(new Color(0, 0, 200));
g.fill(rect);
strategy.show();
}
private Level getLevel() {
Level lvl = new Level();
GeneralPath path = new GeneralPath();
path.moveTo(0, 100);
path.lineTo(500, 100);
path.lineTo(500, 50);
path.lineTo(600, 50);
path.lineTo(600, 100);
path.lineTo(700, 100);
path.lineTo(800, 200);
path.closePath();
lvl.setFloor(path);
lvl.setStart(new Point(10, 10));
lvl.setRectSize(new Dimension(20, 20));
return lvl;
}
public void keyTyped(KeyEvent e) {
if(e.getKeyChar() == ' ') {
gravitationTask.jump();
}
}
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_LEFT || e.getKeyCode() == KeyEvent.VK_D)
mover.setX(-3);
if(e.getKeyCode() == KeyEvent.VK_RIGHT || e.getKeyCode() == KeyEvent.VK_A)
mover.setX(3);
}
public void keyReleased(KeyEvent e) {
mover.setX(0);
}
private class RepaintTask extends TimerTask {
@Override
public void run() {
paint(getBufferStrategy());
}
}
private Level level;
private Rectangle2D rect;
private Timer timer;
private GravitationTask gravitationTask;
private RectangleMover mover;
}