public PositionTrigger(CurveRasterization curve, int index, bool preventReverse, bool keepProgress) : base(curve) { this.triggerPointIndex = index; this.preventReverse = preventReverse; this.keepProgress = keepProgress; }
public override void Initialize() { checkpointRasterization = raceTrack.GetCurveRasterization(checkpoints); List <AbstractTrigger> checkpointTriggers = new List <AbstractTrigger>(); for (int i = 0; i < checkpoints; i++) { PositionTrigger trigger = new PositionTrigger(checkpointRasterization, i, true, true); string outputDebug = "Passing checkpoint " + i; trigger.Triggered += (sender, e) => { Console.WriteLine(outputDebug); var now = DateTime.Now; if (lastCheckpointPass != DateTime.MinValue) { gameInstance.GetService <HUDComponent>().ShowTextNotification(Color.BurlyWood, (now - lastCheckpointPass).ToString(@"m\:ss\:ff")); } lastCheckpointPass = now; var current = states[CurrentState]; var aTrigger = sender as AbstractTrigger; if (e.Object == car && current.Triggers.ContainsKey(aTrigger)) { current.Triggers[aTrigger] = e; } AudioEngineManager.PlaySound("passfinishline"); }; string checkpointID = "checkpoint" + i; gameInstance.GetService <TriggerManager>().Triggers.Add(checkpointID, trigger); checkpointTriggers.Add(trigger); addedTriggers.Add(checkpointID); } // Keep track of times when passing goal line var goalTrigger = checkpointTriggers[0]; goalTrigger.Triggered += (sender, e) => { goalLineTimes.Add(e.Time.TotalGameTime); var player = gameInstance.GetService <Player>(); string notification = (++player.Lap) > laps ? "Race finished!" : "Lap " + (player.Lap); gameInstance.GetService <HUDComponent>().ShowTextNotification(Color.Teal, notification); }; for (int i = 0; i < laps; i++) { List <AbstractTrigger> lapTriggers = new List <AbstractTrigger>(); lapTriggers.AddRange(checkpointTriggers); states.Add(new GameModeState(lapTriggers)); } // Add state for passing the finish line states.Add(new GameModeState(checkpointTriggers.GetRange(index: 0, count: 1))); }
public SimpleRaceMode(GameManager gameInstance, int laps, int noOfCheckpoints, RaceTrack raceTrack, Car localCar) : base(gameInstance) { this.laps = laps; this.checkpoints = noOfCheckpoints; this.raceTrack = raceTrack; this.car = localCar; this.placementRasterization = raceTrack.GetCurveRasterization(100); PlayerPlace = 1; GameStarted = false; TotalRaceTime = TimeSpan.Zero; var player = gameInstance.GetService <Player>(); player.Lap = 0; players.Add(player); Initialize(); }
public NavMesh(GraphicsDevice device, datx02_rally.GameLogic.Curve curve, int resolution, float width, Vector3 terrainScale) { this.device = device; #region Vertices //vertices = new NavMeshTriangleVertex[2 * resolution]; vertices = new VertexPositionColor[2 * resolution]; { int i = 0; var curveRasterization = new CurveRasterization(curve, resolution).Points; foreach (var point in curveRasterization) { vertices[i++] = new VertexPositionColor(10 * Vector3.Up + point.Position - (terrainScale * width * point.Side), Color.White); vertices[i++] = new VertexPositionColor(10 * Vector3.Up + point.Position + (terrainScale * width * point.Side), Color.White); } } #endregion #region Indicies int[] indices = new int[6 * resolution]; int[] offsets = { 0, 1, 2, 2, 1, 0 }; for (int i = 0; i < indices.Length; i++) { int v = i / 3 + offsets[i % 6]; if (v >= vertices.Length) { v -= vertices.Length; } indices[i] = v; } #endregion #region Triangles triangles = new NavMeshTriangle[2 * resolution]; for (int i = 0; i < indices.Length; i += 3) { triangles[i / 3] = new NavMeshTriangle(vertices[indices[i]].Position, vertices[indices[i + 1]].Position, vertices[indices[i + 2]].Position); } // Smoothen out normals for (int i = 1; i < triangles.Length; i += 2) { int j = i - 1, c = i - 2, d = j - 2; if (c < 0) { c += triangles.Length; d += triangles.Length; } Vector3 normal = Vector3.Lerp(triangles[i].normal, triangles[j].normal, .5f); Vector3 others = Vector3.Lerp(triangles[c].normal, triangles[d].normal, .5f); normal = Vector3.Lerp(normal, others, .6f); triangles[i].normal = triangles[j].normal = normal; } #endregion #region Buffers indexBuffer = new IndexBuffer(device, typeof(int), indices.Length, BufferUsage.None); indexBuffer.SetData(indices); indexBuffer.SetData(indices, 0, 6); vertexbuffer = new VertexBuffer(device, typeof(VertexPositionColor), vertices.Length, BufferUsage.None); vertexbuffer.SetData(vertices); vertexbuffer.SetData(vertices, 0, 6); #endregion Effect = new BasicEffect(device); }
public AbstractTrigger(CurveRasterization curve) : this() { Curve = curve; }