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); } } } }
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; } }
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(); } } }