public AircraftDimensionsForm(ModelControl modelControl) { this.modelControl = modelControl; InitializeComponent(); if (modelControl != null) { numericUpDownWeight.Value = (decimal)modelControl.AirplaneModel.AirplaneControl.AircraftParameters.Mass; numericUpDownWingArea.Value = (decimal) modelControl.AirplaneModel.AirplaneControl.AircraftParameters.WingArea * 10000; numericUpDownVertArea.Value = (decimal) modelControl.AirplaneModel.AirplaneControl.AircraftParameters.VerticalArea * 10000; numericUpDownWingSpan.Value = (decimal)(200 * modelControl.AirplaneModel.AirplaneControl.AircraftParameters.WingCenter.Y * modelControl.AirplaneModel.AirplaneControl.AircraftParameters.WingSpanFactor); } if (modelControl.AirplaneModel.AirplaneControl.AircraftParameters.Version == 1.0) { labelWingCenter.Visible = false; vectorControlWingCenter.Visible = false; labelPropCenter.Visible = false; vectorControlPropCenter.Visible = false; numericUpDownWingSpan.Visible = false; labelWingSpan.Visible = false; labelWingSpanCm.Visible = false; labelWingSpanInch.Visible = false; } else { Program.Instance.CursorVisible = true; Program.Instance.Cursor2Visible = true; vectorControlWingCenter.Vector = FlightModelWind.ToDirectX(modelControl.AirplaneModel.AirplaneControl.AircraftParameters.WingCenter); vectorControlPropCenter.Vector = FlightModelWind.ToDirectX(modelControl.AirplaneModel.AirplaneControl.AircraftParameters.PropCenter); } }
public void UpdatePointPositions() { for (int i = 0; i < ModelControl.AirplaneModel.AirplaneControl.AircraftParameters.UnscaledCollisionPoints.Count; i++) { if (i < points.Count) { points[i].Position = FlightModelWind.ToDirectX(ModelControl.AirplaneModel.AirplaneControl.AircraftParameters.UnscaledCollisionPoints[i]) * ModelControl.AirplaneModel.AirplaneControl.AircraftParameters.Scale; } } for (int i = 0; i < ModelControl.AirplaneModel.AirplaneControl.AircraftParameters.UnscaledGearPoints.Count; i++) { if (i < gearPoints.Count) { gearPoints[i].Position = FlightModelWind.ToDirectX(ModelControl.AirplaneModel.AirplaneControl.AircraftParameters.UnscaledGearPoints[i]) * ModelControl.AirplaneModel.AirplaneControl.AircraftParameters.Scale; } } for (int i = 0; i < ModelControl.AirplaneModel.AirplaneControl.AircraftParameters.UnscaledFloatPoints.Count; i++) { if (i < floatPoints.Count) { floatPoints[i].Position = FlightModelWind.ToDirectX(ModelControl.AirplaneModel.AirplaneControl.AircraftParameters.UnscaledFloatPoints[i]) * ModelControl.AirplaneModel.AirplaneControl.AircraftParameters.Scale; } } }
private void buttonCloneFloatPoint_Click(object sender, EventArgs e) { if (listBoxFloatPoints.SelectedIndex > -1) { CollisionPoint point = listBoxFloatPoints.Items[listBoxFloatPoints.SelectedIndex] as CollisionPoint; if (point != null) { floatPoints.Add(new Vector3(-point.Vector.X, point.Vector.Y, point.Vector.Z)); ModelControl.AirplaneModel.AirplaneControl.AircraftParameters.FloatPoints.Add( FlightModelWind.ToModel(new Vector3(-point.Vector.X, point.Vector.Y, point.Vector.Z))); ModelControl.AirplaneModel.AirplaneControl.AircraftParameters.UnscaledFloatPoints.Add( FlightModelWind.ToModel(new Vector3(-point.Vector.X, point.Vector.Y, point.Vector.Z) * (1f / ModelControl.AirplaneModel.AirplaneControl.AircraftParameters.Scale))); Program.Instance.CollisionPointsUpdated(); UpdateListBoxFloatPoints(); } } }
private void vectorControlCollisionPoint_VectorChanged(object sender, EventArgs e) { if (listBoxPoints.SelectedIndex > -1) { collisionPoints[listBoxPoints.SelectedIndex] = vectorControlCollisionPoint.Vector; CollisionPoint colPt = listBoxPoints.Items[listBoxPoints.SelectedIndex] as CollisionPoint; if (colPt != null) { colPt.Vector = vectorControlCollisionPoint.Vector; listBoxPoints.Items[listBoxPoints.SelectedIndex] = colPt; } ModelControl.AirplaneModel.AirplaneControl.AircraftParameters.CollisionPoints[listBoxPoints.SelectedIndex] = FlightModelWind.ToModel(vectorControlCollisionPoint.Vector); ModelControl.AirplaneModel.AirplaneControl.AircraftParameters.UnscaledCollisionPoints[listBoxPoints.SelectedIndex] = FlightModelWind.ToModel(vectorControlCollisionPoint.Vector) * (1f / ModelControl.AirplaneModel.AirplaneControl.AircraftParameters.Scale); Program.Instance.CollisionPointsMoved(); } }
/// <summary> /// Handles the FrameMove. /// </summary> /// <param name="device"></param> /// <param name="totalTime"></param> /// <param name="elapsedTime"></param> public void OnFrameMove(Device device, double totalTime, float elapsedTime) { if ((crashTime > 0) && (crashTime + 3.0 < totalTime)) { Reset(); } elapsedCumul += elapsedTime; if (elapsedCumul > 0.1f) { elapsedCumul = 0f; if (variometer != null) { variometer.Frequency = (int)(22100 - Math.Sign(iFlightModel.Velocity.Z) * Math.Sqrt(Math.Abs(iFlightModel.Velocity.Z)) * 1000); variometer.Volume = Math.Min(100, (int)(Math.Abs(iFlightModel.Velocity.Z - 0.3f) * 100)); } } int throttle = 0; int rudder = 0; int elevator = 0; int aileron = 0; if (owner.InputManager.IsJoyStickAvailable) { throttle = owner.InputManager.GetAxisValue("throttle"); rudder = owner.InputManager.GetAxisValue("rudder"); elevator = owner.InputManager.GetAxisValue("elevator"); aileron = owner.InputManager.GetAxisValue("aileron"); } else { if (owner.InputManager.KeyBoardState != null) { if (owner.InputManager.KeyBoardState[Microsoft.DirectX.DirectInput.Key.NumPad9] || owner.InputManager.KeyBoardState[Microsoft.DirectX.DirectInput.Key.PageUp]) { kbThrottle = Math.Min(100, kbThrottle + 75 * elapsedTime); } else if (owner.InputManager.KeyBoardState[Microsoft.DirectX.DirectInput.Key.NumPad7] || owner.InputManager.KeyBoardState[Microsoft.DirectX.DirectInput.Key.PageDown]) { kbThrottle = Math.Max(-100, kbThrottle - 75 * elapsedTime); } //else throttle = (int)(200 * (iFlightModel.Throttle - 0.5)); if (owner.InputManager.KeyBoardState[Microsoft.DirectX.DirectInput.Key.NumPad3] || owner.InputManager.KeyBoardState[Microsoft.DirectX.DirectInput.Key.End]) { kbRudder = Math.Min(100, kbRudder + 200 * elapsedTime); } else if (owner.InputManager.KeyBoardState[Microsoft.DirectX.DirectInput.Key.NumPad1] || owner.InputManager.KeyBoardState[Microsoft.DirectX.DirectInput.Key.Home]) { kbRudder = Math.Max(-100, kbRudder - 200 * elapsedTime); } else if (Math.Abs(kbRudder) < 5) { kbRudder = 0; } else { kbRudder = Math.Max(-100, Math.Min(100, kbRudder + (kbRudder > 0 ? -350 * elapsedTime : 350 * elapsedTime))); } if (owner.InputManager.KeyBoardState[Microsoft.DirectX.DirectInput.Key.NumPad2] || owner.InputManager.KeyBoardState[Microsoft.DirectX.DirectInput.Key.DownArrow]) { kbElevator = Math.Min(100, kbElevator + 300 * elapsedTime); } else if (owner.InputManager.KeyBoardState[Microsoft.DirectX.DirectInput.Key.NumPad8] || owner.InputManager.KeyBoardState[Microsoft.DirectX.DirectInput.Key.UpArrow]) { kbElevator = Math.Max(-100, kbElevator - 300 * elapsedTime); } else if (Math.Abs(kbElevator) < 5) { kbElevator = 0; } else { kbElevator = Math.Max(-100, Math.Min(100, kbElevator + (kbElevator > 0 ? -350 * elapsedTime : 350 * elapsedTime))); } if (owner.InputManager.KeyBoardState[Microsoft.DirectX.DirectInput.Key.NumPad4] || owner.InputManager.KeyBoardState[Microsoft.DirectX.DirectInput.Key.LeftArrow]) { kbAileron = Math.Max(-100, kbAileron - 75 * elapsedCumul); } else if (owner.InputManager.KeyBoardState[Microsoft.DirectX.DirectInput.Key.NumPad6] || owner.InputManager.KeyBoardState[Microsoft.DirectX.DirectInput.Key.RightArrow]) { kbAileron = Math.Min(100, kbAileron + 75 * elapsedCumul); } else if (Math.Abs(kbAileron) < 5) { kbAileron = 0; } else { kbAileron = Math.Max(-100, Math.Min(100, kbAileron + (kbAileron > 0 ? -450 * elapsedTime : 450 * elapsedTime))); } throttle = (int)kbThrottle; rudder = (int)kbRudder; elevator = (int)kbElevator; aileron = (int)kbAileron; } } // Flaps & Gear if (owner.InputManager.KeyBoardState != null) { if (AircraftParameters.HasFlaps) { if (owner.InputManager.KeyBoardState[Microsoft.DirectX.DirectInput.Key.F]) { if (!flapsKeyDown) { flapsKeyDown = true; iFlightModel.FlapsExtended = !iFlightModel.FlapsExtended; } } else if (flapsKeyDown) { flapsKeyDown = false; } } if (AircraftParameters.HasRetracts) { if (owner.InputManager.KeyBoardState[Microsoft.DirectX.DirectInput.Key.G]) { if (!gearKeyDown) { gearKeyDown = true; iFlightModel.GearExtended = !iFlightModel.GearExtended; } } else if (gearKeyDown) { gearKeyDown = false; } } } if (AircraftParameters.HasFlaps) { int flapsChannel = owner.InputManager.GetAxisValue("flaps"); if (Math.Abs(flapsChannel - prevFlapsChannel) > 50) { prevFlapsChannel = flapsChannel; iFlightModel.FlapsExtended = !iFlightModel.FlapsExtended; } } if (AircraftParameters.HasRetracts) { int gearChannel = owner.InputManager.GetAxisValue("gear"); if (Math.Abs(gearChannel - prevGearChannel) > 50) { prevGearChannel = gearChannel; iFlightModel.GearExtended = !iFlightModel.GearExtended; } } // Towing if (AircraftParameters.AllowsTowing && owner.InputManager.KeyBoardState[Microsoft.DirectX.DirectInput.Key.T]) { if (!towKeyDown) { if (!iFlightModel.CableEnabled) { if (towing == null) { towing = new Towing(); } owner.CenterHud.ShowGameText("", 1f); iFlightModel.Reset(); crashTime = 0; towing.Start(); iFlightModel.CableEnabled = true; iFlightModel.CableLength = 10f; } else { iFlightModel.CableEnabled = false; } } towKeyDown = true; } else { towKeyDown = false; } if (iFlightModel.CableEnabled) { if (towing.Time > 70f) { iFlightModel.CableEnabled = false; } } if ((iFlightModel.AircraftParameters.Channels < 4) && (useAileronForRudder)) { rudder = aileron; } iFlightModel.Throttle = throttle / 100.0; iFlightModel.Rudder = rudder / 100.0; iFlightModel.Elevator = elevator / 100.0; iFlightModel.Ailerons = aileron / 100.0; if (expoRoll) { iFlightModel.Ailerons *= iFlightModel.Ailerons * Math.Sign(aileron); } if (expoPitch) { iFlightModel.Elevator *= iFlightModel.Elevator * Math.Sign(elevator); } if (expoYaw) { iFlightModel.Rudder *= iFlightModel.Rudder * Math.Sign(rudder); } float height = heightmap.GetHeightAt(-iFlightModel.Y, -iFlightModel.X); iFlightModel.UpdateControls(elapsedTime); airplane.Position = new Vector3(-iFlightModel.Y, -iFlightModel.Z, -iFlightModel.X); Vector3 angles = iFlightModel.Angles; airplane.YawPitchRoll = new Vector3(angles.Z, angles.Y, angles.X); airplane.OnFrameMove(device, totalTime, elapsedTime); iFlightModel.Wind = wind.GetWindAt(airplane.Position); //windVector.Vertex1 = airplane.Position; //windVector.Vertex2 = airplane.Position + iFlightModel.Wind; //windVector.OnFrameMove(device, totalTime, elapsedTime); //debugObject.Position = model.DebugPosition; //debugObject.OnFrameMove(device, totalTime, elapsedTime); if (towing != null) { if (iFlightModel.CableEnabled) { towLine.Vertex1 = airplane.Position; towLine.Vertex2 = towing.Position; towLine.OnFrameMove(device, totalTime, elapsedTime); } iFlightModel.CableOrigin = FlightModelWind.ToModel(towing.Position); iFlightModel.CableVelocity = FlightModelWind.ToModel(towing.Velocity); towing.OnFrameMove(device, totalTime, elapsedTime); } smoke.Position = this.Position - (float)iFlightModel.Throttle * this.Airplane.Front; smoke.OnFrameMove(device, totalTime, elapsedTime); if (iFlightModel.OnWater) { ripples.AddRipple((float)iFlightModel.Speed, Position, totalTime); } ripples.OnFrameMove(device, totalTime, elapsedTime); //Program.Instance.CenterHud.ShowGameText(model.RelativeRotorForce.ToString(), totalTime, 1.0); if ((iFlightModel.Crashed) && (crashTime == 0)) { owner.HandleCrash(); this.HandleCrash(); crashTime = totalTime; Framework.Instance.CurrentCamera.Shake(totalTime, 1.0, 0.05f, 50); } //normalObject.Position = new Vector3(airplane.Position.X, height, airplane.Position.Z); //terrainNormal.Vertex2 = heightmap.GetNormalAt(airplane.Position.X, airplane.Position.Z); // Collisions if (!iFlightModel.Crashed) { // Collisions List <Vector3> newColPoints = iFlightModel.CollisionPoints; for (int i = 0; i < Math.Min(newColPoints.Count, prevColPoints.Count); i++) { Vector3 rayPos = prevColPoints[i]; Vector3 rayDir = newColPoints[i] - prevColPoints[i]; foreach (CollisionMesh collisionMesh in CollisionManager.MeshList) { if (collisionMesh.Intersects(rayPos, rayDir)) { iFlightModel.Crashed = true; iFlightModel.Velocity = new Vector3(0, 0, 0); newColPoints = new List <Vector3>(); break; } } } prevColPoints = newColPoints; } prevPos = this.Position; }
private void vectorControlWingCenter_VectorChanged(object sender, EventArgs e) { if (modelControl != null) { modelControl.AirplaneModel.AirplaneControl.AircraftParameters.WingCenter = FlightModelWind.ToModel(vectorControlWingCenter.Vector); Program.Instance.CursorPosition = vectorControlWingCenter.Vector; if (modelControl.AirplaneModel.AirplaneControl.AircraftParameters.WingCenter.Y > 0) { modelControl.AirplaneModel.AirplaneControl.AircraftParameters.WingSpanFactor = (float)(0.005 * (float)numericUpDownWingSpan.Value) / modelControl.AirplaneModel.AirplaneControl.AircraftParameters.WingCenter.Y; } } }
private void vectorControlPropCenter_VectorChanged(object sender, EventArgs e) { if (modelControl != null) { modelControl.AirplaneModel.AirplaneControl.AircraftParameters.PropCenter = FlightModelWind.ToModel(vectorControlPropCenter.Vector); Program.Instance.Cursor2Position = vectorControlPropCenter.Vector; } }
public void UpdatePoints() { if (modelControl != null) { foreach (GameObject point in points) { point.Dispose(); } points.Clear(); for (int i = 0; i < ModelControl.AirplaneModel.AirplaneControl.AircraftParameters.UnscaledCollisionPoints.Count; i++) { Vector3 point = ModelControl.AirplaneModel.AirplaneControl.AircraftParameters.UnscaledCollisionPoints[i]; GameObject cursor = new GameObject(); cursor.Position = FlightModelWind.ToDirectX(point) * ModelControl.AirplaneModel.AirplaneControl.AircraftParameters.Scale; cursor.Mesh = cursorMesh; if (i == SelectedCollisionPoint) { cursor.Scale = new Vector3(0.03f, 0.03f, 0.03f); } else { cursor.Scale = new Vector3(0.015f, 0.015f, 0.015f); } points.Add(cursor); } foreach (GameObject gearPoint in gearPoints) { gearPoint.Dispose(); } gearPoints.Clear(); for (int i = 0; i < ModelControl.AirplaneModel.AirplaneControl.AircraftParameters.UnscaledGearPoints.Count; i++) { Vector3 point = ModelControl.AirplaneModel.AirplaneControl.AircraftParameters.UnscaledGearPoints[i]; GameObject cursor = new GameObject(); cursor.Position = FlightModelWind.ToDirectX(point) * ModelControl.AirplaneModel.AirplaneControl.AircraftParameters.Scale; cursor.Mesh = cursorMesh2; if (i == SelectedGearPoint) { cursor.Scale = new Vector3(0.03f, 0.03f, 0.03f); } else { cursor.Scale = new Vector3(0.015f, 0.015f, 0.015f); } gearPoints.Add(cursor); } foreach (GameObject floatPoint in floatPoints) { floatPoint.Dispose(); } floatPoints.Clear(); for (int i = 0; i < ModelControl.AirplaneModel.AirplaneControl.AircraftParameters.UnscaledFloatPoints.Count; i++) { Vector3 point = ModelControl.AirplaneModel.AirplaneControl.AircraftParameters.UnscaledFloatPoints[i]; GameObject cursor = new GameObject(); cursor.Position = FlightModelWind.ToDirectX(point) * ModelControl.AirplaneModel.AirplaneControl.AircraftParameters.Scale; cursor.Mesh = cursorMesh3; if (i == SelectedFloatPoint) { cursor.Scale = new Vector3(0.03f, 0.03f, 0.03f); } else { cursor.Scale = new Vector3(0.015f, 0.015f, 0.015f); } floatPoints.Add(cursor); } } }