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