示例#1
0
    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;
    }
示例#2
0
    public void EndGame(LevelEndState endState, int levelObjectIndex)
    {
        ViewModel.EndGame.Dispatch(endState, levelObjectIndex);

        if (endState == LevelEndState.Fail)
        {
            SawController.SetSawMovement(false);
            SawController.SendBladeFlying();
        }
        BladeCollider.enabled = false;
    }
示例#3
0
    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;
    }
示例#4
0
        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();
        }
示例#5
0
    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;
        }
        }
    }
示例#6
0
    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;
            }
        }
    }