/// <summary> /// Called after Awake() when the script instance is enabled. /// Initializes variables then loads the field and robot as well as setting up replay features. /// </summary> public override void Start() { AppModel.ClearError(); //getting bullet physics information physicsWorld = BPhysicsWorld.Get(); ((DynamicsWorld)physicsWorld.world).SetInternalTickCallback(BPhysicsTickListener.Instance.PhysicsTick); //setting up raycast robot tick callback BPhysicsTickListener.Instance.OnTick -= BRobotManager.Instance.UpdateRaycastRobots; BPhysicsTickListener.Instance.OnTick += BRobotManager.Instance.UpdateRaycastRobots; //starts a new instance of unity packet which receives packets from the driver station unityPacket = new UnityPacket(); unityPacket.Start(); SpawnedRobots = new List <NetworkRobot>(); //loads all the controls Controls.Load(); //initializes the dynamic camera DynamicCameraObject = GameObject.Find("Main Camera"); dynamicCamera = DynamicCameraObject.AddComponent <DynamicCamera>(); DynamicCamera.ControlEnabled = true; IsMetric = PlayerPrefs.GetString("Measure").Equals("Metric") ? true : false; Network = GameObject.Find("NetworkManager").GetComponent <MultiplayerNetwork>(); Network.State = this; }
/// <summary> /// Ends the <see cref="LobbyState"/>. /// </summary> public void OnBackButtonPressed() { MultiplayerNetwork network = MultiplayerNetwork.Instance; network.ClientConnectionChanged -= OnClientConnectionChanged; if (network.Host) { network.StopHost(); } else { network.StopClient(); } StateMachine.ChangeState(new HostJoinState()); }
/// <summary> /// Exits the <see cref="LobbyState"/> if the connection has been lost. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OnClientConnectionChanged(object sender, MultiplayerNetwork.ConnectionStatus e) { switch (e) { case MultiplayerNetwork.ConnectionStatus.Connected: connectingPanel.SetActive(false); break; case MultiplayerNetwork.ConnectionStatus.Disconnected: UserMessageManager.Dispatch("Lost connection to the lobby!", 5f); MultiplayerNetwork network = MultiplayerNetwork.Instance; network.ClientConnectionChanged -= OnClientConnectionChanged; network.StopClient(); StateMachine.ChangeState(new HostJoinState()); break; } }
/// <summary> /// Starts the <see cref="LobbyState"/>. /// </summary> public override void Start() { connectingPanel = Auxiliary.FindGameObject("ConnectingPanel"); startButton = Auxiliary.FindGameObject("StartButton"); fieldButton = GameObject.Find("FieldButton").GetComponent <Button>(); lobbyCodeText = GameObject.Find("LobbyCodeText").GetComponent <Text>(); fieldText = GameObject.Find("FieldButton").GetComponent <Text>(); readyText = GameObject.Find("ReadyText").GetComponent <Text>(); connectingPanel.SetActive(false); startButton.SetActive(false); MultiplayerNetwork network = MultiplayerNetwork.Instance; if (host) { lobbyCodeText.text = "Lobby Code: " + (lobbyCode = IPCrypt.Encrypt(network.networkAddress = GetLocalIP())); if (network.StartHost(null, network.maxConnections) == null) { UserMessageManager.Dispatch("Could not host a lobby on this network!", 5f); StateMachine.ChangeState(new HostJoinState()); return; } GameObject matchManager = (GameObject)UnityEngine.Object.Instantiate(Resources.Load("Prefabs/MatchManager")); NetworkServer.Spawn(matchManager); } else { lobbyCodeText.text = "Lobby Code: " + lobbyCode; fieldButton.enabled = false; connectingPanel.SetActive(true); network.networkAddress = IPCrypt.Decrypt(lobbyCode); network.ClientConnectionChanged += OnClientConnectionChanged; network.StartClient(); } }