Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main;
- import gfx.SpriteSheet;
- import java.awt.BorderLayout;
- import java.awt.Canvas;
- import java.awt.Color;
- import java.awt.Dimension;
- import java.awt.Graphics;
- import java.awt.geom.AffineTransform;
- import java.awt.image.AffineTransformOp;
- import java.awt.image.BufferStrategy;
- import java.awt.image.BufferedImage;
- import java.awt.image.DataBufferInt;
- import java.io.IOException;
- import javax.imageio.ImageIO;
- import javax.swing.JFrame;
- public class trigTester extends Canvas implements Runnable {
- AffineTransformOp op;
- AffineTransform tx;
- AffineTransform tx1;
- double rotationRequired;
- double locationX;
- double locationY;
- public boolean stopMovingMiss;
- public int once = 0;
- public float angle = 0;
- public float targAngle;
- public float angleStep = 0.1f;
- public int animInc;
- public boolean running;
- public float targetX;
- public float targetY;
- public float targXVel;
- public float targYVel;
- public float missileX;
- public float missileY;
- public float missSpeed;
- public float a;
- public float b;
- public float c;
- public float disc;
- public float t1;
- public float t2;
- public float t;
- public float aimX;
- public float aimY;
- public float yDiff;
- public float xDiff;
- public float yNorm;
- public float xNorm;
- public float hyp;
- public float a1;
- public float b1;
- public float c1;
- public float disc1;
- public float towT1;
- public float towT2;
- public float towT;
- public float aimX1;
- public float aimY1;
- public float yTowDiff;
- public float xTowDiff;
- public float yNorm1;
- public float xNorm1;
- public float hyp1;
- public static final int WIDTH=200;//480;
- public static final int HEIGHT = 200;//480;//WIDTH/ 12 * 9;
- public static final int SCALE = 5;
- public static final String name= "tester";
- public JFrame frame;
- public BufferedImage tower = null;
- private BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
- private int[] pixels = ((DataBufferInt)image.getRaster().getDataBuffer()).getData();
- private int[] towPixels;
- public trigTester()
- {
- try
- {
- tower = ImageIO.read(SpriteSheet.class.getResource("/spriteSheet/testTower.png"));
- }
- catch(IOException e)
- {
- e.printStackTrace();
- }
- //towPixels = ((DataBufferInt)tower.getRaster().getDataBuffer()).getData();
- towPixels = image.getRGB(0, 0, tower.getWidth(), tower.getHeight(), null, 0, tower.getWidth());
- rotationRequired = Math.toRadians(45);
- locationX = tower.getWidth() / 2;
- locationY = tower.getHeight() / 2;
- tx = AffineTransform.getRotateInstance(rotationRequired, locationX, locationY);
- tx1 = new AffineTransform();
- op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);
- stopMovingMiss = false;
- running= false;
- targetX = 150;
- targetY = 5;
- targXVel = -1;
- targYVel = 0;
- missileX = 70;
- missileY = 60;
- missSpeed = 2;
- Dimension dimension= new Dimension(WIDTH*SCALE, HEIGHT*SCALE);
- setMinimumSize(dimension);
- setMaximumSize(dimension);
- setPreferredSize(dimension);
- frame = new JFrame(name);
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- frame.setLayout(new BorderLayout());
- frame.add(this, BorderLayout.CENTER);
- frame.setResizable(false);
- frame.pack();
- frame.setLocationRelativeTo(null);
- frame.setVisible(true);
- start();
- }
- public void run()
- {
- long lastTime = System.nanoTime();
- long nowTime;
- long delta;
- long incrementTime = 900000000;
- long lastTimer = System.nanoTime();
- while(running)
- {
- nowTime = System.nanoTime();
- delta = nowTime = lastTime;
- if (delta >= incrementTime)
- {
- tick();
- lastTime = nowTime;
- }
- render();
- }
- }
- public void start()
- {
- Thread start = new Thread(this);
- running = true;
- start.run();
- }
- public void tick()
- {
- if (animInc== 100)
- {
- targetX+=targXVel;
- if (once == 0)
- {
- a = (targXVel* targXVel) + (targYVel * targYVel) - (missSpeed * missSpeed);
- b = 2 *(targXVel * (targetX - missileX) + targYVel * (targetY - missileY));
- c = (targetX - missileX) * (targetX - missileX) + (targetY - missileY)* (targetY - missileY);
- //System.out.println("a:" + a + ", b: "+ b+ "c: " + c);
- disc= b*b - 4 * a* c;
- //System.out.println(disc);
- t1 = (-b + (float)Math.sqrt(disc))/ (2*a);
- t2 = (-b- (float)Math.sqrt(disc))/ (2*a);
- if (t1 > 0 && t1 < t2)t = t1;
- else if (t2 > 0 && t2 < t1) t = t2;
- else if (t1 <0 && t2 >0) t = t2;
- else if (t2 < 0 && t1 > 0)t = t1;
- //System.out.println("t:" + t);
- aimX = t * targXVel + targetX;
- aimY = t * targYVel + targetY;
- // System.out.println("t:" + t);
- //System.out.println(aimX + ":" + aimY);
- xDiff = aimX - missileX;
- yDiff = aimY - missileY;
- hyp = (float)Math.sqrt(xDiff*xDiff + yDiff* yDiff);
- //System.out.println("hyp: "+ hyp);
- xNorm = xDiff/ hyp;
- yNorm = yDiff/hyp;
- //System.out.println("yNorm:" + yNorm);
- once++;
- }
- animInc =0;
- if ((int)(targetX - missileX) !=0 && (int)(targetY - missileY)!=0)
- {
- missileX += missSpeed*xNorm;
- missileY += missSpeed*yNorm;
- // System.out.println("hello!");
- //missileX = (float)targetX;
- //missileY = (float)targetY;
- }
- a1 = (targXVel* targXVel) + (targYVel * targYVel) - (missSpeed * missSpeed);
- b1 = 2 *(targXVel * (targetX - 70) + targYVel * (targetY - 60));
- c1 = (targetX - 70) * (targetX - 70) + (targetY - 60)* (targetY - 60);
- disc1= b1*b1 - 4 * a1* c1;
- towT1 = (-b1 + (float)Math.sqrt(disc1))/ (2*a1);
- towT2 = (-b1- (float)Math.sqrt(disc1))/ (2*a1);
- if (towT1 > 0 && towT1 < towT2)towT = towT1;
- else if (towT2 > 0 && towT2 < towT1) towT = towT2;
- else if (towT1 <0 && towT2 >0) towT = towT2;
- else if (towT2 < 0 && towT1 > 0)towT = towT1;
- aimX1 = towT * targXVel + targetX;
- aimY1 = towT * targYVel + targetY;
- if (aimX1 >= WIDTH || aimY1 >= HEIGHT)
- {
- aimX1 = 0;
- aimY1 = 0;
- }
- xTowDiff = aimX1 -70;
- yTowDiff = aimY1 - 60;
- hyp1 = (float)Math.sqrt(xTowDiff*xTowDiff + yTowDiff* yTowDiff);
- //rotationRequired = Math.asin(yTowDiff/hyp1);
- //System.out.println(rotationRequired);
- rotationRequired = Math.asin(xTowDiff/hyp1);
- //rotationRequired+=.1;
- if (rotationRequired >= 3.14 *2) rotationRequired =0;
- tx = AffineTransform.getRotateInstance(rotationRequired, locationX, locationY);
- op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);
- //tx1 = AffineTransform.getRotateInstance(rotationRequired, locationX, locationY);
- //op = new AffineTransformOp(tx1, AffineTransformOp.TYPE_BILINEAR);
- //tower = op.filter(tower, null);
- //towPixels = tower.getRGB(0, 0, tower.getWidth(), tower.getHeight(), null, 0, tower.getWidth());
- }
- else
- animInc++;
- }
- /*
- xDiff = targetX- missileX;
- yDiff = targetY- missileY;
- if ((int)xDiff!=0 && (int)yDiff!=0)
- {
- hyp = (float)Math.sqrt(xDiff * xDiff + yDiff * yDiff);
- xNorm = xDiff/hyp;
- yNorm = yDiff/hyp;
- missileX += 3*xNorm;
- missileY += 3*yNorm;
- }
- targetX++;
- animInc = 0;
- }
- else animInc++;
- }
- */
- public void clear()
- {
- for (int i = 0; i < WIDTH*HEIGHT; i++)
- {
- pixels[i]= 0;
- }
- }
- public void render()
- {
- BufferStrategy bs = getBufferStrategy();
- if (bs == null)
- {
- createBufferStrategy(3);
- return;
- }
- clear();
- Graphics g = bs.getDrawGraphics();
- Color c = Color.blue;
- int col = c.getRGB();
- pixels[(int)missileX + (int)missileY * WIDTH] = col;
- pixels[(int)targetX + (int)targetY * WIDTH] = col;
- //image.setRGB(targetX, 50, col);
- //System.out.println("missileX: " + missileX + "missileY: " + missileY);
- //image.setRGB((int)missileX, (int)missileY, col);
- //image.setRGB((int)targetX , (int)targetY, col);
- image.setRGB(70, 60, col);
- g.drawImage(image, 0 , 0 ,getWidth(), getHeight(), null);
- //g.drawImage(tower, 100, 100, 30, 30,null);
- g.drawRect(70* SCALE, 60* SCALE, 9, 9);
- /*
- for (int i = 0; i < 30; i++){
- for (int j = 0; j < 30; j++){
- System.out.println("i: "+ (i+ 70) + " j: " + (j+ 60));
- pixels[j + i*WIDTH] = towPixels[j + i *tower.getWidth()];
- }
- }
- */
- g.drawImage(op.filter(tower, null), 70*SCALE-15, 60*SCALE-15, null);
- g.dispose();
- bs.show();
- }
- public static void main(String args[])
- {
- trigTester test = new trigTester();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement