Example #1
0
    private IEnumerator LoadSceneAsyncCoroutine(string sceneName, bool newGame)
    {
        AsyncOperation asyncOperation = SceneManager.LoadSceneAsync(sceneName);

        gameDataHolder = null;

        while (!asyncOperation.isDone)
        {
            yield return(new WaitForEndOfFrame());
        }

        if (sceneName == mainSceneName)
        {
            gameDataHolder = GameObject.FindGameObjectWithTag("Game Data Holder");
            InitializeGame();

            if (newGame)
            {
                DeleteSaveData();
                SaveData();
            }
            else
            {
                LoadData(false);
            }
        }

        currentSceneName = sceneName;

        CoroutineManager.DeleteCoroutine("LoadSceneAsyncCoroutine");
    }
Example #2
0
    private IEnumerator ChangeResolutionCoroutine()
    {
        Screen.SetResolution(selectedResolution.width, selectedResolution.height, true, selectedResolution.refreshRate);
        yield return(new WaitForSeconds(0.2f));

        currentResolution = Screen.currentResolution;
        ResetDropdownValues();
        applyButton.gameObject.SetActive(false);
        CoroutineManager.DeleteCoroutine("ChangeResolutionCoroutine");
    }
Example #3
0
 private static IEnumerator IgnoreLayerCollisionCoroutine(LayerMask layerMask, LayerMask layerMaskToIgnore,
                                                          bool ignore,
                                                          float time)
 {
     for (var i = 0; i <= 1; i++)
     {
         Physics2D.IgnoreLayerCollision(layerMask.value, layerMaskToIgnore.value, ignore);
         ignore = !ignore;
         yield return(new WaitForSeconds(time));
     }
     CoroutineManager.DeleteCoroutine("IgnoreLayerCollisionCoroutine");
 }
Example #4
0
    private IEnumerator GetNativeResolutionCoroutine()
    {
        var initialResolution = Screen.currentResolution;

        Screen.SetResolution(initialResolution.width, initialResolution.height, false,
                             initialResolution.refreshRate);
        yield return(new WaitForSeconds(0.2f));

        NativeResolution = Screen.currentResolution;
        Screen.SetResolution(initialResolution.width, initialResolution.height, true,
                             initialResolution.refreshRate);
        CoroutineManager.DeleteCoroutine("GetNativeResolutionCoroutine");
    }
Example #5
0
    private IEnumerator EffectCoroutine(float areaOfEffectAngle, Vector3 position)
    {
        var contactFilter2D = new ContactFilter2D
        {
            useTriggers  = true,
            useLayerMask = true,
            layerMask    = LayerMask.GetMask("Enemy", "Player")
        };

        var collider2Ds = new Collider2D[5];


        while (Time.time < durationCurrentTime && hasExploded)
        {
            var areaOfEffect = Physics2D.OverlapBox(position, new Vector2(area, 1), areaOfEffectAngle,
                                                    contactFilter2D, collider2Ds);


            if (areaOfEffect > 0)
            {
                for (var i = 0; i < collider2Ds.Length; i++)
                {
                    if (collider2Ds[i] != null)
                    {
                        PhysicsHelpers.IgnoreCollision(triggerCollider2D, collider2Ds[i], true);
                        var enemy = collider2Ds[i].GetComponent <Enemy>();
                        if (enemy != null)
                        {
                            enemy.TakeDamage(damage * Time.fixedDeltaTime);
                        }
                        else
                        {
                            var player = collider2Ds[i].GetComponent <PlayerStatusController>();
                            if (player != null)
                            {
                                player.TakeDamage(damage * Time.fixedDeltaTime);
                            }
                        }
                    }
                }
            }

            yield return(new WaitForFixedUpdate());
        }

        CoroutineManager.DeleteCoroutine("EffectCoroutine");
        Destroy(this.gameObject);
    }
Example #6
0
    public static IEnumerator ZoomCameraCoroutine(float zoomSize, float steps, bool zoomOut)
    {
        float f = 0;

        while (f <= 1)
        {
            Camera.main.orthographicSize =
                zoomOut ? Mathf.Lerp(initialSize, zoomSize, f) : Mathf.Lerp(zoomSize, initialSize, f);

            f += 1f / steps;

            yield return(new WaitForSeconds(timeToZoomCamera / steps));
        }

        CoroutineManager.DeleteCoroutine("ZoomCameraCoroutine");
    }
Example #7
0
    private IEnumerator MorphinEffectCoroutine(float staminaRegenMultiplier, float velocityMultiplier)
    {
        playerStatusController.StaminaRegenMultiplier = staminaRegenMultiplier;
        playerHorizontalMovement.VelocityMultiplier   = velocityMultiplier;

        while (Time.time <= currentTimeMorphinEffect)
        {
            yield return(new WaitForFixedUpdate());
        }

        playerStatusController.StaminaRegenMultiplier = 1f;
        playerHorizontalMovement.VelocityMultiplier   = 1f;

        playerStatusVariables.isMorphinActive = false;
        CoroutineManager.DeleteCoroutine("MorphinEffectCoroutine", this);
    }
    private IEnumerator RegenStaminaCoroutine()
    {
        var t = Time.fixedDeltaTime;

        while (currentStamina < maxStamina)
        {
            currentStamina += staminaRegenRatePerSecond * StaminaRegenMultiplier * t;

            if (currentStamina > maxStamina)
            {
                currentStamina = maxStamina;
            }
            staminaBar.value = currentStamina;
            yield return(new WaitForFixedUpdate());
        }

        CoroutineManager.DeleteCoroutine("RegenStaminaCoroutine");
    }
Example #9
0
    protected virtual void RevokeControl(float timeToRevoke, bool revoke,
                                         ControlTypeToRevoke controlTypeToRevoke, RevokeControlVariables revokeControlVariables,
                                         MonoBehaviour monoBehaviour)
    {
        var coroutine = CoroutineManager.FindCoroutine("RevokeControlCoroutine", monoBehaviour);

        if (coroutine == null)
        {
            CoroutineManager.AddCoroutine(
                RevokeControlCoroutine(timeToRevoke, controlTypeToRevoke, revokeControlVariables, true, monoBehaviour),
                "RevokeControlCoroutine", monoBehaviour);
        }
        else if (!coroutine.IsRunning)
        {
            CoroutineManager.DeleteCoroutine("RevokeControlCoroutine", monoBehaviour);
            CoroutineManager.AddCoroutine(
                RevokeControlCoroutine(timeToRevoke, controlTypeToRevoke, revokeControlVariables, true, monoBehaviour),
                "RevokeControlCoroutine", monoBehaviour);
        }
    }
    public void SpendStamina(float percentOfStaminaToSpent, bool imediate)
    {
        if (CoroutineManager.CheckIfCoroutineExists("RegenStaminaCoroutine"))
        {
            CoroutineManager.DeleteCoroutine("RegenStaminaCoroutine");
        }

        if (imediate)
        {
            currentStamina -= maxStamina * percentOfStaminaToSpent / 100;
        }
        else if (Time.time >= timeTrackerForSpendingStamina)
        {
            timeTrackerForSpendingStamina = Time.time + Time.fixedDeltaTime;
            currentStamina -= maxStamina * percentOfStaminaToSpent / 100 * Time.fixedDeltaTime;
        }

        currentStamina   = currentStamina <= 0 ? 0 : currentStamina;
        staminaBar.value = currentStamina;

        currentTimeToStartStaminaRegen = Time.time + timeToStartStaminaRegen;
    }
Example #11
0
    public IEnumerator PrimaryAttack()
    {
        apostleStatusVariables.isAttacking = true;
        yield return(new WaitForSeconds(0.6f));

        RaycastHit2D ray = Physics2D.Raycast(
            transform.position,
            apostleStatusVariables.facingDirection == FacingDirection.Right ? Vector2.right : Vector2.right * -1,
            range, LayerMask.GetMask("Player"));

        if (ray.collider != null &&
            !Physics.GetIgnoreLayerCollision(LayerMask.NameToLayer("Enemy"), LayerMask.NameToLayer("Player")))
        {
            var player = ray.collider.GetComponent <PlayerStatusController>();
            if (player != null)
            {
                player.TakeDamage(baseDamage);
            }
        }
        apostleController.RevokeControl(1f, true, ControlTypeToRevoke.AllMovement, this);
        apostleStatusVariables.isAttacking = false;
        CoroutineManager.DeleteCoroutine("PrimaryAttackCoroutine", this);
    }
    public IEnumerator RegenLifeTemporaryCoroutine(float lifeToRegen, bool deactivateMorphin)
    {
        originalHealth = CurrentLife;
        RegenLife(lifeToRegen);
        while (regenLifeTemporaryTime > Time.time)
        {
            if (CurrentLife > originalHealth)
            {
                yield return(new WaitForFixedUpdate());
            }
            else
            {
                regenLifeTemporaryTime = Time.time;
            }
        }
        if (deactivateMorphin)
        {
            playerStatusVariables.isMorphinActive = false;
        }

        currentLife   = originalHealth;
        lifeBar.value = currentLife;
        CoroutineManager.DeleteCoroutine("RegenLifeTemporaryCoroutine");
    }
Example #13
0
    public override void StartMovement()
    {
        playerController.CheckForVerticalInput();

        playerStatusVariables.canJump = CheckGroundForJump();

        playerStatusVariables.isOnAir = playerStatusVariables.CheckIsOnAir();

        if (playerStatusVariables.canClimbLadder && playerController.ClimbLadderPress)
        {
            playerStatusVariables.isClimbingLadder =
                playerStatusVariables.canClimbLadder && playerController.ClimbLadderPress ||
                playerStatusVariables.isClimbingLadder;
        }

        if (playerStatusVariables.canClimbObstacle && playerController.ClimbObstaclePress)
        {
            playerStatusVariables.isClimbingObstacle =
                playerStatusVariables.canClimbObstacle && playerController.ClimbObstaclePress ||
                playerStatusVariables.isClimbingObstacle;
        }

        playerStatusVariables.isJumping = playerStatusVariables.canJump && playerController.Jump &&
                                          !playerStatusVariables.isClimbingObstacle && player.CheckStamina(20, true);


        //Para velocidades ridiculamente altas, vai bugar
        if (playerStatusVariables.isClimbingLadder && playerStatusVariables.canJump)
        {
            var coroutine = CoroutineManager.FindCoroutine("ClimbOntoLadderCoroutine");
            if (coroutine != null && !coroutine.IsRunning)
            {
                PhysicsHelpers.IgnoreCollision(capsuleCollider2D,
                                               GetLadderPosition().GetComponent <LadderController>().adjacentCollider, false);
                playerStatusVariables.isClimbingLadder = false;
                playerController.RevokeControl(0.3f, false, ControlTypeToRevoke.AllMovement, monoBehaviour);
                PhysicsHelpers.SwitchGravity(rigidbody2D, true, currentGravityScale);
                PhysicsHelpers.ResetVelocityY(rigidbody2D);
                rigidbody2D.isKinematic = false;

                CoroutineManager.DeleteCoroutine("ClimbOntoLadderCoroutine");
            }
        }

        if (playerStatusVariables.isClimbingObstacle && playerStatusVariables.canJump)
        {
            var coroutine = CoroutineManager.FindCoroutine("ClimbOntoObstacleCoroutine");
            if (coroutine != null && !coroutine.IsRunning)
            {
                playerStatusVariables.isClimbingObstacle = false;
                playerController.RevokeControl(0.3f, false, ControlTypeToRevoke.AllMovement, monoBehaviour);
                PhysicsHelpers.SwitchGravity(rigidbody2D, true, currentGravityScale);
                rigidbody2D.isKinematic = false;

                CoroutineManager.DeleteCoroutine("ClimbOntoObstacleCoroutine");
            }
        }

        CheckForClimbingStairs();

        if (playerStatusVariables.isOnAir)
        {
            VerticalMovementState = VerticalMovementState.OnAir;
        }
        else
        {
            if (playerStatusVariables.isJumping)
            {
                VerticalPressMovementState = VerticalPressMovementState.Jump;
            }
            else if (playerStatusVariables.canClimbLadder && playerController.ClimbLadderPress)
            {
                VerticalPressMovementState = VerticalPressMovementState.ClimbLadder;
            }
            else if (playerStatusVariables.canClimbObstacle && playerController.ClimbObstaclePress)
            {
                VerticalPressMovementState = VerticalPressMovementState.ClimbObstacle;
            }

            if (playerStatusVariables.isClimbingLadder &&
                !MathHelpers.Approximately(playerController.VerticalMovement, 0, float.Epsilon))
            {
                VerticalMovementState = VerticalMovementState.ClimbingLadder;
            }
            else if (playerStatusVariables.isClimbingObstacle)
            {
                VerticalMovementState = VerticalMovementState.ClimbingObstacle;
            }
            else if (playerStatusVariables.isJumping)
            {
                VerticalMovementState = VerticalMovementState.OnAir;
            }
            else
            {
                VerticalMovementState = VerticalMovementState.Grounded;
            }
        }
    }