Пример #1
0
    private IEnumerator Collect(Transform targetTransform, Action callback)
    {
        Vector3 worldPosition = _canvasContainer.transform.TransformPoint(_rectTransform.localPosition);
        Vector3 startPos      = targetTransform.position;
        Vector3 up            = _rectTransform.transform.up;
        Vector3 baseScale     = targetTransform.localScale;

        Vector3 pos;
        Vector3 yPos;
        float   t    = 0f;
        float   size = 1f;

        while (t < 1f)
        {
            worldPosition = _canvasContainer.transform.TransformPoint(_rectTransform.localPosition);
            t             = Mathf.Clamp01(t + (Time.deltaTime * speed));
            size          = Easing.SetOutRange(Easing.Flip(t), 0f, baseScale.x);
            targetTransform.localScale = new Vector3(size, size, size);
            pos  = Vector3.Lerp(startPos, worldPosition, t);
            yPos = up * Easing.Arch(t) * 2f;
            targetTransform.position = pos + (yPos * heightMultiplicator);
            if (t >= 1f)
            {
                callback();
                StopCoroutine(Collect(targetTransform, callback));
            }
            yield return(null);
        }
    }
Пример #2
0
    private void UpdateNote(OnNoteTimeEvent e)
    {
        float s = Easing.Arch(e.time) / 2f;

        noteMarker.transform.localScale = new Vector3(1f + s, 1f + s, 1f);
        Color col = noteMarker.color;

        col.a            = Easing.SmoothStop(e.time, 2);
        noteMarker.color = col;
    }
        private void MoveAnimation()
        {
            if (tAnimTime > 0f)
            {
                tAnim = (tAnim + Mathf.Clamp01(Time.deltaTime * (1f / tAnimTime))) % 1f;
            }
            float x = Easing.Arch(tAnim);

            _activePointDistance = PointDistance + (animDist * x);
        }
Пример #4
0
    protected IEnumerator PopJumpCoroutine(Transform target)
    {
        popJumping = true;
        float   t         = 0f;
        Vector3 basePos   = target.position;
        Vector3 baseScale = target.localScale;
        float   x         = 0;

        while (t < 1f)
        {
            t += Time.deltaTime * 2f;
            t  = Mathf.Clamp01(t);
            x  = Easing.Arch(t);
            target.position   = basePos + (((popDirection * t) + (popUpDirection * x)) * 0.1f);
            target.localScale = new Vector3(t * baseScale.x, t * baseScale.y, t * baseScale.z);
            yield return(null);
        }
        popJumping = false;
    }
Пример #5
0
    private void Update()
    {
        if (!_init)
        {
            return;
        }

        Vector3 prevPos = transform.position;

        transform.position += Vector3.right * (Time.deltaTime * (1f / maxXSpeed) * _direction);
        if (!_jumping && !_onGround)
        {
            transform.position += Vector3.down * (Time.deltaTime * _normalizedFallSpeed * maxYSpeed);
        }

        Vector3 castOrigin      = transform.position + (Vector3.up * 0.25f);
        Vector3 directionVector = Vector3.right * _direction;

        if (!_leavingPortal)
        {
            portalHit = Physics2D.CircleCast(castOrigin, 0.2f, directionVector, 0f, LayerMask.GetMask(new string[] { "Portal" }));
            if (portalHit.collider != null && Input.GetMouseButtonDown(0))
            {
                _leavingPortal = true;
                LevelManager.Instance.TeleportPlayer(portalHit.collider.GetComponent <PortalObject>());
                _jumpTime = 0f;
                _jumping  = false;
                return;
            }
        }
        else
        {
            portalHit = Physics2D.CircleCast(castOrigin, 0.5f, directionVector, 0f, LayerMask.GetMask(new string[] { "Portal" }));
            if (portalHit.collider == null)
            {
                _leavingPortal = false;
            }
        }

        bool wasOnGround = _onGround;

        groundHits[0] = Physics2D.Raycast(castOrigin + new Vector3(-0.125f, 0f, 0f), -Vector2.up, 0.25f, LayerMask.GetMask(new string[] { "Wall" }));
        groundHits[1] = Physics2D.Raycast(castOrigin + new Vector3(0.125f, 0f, 0f), -Vector2.up, 0.25f, LayerMask.GetMask(new string[] { "Wall" }));
        _onGround     = groundHits[0] || groundHits[1];
        if (!_onGround)
        {
            _normalizedFallSpeed = Mathf.Clamp(_normalizedFallSpeed + Time.deltaTime, 0.01f, 1f);
        }
        else
        {
            _normalizedFallSpeed = 0f;
            if (!wasOnGround)
            {
                _jumping  = false;
                _jumpTime = 0f;
                if (groundHits[0].point != Vector2.zero)
                {
                    transform.position = new Vector3(transform.position.x, Physics2D.Raycast(castOrigin + new Vector3(-0.125f, 0.5f, 0f), -Vector2.up, 1f, LayerMask.GetMask(new string[] { "Wall" })).point.y);
                }
                else if (groundHits[1].point != Vector2.zero)
                {
                    transform.position = new Vector3(transform.position.x, Physics2D.Raycast(castOrigin + new Vector3(0.125f, 0.5f, 0f), -Vector2.up, 1f, LayerMask.GetMask(new string[] { "Wall" })).point.y);
                }
                castOrigin = transform.position + (Vector3.up * 0.25f);
                PlayerCamera.Instance.SnapY(transform.position.y);
            }
        }

        wallHit = Physics2D.Raycast(castOrigin, directionVector, 0.25f, LayerMask.GetMask(new string[] { "Wall" }));
        if (wallHit.collider != null)
        {
            _direction        *= -1;
            transform.position = new Vector2(wallHit.point.x + (_direction * 0.25f), transform.position.y);
        }

        if (_jumping)
        {
            _jumpTime          = Mathf.Clamp01(_jumpTime + (Time.deltaTime * (1f / maxXSpeed)));
            transform.position = new Vector3(transform.position.x, _jumpStartY + Easing.Arch(_jumpTime) * jumpHeight, 0f);
            if (_jumpTime == 1f)
            {
                _jumpTime            = 0f;
                _jumping             = false;
                _normalizedFallSpeed = Mathf.Clamp01((Vector3.Distance(prevPos, transform.position) / Time.deltaTime) / maxXSpeed);
            }
        }

        if (!_jumping && _onGround && Input.GetMouseButtonDown(0))
        {
            _jumpStartY = transform.position.y;
            _jumping    = true;
        }
    }