Advertisement
Guest User

Canvas.java

a guest
Oct 28th, 2012
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.91 KB | None | 0 0
  1. package genericzombieshooter;
  2.  
  3. import genericzombieshooter.actors.Player;
  4. import genericzombieshooter.structures.Particle;
  5. import genericzombieshooter.structures.Vector2D;
  6. import java.awt.Color;
  7. import java.awt.Dimension;
  8. import java.awt.Graphics;
  9. import java.awt.Graphics2D;
  10. import java.awt.Point;
  11. import java.awt.event.KeyAdapter;
  12. import java.awt.event.KeyEvent;
  13. import java.awt.event.MouseAdapter;
  14. import java.awt.event.MouseEvent;
  15. import java.awt.geom.AffineTransform;
  16. import java.awt.image.BufferedImage;
  17. import java.io.File;
  18. import java.io.IOException;
  19. import java.util.ArrayList;
  20. import javax.imageio.ImageIO;
  21. import javax.swing.JPanel;
  22.  
  23. /**
  24.  *
  25.  * @author packetpirate
  26.  */
  27. public class Canvas extends JPanel implements Runnable {
  28.     // Static variables.
  29.     private static final int pWIDTH = 800; // The width of the panel.
  30.     private static final int pHEIGHT = 640; // The height of the panel.
  31.     private static final int SLEEP_TIME = 20; // The length of each tick in the animation thread.
  32.     // Member variables.
  33.     private Thread animation;
  34.     private volatile boolean running;
  35.    
  36.     private boolean [] keys;
  37.     private boolean [] buttons;
  38.     private Point mousePos;
  39.    
  40.     private Player player;
  41.    
  42.     private ArrayList<Particle> projectiles;
  43.     // Image variables.
  44.     private BufferedImage background;
  45.    
  46.     public Canvas() {
  47.         // Set the appearance of the canvas.
  48.         setBackground(Color.WHITE);
  49.         setPreferredSize(new Dimension(pWIDTH, pHEIGHT));
  50.         setFocusable(true);
  51.         requestFocus();
  52.        
  53.         // Initialize member variables.
  54.         keys = new boolean[4];
  55.         for(boolean b : keys) b = false;
  56.         buttons = new boolean[2];
  57.         for(boolean b : buttons) b = false;
  58.         mousePos = new Point(0,0);
  59.         player = new Player(((pWIDTH / 2) - 20), ((pHEIGHT / 2) - 20), 40, 40);
  60.        
  61.         projectiles = new ArrayList<>();
  62.        
  63.         // Load images.
  64.         try {
  65.             background = ImageIO.read(new File("images/GZS_Background.PNG"));
  66.         } catch(IOException io) {
  67.         }
  68.        
  69.         // Add key and mouse adapters.
  70.         addKeyListener(new KeyAdapter() {
  71.             @Override
  72.             public void keyPressed(KeyEvent k) {
  73.                 int keyCode = k.getKeyCode();
  74.                 if(keyCode == KeyEvent.VK_W) keys[0] = true;
  75.                 if(keyCode == KeyEvent.VK_D) keys[1] = true;
  76.                 if(keyCode == KeyEvent.VK_S) keys[2] = true;
  77.                 if(keyCode == KeyEvent.VK_A) keys[3] = true;
  78.             }
  79.            
  80.             @Override
  81.             public void keyReleased(KeyEvent k) {
  82.                 int keyCode = k.getKeyCode();
  83.                 if(keyCode == KeyEvent.VK_W) keys[0] = false;
  84.                 if(keyCode == KeyEvent.VK_D) keys[1] = false;
  85.                 if(keyCode == KeyEvent.VK_S) keys[2] = false;
  86.                 if(keyCode == KeyEvent.VK_A) keys[3] = false;
  87.             }
  88.         });
  89.        
  90.         addMouseListener(new MouseAdapter() {
  91.             @Override
  92.             public void mousePressed(MouseEvent m) {
  93.                 if(m.getButton() == MouseEvent.BUTTON1) buttons[0] = true;
  94.                 if(m.getButton() == MouseEvent.BUTTON3) buttons[1] = true;
  95.             }
  96.            
  97.             @Override
  98.             public void mouseReleased(MouseEvent m) {
  99.                 if(m.getButton() == MouseEvent.BUTTON1) buttons[0] = false;
  100.                 if(m.getButton() == MouseEvent.BUTTON3) buttons[1] = false;
  101.             }
  102.         });
  103.        
  104.         addMouseMotionListener(new MouseAdapter() {
  105.             @Override
  106.             public void mouseMoved(MouseEvent m) {
  107.                 mousePos.x = m.getX();
  108.                 mousePos.y = m.getY();
  109.             }
  110.            
  111.             @Override
  112.             public void mouseDragged(MouseEvent m) {
  113.                 mousePos.x = m.getX();
  114.                 mousePos.y = m.getY();
  115.             }
  116.         });
  117.     }
  118.    
  119.     @Override
  120.     public void addNotify() {
  121.         super.addNotify();
  122.         start();
  123.     }
  124.    
  125.     @Override
  126.     public void paintComponent(Graphics g) {
  127.         super.paintComponent(g);
  128.         Graphics2D g2d = (Graphics2D)g;
  129.        
  130.         AffineTransform save = g2d.getTransform();
  131.        
  132.         g2d.drawImage(background, 0, 0, null);
  133.        
  134.         for(Particle p : projectiles) {
  135.             g2d.setTransform(p.getTransform());
  136.             g2d.drawImage(p.getImage(), (int)p.x, (int)p.y, null);
  137.         }
  138.        
  139.         g2d.setPaint(Color.RED);
  140.         g2d.setTransform(player.getTransform());
  141.         g2d.drawImage(player.getImage(), (int)player.x, (int)player.y, null);
  142.        
  143.         g2d.setTransform(save);
  144.        
  145.         // Draw text showing the player's current coordinates.
  146.         g2d.setPaint(Color.WHITE);
  147.         g2d.drawString(("Player Position - X: " + player.getCenterX() + " Y: " + player.getCenterY()), 5, 15);
  148.         g2d.drawString(("Health: " + player.getHealth()), 5, 30);
  149.         g2d.drawString(("Weapon CD: " + player.getCooldown()), 5, 45);
  150.        
  151.         // Draw crosshair. Used to visualize whether something is centered or not.
  152.         //g2d.setPaint(Color.BLACK);
  153.         //g2d.drawLine(0, (pHEIGHT / 2), pWIDTH, (pHEIGHT / 2));
  154.         //g2d.drawLine((pWIDTH / 2), 0, (pWIDTH / 2), pHEIGHT);
  155.     }
  156.    
  157.     public void update() {
  158.         double centerX = player.getCenterX();
  159.         double centerY = player.getCenterY();
  160.         double angle = Math.atan2(centerY - mousePos.y, centerX - mousePos.x) - Math.PI / 2;
  161.         player.rotate(angle);
  162.        
  163.         if(keys[0]) player.move(0);
  164.         if(keys[1]) player.move(1);
  165.         if(keys[2]) player.move(2);
  166.         if(keys[3]) player.move(3);
  167.        
  168.         if(buttons[0]) {
  169.             if(!player.isOnCooldown()) createParticle(angle);
  170.             else player.decCooldown();
  171.         } else player.decCooldown();
  172.        
  173.         // Handle the bullets. Update their positions. If any have reached their targets, delete them.
  174.         if(!projectiles.isEmpty()) {
  175.             for(int i = 0;i < projectiles.size();i++) {
  176.                 Particle p = projectiles.get(i);
  177.                 if((p.getCenterX() == p.getTarget().x)&&(p.getCenterY() == p.getTarget().y)) {
  178.                     projectiles.remove(i);
  179.                 } else if((p.getCenterX() < 0)||(p.getCenterX() > pWIDTH)||(p.getCenterY() < 0)||(p.getCenterY() > pHEIGHT)) {
  180.                     projectiles.remove(i);
  181.                 } else {
  182.                     Vector2D v_ = new Vector2D((p.getTarget().x - p.getCenterX()), (p.getTarget().y - p.getCenterY()));
  183.                     Vector2D n_ = v_.normalize();
  184.                     if(n_ != null) {
  185.                         p.x += n_.x * 10;
  186.                         p.y += n_.y * 10;
  187.                     } else {
  188.                         projectiles.remove(i);
  189.                     }
  190.                 }
  191.             }
  192.         }
  193.     }
  194.    
  195.     private void createParticle(double angle_) {
  196.         double x_ = player.x + 28;
  197.         double y_ = player.y - 8;
  198.         double w_ = 2;
  199.         double h_ = 10;
  200.         Point target_ = new Point(mousePos.x, mousePos.y);
  201.         String fileName_ = "images/GZS_Bullet.png";
  202.         Particle p = new Particle(x_, y_, w_, h_, target_, fileName_);
  203.         p.rotate(angle_, player.getCenterX(), player.getCenterY());
  204.         projectiles.add(p);
  205.     }
  206.    
  207.     private void start() {
  208.         if((animation == null)||(!running)) {
  209.             animation = new Thread(this);
  210.             animation.start();
  211.         }
  212.     }
  213.  
  214.     @Override
  215.     public void run() {
  216.         running = true;
  217.         while(running) {
  218.             update();
  219.             repaint();
  220.            
  221.             try {
  222.                 Thread.sleep(SLEEP_TIME);
  223.             } catch(InterruptedException ex) {}
  224.         }
  225.         System.exit(0);
  226.     }
  227.    
  228.     public void stop() {
  229.         running = false;
  230.     }
  231. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement