Beispiel #1
0
        public Car(int trackPos, float offset, Track track, Color tint)
        {
            Tint = tint;

            ConcentrationLevel = 50 + randomNumber.Next(1900);
            CorrectionTime = 500 + (randomNumber.NextDouble() * 4500);
            SpeedWhenTurning = 0.045f + ((float)randomNumber.NextDouble() * 0.01f);
            ReactionTime = 100 + (randomNumber.NextDouble() * 1900);

            Reset(trackPos, offset, track);
        }
        /// <summary>
        /// Loads graphics content for this screen. The background texture is quite
        /// big, so we use our own local ContentManager to load it. This allows us
        /// to unload before going from the menus into the game itself, wheras if we
        /// used the shared ContentManager provided by the Game class, the content
        /// would remain loaded forever.
        /// </summary>
        public override void LoadContent()
        {
            if (content == null)
                content = new ContentManager(ScreenManager.Game.Services, "Psuedo3DRacer.Content");

            LoadTex("arrow");
            LoadTex("blank");
            LoadTex("blank-track");
            LoadTex("banner-bottom");
            LoadTex("banner-top");
            LoadTex("car-spot");
            LoadTex("colors");
            LoadTex("paintcar");
            LoadTex("selectcup");
            LoadTex("triangles");
            LoadTex("cup-holder");
            LoadTex("cuparrow");
            LoadTex("cup");

            for (int i = 1; i <= 3; i++)
            {
                LoadTex("cuptitle" + i.ToString());
            }

            texCarDirections = new Texture2D[8];
            for (int dir = 0; dir < 8; dir++)
            {
                texCarDirections[dir] = content.Load<Texture2D>("cars/0-" + dir + "-0");
            }

            Parallax = new ParallaxManager(ScreenManager.Viewport);
            Camera = new Camera(ScreenManager.GraphicsDevice, ScreenManager.Viewport);
            Track = Track.Load("track000", content, Parallax, false);

            drawEffect = new BasicEffect(ScreenManager.GraphicsDevice)
            {
                World = Camera.worldMatrix,
                View = Camera.viewMatrix,
                Projection = Camera.projectionMatrix,
                TextureEnabled = true
            };

            drawAlphaEffect = new AlphaTestEffect(ScreenManager.GraphicsDevice)
            {
                World = Camera.worldMatrix,
                View = Camera.viewMatrix,
                Projection = Camera.projectionMatrix,
                ReferenceAlpha = 254,
                AlphaFunction = CompareFunction.Greater
            };

            // Initial positions
            bannerTop1Pos = new Vector2(150, -230);
            bannerTop2Pos = new Vector2(400, -230);

            CarPos = new Vector2(ScreenManager.Viewport.Width / 2, -250f);
            SpotPos = new Vector2(ScreenManager.Viewport.Width / 2, ScreenManager.Viewport.Height + 500f);
            PaintPos = new Vector2(ScreenManager.Viewport.Width / 2, ScreenManager.Viewport.Height + 500f);

            Cups.Add(new Cup());
            Cups.Add(new Cup());
            Cups.Add(new Cup());
            //Cups.Add(new Cup());
            //Cups.Add(new Cup());

            cupPosition = new Vector2(ScreenManager.Viewport.Width + 500, ScreenManager.Viewport.Height / 2);
            for (int i = selectedCup - 2; i <= selectedCup + 2; i++)
            {
                if (i >= 0 && i < Cups.Count)
                {
                    Cups[i].Position = cupPosition + new Vector2(i * 150, 0);
                    Cups[i].Scale = 1f - (Math.Abs(i) * 0.25f);
                }
            }

            cupTrackRT[0] = new RenderTarget2D(ScreenManager.GraphicsDevice, 193, 108, false, SurfaceFormat.Color, DepthFormat.Depth24Stencil8);
            cupTrackRT[1] = new RenderTarget2D(ScreenManager.GraphicsDevice, 193, 108, false, SurfaceFormat.Color, DepthFormat.Depth24Stencil8);
            cupTrackRT[2] = new RenderTarget2D(ScreenManager.GraphicsDevice, 193, 108, false, SurfaceFormat.Color, DepthFormat.Depth24Stencil8);

            trophyPos = new Vector2(- 400, (ScreenManager.Viewport.Height / 2) + 50);

            leftRect = new Rectangle(0, ScreenManager.Viewport.Height - 75, 150, 50);
            rightRect = new Rectangle(ScreenManager.Viewport.Width-150, ScreenManager.Viewport.Height - 75, 150, 50);

            leftCupRect = new Rectangle((int)cupPosition.X - 300, (int)cupPosition.Y - 100, 50, 200);
            rightCupRect = new Rectangle((int)cupPosition.X + 250, (int)cupPosition.Y - 100, 50, 200);

            LoadTracks(selectedCup);
            AudioController.PlayMusic("title");
            ScreenManager.Game.ResetElapsedTime();
        }
Beispiel #3
0
        public static Track BuildFromControlPoints(List<Vector3> controlPoints)
        {
            Track t = new Track();

            t.Rebuild(controlPoints);

            return t;
        }
        /// <summary>
        /// Load graphics content for the game.
        /// </summary>
        public override void LoadContent()
        {
            //if (content == null)
            //    content = new ContentManager(ScreenManager.Game.Services, "Psuedo3DRacer.Content");

            //AudioController.LoadContent(content);

            parallaxManager = new ParallaxManager(ScreenManager.Viewport);

            gameHud = new HUD(ScreenManager.Viewport);
            gameHud.LoadContent(ScreenManager.Game.Content);

            gameCamera = new Camera(ScreenManager.GraphicsDevice, ScreenManager.Viewport);
            gameCamera.AttachedToCar = true;

            gameTrack = Track.Load("track" + ((Cup * 3) + currentTrack).ToString("000"), ScreenManager.Game.Content, parallaxManager, false);

            gameFont = ScreenManager.Game.Content.Load<SpriteFont>("font");
            texBlank = ScreenManager.Game.Content.Load<Texture2D>("blank");

            if (gameCars.Count == 0)
            {
                gameCars.Add(new Car(gameTrack.Length - 10, -0.2f, gameTrack, Color.Red));
                gameCars.Add(new Car(gameTrack.Length - 20, 0.2f, gameTrack, Color.Blue));
                gameCars.Add(new Car(gameTrack.Length - 30, -0.2f, gameTrack, Color.Green));
                gameCars.Add(new Car(gameTrack.Length - 40, 0.2f, gameTrack, Color.Gold));
                gameCars.Add(new Car(gameTrack.Length - 50, -0.2f, gameTrack, Color.Pink));
                gameCars.Add(new Car(gameTrack.Length - 60, 0.2f, gameTrack, Color.Purple));
                gameCars.Add(new Car(gameTrack.Length - 70, -0.2f, gameTrack, Color.Orange));
                gameCars.Add(new Car(gameTrack.Length - 80, 0.2f, gameTrack, playerColor));

                // Select "awesome" driver
                int sel = Psuedo3DRacer.rand.Next(7);
                gameCars[sel].SpeedWhenTurning = 0.051f + (0.002f * Cup);
                gameCars[sel].ConcentrationLevel = 1500 + (200 * Cup);
                gameCars[sel].CorrectionTime = 900 - (200 * Cup);
                gameCars[sel].ReactionTime = 100;

                // and "bad" driver
                int sel2 = sel;
                while (sel2 == sel)
                {
                    sel2 = Psuedo3DRacer.rand.Next(7);
                }
                gameCars[sel2].SpeedWhenTurning = 0.04f + (0.001f * Cup);
                gameCars[sel2].ConcentrationLevel = 50 + (200 * Cup);
                gameCars[sel2].CorrectionTime = 5000 - (200 * Cup);
                gameCars[sel2].ReactionTime = 2000 - (100 * Cup);
            }
            else
            {
                gameCars[0].Reset(gameTrack.Length - 10, -0.2f, gameTrack);
                gameCars[1].Reset(gameTrack.Length - 20, 0.2f, gameTrack);
                gameCars[2].Reset(gameTrack.Length - 30, -0.2f, gameTrack);
                gameCars[3].Reset(gameTrack.Length - 40, 0.2f, gameTrack);
                gameCars[4].Reset(gameTrack.Length - 50, -0.2f, gameTrack);
                gameCars[5].Reset(gameTrack.Length - 60, 0.2f, gameTrack);
                gameCars[6].Reset(gameTrack.Length - 70, -0.2f, gameTrack);
                gameCars[7].Reset(gameTrack.Length - 80, 0.2f, gameTrack);
            }

            gameCars[7].IsPlayerControlled = true;
            gameCars[7].camAttached = true;

            foreach (Car c in gameCars)
            {
                c.LoadContent(ScreenManager.Game.Content, 0);
                c.engineSound.Volume = 0.75f * AudioController.sfxvolume;
                c.Update(new GameTime(), gameTrack, gameCars);
            }
            foreach (Car c in gameCars) c.Update(new GameTime(), gameTrack, gameCars);

            drawEffect = new BasicEffect(ScreenManager.GraphicsDevice)
            {
                World = gameCamera.worldMatrix,
                View = gameCamera.viewMatrix,
                Projection = gameCamera.projectionMatrix,
                TextureEnabled = true
            };

            drawAlphaEffect = new AlphaTestEffect(ScreenManager.GraphicsDevice)
            {
                World = gameCamera.worldMatrix,
                View = gameCamera.viewMatrix,
                Projection = gameCamera.projectionMatrix,
                ReferenceAlpha = 254,
                AlphaFunction = CompareFunction.Greater

            };

            ScreenManager.Game.ResetElapsedTime();
            trackFade = 0f;
            fadeTime = 0;
            startDelay = 6000;
            finishDelay = 3000;

            for (int i = 0; i < 8; i++) finishingPositions[i] = -1;

            mapRenderTarget = new RenderTarget2D(ScreenManager.GraphicsDevice, 300, 300, false, SurfaceFormat.Color, DepthFormat.Depth24Stencil8);
            RenderMap();

            steeringAmount = 0f;

            standingsShown = false;
        }
Beispiel #5
0
        void PlotCourse(Track track)
        {
            target = track.TrackSegments[Helper.WrapInt(courseTrackPos, track.TrackSegments.Count - 1)].Position;

            Vector3 drivingLineTarget = track.TrackSegments[Helper.WrapInt(courseTrackPos + 50, track.TrackSegments.Count - 1)].Normal;
            float targetAngle = Helper.WrapAngle((float)Math.Atan2(drivingLineTarget.X, drivingLineTarget.Z) - Yaw);
            //debug = targetAngle + " | " + targetPositionOnTrack.ToString();

            if (correctionCountdown <= 0)
            {
                if (!overtaking)
                {
                    targetPositionOnTrack = -MathHelper.Clamp((0.35f / 0.5f) * targetAngle, -0.35f, 0.35f);

                    if (randomNumber.Next(ConcentrationLevel) == 1)
                    {
                        if (targetPositionOnTrack > -0.25f && targetPositionOnTrack < 0.25f)
                        {
                            if (randomNumber.Next(2) == 1)
                            {
                                targetPositionOnTrack = ((float)randomNumber.NextDouble() * -0.2f) - 0.25f;
                            }
                            else
                            {
                                targetPositionOnTrack = ((float)randomNumber.NextDouble() * 0.2f) + 0.25f;
                            }
                        }
                        else if (targetPositionOnTrack <= -0.25f)
                        {
                            targetPositionOnTrack = ((float)randomNumber.NextDouble() * 0.45f);
                        }
                        else if (targetPositionOnTrack >= 0.25f)
                        {
                            targetPositionOnTrack = ((float)randomNumber.NextDouble() * -0.45f);
                        }
                    }
                }
            }

            //debug = correctionCountdown + " | " + CorrectionTime + " | " + ConcentrationLevel;

            Vector3 leftV = -Vector3.Cross(track.TrackSegments[Helper.WrapInt(courseTrackPos, track.TrackSegments.Count - 1)].Normal, Vector3.Up);
            target += leftV * currentPositionOnTrack;

            target += trackOffset;
        }
Beispiel #6
0
        public void Update(GameTime gameTime, Track track, List<Car> gameCars)
        {
            debug = "";

            float dist = 99999f;
            for (int i = 0; i < track.TrackSegments.Count; i++)
                if ((Position - track.TrackSegments[i].Position).Length() < dist)
                {
                    dist = (Position - track.TrackSegments[i].Position).Length();
                    currentTrackPos = i;
                }

            if (immuneTime > 0) immuneTime -= gameTime.ElapsedGameTime.TotalMilliseconds;

            if (!IsPlayerControlled)
            {
                if (!hasStarted)
                {
                    correctionCountdown -= gameTime.ElapsedGameTime.TotalMilliseconds;
                    if (correctionCountdown <= 0)
                    {
                        hasStarted = true;
                        applyingThrottle = 1f;

                        correctionCountdown = ReactionTime;
                    }

                }

                if ((Position - target).Length() < 0.5f)
                {
                    courseTrackPos += 1;
                    if (courseTrackPos > track.TrackSegments.Count - 1) courseTrackPos -= (track.TrackSegments.Count - 1);
                    PlotCourse(track);
                }

                if(!overtaking) currentPositionOnTrack = MathHelper.Lerp(currentPositionOnTrack, targetPositionOnTrack, 0.01f);

                if (hasStarted)
                {
                    if (Math.Abs(currentPositionOnTrack - targetPositionOnTrack) > 0.02f)
                    {
                        //if(currentPositionOnTrack-targetPositionOnTrack<0f) steeringAmount +=0.001f;
                        //if(currentPositionOnTrack-targetPositionOnTrack>0f) steeringAmount -=0.001f;
                        if (Speed > SpeedWhenTurning) applyingThrottle = 0f;
                        else
                            applyingThrottle = 1f;
                    }
                    else applyingThrottle = 1f;
                }

                if (correctionCountdown > 0) correctionCountdown -= gameTime.ElapsedGameTime.TotalMilliseconds;

                lastYaw = Yaw;

                Vector3 targetnorm = Position - target;
                Normal = targetnorm;
                Normal.Normalize();
                float targetDist = targetnorm.Length();
                Yaw = (float)Math.Atan2(targetnorm.X, targetnorm.Z);
                Pitch = (float)Math.Atan2(-targetnorm.Y, targetDist);

                //if (lastYaw > Yaw) steeringAmount += 0.01f;
                //if (lastYaw == Yaw)
                //{
                //    steeringAmount = MathHelper.Lerp(steeringAmount, 0f, 0.01f);
                //}
                //if (lastYaw < Yaw) steeringAmount -= 0.01f;

                //if (camAttached)
                //{
                    steeringAmount = MathHelper.Lerp(steeringAmount, 0f, 0.1f);
                    steeringAmount = MathHelper.Lerp(steeringAmount, steeringAmount + ((Yaw - lastYaw) * 2f), 0.5f);
                //}

                steeringAmount = MathHelper.Clamp(steeringAmount, -0.5f, 0.5f);
            }
            else
            {
                if (Speed > 0)
                {
                    //if (Math.Abs(applyingSteering) > 0.15f)
                    //{
                    //    steeringAmount = (-applyingSteering * 0.03f);
                    //}
                    //else
                    //{
                    //    steeringAmount = MathHelper.Lerp(steeringAmount, 0f, 0.2f);
                    //}

                    steeringAmount = (-applyingSteering);

                    steeringAmount = MathHelper.Clamp(steeringAmount, -0.5f, 0.5f);
                    Yaw += steeringAmount * 0.05f;// *Speed;

                }
                else steeringAmount = MathHelper.Lerp(steeringAmount, 0f, 0.1f);

                //Vector3 trackNormal = track.TrackSegments[currentTrackPos].Normal;
                //float trackYaw = MathHelper.WrapAngle((float)Math.Atan2(trackNormal.X, trackNormal.Z));
                //Yaw = MathHelper.Clamp(Yaw, trackYaw - (MathHelper.PiOver4/2), trackYaw + (MathHelper.PiOver4/2));

                target = track.TrackSegments[Helper.WrapInt(currentTrackPos + 5, track.TrackSegments.Count - 1)].Position + trackOffset;
                Vector3 targetnorm = Position - target;
                Pitch = (float)Math.Atan2(-targetnorm.Y, targetnorm.Length());

                Matrix normRot = Matrix.CreateRotationX(Pitch) * Matrix.CreateRotationY(Yaw);
                Normal = Position - Vector3.Transform(Vector3.Forward * 100f, normRot);
                Normal.Normalize();
            }

            animTime += (gameTime.ElapsedGameTime.TotalMilliseconds * (Speed * 10));
            if (animTime >= 30)
            {
                animFrame++;
                if (animFrame == 2) animFrame = 0;
                animTime = 0;
            }

            if (spinTime <= 0)
            {
                if (applyingThrottle > 0f)
                {
                    if(Speed< 0.06f * applyingThrottle)
                        Speed += 0.0004f;
                    else
                        Speed -= 0.0004f;
                }
                else
                {
                    Speed -= 0.0004f;
                }
                if (applyingBrake)
                {
                    Speed -= 0.001f;

                }
                Speed = MathHelper.Clamp(Speed, 0f, (0.06f));
            }

            if (spinTime > 0)
            {
                spinAnimTime += gameTime.ElapsedGameTime.TotalMilliseconds;
                if (spinAnimTime > 200)
                {
                    spinAnimFrame++;
                    if (spinAnimFrame == 8) spinAnimFrame = 0;
                    spinAnimTime = 0;
                }
            }

            if (spinTime > 0)
            {
                spinTime -= gameTime.ElapsedGameTime.TotalMilliseconds;
                target = track.TrackSegments[Helper.WrapInt(currentTrackPos + 10, track.Length - 1)].Position + trackOffset;
                Vector3 targetnorm = Position - target;
                Normal = targetnorm;
                Normal.Normalize();
                float targetDist = targetnorm.Length();
                Yaw = (float)Math.Atan2(targetnorm.X, targetnorm.Z);
                if (!IsPlayerControlled) PlotCourse(track);
            }

            if (offRoad || spinTime>0)
            {
                if (Speed > 0.02f) Speed = MathHelper.Lerp(Speed, 0.02f, 0.1f);
            }

            //Vector3 cornerAngle = track.TrackSegments[Helper.WrapInt(courseTrackPos, track.TrackSegments.Count - 1)].Normal;
            //float targetAngle = Helper.WrapAngle((float)Math.Atan2(cornerAngle.X, cornerAngle.Z));
            //targetPositionOnTrack = -MathHelper.Clamp((0.35f / 0.5f) * targetAngle, -0.35f, 0.35f);

            Matrix rot = Matrix.CreateRotationX(Pitch) * Matrix.CreateRotationY(Yaw);
            Vector3 rotatedVector = Vector3.Transform(Vector3.Forward, rot);

            //travellingDirection = Vector3.Lerp(travellingDirection, rotatedVector, 0.12f - (Speed));
               // travellingDirection.Y = rotatedVector.Y;

            Position += Speed * rotatedVector;//travellingDirection;

            Yaw = MathHelper.WrapAngle(Yaw);

            rotatedVector = Vector3.Transform(new Vector3(0, 0.2f, 0.75f), rot);
            CameraPosition = Vector3.Lerp(CameraPosition, Position + rotatedVector, 0.2f);
            rotatedVector = Vector3.Transform(new Vector3(0, 0.25f, -1f), rot);
            //rotatedVector = Vector3.Transform(rotatedVector, Matrix.CreateRotationZ(0.4f));
            CameraLookat = Vector3.Lerp(CameraLookat, Position + rotatedVector, 0.1f);
            //CameraLookat = Vector3.Transform(CameraLookat, Matrix.CreateRotationZ(0.4f));

            CheckCollisions(gameCars, track);

            // Calcuate position
            if (!gameCars[7].Finished)
            {
                RacePosition = 1;
                foreach (Car c in gameCars)
                {
                    if (c.RaceDistanceToGo < RaceDistanceToGo) RacePosition++;
                }
            }
            else
            {
                if (!Finished)
                {
                    Finished = true;

                    CupPoints += (9 - RacePosition);
                }
            }

            if (currentTrackPos == 0 && !countedLap)
            {
                countedLap = true;

                if (!StartedFirstLap) StartedFirstLap = true;
                else LapsToGo--;

                if (LapsToGo == 0)
                {
                    if (!Finished)
                    {
                        Finished = true;

                        CupPoints += (9 - RacePosition);
                    }

                    if (IsPlayerControlled)
                    {
                        IsPlayerControlled = false;
                        courseTrackPos = 20;
                        PlotCourse(track);
                    }
                }
            }

            if (currentTrackPos == track.Length / 2) countedLap = false;

            RaceDistanceToGo = ((LapsToGo + (StartedFirstLap?0:1)) * track.Length) - (currentTrackPos);

            //debug = "Lap: " + (4 - LapsToGo) + " | Pos: " + RacePosition;
        }
Beispiel #7
0
        void CheckCollisions(List<Car> gameCars, Track track)
        {
            SceneryType collScenery = SceneryType.Offroad;
            offRoad = false;

            if (IsPlayerControlled)
            {

                Vector3 leftV = Vector3.Cross(track.TrackSegments[currentTrackPos].Normal, Vector3.Up) * 0.5f;
                Vector3 rightV = -(Vector3.Cross(track.TrackSegments[currentTrackPos].Normal, Vector3.Up) * 0.5f);

                if (((Position - trackOffset) - (track.TrackSegments[currentTrackPos].Position + leftV)).Length() < ((Position + trackOffset) - (track.TrackSegments[currentTrackPos].Position + rightV)).Length())
                {
                    currentPositionOnTrack = -((Position - trackOffset) - track.TrackSegments[currentTrackPos].Position).Length();
                    collScenery = track.TrackSegments[currentTrackPos].LeftScenery;
                }
                else
                {
                    currentPositionOnTrack = ((Position - trackOffset) - track.TrackSegments[currentTrackPos].Position).Length();
                    collScenery = track.TrackSegments[currentTrackPos].RightScenery;
                }

                if (currentPositionOnTrack > 1f || currentPositionOnTrack < -1f) collScenery = SceneryType.Wall;
                if (track.TrackSegments[currentTrackPos].Position.Y > 0.05f || track.TrackSegments[currentTrackPos].Position.Y < -0.1f) collScenery = SceneryType.Wall;

                if (currentPositionOnTrack > 0.5f || currentPositionOnTrack < -0.5f) offRoad = true;

            }
            else
            {
                overtaking = false;
                int foundCarDistance = 99999;

                foreach (Car c in gameCars)
                {
                    if (c == this) continue;

                    int trackDist = Helper.WrapInt(c.currentTrackPos - currentTrackPos, track.Length - 1);
                    if (trackDist > 0 && trackDist<10  + (30-(c.Speed * 500)) && ((Speed>=c.Speed && trackDist<foundCarDistance) || c.IsPlayerControlled))
                    {
                    //if ((c.Position - Position).Length() < 10f && ((c.Position - Position).Length()<foundCarDistance || c.IsPlayerControlled))
                    //{
                        if (c.IsPlayerControlled) foundCarDistance = 0;
                        else foundCarDistance = trackDist;// (c.Position - Position).Length();

                        if (currentPositionOnTrack < c.currentPositionOnTrack)
                        {
                            targetPositionOnTrack = c.currentPositionOnTrack - (0.4f);
                            if (targetPositionOnTrack < -0.45f) targetPositionOnTrack = c.currentPositionOnTrack + (0.35f);
                        }
                        else
                        {
                            targetPositionOnTrack = c.currentPositionOnTrack + (0.4f);
                            if (targetPositionOnTrack > 0.45f) targetPositionOnTrack = c.currentPositionOnTrack - (0.35f);
                        }
                        //if (c.currentPositionOnTrack <= 0f) targetPositionOnTrack = c.currentPositionOnTrack + (0.4f);// * (3f - (c.Position - Position).Length()));
                        //else targetPositionOnTrack = c.currentPositionOnTrack - (0.4f);// * (3f - (c.Position - Position).Length()));
                        currentPositionOnTrack = MathHelper.Lerp(currentPositionOnTrack, targetPositionOnTrack, 0.02f);
                        overtaking = true;
                        PlotCourse(track);
                        //}
                    }
                }

                //debug += foundCarDistance;
            }

            foreach (Car c in gameCars)
            {
                if (c == this) continue;

                if ((c.Position - Position).Length() < 0.15f && c.Speed <= Speed && c.spinTime<=0 && spinTime<=0 && c.immuneTime<=0 && immuneTime<=0)
                {
                    int trackDist = Helper.WrapInt(c.currentTrackPos - currentTrackPos, track.Length - 1);
                    if (trackDist > 0)
                    {
                        crashSound.Play();
                        spinTime = 1600;
                        spinSpeed = 0.03f;
                        immuneTime = 3000;
                        c.spinTime = 800;
                        c.spinSpeed = 1f;
                        c.immuneTime = 3000;
                    }
                }

            }

            if (offRoad && collScenery == SceneryType.Wall)
            {
                crashSound.Play();
                spinTime = 1600;
                spinSpeed = Speed;
            }
        }
Beispiel #8
0
        public void SetPosition(int trackPos, Track track, float offset)
        {
            courseTrackPos = trackPos + 20 + randomNumber.Next(30);
            currentTrackPos = trackPos;

            Vector3 leftV = -Vector3.Cross(track.TrackSegments[Helper.WrapInt(trackPos, track.TrackSegments.Count - 1)].Normal, Vector3.Up);
            Vector3 offsetVect = leftV * offset;

            PlotCourse(track);
            Position = track.TrackSegments[Helper.WrapInt(currentTrackPos - 10, track.TrackSegments.Count - 1)].Position + trackOffset + offsetVect;

            target += offsetVect;

            currentPositionOnTrack = offset;
            targetPositionOnTrack = offset;

            Vector3 targetnorm = track.TrackSegments[Helper.WrapInt(trackPos, track.TrackSegments.Count - 1)].Normal;
            Normal = targetnorm;
            Normal.Normalize();
            float targetDist = targetnorm.Length();
            Yaw = (float)Math.Atan2(targetnorm.X, targetnorm.Z);
            Pitch = (float)Math.Atan2(-targetnorm.Y, targetDist);
            Matrix rot = Matrix.CreateRotationX(Pitch) * Matrix.CreateRotationY(Yaw);
            CameraPosition = Position + Vector3.Transform(new Vector3(0, 0.3f, 1f), rot);
            CameraLookat = Position + Vector3.Transform(new Vector3(0, 0.25f, -1f), rot);
        }
Beispiel #9
0
        public void Reset(int trackPos, float offset, Track track)
        {
            StartedFirstLap = false;
            RaceDistanceToGo = 3 * track.Length;
            LapsToGo = 3;
            Finished = false;

            Yaw = 0f;
            Pitch = 0f;

            SetPosition(trackPos, track, offset);

            correctionCountdown = ReactionTime;

            Speed = 0f;
            hasStarted = false;

            countedLap = false;
            applyingBrake = false;
            applyingThrottle = 0f;
            applyingSteering = 0f;
            steeringAmount = 0f;

            currentTrackPos = 0;
            prevTrackPos = 0;

            offRoad = false;

            overtaking = false;

            spinTime = 0;
            spinSpeed = 0f;
            spinAnimFrame = 0;
            spinAnimTime = 0;
        }
        public override void LoadContent()
        {
            if (content == null)
                content = new ContentManager(ScreenManager.Game.Services, "Psuedo3DRacer.Content");

            texLogo = content.Load<Texture2D>("title");
            texBlank = content.Load<Texture2D>("blank");
            gameFont = content.Load<SpriteFont>("font");

            parallaxManager = new ParallaxManager(ScreenManager.Viewport);

            gameCamera = new Camera(ScreenManager.GraphicsDevice, ScreenManager.Viewport);
            gameCamera.AttachedToCar = true;

            // + ((Cup * 3) + currentTrack).ToString("000")
            gameTrack = Track.Load("track" + (rand.Next(9)).ToString("000"), content, parallaxManager, false);

            gameCars.Add(new Car(gameTrack.Length - 10, -0.2f, gameTrack, Color.Red));
            gameCars.Add(new Car(gameTrack.Length - 20, 0.2f, gameTrack, Color.Blue));
            gameCars.Add(new Car(gameTrack.Length - 30, -0.2f, gameTrack, Color.Green));
            gameCars.Add(new Car(gameTrack.Length - 40, 0.2f, gameTrack, Color.Gold));
            gameCars.Add(new Car(gameTrack.Length - 50, -0.2f, gameTrack, Color.Pink));
            gameCars.Add(new Car(gameTrack.Length - 60, 0.2f, gameTrack, Color.Purple));
            gameCars.Add(new Car(gameTrack.Length - 70, -0.2f, gameTrack, Color.Orange));
            gameCars.Add(new Car(gameTrack.Length - 80, 0.2f, gameTrack, Color.White));

            gameCamera.AttachedToCar = true;

            foreach (Car c in gameCars)
            {
                c.LoadContent(content, 0);
                c.Update(new GameTime(), gameTrack, gameCars);
            }
            foreach (Car c in gameCars) c.Update(new GameTime(), gameTrack, gameCars);

            drawEffect = new BasicEffect(ScreenManager.GraphicsDevice)
            {
                World = gameCamera.worldMatrix,
                View = gameCamera.viewMatrix,
                Projection = gameCamera.projectionMatrix,
                TextureEnabled = true
            };

            drawAlphaEffect = new AlphaTestEffect(ScreenManager.GraphicsDevice)
            {
                World = gameCamera.worldMatrix,
                View = gameCamera.viewMatrix,
                Projection = gameCamera.projectionMatrix,
                ReferenceAlpha = 254,
                AlphaFunction = CompareFunction.Greater

            };

            AudioController.RestartMusic("title");

            base.LoadContent();
        }
Beispiel #11
0
        public void Load()
        {
            string path = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
            path = Path.Combine(path, "Psuedo3DRacer/Tracks/");

                int num = currentTrackLoaded;
                if (File.Exists(Path.Combine(path, "Track" + num.ToString("000") + ".trk")))
                {
                    Track.FileName = "Track" + num.ToString("000") + ".trk";

                    XmlSerializer xmls = new XmlSerializer(typeof(Track));

                    using (FileStream stream = new FileStream(Path.Combine(path, Track.FileName), FileMode.Open))
                    {
                        Track = (Track)xmls.Deserialize(stream);
                    }

                    foreach (string s in Track.PackedSegments)
                    {
                        Segment seg = Segment.FromString(s);
                        Track.TrackSegments.Add(seg);
                    }
                    ControlPoints = Track.ControlPoints;
                    Track.LoadContent(Content);
                    Track.LoadHorizon(Content, parallaxManager);
                    ResetCars();
                    selectedPoint = 0;

                    currentTrackLoaded++;

                    if (!File.Exists(Path.Combine(path, "Track" + currentTrackLoaded.ToString("000") + ".trk"))) currentTrackLoaded = 0;
                }
        }
Beispiel #12
0
        /// <summary>
        /// LoadContent will be called once per game and is the place to load
        /// all of your content.
        /// </summary>
        protected override void LoadContent()
        {
            Camera = new Camera(GraphicsDevice, GraphicsDevice.Viewport);

            spriteBatch = new SpriteBatch(GraphicsDevice);

            texGrid = Content.Load<Texture2D>("grid");
            texBlank = Content.Load<Texture2D>("blank");
            handleSphere = Content.Load<Model>("spherelowpoly");
            spriteFont = Content.Load<SpriteFont>("font");

            sphereTransforms = new Matrix[handleSphere.Bones.Count];
            handleSphere.CopyAbsoluteBoneTransformsTo(sphereTransforms);

            drawEffect = new BasicEffect(GraphicsDevice)
            {
                World = Camera.worldMatrix,
                View = Camera.viewMatrix,
                Projection = Camera.projectionMatrix,
                TextureEnabled = true
            };

            drawAlphaEffect = new AlphaTestEffect(GraphicsDevice)
            {
                World = Camera.worldMatrix,
                View = Camera.viewMatrix,
                Projection = Camera.projectionMatrix,
                 ReferenceAlpha = 254,
                   AlphaFunction = CompareFunction.Greater

            };

            Track = Track.BuildFromControlPoints(ControlPoints);
            Track.LoadContent(Content);

            parallaxManager = new ParallaxManager(GraphicsDevice.Viewport);
            Track.LoadHorizon(Content, parallaxManager);

            ResetCars();

            //car = new Car(0, Track, Color.Red);
            //car.LoadContent(Content, 0);
        }