public SpawnScreen(IStateMachine machine, Data data) : base(machine) { _data = data; var billboardDependencies = new DependencyContainer(new Dictionary <string, object> { { "clock", _data.MenuClock }, { "cameraTransform", _data.CameraMount.transform } }); _spawnpoints = GameObject.FindObjectOfType <SpawnpointDiscoverer>().Spawnpoints; var spawnpointBillboards = new List <GameObject>(_spawnpoints.Count); var billboardGroup = new GameObject("SpawnpointBillboards"); for (int i = 0; i < _spawnpoints.Count; i++) { var spawnpoint = _spawnpoints[i]; var spawnpointBillBoard = (GameObject)GameObject.Instantiate(_data.SpawnpointBillboardPrefab); spawnpointBillBoard.SetActive(spawnpoint.IsDiscovered); DependencyInjector.Default.Inject(spawnpointBillBoard, billboardDependencies); spawnpointBillBoard.SetParent(billboardGroup); spawnpointBillBoard.transform.Set(spawnpoint.Location.AsTransform); spawnpointBillBoard.SetActive(false); spawnpointBillboards.Add(spawnpointBillBoard); } _uiState = TypedDataCursor <SpawnScreenUIState> .Root(new SpawnScreenUIState( spawnpointUiList : new UIListState(spawnpointBillboards))); var spawnpointUiState = _uiState.To(s => s.SpawnpointUIList); var spawnpointIndexChanged = spawnpointUiState .To(s => s.HighlightedIndex) .OnUpdate .DistinctUntilChanged(IntComparer.Instance) .Skip(1); _data.SelectedSpawnpointName.text = _spawnpoints[spawnpointUiState.Get().HighlightedIndex].Name; spawnpointIndexChanged.Subscribe(i => { Fmod.PlayOneShot("event:/ui/drop_hover"); var spawnpoint = _spawnpoints[i]; _data.SelectedSpawnpointName.text = spawnpoint.Name; _data.CameraAnimator.LookTarget = spawnpointBillboards[i].transform; }); _uiList = new UISketch.NavigableUIList( spawnpointUiState, data.CameraManager.Rig.GetMainCamera(), spawnpointIndex => { _data.EventSystem.Emit(new Events.SpawnpointSelected(_spawnpoints[spawnpointIndex].Location)); }); }
private void Update() { if (_buttonEvents() == ButtonEvent.Down) { if (_data.Logo.IsVisible) { OnStartPressed(); _data.Logo.Show(false); } else { // Fully display the logo Fmod.PlayOneShot("event:/ui/open"); _data.Logo.Show(true); } } }
private void OnCourseFinished() { _ringsPassed.Add(_rings.Count - 1); var endTime = _clock.CurrentTime - _startTime; var totalRingsPassed = _ringsPassed.Count + 1; var ringsSkipped = _rings.Count - totalRingsPassed; string ringsSkippedStr = ""; if (ringsSkipped <= 0) { ringsSkippedStr = ""; } else if (ringsSkipped == 1) { ringsSkippedStr = " (" + _activeLanguage.Table["ring_skipped"] + ")"; } else { ringsSkippedStr = " (" + _activeLanguage.Table["rings_skipped"].Replace("$n", ringsSkipped.ToString()) + ")"; } _notificationList.AddTimedNotification( _activeLanguage.Table["time"] + ": " + MathUtils.RoundToDecimals(endTime, 3).ToString("N3") + " " + _activeLanguage.Table["seconds"] + ringsSkippedStr, _notificationTimeout.Seconds()); Fmod.PlayOneShot("event:/Objects/ring_pass_start"); for (int i = 0; i < _rings.Count; i++) { var ring = _rings[i]; ring.SetEnabled(false); } for (int i = 0; i < _turrets.Count; i++) { _turrets[i].gameObject.SetActive(false); } if (OnFinished != null) { OnFinished(_player, FinishCondition.Win); } }
public override IEnumerator <WaitCommand> Begin(FlightStatistics player) { _startTime = _clock.CurrentTime; _nextRing = 0; _ringsPassed.Clear(); _player = player; for (int i = 0; i < _rings.Count; i++) { var ring = _rings[i]; ring.SetEnabled(true); } for (int i = 0; i < _turrets.Count; i++) { //_turrets[i].SetTarget(player); _turrets[i].gameObject.SetActive(true); } _notificationList.AddTimedNotification(_activeLanguage.Table["course"] + ": " + Name, _notificationTimeout.Seconds()); Fmod.PlayOneShot("event:/Objects/ring_pass_start"); yield return(WaitCommand.DontWait); }
void SpawnpointSelected(Events.SpawnpointSelected @event) { Fmod.PlayOneShot("event:/ui/drop_select"); Machine.Transition(VoloStateMachine.States.Playing, @event.Spawnpoint); }
private void OnStartPressed() { Fmod.PlayOneShot("event:/ui/open"); Machine.Transition(VoloStateMachine.States.MainMenu); }
private void OnRingPassed(int ringIndex) { _ringsPassed.Add(ringIndex); _nextRing = ringIndex + 1; Fmod.PlayOneShot("event:/Objects/ring_pass_norm"); }