コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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;
                }
            }
        }
コード例 #3
0
 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();
         }
     }
 }
コード例 #4
0
 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();
     }
 }
コード例 #5
0
ファイル: Player.cs プロジェクト: sionhannuna/rcdeskpilot
        /// <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;
        }
コード例 #6
0
 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;
         }
     }
 }
コード例 #7
0
 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;
     }
 }
コード例 #8
0
        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);
                }
            }
        }