Exemple #1
0
 public ControlSurface(AircraftParameters.ControlSurface surfaceDefinition, IAirplaneControl airplaneControl)
 {
     this.surfaceDefinition = surfaceDefinition;
     this.airplaneControl   = airplaneControl;
     if (!string.IsNullOrEmpty(surfaceDefinition.Filename))
     {
         this.Mesh = new XMesh(surfaceDefinition.Filename, airplaneControl.AircraftParameters.FolderName);
     }
     this.Name         = surfaceDefinition.Filename;
     this.Position     = surfaceDefinition.Position;
     this.RotationAxis = surfaceDefinition.RotationAxis;
     if (surfaceDefinition.Scale != 1)
     {
         this.Scale = new Vector3(surfaceDefinition.Scale, surfaceDefinition.Scale, surfaceDefinition.Scale);
     }
     if (surfaceDefinition.Type == AircraftParameters.ControlSurfaceTypeEnum.PropHighRPM ||
         surfaceDefinition.Type == AircraftParameters.ControlSurfaceTypeEnum.RotorHighRPM ||
         surfaceDefinition.Type == AircraftParameters.ControlSurfaceTypeEnum.TailrotorHighRPM)
     {
         Program.Instance.TransparentObjectManager.Objects.Add(this);
         this.Visible = false;
     }
     if (surfaceDefinition.Type == AircraftParameters.ControlSurfaceTypeEnum.Reflective &&
         Effects.Reflection.Enabled)
     {
         InitializeReflectionShader();
         this.Shader = reflectionShader;
     }
     else
     {
         this.Shader = null;
     }
     if (surfaceDefinition.ChildControlSurfaces != null)
     {
         foreach (AircraftParameters.ControlSurface childDef in surfaceDefinition.ChildControlSurfaces)
         {
             ControlSurface childSurface = new ControlSurface(childDef, airplaneControl);
             if (childSurface != null)
             {
                 this.AddChild(childSurface);
             }
         }
     }
 }
Exemple #2
0
        public AirplaneModel(IAirplaneControl airplaneControl)
        {
            this.airplaneControl = airplaneControl;
            if (!string.IsNullOrEmpty(airplaneControl.AircraftParameters.FixedMesh))
            {
                this.Mesh = new XMesh(airplaneControl.AircraftParameters.FixedMesh, airplaneControl.AircraftParameters.FolderName);
                XMesh xMesh = (XMesh)(this.Mesh);
                xMesh.ComputeBoundingBox();
            }
            this.Scale    = new Vector3(airplaneControl.AircraftParameters.Scale, airplaneControl.AircraftParameters.Scale, airplaneControl.AircraftParameters.Scale);
            this.Position = new Vector3(0.0f, 10.0f, 0.0f);

            foreach (AircraftParameters.ControlSurface controlSurfaceDef in airplaneControl.AircraftParameters.ControlSurfaces)
            {
                ControlSurface surface = new ControlSurface(controlSurfaceDef, airplaneControl);
                AddChild(surface);
            }

            engineMinFreq = airplaneControl.AircraftParameters.EngineMinFrequency;
            engineMaxFreq = airplaneControl.AircraftParameters.EngineMaxFrequency;
            if (!string.IsNullOrEmpty(airplaneControl.AircraftParameters.EngineSound))
            {
                engineSound = new SoundControllable(airplaneControl.AircraftParameters.EngineSound, airplaneControl.AircraftParameters.FolderName);
            }
            if ((airplaneControl.AircraftParameters.FlightModelType == AircraftParameters.FlightModelTypeEnum.Helicopter) &&
                (airplaneControl.AircraftParameters.RotorSound != null))
            {
                if (!string.IsNullOrEmpty(airplaneControl.AircraftParameters.RotorSound))
                {
                    rotorSound = new SoundControllable(airplaneControl.AircraftParameters.RotorSound, airplaneControl.AircraftParameters.FolderName);
                }
            }

            crashSound = new SoundControllable("data\\crash.wav");

            if (!(airplaneControl is RecordedFlight))
            {
                Birds.ScareCrow = this;
            }
        }
Exemple #3
0
        public void OnFrameRender(Microsoft.DirectX.Direct3D.Device device, double totalTime, float elapsedTime)
        {
            currentTime = totalTime;

            if ((modelControl != null) && (modelControl.Reflection != null))
            {
                //if (screen == null)
                //    screen = device.GetRenderTarget(0);
                modelControl.Reflection.UpdateCubeMap(device, totalTime, elapsedTime, modelControl.AirplaneModel.Position);
                //device.SetRenderTarget(0, screen);
            }


            bool beginSceneCalled = false;

            // Clear the render target and the zbuffer
            device.Clear(ClearFlags.ZBuffer | ClearFlags.Target, 0x00424B79, 1.0f, 0);
            try
            {
                device.BeginScene();
                Framework.Instance.Device.RenderState.Ambient = Color.FromArgb(148, 148, 148);
                beginSceneCalled = true;
                Framework.Instance.CurrentCamera.OnFrameRender(device, totalTime, elapsedTime);
                sky.OnFrameRender(device, totalTime, elapsedTime);
                scenery.OnFrameRender(device, totalTime, elapsedTime);
                modelControl.OnFrameRender(device, totalTime, elapsedTime);
                if (CollisionPointsVisible && (!modelControl.Flying))
                {
                    collisionPoints.OnFrameRender(device, totalTime, elapsedTime);
                }
                transparentObjectManager.OnFrameRender(device, totalTime, elapsedTime);
                if ((toolbox != null) && (toolbox.CurrentObject != null) && (!modelControl.Flying))
                {
                    // Render the wireframe
                    device.RenderState.FillMode = FillMode.WireFrame;
                    toolbox.CurrentObject.OnFrameRender(device, totalTime, elapsedTime);
                    // Render the rotationaxis
                    ControlSurface surface = toolbox.CurrentObject as ControlSurface;
                    if (surface != null)
                    {
                        rotationAxisMesh.Vertex1 = surface.WorldPosition * modelControl.AirplaneModel.AirplaneControl.AircraftParameters.Scale;
                        rotationAxisMesh.Vertex2 = (surface.WorldPosition + 2 * surface.RotationAxis) * modelControl.AirplaneModel.AirplaneControl.AircraftParameters.Scale;
                        rotationAxisMesh.OnFrameRender(device, totalTime, elapsedTime);
                    }
                    device.RenderState.FillMode = FillMode.Solid;
                }

                if (CursorVisible)
                {
                    cursor3d.OnFrameRender(device, totalTime, elapsedTime);
                }

                if (Cursor2Visible)
                {
                    cursor3d2.OnFrameRender(device, totalTime, elapsedTime);
                }

                // Get the world matrix
                //Matrix worldMatrix = worldCenter * camera.WorldMatrix;

                // Show UI
                //hud.OnRender(elapsedTime);
            }
            finally
            {
                if (beginSceneCalled)
                {
                    device.EndScene();
                }
            }
        }