⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lmghunter.java

📁 用java开发的一个实施策略游戏源码 值得学习一下
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
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 + -