Example #1
0
        private void Awake()
        {
            cardStorage     = new CardStorage(defaultCharacterSprite, loadRemoteCollectionFirst);
            progressStorage = new ProgressStorage(cardStorage);

            GameStartOverlay.FadeOutCallback = StartGameplayLoop;
        }
Example #2
0
        private void Awake()
        {
            // Listen for Escape key ('Back' on Android) to quit the game
            inputDispatcher.AddKeyDownHandler(KeyCode.Escape,
                                              keyCode => Application.Quit());

            cardStorage     = new CardStorage(defaultCharacterSprite);
            progressStorage = new ProgressStorage(cardStorage);

            GameStartOverlay.FadeOutCallback = StartGameplayLoop;
        }
Example #3
0
        private void Awake()
        {
            // Listen for Escape key ('Back' on Android) that suspends the game on Android
            // or ends it on any other platform
                        #if UNITY_ANDROID
            inputDispatcher.AddKeyUpHandler(KeyCode.Escape,
                                            keyCode => {
                AndroidJavaObject activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer")
                                             .GetStatic <AndroidJavaObject>("currentActivity");
                activity.Call <bool>("moveTaskToBack", true);
            });
                        #else
            inputDispatcher.AddKeyDownHandler(KeyCode.Escape,
                                              keyCode => Application.Quit());
                        #endif

            cardStorage     = new CardStorage(defaultCharacterSprite, loadRemoteCollectionFirst);
            progressStorage = new ProgressStorage(cardStorage);

            GameStartOverlay.FadeOutCallback = StartGameplayLoop;
        }
    private static void UpdateCachedLocalPlayerStorageReference()
    {
        // If we need initialize or reinitialize the cache (eg. after a total scene-wipe).
        if (cachedLocalPlayerProgressStorage == null)
        {
            ProgressStorage[] progressStorages = FindObjectsOfType <ProgressStorage>();

            if (progressStorages.Length == 0)
            {
                throw new InvalidOperationException(
                          "There are no active ProgressStorage components, thus there's no progress storage for the local player.");
            }

            if (progressStorages.Length > 1)
            {
                throw new InvalidOperationException(
                          "There are multiple active ProgressStorage components, thus it's ambiguous as to which one is for the local player. This likely means ProgressStorage itself needs to be further iterated upon to remove the ambiguity.");
            }

            cachedLocalPlayerProgressStorage = progressStorages[0];
        }
    }
Example #5
0
    private bool ComputeProgressConditionEvaluation()
    {
        bool currentConditionEvaluation = true;

        // NOTE: Empty-conditions (no clauses) intentionally evaluate to true.
        if (Condition.Clauses.Length > 0)
        {
            ConditionConcatenator lastConcatenator = ConditionConcatenator.And;

            ProgressStorage progressStorage = ProgressStorage.LocalPlayerProgressStorage;

            foreach (ConditionClause clause in Condition.Clauses)
            {
                if (string.IsNullOrEmpty(clause.ProgressName))
                {
                    throw new System.InvalidOperationException("Condition-clause rendered invalid by a missing progress-name.");
                }

                float progressValue =
                    progressStorage.GetProgressValueAsFloat(clause.ProgressName);

                bool progressValuesAreEqual =
                    Mathf.Approximately(progressValue, clause.ProgressValue);

                bool clauseEvaluation;

                switch (clause.Comparitor)
                {
                case ConditionComparitor.Equal:
                    clauseEvaluation = progressValuesAreEqual;
                    break;

                case ConditionComparitor.NotEqual:
                    clauseEvaluation = (progressValuesAreEqual == false);
                    break;

                case ConditionComparitor.GreaterThan:
                    clauseEvaluation = (
                        (progressValue > clause.ProgressValue) &&
                        (progressValuesAreEqual == false));
                    break;

                case ConditionComparitor.GreaterThanOrEqual:
                    clauseEvaluation = (
                        (progressValue > clause.ProgressValue) ||
                        progressValuesAreEqual);
                    break;

                case ConditionComparitor.LessThan:
                    clauseEvaluation = (
                        (progressValue < clause.ProgressValue) &&
                        (progressValuesAreEqual == false));
                    break;

                case ConditionComparitor.LessThanOrEqual:
                    clauseEvaluation = (
                        (progressValue < clause.ProgressValue) ||
                        progressValuesAreEqual);
                    break;

                default:
                    throw new System.ComponentModel.InvalidEnumArgumentException(clause.Comparitor.ToString());
                }

                // Concatenate the current clause onto the last clause's results.
                switch (lastConcatenator)
                {
                case ConditionConcatenator.And:
                    currentConditionEvaluation = (currentConditionEvaluation && clauseEvaluation);
                    break;

                case ConditionConcatenator.Or:
                    currentConditionEvaluation = (currentConditionEvaluation || clauseEvaluation);
                    break;

                default:
                    throw new System.ComponentModel.InvalidEnumArgumentException(lastConcatenator.ToString());
                }

                lastConcatenator = clause.Concatenator;
            }
        }

        return(currentConditionEvaluation);
    }