コード例 #1
0
    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));
            }
        });
    }
コード例 #2
0
 void SimulateWebClient()
 {
     Observables.Delay(TimeSpan.FromSeconds(1)).Subscribe(_ => {
         StartFreePractice();
         SendFromWeb("{\"type\":\"CarLogin\",\"teamId\":\"j\u00E4s\u00E4\",\"name\":\"J\u00E4s\u00E4Bot\",\"color\":\"#FFFF00\",\"imageWidth\":8}");
     });
 }
コード例 #3
0
 public void LoadTrack(string fileName)
 {
     SplineMesh.SplineNode[] trackNodes = null;
     if (fileName != null)
     {
         string json = null;
         if (File.Exists(fileName))
         {
             Debug.Log("Loading track from filesystem: " + fileName);
             json = new StreamReader(fileName).ReadToEnd();
         }
         else
         {
             Debug.Log("Loading track as Unity resource: " + fileName);
             json = Resources.Load <TextAsset>("Tracks/" + fileName.Replace(".json", ""))?.text;
         }
         if (json != null)
         {
             trackNodes = FromJson <SplineMesh.SplineNode>(json);
         }
         else
         {
             Debug.Log("Unknown track " + fileName + ": not found as a resource or in the file system");
         }
     }
     if (trackNodes != null && trackNodes.Length > 0)
     {
         track.enabled = false;
         track.IsLoop  = false;
         while (track.nodes.Count > trackNodes.Length)
         {
             track.RemoveNode(track.nodes.Last());
         }
         for (int i = 0; i < trackNodes.Length; i++)
         {
             var node = trackNodes[i];
             if (i < track.nodes.Count)
             {
                 track.nodes[i].Position  = node.Position;
                 track.nodes[i].Direction = node.Direction;
                 track.nodes[i].Up        = node.Up;
                 track.nodes[i].Scale     = node.Scale;
                 track.nodes[i].Roll      = node.Roll;
             }
             else
             {
                 track.AddNode(node);
             }
         }
         track.IsLoop  = true;
         track.enabled = true;
         Observables.Delay(TimeSpan.FromSeconds(1)).Subscribe(_ => {
             EventBus.Publish(new CameraFollow(null));
         });
     }
 }
コード例 #4
0
 private void OnEnable()
 {
     rigidBody = GetComponent <Rigidbody>();
     allWheels = new WheelCollider[] { frontLeftWC, frontRightWC, rearLeftWC, rearRightWC };
     EventBus.Subscribe <CarFinished>(this, f => {
         if (f.car.name == CarInfo.name)
         {
             this.finished = true;
             Observables.Delay(TimeSpan.FromSeconds(1)).Subscribe(_ => { Destroy(gameObject); });
         }
     });
 }
コード例 #5
0
    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;
        }
    }
コード例 #6
0
 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));
         }
     });
 }