📄 ammunition.java
字号:
import java.awt.*;
public class ammunition{
private vector direction3D, centre, cross, normal,gravity;
public double speed;
public surface Surface;
private int time;
public ammunition(surface Surface, vector direction3D, vector centre, vector cross, double speed){
this.direction3D = direction3D.unit();
this.speed = speed;
this.centre = centre;
this.Surface = Surface;
this.cross = cross;
normal = direction3D.cross(cross).unit();
gravity = new vector(0, 0, -0.5);
}
public void fly(){
vector c = centre;
centre = centre.add(direction3D.unit().scale(speed)).add(gravity.scale(0.5*time));
direction3D = centre.add(c.scale(-1)).unit();
normal = direction3D.cross(cross).unit();
time++;
}
public boolean Crashed(T3D P1, T3D P2){
return Surface.evaluate(centre.a, centre.b) >= centre.c
|| P1.tower.centre.subtract(centre).length() <= 15
|| P2.tower.centre.subtract(centre).length() <= 15;
}
public void draw(Graphics g){
g.setColor(new Color(144, 84, 39));
g.drawLine(centre.getX(), centre.getY(), centre.add(direction3D.scale(5)).getX(), centre.add(direction3D.scale(5)).getY());
g.drawLine(centre.add(normal.scale(1)).getX(), centre.add(normal.scale(1)).getY(), centre.add(normal.scale(1)).add(direction3D.scale(5)).getX(), centre.add(normal.scale(1)).add(direction3D.scale(5)).getY());
g.drawLine(centre.add(normal.scale(1)).add(cross.scale(1)).getX(), centre.add(normal.scale(1)).add(cross.scale(1)).getY(), centre.add(normal.scale(1)).add(cross.scale(1)).add(direction3D.scale(5)).getX(), centre.add(normal.scale(1)).add(cross.scale(1)).add(direction3D.scale(5)).getY());
g.drawLine(centre.add(cross.scale(1)).getX(), centre.add(cross.scale(1)).getY(), centre.add(direction3D.scale(5)).add(cross.scale(1)).getX(), centre.add(cross.scale(1)).add(direction3D.scale(5)).getY());
g.drawLine(centre.add(cross.scale(1)).getX(), centre.add(cross.scale(1)).getY(), centre.add(direction3D.scale(5)).getX(), centre.add(direction3D.scale(5)).getY());
g.drawLine(centre.add(normal.scale(1)).getX(), centre.add(normal.scale(1)).getY(), centre.add(direction3D.scale(5)).getX(), centre.add(direction3D.scale(5)).getY());
g.drawLine(centre.add(normal.scale(1)).getX(), centre.add(normal.scale(1)).getY(), centre.add(normal.scale(1)).add(direction3D.scale(5)).getX(), centre.add(normal.scale(1)).add(direction3D.scale(5)).getY());
g.drawLine(centre.getX(), centre.getY(), centre.add(normal.scale(1)).add(cross.scale(1)).add(direction3D.scale(5)).getX(), centre.add(normal.scale(1)).add(cross.scale(1)).add(direction3D.scale(5)).getY());
g.drawLine(centre.getX(), centre.getY(), centre.add(direction3D.scale(5)).add(cross.scale(1)).getX(), centre.add(cross.scale(1)).add(direction3D.scale(5)).getY());
g.drawLine(centre.getX(), centre.getY(), centre.add(direction3D.scale(5)).getX(), centre.add(direction3D.scale(5)).getY());
g.drawLine(centre.getX(), centre.getY(), centre.add(direction3D.scale(5)).getX(), centre.add(direction3D.scale(5)).getY());
g.setColor(Color.gray);
vector v = new vector(centre.a, centre.b, Surface.evaluate(centre.a, centre.b));
g.fillOval(v.getX()+1, v.getY()+1, 3, 3);
}
public explosion explode(){
vector v = new vector(centre.a, centre.b, Surface.evaluate(centre.a, centre.b));
return new explosion(v, new vector(Surface.fx(centre.a, centre.b), Surface.fy(centre.a, centre.b)));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -