// Use this for initialization void Start() { Xaxis = GameObject.Find("XAxis"); Yaxis = GameObject.Find("YAxis"); Zaxis = GameObject.Find("ZAxis"); Xaxis.SetActive(false); Yaxis.SetActive(false); Zaxis.SetActive(false); }
// Use this for initialization void Start() { count = 1; state = 1; endPosition = new Vector3(.3f, 0, 1f); //endPosition = new Vector3(.4f, .6f, 1.7f); /*Xaxis = GameObject.Find("XAxis"); * Yaxis = GameObject.Find("YAxis"); * Zaxis = GameObject.Find("ZAxis");*/ v2.SetActive(false); v3.SetActive(false); v4.SetActive(false); Yaxis.SetActive(false); Zaxis.SetActive(false); holderStart = false; }
// Use this for initialization void Start() { txtRef1.text = "We can represent a scalar in a one dimentional space using a point on a scaled line"; count = 1; state = 1; endPosition = new Vector3(.6f, 0, 1.5f); //endPosition = new Vector3(.4f, .6f, 1.7f); Xaxis = GameObject.Find("XAxis"); Yaxis = GameObject.Find("YAxis"); Zaxis = GameObject.Find("ZAxis"); cube1 = GameObject.Find("cube1"); cube2 = GameObject.Find("cube2"); cube3 = GameObject.Find("cube3"); Yaxis.SetActive(false); Zaxis.SetActive(false); cube1.SetActive(false); cube2.SetActive(false); cube3.SetActive(false); holderStart = false; }
private Box <IPlotProperty> _CreateLayoutProperties() { var xaxis = Scene.xaxis(Xaxis.color("red")); var yaxis = Scene.yaxis(Yaxis.color("green")); var zaxis = Scene.zaxis(Zaxis.color("blue")); var camera = Camera.up(Up.x(0), Up.y(1), Up.z(0)); var scene = Layout.scene(Scene.Aspectmode.data(), Scene.camera(camera), xaxis, yaxis, zaxis); var shapes = Layout.shapes(_Shapes.ToArray()); return(Plot.layout (Layout.autosize(true) // , Layout.width(0) , Layout.height(920) // , Layout.margin(Margin.autoexpand(true)) // , Layout.margin(Margin.pad(5)) // , Layout.margin(Margin.t(5), Margin.b(5)) , scene , shapes )); }
private void frmTeach_Load(object sender, EventArgs e) { //defaultView = new PositionDefaultView(); ProductTeach = new ProductTeach(m_station1); mCameraAxis = new CameraAxis(m_station1); CameraRelationship = new CameraRelationship(m_station1); RootAxis = new RootAxis(m_station1); mYaxis = new Yaxis(m_station1); mZaxis = new Zaxis(m_station1); m_panelOperate = new Panel(); m_panelOperate.Dock = DockStyle.Fill; treeView1.Nodes.Add("贴框设备"); foreach (string str in Enum.GetNames(typeof(PositionName))) { treeView1.Nodes[0].Nodes.Add(str); } treeView1.ExpandAll(); timer1.Enabled = true; }
/// <summary> /// 从世界坐标变换到摄像机坐标 /// </summary> /// <param name="eye"></param> /// <param name="at"></param> /// <param name="up"></param> /// <returns></returns> public static Matrix GetViewMatrix(Vector eye, Vector at, Vector up) { Vector Xaxis, Yaxis, Zaxis; Zaxis = at - eye; Zaxis.NormalizedVector(); Xaxis = Vector.CrossMultiply(up, Zaxis); Xaxis.NormalizedVector(); Yaxis = Vector.CrossMultiply(Zaxis, Xaxis); Matrix mat = new Matrix(); mat[0, 0] = Xaxis.x; mat[1, 0] = Xaxis.y; mat[2, 0] = Xaxis.z; mat[3, 0] = -Vector.DotMultiply(Xaxis, eye); mat[0, 1] = Yaxis.x; mat[1, 1] = Yaxis.y; mat[2, 1] = Yaxis.z; mat[3, 1] = -Vector.DotMultiply(Yaxis, eye); mat[0, 2] = Zaxis.x; mat[1, 2] = Zaxis.y; mat[2, 2] = Zaxis.z; mat[3, 2] = -Vector.DotMultiply(Zaxis, eye); mat[0, 3] = 0; mat[1, 3] = 0; mat[2, 3] = 0; mat[3, 3] = 1; //-----------------------得到旋转矩阵------------------ return(mat); }
// Update is called once per frame void Update() { timer += Time.deltaTime; if (Vector3.Distance(this.transform.position, endPosition) > .0005f) { transform.position = Vector3.Lerp(this.transform.position, endPosition, Time.deltaTime); } else { transform.position = endPosition; if (timer >= 0 && timer < 5 * speed) { endPosition = GameObject.Find("XAxisNumber4").transform.position; } if (timer >= 5 * speed && timer < 10 * speed) { endPosition = GameObject.Find("XAxisNumber-3").transform.position; } if (timer >= 10 * speed && timer < 15 * speed) { endPosition = GameObject.Find("XAxisNumber0").transform.position; } if (timer >= 15 * speed && timer < 20 * speed) { Yaxis.SetActive(true); endPosition = GameObject.Find("YAxisNumber2").transform.position; } if (timer >= 20 * speed && timer < 25 * speed) { endPosition = new Vector3(0.12f + x0, .08f, z0); } if (timer >= 25 * speed && timer < 30 * speed) { endPosition = new Vector3(0.12f + x0, .14f, z0); } if (timer >= 30 * speed && timer < 35 * speed) { Zaxis.SetActive(true); endPosition = new Vector3(.12f + x0, .08f, .08f + z0); } if (timer >= 35 * speed && timer < 40 * speed) { endPosition = new Vector3(.08f + x0, .12f, .04f + z0); } if (timer >= 60 * speed && timer < 65 * speed) { v3.SetActive(true); } if (timer >= 85 * speed && timer < 90 * speed) { v2.SetActive(true); v4.SetActive(true); } if (timer >= 95 * speed && timer < 100 * speed) { v2.SetActive(false); v4.SetActive(false); } if (timer >= 100 * speed && timer < 105 * speed) { MeshRenderer gameObjectRenderer = v3.transform.Find("x1").GetComponent <MeshRenderer>(); Material newMaterial = new Material(Shader.Find("Standard")); newMaterial.color = new Color(1, 0, 0, 1); gameObjectRenderer.material = newMaterial; } if (timer >= 105 * speed && timer < 110 * speed) { MeshRenderer gameObjectRenderer = v3.transform.Find("y1").GetComponent <MeshRenderer>(); Material newMaterial = new Material(Shader.Find("Standard")); newMaterial.color = new Color(0, 1, 0, 1); gameObjectRenderer.material = newMaterial; } if (timer >= 110 * speed && timer < 115 * speed) { MeshRenderer gameObjectRenderer = v3.transform.Find("z1").GetComponent <MeshRenderer>(); Material newMaterial = new Material(Shader.Find("Standard")); newMaterial.color = new Color(0, 0, 1, 1); gameObjectRenderer.material = newMaterial; } if (timer >= 115 * speed && timer < 120 * speed) { Material newMaterial = new Material(Shader.Find("Standard")); newMaterial.color = new Color(1, 1, 1, 1); MeshRenderer gameObjectRenderer1 = v3.transform.Find("x1").GetComponent <MeshRenderer>(); MeshRenderer gameObjectRenderer2 = v3.transform.Find("y1").GetComponent <MeshRenderer>(); MeshRenderer gameObjectRenderer3 = v3.transform.Find("z1").GetComponent <MeshRenderer>(); gameObjectRenderer1.material = newMaterial; gameObjectRenderer2.material = newMaterial; gameObjectRenderer3.material = newMaterial; } //switch (state){ // case(1): // endPosition = GameObject.Find("XAxisNumber4").transform.position;//new Vector3(-0.16f, 0, 1.5f); // state++; // break; // case (2): // endPosition = GameObject.Find("XAxisNumber0").transform.position;//new Vector3(-0.16f, 0, 1.5f); // state++; // break; // case (3): // //txtRef1.text ="This number can refer to other directions of axes"; // Yaxis.SetActive(true); // endPosition = GameObject.Find("YAxisNumber2").transform.position;//new Vector3(-0.16f, 0, 1.5f); // state++; // break; // case (4): // //txtRef1.text = "These components can represent a vector in a space, in this case a two dimensional space"; // endPosition = new Vector3(0.6f, .4f, .5f); // state++; // break; // case (5): // endPosition = new Vector3(0.6f, .4f, .5f); // state++; // break; // case (6): // //txtRef1.text = "If we use a third demension we can represent it like this"; // Zaxis.SetActive(true); // endPosition = new Vector3(.6f, .4f, .9f); // state++; // break; // case (7): // //txtRef1.text = "and also represent it as a vector... we can represent the values of each dimen"; // endPosition = new Vector3(.4f, .6f, .7f); // state++; // break; // case (8): // //txtRef1.text = "Now we can represent the values of each component of a vector as colors in cubes. "; // Xaxis.SetActive(false); // Yaxis.SetActive(false); // Zaxis.SetActive(false); // state++; // break; // case (9): // //txtRef1.text = "and also represent it as a vector by concatenating cubes"; // endPosition = new Vector3(0, 0, 20f); // holderStart = true; // //Camera.current.transform.Translate(new Vector3(0, 0, -3.5f)); // state++; // break; // case (10): // // txtRef1.text = "now if we concatenate these cube vectores we can represnt a matrix, accessing each component with two indices."; // //txtRef2.text = ""; // endPosition = new Vector3(0, 0, 0); // //Camera.current.transform.Translate(new Vector3(-.5f, 0, 1.8f)); // //Camera.current.transform.Rotate(Vector3.up, -90); // state++; // break; // case (11): // //txtRef1.text = "if we go furthur and concatenate matrices we can find a rank 3 tensor represented liek this"; // //Camera.current.transform.Translate(new Vector3(-1.0f, 0, 0)); // endPosition = new Vector3(0, 0, 20f); // state++; // break; // case (12): // // txtRef1.text = "Tensors can have higher or lower ranks. scalar is a rank 0 tensor, vector is a rank 1 tensor and matrix is rank 2 vector."; // //Camera.current.transform.Rotate(Vector3.up, 90); // //Camera.current.transform.Translate(new Vector3(0, 0, -2.3f)); // endPosition = new Vector3(0, 0, 0); // state++; // break; // default: // break; //} } }
// Update is called once per frame void Update() { timer += Time.deltaTime; float speed = 1; if (Vector3.Distance(this.transform.position, endPosition) > .005f) { transform.position = Vector3.Lerp(this.transform.position, endPosition, speed * Time.deltaTime); } else { transform.position = endPosition; switch (state) { case (1): endPosition = GameObject.Find("XAxisNumber-4").transform.position; //new Vector3(-0.16f, 0, 1.5f); state++; break; case (2): endPosition = GameObject.Find("XAxisNumber0").transform.position; //new Vector3(-0.16f, 0, 1.5f); state++; break; case (3): txtRef1.text = "This number can refer to other directions of axes"; Yaxis.SetActive(true); endPosition = GameObject.Find("YAxisNumber2").transform.position; //new Vector3(-0.16f, 0, 1.5f); state++; break; case (4): txtRef1.text = "These components can represent a vector in a space, in this case a two dimensional space"; endPosition = new Vector3(0.6f, .4f, 1.5f); state++; break; case (5): endPosition = new Vector3(0.6f, .4f, 1.5f); state++; break; case (6): txtRef1.text = "If we use a third demnsion we can represent it like this"; Zaxis.SetActive(true); endPosition = new Vector3(.6f, .4f, 1.9f); state++; break; case (7): txtRef1.text = "and also represent it as a vector... we can represent the values of each dimen"; endPosition = new Vector3(.4f, .6f, 1.7f); state++; break; case (8): txtRef1.text = "Now we can represent the values of each component of a vector as colors in cubes. "; //Xaxis.SetActive(false); //Yaxis.SetActive(false); //Zaxis.SetActive(false); cube1.SetActive(true); cube2.SetActive(true); cube3.SetActive(true); if (timer > 50) { state++; } break; case (9): txtRef1.text = "and also represent it as a vector by concatenating cubes"; //endPosition = new Vector3(0, 0, 20f); //cube1.SetActive(false); //cube2.SetActive(false); //cube3.SetActive(false); if (timer > 60) { holderStart = true; //Camera.current.transform.Translate(new Vector3(0, 0, -3.5f)); state++; } break; case (10): txtRef1.text = "now if we concatenate these cube vectores we can represnt a matrix, accessing each component with two indices."; //endPosition = new Vector3(0, 0, 0); //Camera.current.transform.Translate(new Vector3(-.5f, 0, 1.8f)); //Camera.current.transform.Rotate(Vector3.up, -90); state++; break; case (11): txtRef1.text = "if we go furthur and concatenate matrices we can find a rank 3 tensor represented liek this"; //Camera.current.transform.Translate(new Vector3(-1.0f, 0, 0)); //endPosition = new Vector3(0, 0, 20f); state++; break; case (12): txtRef1.text = "Tensors can have higher or lower ranks. scalar is a rank 0 tensor, vector is a rank 1 tensor and matrix is rank 2 vector."; //Camera.current.transform.Rotate(Vector3.up, 90); //Camera.current.transform.Translate(new Vector3(0, 0, -2.3f)); //endPosition = new Vector3(0, 0, 0); state++; break; default: break; } } }
public override void Running(RunningModes runningMode) { var step = 0; var ScrewIsDone = 0; var CannotTorIn = false; var GetScrewPos = new Point3D <int>(); var ScrewHolePos = new Point3D <int>(); var ZaxisScrewpos = 0; var watchCameratimeout = new Stopwatch(); //var watchScrewtimeout = new Stopwatch(); var tempPut1 = false; var tempPut2 = false; var GetScrew1 = false; var GetScrew2 = false; var pressPulse = false; var startForbid = false; var _watch = new Stopwatch(); _watch.Start(); PlateformAlarm alarm = 0; while (true) { Thread.Sleep(10); InhaleCylinder.Condition.External = externalSign; #region 判断后端设备交互信号 if (tempPut1 && !GetScrew2) { tempPut1 = false; GetScrew1 = true; } if (tempPut2 && !GetScrew1) { tempPut2 = false; GetScrew2 = true; } if (!IoPoints.TDI7.Value && !Global.GetScrew1SignSheild) { tempPut1 = false; } if (!IoPoints.TDI8.Value && !Global.GetScrew2SignSheild) { tempPut2 = false; } if ((IoPoints.TDI7.Value || Global.GetScrew1SignSheild) && !GetScrew1 && !GetScrew2) { tempPut1 = true; } if ((IoPoints.TDI8.Value || Global.GetScrew2SignSheild) && !GetScrew1 && !GetScrew2) { tempPut2 = true; } #endregion #region 自动流程 if (stationOperate.Running) { switch (step) { case 0: Marking.CoderResult.SN = ""; Marking.CoderResult.Result = ""; step = 10; Marking.watchCT.Restart(); break; case 10: //触发读码器读码 ReadCodePort.Trigger(new TriggerArgs() { tryTimes = 1 }); step = 20; break; case 20: //判断读码器是否读到SN Thread.Sleep(300); if (Marking.CoderResult.SN == "") { step = 10; } else { step = 30; } break; case 30: //双按钮启动,双按钮按下的时间间隔必须小于500ms才正常启动设备 if (!pressPulse && (IoPoints.TDI15.Value || IoPoints.TDI16.Value)) { pressPulse = true; startForbid = true; _watch.Restart(); } if (startForbid && IoPoints.TDI15.Value && IoPoints.TDI16.Value) { step = 40; startForbid = false; pressPulse = false; } else { if (500 <= _watch.ElapsedMilliseconds) { startForbid = false; } } if (!IoPoints.TDI15.Value && !IoPoints.TDI16.Value) { pressPulse = false; startForbid = false; } break; case 40: //判断哪个螺丝整列机优先准备好 if (GetScrew1 && !GetScrew2) { GetScrewPos = Position.Put1ScrewPosition; step = 50; } else if (!GetScrew1 && GetScrew2) { GetScrewPos = Position.Put2ScrewPosition; step = 50; } break; case 50: //判断Z轴是否在0位置,X轴移动到取螺丝位置 if (Zaxis.IsInPosition(0)) { Xaxis.MoveTo(GetScrewPos.X, AxisParameter.XvelocityCurve); step = 60; } break; case 60: //X轴到达取螺丝位置,Z轴下降 if (Xaxis.IsInPosition(GetScrewPos.X)) { Zaxis.MoveTo(GetScrewPos.Z, AxisParameter.ZvelocityCurve); step = 70; } break; case 70: //Z轴到达取螺丝位置,吸真空 if (Zaxis.IsInPosition(GetScrewPos.Z)) { InhaleCylinder.Set(); step = 80; } break; case 80: //Z轴上升0位置 if (InhaleCylinder.OutMoveStatus) { Zaxis.MoveTo(0, AxisParameter.ZvelocityCurve); ScrewHolePos = Position.ScrewHolePosition[Marking.WorkIndex - 1]; step = 90; } break; case 90: //Z轴到达0位置,XY轴移动拧螺丝位置 if (Zaxis.IsInPosition(0)) { Xaxis.MoveTo(ScrewHolePos.X, AxisParameter.XvelocityCurve); Yaxis.MoveTo(ScrewHolePos.Y, AxisParameter.YvelocityCurve); step = 100; } break; case 100: //XY轴到达拧螺丝位置,Z轴下降 if (Xaxis.IsInPosition(ScrewHolePos.X) && Yaxis.IsInPosition(ScrewHolePos.Y)) { Zaxis.MoveTo(ScrewHolePos.Z, AxisParameter.ZvelocityCurve); step = 110; } break; case 110: //Z轴到达拧螺丝位置,启动电批,并Z轴慢速下行 if (Zaxis.IsInPosition(ScrewHolePos.Z)) { IoPoints.TDO11.Value = true; ZaxisScrewpos = ScrewHolePos.Z + Position.ScrewDepth; if (IoPoints.TDI9.Value) { Zaxis.MoveTo(ZaxisScrewpos, new VelocityCurve(0, (double)Position.ZScrewSpeed, 0)); step = 120; } } break; case 120: //Z轴到达位置,判断螺丝是否拧紧 if (Zaxis.IsInPosition(ZaxisScrewpos)) { if (alarm == PlateformAlarm.收不到电批的螺丝拧紧正常或拧紧异常信号) { CannotTorIn = true; alarm = PlateformAlarm.无消息; IoPoints.TDO11.Value = false; IoPoints.TDO12.Value = true; Thread.Sleep(200); IoPoints.TDO12.Value = false; step = 130; } if (IoPoints.TDI10.Value || IoPoints.TDI11.Value) { step = 130; } else { if (ScrewIsDone > 2) { alarm = PlateformAlarm.收不到电批的螺丝拧紧正常或拧紧异常信号; m_Alarm = PlateformAlarm.收不到电批的螺丝拧紧正常或拧紧异常信号; } Thread.Sleep(100); ScrewIsDone++; } } break; case 130: //触发读取数据 ScrewPort.Trigger(new TriggerArgs() { tryTimes = 1, message = "0,TR" }); HeightGaugePort.Trigger(new TriggerArgs() { tryTimes = 1 }); Thread.Sleep(200); step = 140; break; case 140: //判断检测结果 if (CannotTorIn) { Marking.ResultScrew[Marking.WorkIndex].Result = "NG"; step = 150; } else { if (Marking.ResultScrew[Marking.WorkIndex].Result == "OK") { var data = Marking.ResultScrew[Marking.WorkIndex].HeightValue - Global.BaseHeight; if (data > Position.MinHeight && data <= Position.MaxHeight) { Marking.ResultScrew[Marking.WorkIndex].Result = "OK"; } else { Marking.ResultScrew[Marking.WorkIndex].Result = "NG"; } step = 150; } if (Marking.ResultScrew[Marking.WorkIndex].Result == "NG") { step = 150; } } break; case 150: //电批停止,真空吸气OFF,Z轴回到0位置 IoPoints.TDO11.Value = false; InhaleCylinder.Reset(); Zaxis.MoveTo(0, AxisParameter.ZvelocityCurve); step = 160; break; case 160: //真空吸气达到,Z轴到达0位置,计数加+1 if (InhaleCylinder.OutOriginStatus && Zaxis.IsInPosition(0)) { Marking.WorkIndex++; if (Marking.WorkIndex < Position.HoleNum) { step = 40; } else { step = 170; } } break; case 170: //判断产品拧螺丝结果 for (var i = 0; i < Position.HoleNum; i++) { if (Marking.ResultScrew[i].Result == "OK") { Marking.ProductResult &= true; } else { Marking.ProductResult &= false; } } if (Marking.ProductResult) { Config.ProductOkTotal++; } else { Config.ProductNgTotal++; } step = 180; break; case 180: //XY轴回到0位置 Xaxis.MoveTo(0, AxisParameter.XvelocityCurve); Yaxis.MoveTo(0, AxisParameter.YvelocityCurve); step = 190; break; case 190: //XY轴到达0位置 if (Xaxis.IsInPosition(0) && Yaxis.IsInPosition(0)) { step = 200; } break; default: Marking.ProductResult = true; stationOperate.RunningSign = false; Marking.WorkIndex = 0; step = 0; break; } } #endregion #region 初始化流程 if (stationInitialize.Running) { switch (stationInitialize.Flow) { case 0: //清除所有标志位的状态 stationInitialize.InitializeDone = false; stationOperate.RunningSign = false; alarm = PlateformAlarm.无消息; Marking.ProductResult = true; Marking.WorkIndex = 0; step = 0; Xaxis.Stop(); Yaxis.Stop(); Zaxis.Stop(); if (!Xaxis.IsAlarmed && !Yaxis.IsAlarmed) { Xaxis.IsServon = true; Yaxis.IsServon = true; Zaxis.IsServon = true; stationInitialize.Flow = 10; } break; case 10: //复位Z轴,真空 IoPoints.ApsController.BackHome(Zaxis.NoId); InhaleCylinder.InitExecute(); InhaleCylinder.Reset(); stationInitialize.Flow = 20; break; case 20: //判断所有气缸到位,启动Z轴回原点 if (InhaleCylinder.OutOriginStatus) { if (IoPoints.ApsController.CheckHomeDone(Zaxis.NoId, 10.0) == 0) { IoPoints.ApsController.BackHome(Xaxis.NoId); IoPoints.ApsController.BackHome(Yaxis.NoId); stationInitialize.Flow = 30; } else { Zaxis.Stop(); stationInitialize.InitializeDone = false;; stationInitialize.Flow = -1; } } break; case 30: //判断XY轴是否异常,为0,正常,为1:原点异常,为<0:故障 var resultX = IoPoints.ApsController.CheckHomeDone(Xaxis.NoId, 10.0); var resultY = IoPoints.ApsController.CheckHomeDone(Yaxis.NoId, 10.0); if (IoPoints.ApsController.CheckHomeDone(Xaxis.NoId, 10.0) == 0 && IoPoints.ApsController.CheckHomeDone(Yaxis.NoId, 10.0) == 0) { stationInitialize.InitializeDone = true; stationInitialize.Flow = 40; } else //异常处理 { stationInitialize.InitializeDone = false;; stationInitialize.Flow = -1; } break; default: break; } } #endregion //故障清除 if (externalSign.AlarmReset) { m_Alarm = PlateformAlarm.无消息; } } }
public void UpdateAI(float DT) { if (firstInit) { waveSegment = (float)wavePosition / (float)waveSize; initSpeed(); UpdateTransform(); AI_Functions.Instance.RandomiseHover(this); } // Set variables for specific wave AI. switch (waveBehaviour) { case SPAWN_BEHAVIOUR.STRAIGHT: UpdateStraight(DT); break; case SPAWN_BEHAVIOUR.ZIGZAGGED: updateZigzagWave(DT); break; case SPAWN_BEHAVIOUR.FORMATION: if (firstInit) { initFormationDelay(1); } updateFormationWave(DT); break; case SPAWN_BEHAVIOUR.SLOW_THEN_FAST: if (firstInit) { initFormationDelay(1); } updateSlowThenFastWave(DT); break; case SPAWN_BEHAVIOUR.IN_THEN_OUT: if (firstInit) { initFormationDelay(1); //this probably isn't necessary now } UpdateInThenOut(DT); break; case SPAWN_BEHAVIOUR.PATROLLING_EDGE: UpdatePatrollingEdge(DT); break; case SPAWN_BEHAVIOUR.ASSAULT: UpdateAssault(DT); break; case SPAWN_BEHAVIOUR.COVERT: UpdateCovert(DT); break; case SPAWN_BEHAVIOUR.ROLLING_TOPBOTTOM: UpdateRollingTopBottom(DT); break; case SPAWN_BEHAVIOUR.TOPBOTTOM: UpdateTopBottom(DT); break; case SPAWN_BEHAVIOUR.STRAIGHT_AIMING: UpdateStraightAiming(DT); break; case SPAWN_BEHAVIOUR.MIDDLE_TOPBOTTOM: UpdateMiddleTopBottom(DT); break; case SPAWN_BEHAVIOUR.KAMIKAZE: UpdateKamikaze(DT); break; case SPAWN_BEHAVIOUR.STRAIGHT_SLOW: UpdateStraightSlow(DT); break; } // Limit Y-axis. if (waveFormation != SPAWN_STATE.SINGLE_FROM_SIDE && waveFormation != SPAWN_STATE.SINGLE_FROM_TOPBOTTOM) { if (m_Position.Y < -110) { m_Position.Y = -110; } if (m_Position.Y > 110) { m_Position.Y = 110; } } // Fix bounding error. if (waveFormation == SPAWN_STATE.SINGLE_FROM_SIDE || waveFormation == SPAWN_STATE.SINGLE_FROM_TOPBOTTOM) { if (currentMove != 0) { if (waveBehaviour == SPAWN_BEHAVIOUR.ASSAULT || currentMove != (totalMoves - 1)) { if (m_Position.Y < -110) { Yaxis.pushValue += DT * 2; } if (m_Position.Y > 110) { Yaxis.pushValue -= DT * 2; } // For the rare chance that highly mobile ship ends up too close to the left, just out of range. if (m_Position.Y < -80 && m_Position.Z > -100) { Yaxis.pushValue += DT; } if (m_Position.Y > 80 && m_Position.Z > -100) { Yaxis.pushValue -= DT; } } } } rotationX = MathHelper.Clamp(rotationX, -1f, 1f); rotationX = MathHelper.Lerp(0.0f, rotationX, 0.97f); if (waveFormation != SPAWN_STATE.SINGLE_FROM_TOPBOTTOM) { rotationZ = MathHelper.Lerp(0.5f, rotationZ, 0.97f); rotationZ = MathHelper.Clamp(rotationZ, -0.25f, 1.3f); } m_Position.Y += Yaxis.baseSpeed; m_Position.Z += Zaxis.baseSpeed; Zaxis.Update(DT); Yaxis.Update(DT); currentMoveTimer += DT; }