Пример #1
0
        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;
            }
        }
Пример #2
0
        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;
            }
        }
Пример #3
0
        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;
        }
Пример #4
0
        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;
        }
Пример #5
0
        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));
        }
Пример #6
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);
        }
Пример #7
0
        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();
            }
        }
Пример #8
0
 public virtual string GetInformation()
 {
     return(", produced by " + Manufacturer + " with " + VehicleEngine.GetInformation() + ", " + VehicleChassis.GetInformation() + ", " + VehicleTransmission.GetInformation());
 }
Пример #9
0
 public override int GetHashCode()
 {
     return(HashCode.Combine(VehicleEngine.GetHashCode(), VehicleChassis.GetHashCode(), VehicleTransmission.GetHashCode(), Manufacturer));
 }
Пример #10
0
        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;
        }