private void InitProgram()
    {
        if (trainingEventRelay.CurrentProgram)
        {
            trainingProgram = trainingEventRelay.CurrentProgram;
        }
        else
        {
            trainingProgram = fallBackProgram;
            trainingEventRelay.CurrentProgram = fallBackProgram;
        }

        trainingProgram.ResetProgress();
        trainingProgram.ResetScores();
        trainingSessions    = trainingProgram.trainingSessions;
        currentSessionIndex = 0;
        currentSession      = trainingSessions[0];

        trainingEventRelay.ShowSessionOverview(currentSession);

        this.DoSequence(new Func <float>[] {
            () => 1f,
            () => {
                SetupSessionCoordinator(currentSession);

                return(0f);
            }
        });
    }
Exemplo n.º 2
0
    private void LoadTrainingProgram(TrainingProgramData programData)
    {
        List <ApplicationScene> scenesToLoad = new List <ApplicationScene> {
            trainingScene
        };

        foreach (TrainingSessionData session in programData.trainingSessions)
        {
            foreach (ApplicationScene uiScene in session.uiScenes)
            {
                if (scenesToLoad.Contains(uiScene))
                {
                    continue;
                }
                scenesToLoad.Add(uiScene);
            }
        }

        // TODO tell global instance which training program is played!
        trainingEventRelay.CurrentProgram = programData;

        HideMenu();
        applicationEventRelay.RequestLoadingScene(scenesToLoad.ToArray(), true);
    }
Exemplo n.º 3
0
    private void ShowResults(TrainingProgramData programData)
    {
        sessionNameText.text = $"{programData.programName} - Results";

        int programTotalScore   = programData.GetTotalScore();
        int programMaximumScore = programData.GetMaximumScore();

        totalScoreText.text = $"{programTotalScore}/{programMaximumScore}";

        float ratingValue    = (float)programTotalScore / programMaximumScore * 100f;
        float f              = 100f / ratingScaleImageNumber;
        float colourDuration = (float)ratingScaleImages.Count / (ratingScaleImages.Count * ratingScaleImages.Count);
        float delay          = colourDuration * 1.5f;

        AnimationSequence ratingAnimation = new AnimationSequence(applicationEventRelay.RequestStartingCoroutine);

        ratingAnimation.AddDelay(1f);

        spinningAnimations.Clear();
        AnimationOperation spinningOperation1 = new AnimationOperation(null, UIAnimationType.Rotate, EaseType.Linear, 0, 4f)
        {
            rotateSettings = new AnimationOperation.RotateSettings {
                startEuler  = new Vector3(0, 0, 0),
                targetEuler = new Vector3(0, 0, 180)
            }
        };
        AnimationOperation spinningOperation2 = new AnimationOperation(null, UIAnimationType.Rotate, EaseType.Linear, 3.95f, 4f)
        {
            rotateSettings = new AnimationOperation.RotateSettings {
                startEuler  = new Vector3(0, 0, 180),
                targetEuler = new Vector3(0, 0, 360)
            }
        };

        for (int i = 0; i < ratingScaleImages.Count; i++)
        {
            if (i * f >= ratingValue)
            {
                break;
            }

            AnimationOperation colourOperation = new AnimationOperation(ratingScaleImages[i].gameObject, UIAnimationType.Colour, EaseType.CubicIn, delay, colourDuration)
            {
                colourSettings = new AnimationOperation.ColourSettings {
                    startColour  = ratingScaleImages[i].color,
                    targetColour = Color.white
                }
            };

            ratingAnimation.AddOperation(colourOperation);

            AnimationSequence spinningAnim = new AnimationSequence(applicationEventRelay.RequestStartingCoroutine);

            spinningAnim.AddOperation(
                new AnimationOperation(spinningOperation1)
            {
                targetObject = ratingScaleImages[i].gameObject
            },
                new AnimationOperation(spinningOperation2)
            {
                targetObject = ratingScaleImages[i].gameObject
            });
            spinningAnim.Loop();

            spinningAnimations.Add(spinningAnim);
        }

        foreach (TrainingSessionData session in programData.trainingSessions)
        {
            GameObject sessionResultRow = Instantiate(sessionResultRowPrefab, sessionScrollRect.content);
            if (!sessionResultRow.TryGetComponent(out SessionResultRow sessionResult))
            {
                continue;
            }

            sessionResult.Setup(session.sessionName, $"{session.Score}/{session.MaximumScore}", null);
            // TODO hook session row buttons to show respective session results => set action
        }

        ShowWindow(true, true);
        ratingAnimation.Play();

        foreach (AnimationSequence animationSequence in spinningAnimations)
        {
            animationSequence.Play();
        }
    }
Exemplo n.º 4
0
 public void ShowResults(TrainingProgramData programData)
 {
     OnShowResults?.Invoke(programData);
 }