void OnGUI() { int pixXOffset = (int)(rect.x * Screen.width); int pixYOffset = (int)(rect.y * Screen.height); int width = (int)(rect.width * Screen.width); int height = (int)(rect.height * Screen.height); int LabelXOffset = 100; int scrollHeight = 220; int scrollWidth = 200; int YOffset = 0; int Ysteps = 20; GUI.BeginGroup(new Rect(pixXOffset, pixYOffset, width, height)); scrollPosition = GUI.BeginScrollView(new Rect(0, 0, width, height), scrollPosition, new Rect(0, 0, scrollWidth, scrollHeight), false, false); GUI.Label(new Rect(0, YOffset, LabelXOffset, 20), "port"); string portString = GUI.TextField(new Rect(LabelXOffset, YOffset, width - LabelXOffset, 20), port.ToString()); int tmp_port = port; int.TryParse(portString, out tmp_port); if (tmp_port != port) { port = tmp_port; } YOffset += Ysteps; GUI.Label(new Rect(0, YOffset, LabelXOffset, 20), "portPrivateAPI"); string portPrivateAPIString = GUI.TextField(new Rect(LabelXOffset, YOffset, width - LabelXOffset, 20), portPrivateAPI.ToString()); int tmp_portPrivateAPI = portPrivateAPI; int.TryParse(portPrivateAPIString, out tmp_portPrivateAPI); if (tmp_portPrivateAPI != portPrivateAPI) { portPrivateAPI = tmp_portPrivateAPI; } YOffset += Ysteps; GUI.Label(new Rect(0, YOffset, LabelXOffset, 20), "FPS limit"); string fpsString = GUI.TextField(new Rect(LabelXOffset, YOffset, width - LabelXOffset, 20), fps.ToString()); int tmp_fps = fps; int.TryParse(fpsString, out tmp_fps); if (tmp_fps != fps) { fps = tmp_fps; } YOffset += Ysteps; GUI.Label(new Rect(0, YOffset, LabelXOffset, 20), "Time scale"); string timeScaleString = GUI.TextField(new Rect(LabelXOffset, YOffset, width - LabelXOffset, 20), timeScale.ToString()); float tmp_timeScale = timeScale; float.TryParse(timeScaleString, out tmp_timeScale); if (tmp_timeScale != timeScale) { timeScale = tmp_timeScale; } YOffset += Ysteps; GUI.Label(new Rect(0, YOffset, LabelXOffset, 20), "Time out"); string timeOutString = GUI.TextField(new Rect(LabelXOffset, YOffset, width - LabelXOffset, 20), timeOut.ToString()); float tmp_timeOut = timeOut; float.TryParse(timeOutString, out tmp_timeOut); if (tmp_timeOut != timeOut) { timeOut = tmp_timeOut; } YOffset += Ysteps; GUI.Label(new Rect(0, YOffset, LabelXOffset, 20), "Max SplitScreen"); string maxspString = GUI.TextField(new Rect(LabelXOffset, YOffset, width - LabelXOffset, 20), maxSplitScreen.ToString()); int tmp_maxsp = maxSplitScreen; int.TryParse(maxspString, out tmp_maxsp); if (tmp_maxsp != maxSplitScreen) { maxSplitScreen = tmp_maxsp; } YOffset += Ysteps; extendedTelemetry = GUI.Toggle(new Rect(0, YOffset, width, 20), extendedTelemetry, "extendedTelemetry"); YOffset += Ysteps; generateTrees = GUI.Toggle(new Rect(0, YOffset, width, 20), generateTrees, "generateTrees"); YOffset += Ysteps; generateRandomCones = GUI.Toggle(new Rect(0, YOffset, width, 20), generateRandomCones, "generateRandomCones"); YOffset += Ysteps; randomLight = GUI.Toggle(new Rect(0, YOffset, width, 20), randomLight, "randomLight"); YOffset += Ysteps; raceCameras = GUI.Toggle(new Rect(0, YOffset, width, 20), raceCameras, "raceCameras"); YOffset += Ysteps; overheadCamera = GUI.Toggle(new Rect(0, YOffset, width, 20), overheadCamera, "overheadCamera"); YOffset += Ysteps; drawLidar = GUI.Toggle(new Rect(0, YOffset, width, 20), drawLidar, "drawLidar"); YOffset += Ysteps; paceCar = GUI.Toggle(new Rect(0, YOffset, width, 20), paceCar, "paceCar"); YOffset += Ysteps; if (paceCar) { manualDriving = GUI.Toggle(new Rect(Ysteps, YOffset, width, 20), manualDriving, "manualDriving"); YOffset += Ysteps; if (!manualDriving) { GUI.Label(new Rect(Ysteps, YOffset, LabelXOffset, 20), "kp"); string kpString = GUI.TextField(new Rect(LabelXOffset + Ysteps, YOffset, width - LabelXOffset - Ysteps, 20), kp.ToString()); float tmp_kp = kp; float.TryParse(kpString, out tmp_kp); if (tmp_kp != kp) { kp = tmp_kp; } YOffset += Ysteps; GUI.Label(new Rect(Ysteps, YOffset, LabelXOffset, 20), "kd"); string kdString = GUI.TextField(new Rect(LabelXOffset + Ysteps, YOffset, width - LabelXOffset - Ysteps, 20), kd.ToString()); float tmp_kd = kd; float.TryParse(kdString, out tmp_kd); if (tmp_kd != kd) { kd = tmp_kd; } YOffset += Ysteps; GUI.Label(new Rect(Ysteps, YOffset, LabelXOffset, 20), "ki"); string kiString = GUI.TextField(new Rect(LabelXOffset + Ysteps, YOffset, width - LabelXOffset - Ysteps, 20), ki.ToString()); float tmp_ki = ki; float.TryParse(kiString, out tmp_ki); if (tmp_ki != ki) { ki = tmp_ki; } YOffset += Ysteps; } } useSeed = GUI.Toggle(new Rect(0, YOffset, width, 20), useSeed, "useSeed"); YOffset += Ysteps; if (useSeed) { GUI.Label(new Rect(0, YOffset, LabelXOffset, 20), "Seed"); string seedString = GUI.TextField(new Rect(LabelXOffset, YOffset, width, 20), seed.ToString()); YOffset += Ysteps; int tmp_seed = seed; int.TryParse(seedString, out tmp_seed); if (tmp_seed != seed) { seed = tmp_seed; } } YOffset += Ysteps; bool doSave = GUI.Button(new Rect(0, YOffset, width, 20), "Save"); YOffset += Ysteps; // Check if the version used is the latest version if not, notify the user ! if (versionCheck.latest != GlobalState.version) { YOffset += Ysteps; bool getLatest = GUI.Button(new Rect(0, YOffset, width, Ysteps * 2), "A new version is available, \n click here to get latest version !"); YOffset += Ysteps * 2; if (getLatest) { versionCheck.GetLatestVersion(); } } YOffset += Ysteps; showPrivateKey = GUI.Toggle(new Rect(0, YOffset, width, 20), showPrivateKey, "showPrivateKey"); YOffset += Ysteps; if (showPrivateKey) { GUI.Label(new Rect(0, YOffset, LabelXOffset, 20), "Private API Key"); privateKey = GUI.TextField(new Rect(LabelXOffset, YOffset, width, 20), privateKey); YOffset += Ysteps; bool doRandomize = GUI.Button(new Rect(0, YOffset, width, 20), "Randomize private key"); YOffset += Ysteps; if (doRandomize) { RandomizePrivateKey(); } } if (doSave) { SaveToPlayerPrefs(); } GUI.EndScrollView(); GUI.EndGroup(); }