void Start() { track = GetComponent <SplineMesh.Spline>(); LoadTrack(RaceParameters.readRaceParameters().track); UpdateFinishLine(); UpdateTriggers(); track.NodeListChanged += NodeListChanged; }
// Use this for initialization void Start() { if (Application.platform != RuntimePlatform.WebGLPlayer) { var logFile = RaceParameters.readRaceParameters().memoryLogFile; Debug.Log("Starting memory profiler output to " + logFile); stream = new BinaryWriter(File.Open(logFile, FileMode.Create)); } }
public async Task <ActionResult> Post([FromBody] RaceParameters race) { if (race == null || string.IsNullOrWhiteSpace(race.Start) || string.IsNullOrEmpty(race.End)) { return(BadRequest(new { error = "You must provide a race start and race end" })); } return(Json(await _raceAlgo.FindPath(race.Start, race.End))); }
// Use this for initialization void Start() { if (Application.platform != RuntimePlatform.WebGLPlayer) { var logFile = RaceParameters.readRaceParameters().botCommandLogFile; if (logFile != "") { Debug.Log("Logging bot commands to " + logFile); stream = new BinaryWriter(File.Open(logFile, FileMode.Create)); } } }
void Spectate(Action <byte[]> sendBytes, Action close, CarInfo[] initialCars) { Action <GameEvent> send = (GameEvent e) => { string jsonString = JsonUtility.ToJson(e); byte[] bytes = System.Text.Encoding.UTF8.GetBytes(jsonString + "\n"); //Debug.Log("Writing event " + e.type + " JSON " + jsonString + " as " + bytes.Length + " bytes"); sendBytes(bytes); }; var senderThread = new Thread(() => { var eventQueue = new ConcurrentQueue <GameEvent>(); var subscription = EventBus.Receive <GameEvent>().Subscribe(e => { eventQueue.Enqueue(e); }); GameEvent gameEvent = null; eventQueue.Enqueue(RaceParameters.readRaceParameters()); foreach (var car in initialCars) { eventQueue.Enqueue(new CarAdded(car)); } try { while (listener != null) { if (eventQueue.TryDequeue(out gameEvent)) { //Debug.Log("Sending event " + gameEvent.type); send(gameEvent); } else { Thread.Sleep(10); } } } catch (Exception e) { Debug.Log("Spectator send failed:" + e.ToString() + " Closing socket"); close(); subscription.Dispose(); return; } }); senderThread.Name = "SpectatorSocket Sender"; senderThread.IsBackground = true; senderThread.Start(); }
private void OnEnable() { switch (ModeController.Mode) { case SimulatorMode.Playback: case SimulatorMode.RemoteControl: break; default: Debug.Log("Initializing spectator socket"); StartListening(); RaceParameters raceParams = RaceParameters.readRaceParameters(); if (raceParams.raceLogFile != null) { Debug.Log("Writing race log to " + raceParams.raceLogFile); var stream = new BinaryWriter(File.Open(raceParams.raceLogFile, FileMode.Create)); Spectate(b => { stream.Write(b); }, () => stream.Close(), new CarInfo[] { }); } EventBus.Subscribe <CarAdded>(this, e => { CarInfo car = ((CarAdded)e).car; carInfos.Add(car.name, car); }); EventBus.Subscribe <CarRemoved>(this, e => { CarInfo car = ((CarRemoved)e).car; carInfos.Remove(car.name); }); EventBus.Subscribe <RaceFinished>(this, e => { Observables.Delay(TimeSpan.FromSeconds(1)).Subscribe(_ => { Debug.Log("Race finished, stopping updates"); raceEnded = true; EventBus.Publish(new GameStatus(new CarStatus[0])); var stream = new BinaryWriter(File.Open(raceParams.raceResultFile, FileMode.Create)); stream.Write(System.Text.Encoding.UTF8.GetBytes(JsonUtility.ToJson(e, true))); stream.Close(); }); Observables.Delay(TimeSpan.FromSeconds(3)).Subscribe(_ => { Debug.Log("Quitting application"); Application.Quit(); }); }); break; } }
void UpdateTriggers() { int numSegments = RaceParameters.readRaceParameters().numSegments; Array.Resize(ref lineTriggers, numSegments); var raceController = FindObjectOfType <RaceController>(); UpdateTrigger(ref finishLineTrigger, 0, raceController.FinishLineTrigger); for (int i = 0; i < numSegments; ++i) { int segment = i; UpdateTrigger( ref lineTriggers[i], (i + 1) / (float)(numSegments + 1), car => raceController.TrackSegmentTrigger(car, segment)); } }
private void Start() { raceParameters = RaceParameters.readRaceParameters(); Observables.Delay(TimeSpan.FromMilliseconds(0)).Subscribe(_ => { if (ModeController.Mode == SimulatorMode.Playback) { setState(new Playback(this)); } else if (ModeController.Mode == SimulatorMode.Race) { setState(new RaceLobby(this)); } else { setState(new FreePractice(this)); } }); }
private void OnEnable() { if (ModeController.Mode != SimulatorMode.Playback) { Debug.Log("Initializing spectator socket"); StartListening(); RaceParameters raceParams = RaceParameters.readRaceParameters(); if (raceParams.raceLogFile != null) { Debug.Log("Writing race log to " + raceParams.raceLogFile); var stream = new BinaryWriter(File.Open(raceParams.raceLogFile, FileMode.Create)); Spectate(b => stream.Write(b), () => stream.Close()); } } else { Debug.Log("Skipping spectator socket"); } }
void SendFromWeb(string msgJson) { var e = GameEvent.FromJson(msgJson); if (e is CarLogin l) { cars.Add(l.name, new WebCarSocket(l, this)); // Just send something for now SendToWeb(RaceParameters.readRaceParameters()); } else if (e is WebCarCommand c) { var name = c.carName; var socket = cars[name]; socket.EnqueueCommand(c.command); } else { Debug.Log("Unhandled message from web: " + msgJson); } }
static float maxWait = 1; // 1 sec private void OnEnable() { Debug.Log("Playback init"); if (ModeController.Mode == SimulatorMode.Playback) { #if UNITY_EDITOR GetRaceLog(RaceParameters.readRaceParameters().raceLogFile); #else //StartCoroutine(FetchRaceLogOverHTTP("http://localhost:8000/race.log")); #endif } /* * // To simulate web player user clicking on races * Observables.Delay(TimeSpan.FromSeconds(1)).Subscribe(_ => { * PlayUrl("https://robotini-race-results.s3.eu-west-1.amazonaws.com/race_results/2021-camp1/CI-1616499914/race.log?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIASOYCV2RQYKFUIQ47%2F20210324%2Feu-west-1%2Fs3%2Faws4_request&X-Amz-Date=20210324T074833Z&X-Amz-Expires=604800&X-Amz-Signature=efbe162ee43f1345e57bdfa4895a1e0c1b0a705beb84d609b14503dacc3bbfc9&X-Amz-SignedHeaders=host"); * }); * Observables.Delay(TimeSpan.FromSeconds(15)).Subscribe(_ => { * PlayUrl("https://robotini-race-results.s3.eu-west-1.amazonaws.com/race_results/2021-camp1/1616492743/race.log?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIASOYCV2RQYKFUIQ47%2F20210324%2Feu-west-1%2Fs3%2Faws4_request&X-Amz-Date=20210324T074833Z&X-Amz-Expires=604800&X-Amz-Signature=8ffb55eecddfbb510c019a46f8aac1a8ae20286d1e10917f1c11ca28f23a8401&X-Amz-SignedHeaders=host"); * }); */ }
protected void init(CarLogin c, RaceController raceController) { if (c.name == null || c.name == "") { throw new JoinException("CarInfo.name missing"); } if (c.teamId == null || c.teamId == "") { throw new JoinException("CarInfo.teamId missing"); } var raceParameters = RaceParameters.readRaceParameters(); var cars = raceParameters.cars; var found = cars?.FirstOrDefault(d => d.teamId == c.teamId); if (found != null) { carInfo = found; } else if (raceParameters.mode == "race") { throw new JoinException("Team not found by teamId: " + c.teamId); } else { carInfo = new CarInfo(c.teamId, c.name, c.color); } this.imageWidth = (c.imageWidth < 8 || c.imageWidth > 128) ? 128 : (uint)c.imageWidth; this.imageHeight = imageWidth * IMAGE_HEIGHT / IMAGE_WIDTH; Debug.Log("Using car name " + carInfo.name + " and image size " + imageWidth + "x" + imageHeight); raceController.CarConnected(new CarConnected(carInfo, this)); FrameRequested = true; }
private void Start() { switch (ModeController.Mode) { case SimulatorMode.Development: case SimulatorMode.Race: QualitySettings.vSyncCount = 0; // VSync must be disabled Application.targetFrameRate = 60; Time.captureFramerate = 60; Time.fixedDeltaTime = 0.002f; break; default: QualitySettings.vSyncCount = 1; Application.targetFrameRate = 60; Time.captureFramerate = 0; Time.fixedDeltaTime = 0.02f; break; } raceParameters = RaceParameters.readRaceParameters(); Observables.Delay(TimeSpan.FromMilliseconds(0)).Subscribe(_ => { if (ModeController.Mode == SimulatorMode.Playback || ModeController.Mode == SimulatorMode.RemoteControl) { setState(new Playback(this)); } else if (ModeController.Mode == SimulatorMode.Race) { setState(new RaceLobby(this)); } else { setState(new FreePractice(this)); } EventBus.Publish(new CameraFollow(null)); }).AddTo(this); }
public RaceLobbyInit(RaceParameters raceParameters) { this.raceParameters = raceParameters; }
public CarSocket(Socket socket, RaceController raceController) { this.socket = socket; var receiverThread = new Thread(() => { var stream = new NetworkStream(socket); var reader = new StreamReader(stream); try { Debug.Log("Reading car info..."); var line = reader.ReadLine(); this.carInfo = JsonUtility.FromJson <CarInfo>(line); Debug.Log("Received info " + line); // TODO: respond with error msgs if (carInfo.name == null || carInfo.name == "") { throw new Exception("CarInfo.name missing"); } if (carInfo.teamId == null || carInfo.teamId == "") { throw new Exception("CarInfo.teamId missing"); } var raceParameters = RaceParameters.readRaceParameters(); var cars = raceParameters.cars; var found = cars?.FirstOrDefault(c => c.teamId == carInfo.teamId); if (found != null) { carInfo.name = found.name; carInfo.color = found.color; carInfo.texture = found.texture; } else if (raceParameters.mode == "race") { throw new Exception("Team not found: " + carInfo.teamId); } Debug.Log("Using car name " + carInfo.name); EventBus.Publish(new CarConnected(carInfo, this)); FrameRequested = true; while (this.socket != null) { line = reader.ReadLine(); var command = JsonUtility.FromJson <JsonControlCommand>(line); recvQueue.Enqueue(command); FrameRequested = true; } } catch (Exception e) { Debug.Log("Car socket read failed:" + e.ToString()); disconnected(); } }); receiverThread.Name = "CarSocket Receiver"; receiverThread.IsBackground = true; receiverThread.Start(); var senderThread = new Thread(() => { while (this.socket != null) { uint[] data; if (sendQueue.TryDequeue(out data)) { try { socket.Send(encodeFrame(data)); } catch (Exception e) { Debug.Log("Socket send failed:" + e.ToString()); disconnected(); } } else { Thread.Sleep(10); } } }); senderThread.Name = "CarSocket Sender"; senderThread.IsBackground = true; senderThread.Start(); }