?? beamsniper.java
字號:
package netwar.game.unit;
import java.awt.Color;
import netwar.game.*;
import netwar.game.projectile.Laser;
import netwar.utils.Trig;
import netwar.utils.vectorgraphics.*;
/** Reverse jointed walker with a laser sniper rifle.
* It's firing range actually exceeds its vision range, so it works better if micro-managed.
* Very slow fire / high damage makes it good against armoured units.
*/
public class BeamSniper extends netwar.game.Unit {
private ZOrderedList zol;
private UnaryLink leftFoot;
private UnaryLink rightFoot;
CoherentPointSet lowerHalf;
CoherentPointSet upperHalf;
int snipeAngle = 0;
private static ColorSpectrum grayCS = new ColorSpectrum( 0, 99, 0, 99, 0, 99, 32, 255, 100);
private static ColorSpectrum blackCS = new ColorSpectrum( 0, 0, 0, 0, 0, 0, 32, 255, 100);
private MalleableColor gray;
private MalleableColor black;
private MalleableColor team;
private MalleableColor darker;
private MalleableColor brighter;
/** Creates a new instance of Beam Sniper */
public BeamSniper() {
}
protected void createVectors()
{
gray = new MalleableColor(grayCS);
black = new MalleableColor(blackCS);
team = new MalleableColor(myPlayer.getTeamFadingColorSpectrum());
darker = new MalleableColor(myPlayer.getTeamFadingDarkColorSpectrum());
brighter = new MalleableColor(myPlayer.getTeamFadingBrightColorSpectrum());
int i = f * 60 + 30;
float L = 2f / (Trig.cos(30) - 0.5f);
vr = new Point3D[5];
vr[0] = Hex.getMapPoint(x,y);
vr[1] = new Point3D(1,0,0); //Unit vector forward (legs)
vr[2] = new Point3D(0,1,0); //Unit vector right (legs)
vr[3] = new Point3D(1,0,0); //Unit vector forward (turret)
vr[4] = new Point3D(0,1,0); //Unit vector left (turret)
lowerHalf = new CoherentPointSet(20);
lowerHalf.add(new SelfConvertingPoint(0,5,0)); //0: Left foot
lowerHalf.add(new SelfConvertingPoint(0,-5,0)); //1: Right foot
lowerHalf.add(new SelfConvertingPoint(-L * Trig.cos(45), 5, L * Trig.sin(45))); //2: Left knee (1)
lowerHalf.add(new SelfConvertingPoint(-L * Trig.cos(45), -5, L * Trig.sin(45))); //3: Right knee (1)
lowerHalf.add(new SelfConvertingPoint(-L * Trig.cos(45), 5, L * Trig.sin(45))); //4: Left knee (2)
lowerHalf.add(new SelfConvertingPoint(-L * Trig.cos(45), -5, L * Trig.sin(45))); //5: Right knee (2)
lowerHalf.add(new SelfConvertingPoint(0, 5, 2f * L * Trig.sin(45))); //6: Left Hip (1)
lowerHalf.add(new SelfConvertingPoint(0, -5, 2f * L * Trig.sin(45))); //7: Right Hip (1)
lowerHalf.add(new SelfConvertingPoint(0, 5, 2f * L * Trig.sin(45))); //8: Left Hip (2)
lowerHalf.add(new SelfConvertingPoint(0, -5, 2f * L * Trig.sin(45))); //9: Right Hip (2)
lowerHalf.add(new SelfConvertingPoint(0, 5, 2f * L * Trig.sin(45))); //10: Left Hip (3)
lowerHalf.add(new SelfConvertingPoint(0, -5, 2f * L * Trig.sin(45))); //11: Right Hip (3)
lowerHalf.add(new SelfConvertingPoint(5, 0, 2f * L * Trig.sin(45))); //12: Front(1)
lowerHalf.add(new SelfConvertingPoint(5, 0, 2f * L * Trig.sin(45))); //13: Front(2)
lowerHalf.add(new SelfConvertingPoint(0, 0, 2f * L * Trig.sin(45) - 5)); //14: Bottom(1)
lowerHalf.add(new SelfConvertingPoint(0, 0, 2f * L * Trig.sin(45) - 5)); //15: Bottom(2)
lowerHalf.add(new SelfConvertingPoint(0, 0, 2f * L * Trig.sin(45) - 5)); //16: Bottom(3)
lowerHalf.add(new SelfConvertingPoint(0, 0, 2f * L * Trig.sin(45) - 5)); //17: Bottom(4)
lowerHalf.add(new SelfConvertingPoint(-5, 0, 2f * L * Trig.sin(45))); //18: Back(1)
lowerHalf.add(new SelfConvertingPoint(-5, 0, 2f * L * Trig.sin(45))); //19: Back(2)
GraphicThing gts[] = new GraphicThing[8];
gts[0] = new GraphicLine(lowerHalf.getPoint(0), lowerHalf.getPoint(2), black); //Left shin
gts[1] = new GraphicLine(lowerHalf.getPoint(1), lowerHalf.getPoint(3), black); //Right shin
gts[2] = new GraphicLine(lowerHalf.getPoint(4), lowerHalf.getPoint(6), black); //Left thigh
gts[3] = new GraphicLine(lowerHalf.getPoint(5), lowerHalf.getPoint(7), black); //Right thigh
gts[4] = new GraphicTriangle(lowerHalf.getPoint(8), lowerHalf.getPoint(12), lowerHalf.getPoint(14), gray); //Left front
gts[5] = new GraphicTriangle(lowerHalf.getPoint(9), lowerHalf.getPoint(13), lowerHalf.getPoint(15), gray); //Right front
gts[6] = new GraphicTriangle(lowerHalf.getPoint(10), lowerHalf.getPoint(16), lowerHalf.getPoint(18), gray); //Left back
gts[7] = new GraphicTriangle(lowerHalf.getPoint(11), lowerHalf.getPoint(17), lowerHalf.getPoint(19), gray); //Right back
zol = new ZOrderedList(netwar.gui.HexViewer.getHexViewer().getTransform());
for(int j = 0; j < 8; j++)
zol.add(gts[j]);
N_aryLink nls[] = new N_aryLink[6];
leftFoot = new UnaryLink();
rightFoot = new UnaryLink();
nls[0] = new N_aryLink(2);
nls[1] = new N_aryLink(2);
nls[2] = new N_aryLink(3);
nls[3] = new N_aryLink(3);
nls[4] = new N_aryLink(2);
nls[5] = new N_aryLink(2);
leftFoot.addLink(nls[0], lowerHalf.getPoint(0), gts[0]); //left foot-shin
rightFoot.addLink(nls[1], lowerHalf.getPoint(1), gts[1]); //right foot-shin
nls[0].addLink(leftFoot, lowerHalf.getPoint(2), gts[0]); //left knee-shin
nls[1].addLink(rightFoot, lowerHalf.getPoint(3), gts[1]); //right knee-shin
nls[0].addLink(nls[2], lowerHalf.getPoint(4), gts[2]); //left knee-thigh
nls[1].addLink(nls[3], lowerHalf.getPoint(5), gts[3]); //right knee-thigh
nls[2].addLink(nls[0], lowerHalf.getPoint(6), gts[2]); //left hip-thigh
nls[3].addLink(nls[1], lowerHalf.getPoint(7), gts[3]); //right hip-thigh
nls[2].addLink(nls[4], lowerHalf.getPoint(8), gts[4]); //left hip-front
nls[3].addLink(nls[4], lowerHalf.getPoint(9), gts[5]); //right hip-front
nls[2].addLink(nls[5], lowerHalf.getPoint(10), gts[6]); //left hip-back
nls[3].addLink(nls[5], lowerHalf.getPoint(11), gts[7]); //right hip-back
nls[4].addLink(nls[2], lowerHalf.getPoint(12), gts[4]); //front tip-left
nls[4].addLink(nls[3], lowerHalf.getPoint(13), gts[5]); //front tip-right
nls[5].addLink(nls[2], lowerHalf.getPoint(18), gts[6]); //back tip-left
nls[5].addLink(nls[3], lowerHalf.getPoint(19), gts[7]); //back tip-right
upperHalf = new CoherentPointSet(14);
upperHalf.add(new SelfConvertingPoint(7, 0, 0)); //0: Turret front
upperHalf.add(new SelfConvertingPoint(0, 0, 5)); //1: Turret top
upperHalf.add(new SelfConvertingPoint(-5, 0, 0)); //2: Turret back
upperHalf.add(new SelfConvertingPoint(0, 5, 0)); //3: Turret left
upperHalf.add(new SelfConvertingPoint(0, -5, 0)); //4: Turret right
upperHalf.add(new SelfConvertingPoint(7f/2f, -5f/4f, 5f/4f)); //5: DELTA
upperHalf.add(new SelfConvertingPoint(7f/4f, -5f/2f, 5f/4f)); //6: DELTA
upperHalf.add(new SelfConvertingPoint(7f/4f, -5f/4f, 5f/2f)); //7: DELTA
upperHalf.add(new SelfConvertingPoint(0, 2.5f, 2.5f)); //8: Left front mount
upperHalf.add(new SelfConvertingPoint(-2.5f, 2.5f, 0)); //9: Left rear mount
upperHalf.add(new SelfConvertingPoint(0, -2.5f, 2.5f)); //10: Right front mount
upperHalf.add(new SelfConvertingPoint(-2.5f, -2.5f, 0)); //11: Right rear mount
upperHalf.add(new SelfConvertingPoint(0, 0, 7)); //12: Gun pivot
upperHalf.add(new SelfConvertingPoint(5, 0, 7)); //13: Gun tip
OrderedGraphicSet ogs = new OrderedGraphicSet(new GraphicTriangle(upperHalf.getPoint(0), upperHalf.getPoint(1), upperHalf.getPoint(4), darker), 4);
ogs.add(new GraphicLine(upperHalf.getPoint(5), upperHalf.getPoint(6), brighter), false);
ogs.add(new GraphicLine(upperHalf.getPoint(5), upperHalf.getPoint(7), brighter), false);
ogs.add(new GraphicLine(upperHalf.getPoint(6), upperHalf.getPoint(7), brighter), false);
zol.add(ogs);
zol.add(new GraphicTriangle(upperHalf.getPoint(0), upperHalf.getPoint(1), upperHalf.getPoint(3), team));
zol.add(new GraphicTriangle(upperHalf.getPoint(2), upperHalf.getPoint(1), upperHalf.getPoint(3), team));
zol.add(new GraphicTriangle(upperHalf.getPoint(2), upperHalf.getPoint(1), upperHalf.getPoint(4), team));
zol.add(new GraphicTriangle(upperHalf.getPoint(8), upperHalf.getPoint(9), upperHalf.getPoint(12), black));
zol.add(new GraphicTriangle(upperHalf.getPoint(10), upperHalf.getPoint(11), upperHalf.getPoint(12), black));
zol.add(new GraphicLine(upperHalf.getPoint(12), upperHalf.getPoint(13), black));
lowerHalf.translate(vr[0]);
lowerHalf.rotate(vr[0], Point3D.unitUp, i);
upperHalf.translate((new Point3D(0,0,5)).doSum(lowerHalf.getPoint(14)));
upperHalf.rotate(vr[0], Point3D.unitUp, i);
vr[1].doRotate(Point3D.origin, Point3D.unitUp, i);
vr[2].doRotate(Point3D.origin, Point3D.unitUp, i);
vr[3].doRotate(Point3D.origin, Point3D.unitUp, i);
vr[4].doRotate(Point3D.origin, Point3D.unitUp, i);
ZListNode zln;
int n=0;
for(zln = zol.zNode; zln != null; zln = zln.getNext()) {
n++;
}
ZListNode zlna[] = new ZListNode[n];
n=0;
for(zln = zol.zNode; zln != null; zln = zln.getNext()) {
zlna[n++] = zln;
}
for(n=0;n<zlna.length;n++) {
zlna[n].getThing().update();
}
zol.update();
}
public void addTo(GameViewer v) {
if(health > 0)
v.add(zol);
}
public void killGraphics() {
zol.kill();
}
protected void animateMove() {
switch(frame) {
case 36:
case 35:
case 34:
lowerHalf.getPoint(3).doRotate(lowerHalf.getPoint(1), vr[2], 355);
lowerHalf.getPoint(5).doRotate(lowerHalf.getPoint(7), vr[2], 5);
leftFoot.rebind();
break;
case 27:
case 15:
case 26:
case 14:
case 25:
case 13:
lowerHalf.getPoint(3).doRotate(lowerHalf.getPoint(1), vr[2], 5);
lowerHalf.getPoint(4).doRotate(lowerHalf.getPoint(6), vr[2], 350);
lowerHalf.getPoint(5).doRotate(lowerHalf.getPoint(7), vr[2], 5);
rightFoot.rebind();
break;
case 24:
case 12:
case 23:
case 11:
case 22:
case 10:
lowerHalf.getPoint(2).doRotate(lowerHalf.getPoint(0), vr[2], 5);
lowerHalf.getPoint(3).doRotate(lowerHalf.getPoint(1), vr[2], 350);
lowerHalf.getPoint(4).doRotate(lowerHalf.getPoint(6), vr[2], 5);
leftFoot.rebind();
break;
case 33:
case 21:
case 9:
case 32:
case 20:
case 8:
case 31:
case 19:
case 7:
lowerHalf.getPoint(2).doRotate(lowerHalf.getPoint(0), vr[2], 5);
lowerHalf.getPoint(4).doRotate(lowerHalf.getPoint(6), vr[2], 5);
lowerHalf.getPoint(5).doRotate(lowerHalf.getPoint(7), vr[2], 350);
leftFoot.rebind();
break;
case 30:
case 18:
case 6:
case 29:
case 17:
case 5:
case 28:
case 16:
case 4:
lowerHalf.getPoint(2).doRotate(lowerHalf.getPoint(0), vr[2], 350);
lowerHalf.getPoint(3).doRotate(lowerHalf.getPoint(1), vr[2], 5);
lowerHalf.getPoint(5).doRotate(lowerHalf.getPoint(7), vr[2], 5);
rightFoot.rebind();
break;
case 3:
case 2:
case 1:
lowerHalf.getPoint(2).doRotate(lowerHalf.getPoint(0), vr[2], 5);
lowerHalf.getPoint(4).doRotate(lowerHalf.getPoint(6), vr[2], 355);
rightFoot.rebind();
break;
}
upperHalf.translate(new Point3D(0,0,10).doSum(lowerHalf.getPoint(14)).doDifference(upperHalf.getPoint(1)));
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -