public void EndLevel(bool finished, int level_to_end) { win = finished; level_ended = level_to_end; gameObject.SetActive(true); Canvas.ForceUpdateCanvases(); Vector3 starting_pos = new Vector3(canvas_group.gameObject.transform.position.x + background_image.rectTransform.rect.size.x * 2, canvas_group.gameObject.gameObject.transform.position.y, canvas_group.gameObject.transform.position.z); all_back_image.transform.position = canvas_group.gameObject.transform.position; background_image.gameObject.transform.position = starting_pos; all_back_image.color = new Color(all_back_image.color.r, all_back_image.color.g, all_back_image.color.b, 0.0f); canvas_group.alpha = starting_alpha_val; button1.interactable = false; button2.interactable = false; wait_fade_in_timer.Start(); state = LevelEndState.WATING_TO_FADE_IN; }
public void EndGame(LevelEndState endState, int levelObjectIndex) { ViewModel.EndGame.Dispatch(endState, levelObjectIndex); if (endState == LevelEndState.Fail) { SawController.SetSawMovement(false); SawController.SendBladeFlying(); } BladeCollider.enabled = false; }
public void FadeOut(bool _level_reestart) { level_reestart = _level_reestart; gameObject.SetActive(true); Vector3 finish_pos = new Vector3(canvas_group.gameObject.transform.position.x - background_image.rectTransform.rect.size.x * 2, canvas_group.gameObject.gameObject.transform.position.y, canvas_group.gameObject.transform.position.z); background_image.transform.DOMoveX(finish_pos.x, fade_out_time); all_back_image.transform.DOMoveX(finish_pos.x, fade_out_time); button1.interactable = false; button2.interactable = false; fade_out_timer.Start(); state = LevelEndState.FADING_OUT; }
public LevelLifeCycleTransitionManager(IntroState introState, IncomingWaveState incomingWaveState, WaitingState waitingState, DivingWaveState divingWaveState, LevelEndState levelEndState) { AddState(introState) .AllowTransition(waitingState, _ => true) .Build(); AddState(incomingWaveState) .AllowTransition(waitingState, _ => true) .Build(); AddState(divingWaveState) .AllowTransition(waitingState, _ => true) .Build(); AddState(waitingState) .AllowTransition(levelEndState, context => context.LevelEndAchieved) .AllowTransition(incomingWaveState, context => context.HasWavesToIncome) .AllowTransition(divingWaveState, context => true) .Build(); }
void Update() { switch (state) { case LevelEndState.WATING_TO_FADE_IN: { if (wait_fade_in_timer.ReadTime() > wait_fade_in_time) { all_back_image.gameObject.SetActive(true); if (win) { object[] val = { level_ended }; level_status_text.text = LocManager.Instance.GetText("FinishLevelLevelCompleted", val); next_level_play_again_text.text = LocManager.Instance.GetText("FinishLevelNextLevel"); } else { object[] val = { level_ended }; level_status_text.text = LocManager.Instance.GetText("FinishLevelLevelFailed", val); next_level_play_again_text.text = LocManager.Instance.GetText("FinishLevelReestartLevel"); } all_back_image.DOFade(1.0f, all_back_fade_in_time); all_back_fade_in_timer.Start(); state = LevelEndState.ALL_BACK_FADE_IN; } break; } case LevelEndState.ALL_BACK_FADE_IN: { if (all_back_fade_in_timer.ReadTime() > all_back_fade_in_time) { background_image.transform.DOMoveX(canvas_group.gameObject.transform.position.x, fade_in_time); fade_in_timer.Start(); state = LevelEndState.FADING_IN; } break; } case LevelEndState.FADING_IN: { if (fade_in_timer.ReadTime() > fade_in_time) { button1.interactable = true; button2.interactable = true; EventManager.Event ev = new EventManager.Event(EventManager.EventType.LEVEL_UNLOAD); ev.level_unload.level = level_ended; EventManager.Instance.SendEvent(ev); state = LevelEndState.WAITING_TO_FADE_OUT; } break; } case LevelEndState.WAITING_TO_FADE_OUT: { break; } case LevelEndState.FADING_OUT: { if (fade_out_timer.ReadTime() > fade_out_time) { if (level_reestart) { EventManager.Event ev = new EventManager.Event(EventManager.EventType.LEVEL_BEGIN); ev.level_begin.level = level_ended; EventManager.Instance.SendEvent(ev); level_reestart = false; } state = LevelEndState.FINISHED; } break; } case LevelEndState.FINISHED: { gameObject.SetActive(false); break; } } }
void Update() { var carExists = ActiveCar != null; // Rewinding input if (Input.GetKeyDown(KeyCode.Space) && carExists && AllowTimeRewind && !Rewinding && RewindCount > 0 && !LevelEnded) { GameUIController.SetUIState(UIOverlayState.Rewind); Rewinding = true; ActiveCar.PlayerControlled = false; } if (Input.GetKeyUp(KeyCode.Space) && carExists && AllowTimeRewind && Rewinding && !LevelEnded) { GameUIController.SetUIState(UIOverlayState.Record); Rewinding = false; RewindCount -= 1; TimeManager.CutTimeline(ActiveCar); var oldCar = ActiveCar; var newCar = CarPool.GetPooledObject(); newCar.gameObject.SetActive(true); SetNewCar(newCar, ActiveCar.transform); newCar.component.Energy = ActiveCar.Energy; newCar.component.ApplySnapshot(oldCar.GetTimeSnapshot()); } // Update time states - record only if car exists and not rewinding time RecordSnapshots = carExists && !Rewinding && !LevelEnded; // Update level end state if (ActiveCar == null && !LevelEnded) { _levelEndTimer += Time.deltaTime; if (_levelEndTimer > 2f) { LevelEndState = LevelEndState.FailTimeline; EndLevel(SceneManager.GetActiveScene().name); } } // Check for out of fuel if (ActiveCar != null && RewindCount == 0 && !LevelEnded && ActiveCar.Velocity.magnitude < 0.1f && ActiveCar.Energy <= 0f) { LevelEndState = LevelEndState.FailFuel; EndLevel(SceneManager.GetActiveScene().name); } // Fading if (_fadeTimer > 0f) { _fadeTimer -= Time.deltaTime; var fadeT = 1f - _fadeTimer / _fadeTime; _fadeAmount = Mathf.Lerp(_fadeStart, _fadeTarget, fadeT); _fadeUIController.SetFade(_fadeAmount); if (_fadeTimer <= 0f) { _fadeTimer = 0f; _fadeAmount = _fadeTarget; } } }