public void UpdateWheelShape(VehicleChassis chassis, VehicleWheel wheel) { if (Bumpiness > 0) { if (wheel.Index == _nextWheel && chassis.Speed > 5 && _lastBump + 0.3f < GameEngine.TotalSeconds && !wheel.InAir) { chassis.Actor.AddForceAtLocalPosition(new Vector3(0, Bumpiness * 65, 0), wheel.Shape.LocalPosition, ForceMode.Impulse, true); _lastBump = GameEngine.TotalSeconds; _nextWheel = GameEngine.Random.Next(0, chassis.Wheels.Count - 1); } } if (SmokeParticles != null) { wheel.SmokeEmitter.ParticleSystem = SmokeParticles; wheel.SmokeEmitter.Enabled = chassis.Speed > 5; } else { wheel.SmokeEmitter.ParticleSystem = _defaultTyreSmokeSystem; } if (SkidMaterial != null) { chassis.Vehicle.SkidMarkBuffer.SetTexture(SkidMaterial.Texture); } else { chassis.Vehicle.SkidMarkBuffer.Enabled = false; } }
public void Update() { VehicleChassis chassis = Vehicle.Chassis; if (PlayerVehicleController.Brake != 0) { chassis.Brake(PlayerVehicleController.Brake); } else { chassis.Accelerate(PlayerVehicleController.Acceleration); } chassis.Steer(-PlayerVehicleController.Turn); if (PlayerVehicleController.Handbrake) { chassis.PullHandbrake(); } else { chassis.ReleaseHandbrake(); } if (GameEngine.Input.WasPressed(Keys.R) || GameEngine.Input.WasPressed(Buttons.B)) { if (_recoverPositions.Count > 0) { Vehicle.Recover(_recoverPositions[_recoverPositions.Count - 1]); _recoverPositions.RemoveAt(_recoverPositions.Count - 1); } else { Vehicle.Chassis.Reset(); } } if (GameEngine.Input.WasPressed(Keys.Back) || GameEngine.Input.WasPressed(Buttons.Back)) { Vehicle.Repair(); } _audioListener.BeginUpdate(); _audioListener.Position = Vehicle.Chassis.Actor.GlobalPosition; _audioListener.Orientation = Vehicle.Chassis.Actor.GlobalOrientation; _audioListener.Velocity = Vector3.Zero; _audioListener.CommitChanges(); if (GameEngine.TotalSeconds > _lastRecoverTime + 5) { _recoverPositions.Add(Vehicle.Chassis.Actor.GlobalPose); if (_recoverPositions.Count > 10) { _recoverPositions.RemoveAt(0); } _lastRecoverTime = GameEngine.TotalSeconds; } }
public void Update() { if (Engine.Input.IsKeyDown(Keys.PageDown)) { _chaseCameraPositionMultiplier += Engine.ElapsedSeconds; } else if (Engine.Input.IsKeyDown(Keys.PageUp)) { _chaseCameraPositionMultiplier -= Engine.ElapsedSeconds; if (_chaseCameraPositionMultiplier < 1) { _chaseCameraPositionMultiplier = 1; } } VehicleChassis chassis = _vehicle.Chassis; _camera.Position = _vehicle.GetBodyBottom(); if (!chassis.InAir) { _camera.Orientation = chassis.Actor.GlobalOrientation.Forward; if (chassis.Speed > 15) { _camera.RotateTo(chassis.Backwards ? MathHelper.Pi : 0); } if (Race.Current.RaceTime.IsStarted) { _camera.MinHeight = 0; } _camera.SetChaseDistance(DefaultChaseDistance * _chaseCameraPositionMultiplier, DefaultChaseHeight * _chaseCameraPositionMultiplier); } else { if (Race.Current.RaceTime.IsStarted) { _camera.MinHeight = 2; } _camera.SetChaseDistance(7, DefaultChaseHeight); } foreach (BaseHUDItem item in _hudItems) { item.Update(); } Engine.Camera = _camera; }
public void Update() { VehicleChassis chassis = Race.Current.PlayerVehicle.Chassis; _camera.Position = Race.Current.PlayerVehicle.GetBodyBottom(); _camera.Orientation = chassis.Actor.GlobalOrientation.Forward; if (_camera.Rotation == MathHelper.Pi * 2) { _camera.ResetRotation(); _camera.RotateTo(MathHelper.Pi * 2); } //GameEngine.Camera = _camera; }
public RevCounter(VehicleChassis vehicle) { _chassis = vehicle; x = 0.01f; y = 0.8f; if (GameVars.Emulation == EmulationMode.Demo) { PixFile pix = new PixFile("tacho.pix"); _speedoTexture = pix.PixMaps[0].Texture; } else { PixFile pix = new PixFile("hirestch.pix"); _speedoTexture = pix.PixMaps[0].Texture; } _speedoLineTexture = TextureGenerator.Generate(new Color(255, 0, 0)); }
public Vehicle(string filename, IDriver driver) { Driver = driver; Driver.Vehicle = this; Config = new VehicleFile(filename); if (driver is PlayerDriver) { if (Config.WindscreenMaterial != "none") { Config.Funks.Add(new WindscreenFunk(Config.WindscreenMaterial, this)); } } _model = new VehicleModel(Config, false); Audio = new VehicleAudio(this); Chassis = new VehicleChassis(this); CActor actor2 = _model.GetActor(Path.GetFileNameWithoutExtension(_model.ModelName)); if (actor2 != null) { _deformableModel = (CDeformableModel)actor2.Model; _deformableModel._actor = Chassis.Actor; _deformableModel._carFile = Config; } _crushSection = Config.CrushSections[1]; CMaterial crashMat = ResourceCache.GetMaterial(Config.CrashMaterialFiles[0]); _vehicleBitsEmitter = new ParticleEmitter(new VehicleBitsParticleSystem(crashMat), 3, Vector3.Zero); _vehicleBitsEmitter.DumpsPerSecond = 0.7f; DamageSmokeEmitter = new ParticleEmitter(new DamageSmokeParticleSystem(Color.Gray), 5, Vector3.Zero); DamageSmokeEmitter.Enabled = false; _flames = new PixmapBillboard(new Vector2(0.7f, 0.25f), "flames.pix"); SkidMarkBuffer = new SkidMarkBuffer(this, 150); }
public override void Update() { VehicleChassis chassis = Race.Current.PlayerVehicle.Chassis; _camera.Position = Race.Current.PlayerVehicle.GetBodyBottom(); _camera.Orientation = chassis.Actor.GlobalOrientation.Forward; if (_camera.Rotation == MathHelper.Pi * 2) { _camera.ResetRotation(); _camera.RotateTo(MathHelper.Pi * 2); } if (Engine.Input.WasPressed(Keys.Enter) || Engine.Input.WasPressed(Keys.Escape)) { Race.Current.ExitAndReturnToMenu(); } }
public virtual string GetInformation() { return(", produced by " + Manufacturer + " with " + VehicleEngine.GetInformation() + ", " + VehicleChassis.GetInformation() + ", " + VehicleTransmission.GetInformation()); }
public override int GetHashCode() { return(HashCode.Combine(VehicleEngine.GetHashCode(), VehicleChassis.GetHashCode(), VehicleTransmission.GetHashCode(), Manufacturer)); }
public static void Render(BoundingBox bb, VehicleChassis chassis) { Vector3[] points = new Vector3[4]; Matrix pose = chassis.Actor.GlobalPose; float shadowWidth = 0.0f; Vector3 pos = new Vector3(bb.Min.X - shadowWidth, 0, bb.Min.Z); points[0] = Vector3.Transform(pos, pose); pos = new Vector3(bb.Max.X + shadowWidth, 0, bb.Min.Z); points[1] = Vector3.Transform(pos, pose); pos = new Vector3(bb.Min.X - shadowWidth, 0, bb.Max.Z); points[2] = Vector3.Transform(pos, pose); pos = new Vector3(bb.Max.X + shadowWidth, 0, bb.Max.Z); points[3] = Vector3.Transform(pos, pose); StillDesign.PhysX.Scene scene = chassis.Actor.Scene; Vector3 offset = new Vector3(0, 0.1f, 0); for (int i = 0; i < 4; i++) { StillDesign.PhysX.RaycastHit hit = scene.RaycastClosestShape( new StillDesign.PhysX.Ray(points[i], Vector3.Down), StillDesign.PhysX.ShapesType.Static); points[i] = hit.WorldImpact + offset; } Color shadowColor = new Color(10, 10, 10, 100); VertexPositionColor[] verts = new VertexPositionColor[points.Length]; int i2 = 0; for (int i = points.Length - 1; i >= 0; i--) { verts[i2++] = new VertexPositionColor(points[i], shadowColor); } GraphicsDevice device = Engine.Device; CullMode oldCullMode = Engine.Device.RenderState.CullMode; Engine.Device.RenderState.CullMode = CullMode.None; GameVars.CurrentEffect.World = Matrix.Identity; GameVars.CurrentEffect.TextureEnabled = false; GameVars.CurrentEffect.VertexColorEnabled = true; VertexDeclaration oldVertDecl = device.VertexDeclaration; device.VertexDeclaration = _vertexDeclaration; Engine.Device.RenderState.AlphaTestEnable = false; GameVars.CurrentEffect.PreferPerPixelLighting = false; //GameVars.CurrentEffect.LightingEnabled = false; device.RenderState.AlphaBlendEnable = true; device.RenderState.AlphaBlendOperation = BlendFunction.Add; device.RenderState.DestinationBlend = Blend.InverseSourceAlpha; device.RenderState.SourceBlend = Blend.SourceAlpha; device.RenderState.DepthBufferWriteEnable = false; GameVars.CurrentEffect.CurrentTechnique.Passes[0].Begin(); device.DrawUserPrimitives <VertexPositionColor>(PrimitiveType.TriangleStrip, verts, 0, 2); GameVars.CurrentEffect.CurrentTechnique.Passes[0].End(); GameVars.CurrentEffect.VertexColorEnabled = false; device.RenderState.AlphaBlendEnable = false; device.RenderState.DepthBufferWriteEnable = true; device.VertexDeclaration = oldVertDecl; Engine.Device.RenderState.CullMode = oldCullMode; GameVars.CurrentEffect.PreferPerPixelLighting = true; Engine.Device.RenderState.AlphaTestEnable = true; GameVars.CurrentEffect.TextureEnabled = true; }