?? lmghunter.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 dual laser machine gun
* Once this works, I'll use it to develop a general form turreted unit class
* I think I'll figure out the thinking upgrade then:
* I would like to make turreted units attempt a strafing manuever while they are attacking a unit
* and are within their followRange.
*/
public class LMGHunter extends netwar.game.Unit {
private ZOrderedList zol;
private UnaryLink leftFoot;
private UnaryLink rightFoot;
CoherentPointSet lowerHalf;
CoherentPointSet upperHalf;
//If left is true, fire from left gun, else fire from right gun.
boolean leftFire = true;
/** Creates a new instance of LMGHunter */
public LMGHunter() {
}
protected void createVectors()
{
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), Color.black); //Left shin
gts[1] = new GraphicLine(lowerHalf.getPoint(1), lowerHalf.getPoint(3), Color.black); //Right shin
gts[2] = new GraphicLine(lowerHalf.getPoint(4), lowerHalf.getPoint(6), Color.black); //Left thigh
gts[3] = new GraphicLine(lowerHalf.getPoint(5), lowerHalf.getPoint(7), Color.black); //Right thigh
gts[4] = new GraphicTriangle(lowerHalf.getPoint(8), lowerHalf.getPoint(12), lowerHalf.getPoint(14), Color.darkGray); //Left front
gts[5] = new GraphicTriangle(lowerHalf.getPoint(9), lowerHalf.getPoint(13), lowerHalf.getPoint(15), Color.darkGray); //Right front
gts[6] = new GraphicTriangle(lowerHalf.getPoint(10), lowerHalf.getPoint(16), lowerHalf.getPoint(18), Color.darkGray); //Left back
gts[7] = new GraphicTriangle(lowerHalf.getPoint(11), lowerHalf.getPoint(17), lowerHalf.getPoint(19), Color.darkGray); //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(10);
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(5, 5, 0)); //5: Left gun tip
upperHalf.add(new SelfConvertingPoint(5, -5, 0)); //6: Right gun tip
upperHalf.add(new SelfConvertingPoint(7f/2f, 5f/4f, 5f/4f)); //7: DELTA
upperHalf.add(new SelfConvertingPoint(7f/4f, 5f/2f, 5f/4f)); //8: DELTA
upperHalf.add(new SelfConvertingPoint(7f/4f, 5f/4f, 5f/2f)); //9: DELTA
OrderedGraphicSet ogs = new OrderedGraphicSet(new GraphicTriangle(upperHalf.getPoint(0), upperHalf.getPoint(1), upperHalf.getPoint(3), myPlayer.getColor().darker()), 4);
ogs.add(new GraphicLine(upperHalf.getPoint(7), upperHalf.getPoint(8), myPlayer.getColor().brighter()), false);
ogs.add(new GraphicLine(upperHalf.getPoint(7), upperHalf.getPoint(9), myPlayer.getColor().brighter()), false);
ogs.add(new GraphicLine(upperHalf.getPoint(8), upperHalf.getPoint(9), myPlayer.getColor().brighter()), false);
zol.add(ogs);
zol.add(new GraphicTriangle(upperHalf.getPoint(0), upperHalf.getPoint(1), upperHalf.getPoint(4), myPlayer.getColor()));
zol.add(new GraphicTriangle(upperHalf.getPoint(2), upperHalf.getPoint(1), upperHalf.getPoint(3), myPlayer.getColor()));
zol.add(new GraphicTriangle(upperHalf.getPoint(2), upperHalf.getPoint(1), upperHalf.getPoint(4), myPlayer.getColor()));
zol.add(new GraphicTriangle(upperHalf.getPoint(2), upperHalf.getPoint(5), upperHalf.getPoint(3), Color.black));
zol.add(new GraphicTriangle(upperHalf.getPoint(2), upperHalf.getPoint(6), upperHalf.getPoint(4), Color.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();
}
/** Requests that the GraphicThing(s) used by this object be added to GameViewer v.
* @param v The GameViewer which will be displaying the object.
*/
public void addTo(GameViewer v) {
if(health > 0)
v.add(zol);
}
public void killGraphics() {
zol.kill();
}
/** Do the processing for a frame of animation while moving forward. */
protected void animateMove() {
switch(frame) {
case 12:
lowerHalf.getPoint(3).doRotate(lowerHalf.getPoint(1), vr[2], 345);
lowerHalf.getPoint(5).doRotate(lowerHalf.getPoint(7), vr[2], 15);
leftFoot.rebind();
break;
case 9:
case 5:
lowerHalf.getPoint(3).doRotate(lowerHalf.getPoint(1), vr[2], 15);
lowerHalf.getPoint(4).doRotate(lowerHalf.getPoint(6), vr[2], 330);
lowerHalf.getPoint(5).doRotate(lowerHalf.getPoint(7), vr[2], 15);
rightFoot.rebind();
break;
case 8:
case 4:
lowerHalf.getPoint(2).doRotate(lowerHalf.getPoint(0), vr[2], 15);
lowerHalf.getPoint(3).doRotate(lowerHalf.getPoint(1), vr[2], 330);
lowerHalf.getPoint(4).doRotate(lowerHalf.getPoint(6), vr[2], 15);
leftFoot.rebind();
break;
case 11:
case 7:
case 3:
lowerHalf.getPoint(2).doRotate(lowerHalf.getPoint(0), vr[2], 15);
lowerHalf.getPoint(4).doRotate(lowerHalf.getPoint(6), vr[2], 15);
lowerHalf.getPoint(5).doRotate(lowerHalf.getPoint(7), vr[2], 330);
leftFoot.rebind();
break;
case 10:
case 6:
case 2:
lowerHalf.getPoint(2).doRotate(lowerHalf.getPoint(0), vr[2], 330);
lowerHalf.getPoint(3).doRotate(lowerHalf.getPoint(1), vr[2], 15);
lowerHalf.getPoint(5).doRotate(lowerHalf.getPoint(7), vr[2], 15);
rightFoot.rebind();
break;
case 1:
lowerHalf.getPoint(2).doRotate(lowerHalf.getPoint(0), vr[2], 15);
lowerHalf.getPoint(4).doRotate(lowerHalf.getPoint(6), vr[2], 345);
rightFoot.rebind();
break;
}
upperHalf.translate(new Point3D(0,0,10).doSum(lowerHalf.getPoint(14)).doDifference(upperHalf.getPoint(1)));
vr[0].set(lowerHalf.getPoint(14).x, lowerHalf.getPoint(14).y, 0);
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();
}
/** Do the processing for a frame of animation while rotating left. */
protected void animateRotateLeft() {
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -