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))); }
void CheckPositionalTriggers() { Vector2 playerPos = new Vector2(player.transform.position.x, player.transform.position.y); for (int i = 0; i < positionTriggers.Count; i++) { PositionTrigger pt = positionTriggers[i]; bool reject = false; foreach (Argument arg in pt.conditions) { switch (arg.argument) { case ArgumentType.XLessThan: reject = !(playerPos.x < arg.value); break; case ArgumentType.XGreaterThan: reject = !(playerPos.x > arg.value); break; case ArgumentType.XEqualToo: reject = !(playerPos.x == arg.value); break; case ArgumentType.YLessThan: reject = !(playerPos.y < arg.value); break; case ArgumentType.YGreaterThan: reject = !(playerPos.y > arg.value); break; case ArgumentType.YEqualToo: reject = !(playerPos.y == arg.value); break; } } if (!reject) { parallaxRefPos = pt.targetParallaxRefPos; } } }
public void AddLapTriggers() { // add lap counter triggers at finish line foreach (var player in players.FindAll(p => !p.LOCAL_PLAYER)) { var lPlayer = player; var car = gameInstance.GetService <CarControlComponent>().Cars[lPlayer]; PositionTrigger trigger = new PositionTrigger(checkpointRasterization, 0, true, true); trigger.Triggered += (sender, e) => { lPlayer.Lap++; }; Tuple <AbstractTrigger, List <IMovingObject> > objTrigger = new Tuple <AbstractTrigger, List <IMovingObject> >(trigger, new List <IMovingObject> { car }); string id = "lapT" + lPlayer.PlayerName; gameInstance.GetService <TriggerManager>().ObjectTriggers.Add(id, objTrigger); addedObjTriggers.Add(id); } }
public override void Start() { base.Start(); Transform spawnPostion = gameManager.GetSpawnPosition(); if (spawnPostion != null) { GameObject positionTriggerObject = Instantiate(positionPrefab, gameManager.GetSpawnPosition()); questObject = positionTriggerObject; PositionTrigger positionTrigger = positionTriggerObject.GetComponent <PositionTrigger>(); positionTrigger.quest = this; positionTrigger.meshRenderer.materials[0] = new Material(positionTrigger.defaultMaterial); positionTrigger.meshRenderer.materials[1] = new Material(positionTrigger.defaultMaterial); positionTrigger.meshRenderer.materials[0].color = positionTrigger.quest.primaryColor + new Color(0, 0, 0, 230); positionTrigger.meshRenderer.materials[1].color = positionTrigger.quest.secondaryColor + new Color(0, 0, 0, 230); } else { Debug.Log("Failed to spawn QuestPositionTrigger, Destroying Quest."); //RemoveQuest(); } }