Exemple #1
0
    private IEnumerator SmoothDash(DashComp competence, float dx = 0, float dy = 0)
    {
        competence.Usable   = false;
        _playerData.CanMove = false;
        Vector3 dir = dx == 0 && dy == 0 ? Direction() : new Vector3(dx, dy, 0);

        if ((string)Coffre.Regarder("mode") == "multi" && _playerData.MultiID + "" == (string)Coffre.Regarder("id"))
        {
            MultiManager.socket.Send("PINFO DASH " + dir.x + " " + dir.y);
        }
        Debug.Log(_playerData.MultiID + " dashing to " + dir.x + " " + dir.y + " ( " + dx + " " + dy);
        Vector3 direction = CheckObstacles(dir, competence);

        float   step = competence.DistDash * Time.fixedDeltaTime;
        float   t    = 0;
        Vector3 end  = transform.position + direction - direction * 0.01f;

        while ((end - transform.position).magnitude > 0.1f)
        {
            t += step;
            transform.position = Vector3.Lerp(transform.position, end, t);
            yield return(new WaitForFixedUpdate());
        }

        transform.position  = end;
        _playerData.CanMove = true;
        yield return(new WaitForSeconds(competence.Cooldown));

        competence.Usable = true;
    }
Exemple #2
0
    private IEnumerator Dash(DashComp competence, float dx = 0, float dy = 0)
    {
        competence.Usable   = false;
        _playerData.CanMove = false;
        Vector3 dir = dx == 0 && dy == 0 ? Direction() : new Vector3(dx, dy, 0);

        if ((string)Coffre.Regarder("mode") == "multi" && _playerData.MultiID + "" == (string)Coffre.Regarder("id"))
        {
            MultiManager.socket.Send("PINFO DASH " + dir.y + " " + dir.x);
        }
        Vector3 direction = CheckObstacles(dir, competence);

        transform.position += direction - direction * 0.01f;
        _playerData.CanMove = true;

        yield return(new WaitForSeconds(competence.Cooldown));

        competence.Usable = true;
    }
Exemple #3
0
    private Vector3 CheckObstacles(Vector3 dir, DashComp competence)
    {
        int xDir = dir.x > 0 ? 1 : -1;
        int yDir = dir.y > 0 ? 1 : -1;

        PlayerDashEvent.Raise(new EventArgsInt(_playerData.MultiID));

        Vector3 playerPos = transform.position - new Vector3(0, _playerData.Height / 2);

        if (yDir > 0)
        {
            playerPos.y += _playerData.FeetHeight;
        }

        Vector3 playerPosleft  = playerPos + new Vector3(_playerData.Width / 2 * xDir, 0, 0);
        Vector3 playerPosRight = playerPos + new Vector3(-_playerData.Width / 2 * xDir, 0, 0);

        RaycastHit2D rayL = Physics2D.Raycast(playerPosleft, dir * competence.DistDash, competence.DistDash, BlockingLayer);
        RaycastHit2D rayR = Physics2D.Raycast(playerPosRight, dir * competence.DistDash, competence.DistDash, BlockingLayer);

        if (rayL && rayR)
        {
            if (rayL.distance < rayR.distance)
            {
                return(dir * rayL.distance);
            }

            return(dir * rayR.distance);
        }

        if (rayL)
        {
            return(dir * rayL.distance);
        }
        if (rayR)
        {
            return(dir * rayR.distance);
        }

        return(dir * competence.DistDash);
    }