//Comprueba si el coche está yendo marcha atrás, y establece el punto al que se ha de colocar al jugador en caso de que vuelque. public void UpdateRaceCarState(PlayerInfo player, SetupPlayer setupPlayer) { Vector3 carPos = player.transform.position; Vector3 carFwd = player.transform.forward; int segIdx; float carDist; Vector3 carProj; float minArcL = this.m_CircuitController.ComputeClosestPointArcLength(carPos, out segIdx, out carProj, out carDist); //Se actualizan los datos de recuperación de choques del jugador setupPlayer.CmdChangeLastSafePosition(carProj); setupPlayer.CmdChangeCrashRecoverForward(m_CircuitController.GetSegment(segIdx)); //Comprobación de si va hacia atrás (según el ángulo entre el forward del coche y la dirección del circuito) float ang = Vector3.Angle(m_CircuitController.GetSegment(segIdx), carFwd); bool goingBackwards = ang > goingBackwardsThreshold; if (goingBackwards != player.goingBackwards) { setupPlayer.CmdChangeGoingBackwards(goingBackwards); } }
/// <summary> /// Called before start, setup the events from the networkplayer here, as NetworkStart is called before regular Start. /// Hook up all the RPC event the shoot system needs /// </summary> void Awake() { np = GetComponent <NetworkedPlayer>(); np.NetworkStartEvent += NetworkStart; np.ShootEvent += RPCShoot; np.SwitchWeaponEvent += RPCSwitchWeapon; setupPlayer = GetComponent <SetupPlayer>(); }
/// <summary> /// Called before start, setup the events from the networkplayer here, as NetworkStart is called before regular Start. /// Hook up all the RPC events the health system needs /// </summary> void Awake() { np = GetComponent <NetworkedPlayer>(); np.NetworkStartEvent += NetworkStart; np.DieEvent += RPCDie; np.TakeDamageEvent += RPCTakeDamage; setupPlayer = GetComponent <SetupPlayer>(); }
/* OnPlayerMessage(SetupPlayer player, string message): recibe el player y el mensaje, lo muestra de colores distintos según sea el local o no. */ private void OnPlayerMessage(SetupPlayer player, string message) { string prettyMessage = player.isLocalPlayer ? $"<color=red>{player.m_PlayerInfo.Name}: </color> {message}" : $"<color=blue>{player.m_PlayerInfo.Name}: </color> {message}"; AppendMessage(prettyMessage); //Debug.Log(message); }
/* OnSend(): envía el mensaje si tiene contenido, pasándolo al servidor mediante un Command. Reinicia el valor de la variable chatMessage */ public void OnSend() { if (chatMessage.text.Trim() == "") { return; } SetupPlayer player = NetworkClient.connection.identity.GetComponent <SetupPlayer>(); player.CmdSend(chatMessage.text.Trim()); chatMessage.text = ""; }
private void Awake() { setupPlayer = GetComponent <SetupPlayer>(); playerInfo = GetComponent <PlayerInfo>(); playerController = GetComponent <PlayerController>(); mirrorManager = GetComponent <MirrorManager>(); checkPointController = GetComponent <CheckpointController>(); //Si esto da problemas, llevarlo al Start //polePositionManager = FindObjectOfType<PolePositionManager>(); //networkController = FindObjectOfType<NetworkController>(); //UIManager = FindObjectOfType<UIManager>(); print("ScriptManager SETUP"); }
//Se ha implementado un sistema de checkpoints para asegurar que las vueltas al circuito se realizan correctamente //Cuando un jugador local toca un checkpoint, se activa el siguiente, hasta llegar a la meta. //Cuando el jugador ha pasado por todos los checkpoints y toca la meta se contabiliza una vuelta private void OnTriggerEnter(Collider other) { if (other.tag == "Player" && other.GetComponent <SetupPlayer>().isLocalPlayer) { PlayerInfo playerInfo = other.GetComponent <PlayerInfo>(); SetupPlayer setupPlayer = other.GetComponent <SetupPlayer>(); RaceTimer raceTimer = other.GetComponent <RaceTimer>(); if (isGoal) { setupPlayer.CmdChangeCurrentLap(playerInfo.CurrentLap + 1); raceTimer.ResetLapTime(); } nextCheckpoint.gameObject.SetActive(true); gameObject.SetActive(false); } }