Beispiel #1
0
    public override void Use()
    {
        GameObject obj        = Instantiate(ProjectilePrefab, transform.position, Quaternion.identity) as GameObject;
        Projectile projectile = obj.GetComponent <Projectile>();

        projectile.SetVelocity(new Vector2(_controller.FacingDirection, 0));
        _controller.AddForce(new Vector2(10 * -_controller.FacingDirection, 0));
    }
Beispiel #2
0
    private void Jump()
    {
        // Checks if the player has already a vertical force
        if (_controller.Velocity.y > 0.001f)
        {
            _controller.SetVerticalForce(0);
        }

        // Adds the new vertical force
        _controller.AddForce(new Vector2(_controller.Velocity.x, JumpMagnitude));
    }
Beispiel #3
0
    public void HandleKnockback(CharacterController2D controller, Vector2 velocity, GameObject owner)
    {
        if (Parameters.Model == Knockback.KnockBackModel.Constant)
        {
            var direction = -(controller.Velocity - velocity) / Mathf.Sqrt(Vector2.SqrMagnitude(controller.Velocity - velocity));
            var magnitude = Parameters.Damage * Parameters.RepulsiveFactor;
            controller.SetForce(magnitude * direction);
        }
        else if (Parameters.Model == Knockback.KnockBackModel.Variable)
        {
            var vector = 2 * velocity - controller.Velocity; // -v(player wrt enemy) will be the velocity of player wrt enemy.
            vector *= Parameters.RepulsiveFactor * Parameters.Damage;

            controller.SetForce(vector);
        }
        else if (Parameters.Model == Knockback.KnockBackModel.MoveDirection)
        {
            if (velocity.sqrMagnitude == 0)
                return;
            var direction = velocity / Mathf.Sqrt(Vector2.SqrMagnitude(velocity));
            var magnitude = Parameters.Damage * Parameters.RepulsiveFactor;

            if (Parameters.AddForce)
                controller.AddForce(magnitude * direction);
            else
                controller.SetForce(magnitude * direction);

        }
        else if (Parameters.Model == Knockback.KnockBackModel.Positional)
        {
            var playerPosition = controller.transform.position;
            var enemyPosition = owner.transform.position;

            var direction = (playerPosition - enemyPosition) / Mathf.Sqrt(Vector3.SqrMagnitude(playerPosition - enemyPosition));
            var magnitude = Parameters.Damage * Parameters.RepulsiveFactor;

            controller.SetForce(magnitude * direction);
        }
    }
    public void AddForce()
    {
        foreach (RaycastHit2D hit in Physics2D.CircleCastAll(transform.position, Radius, Vector2.zero))
        {
            if (hit.rigidbody == null || IgnoreLayer.value == (IgnoreLayer.value | 1 << hit.collider.gameObject.layer))
            {
                continue;
            }

            Vector2 delta = hit.transform.position - transform.position;
            CharacterController2D charController = hit.rigidbody.gameObject.GetComponent <CharacterController2D>();

            float falloff = ProcessFalloff(delta.magnitude);

            if (charController != null)
            {
                charController.AddForce(delta.normalized * Force * falloff, ForceMode);
            }
            else
            {
                hit.rigidbody.AddForce(delta.normalized * Force * falloff, ForceMode);
            }
        }
    }
Beispiel #5
0
    // Update is called once per frame
    void Update()
    {
        if (Input.touchCount > 0)
        {
            Touch touch = Input.GetTouch(0);

            //if (!EventSystem.current.IsPointerOverGameObject()) {
            switch (touch.phase)
            {
            //ifall man bara klickar

            /* case TouchPhase.Stationary:
             *   _controllerSwipe.Jump();
             *   break;*/

            //om man swipar
            case TouchPhase.Began:
                startPos        = touch.position;
                directionChosen = false;

                break;

            case TouchPhase.Ended:
                endPos    = touch.position;
                direction = startPos - endPos;         // räkna ut riktningsvektorn

                //om riktingsvektorns längd är mindre än 9 och man ej swipar bakåt skickas vektorn till AdForce
                float temp1 = Mathf.Sqrt(Mathf.Pow(direction.x, 2) + Mathf.Pow(direction.y, 2));
                if (temp1 > 15)
                {
                    float theta = Mathf.Atan(direction.y / direction.x);
                    if (theta >= -Mathf.PI / 2 && theta <= Mathf.PI / 2 && -direction.x >= 0)
                    {
                        _controllerSwipe.AddForce(-direction * throwForce);
                    }
                }
                break;
            }
            //}
        }



        /*
         * //if you touch the screen
         *      if(Input.touchCount > 0 && Input.GetTouch (0).phase == TouchPhase.Began)
         * {
         *  //getting toush position and marking time when you touch the screen
         * //  touchTimeStart = Time.time;
         *  startPos = Input.GetTouch (0).position;
         *
         *
         *  _controllerSwipe.Jump();
         * }
         *
         * //if you release your finger
         * if (Input.touchCount > 0 && Input.GetTouch (0).phase == TouchPhase.Ended)
         * {
         *
         *
         *  // getting release finger position
         *  endPos = Input.GetTouch (0).position;
         *
         *  //calculating swipe direction
         *  direction = startPos - endPos;
         *
         *
         *  //absolutbeloppet för direction för att se om vi bara tryckt eller swipat
         *  float temp1 = Mathf.Sqrt(Mathf.Pow(direction.x, 2) + Mathf.Pow(direction.y, 2));
         *
         *
         *  if (temp1 < 10)
         *  {
         *
         *  }
         *  else
         *  {
         *      float theta = Mathf.Atan(direction.y / direction.x);
         *      if (theta >= -Mathf.PI/2 && theta <= Mathf.PI/2 && -direction.x>=0)
         *      {
         *          _controllerSwipe.AddForce(-direction * throwForce);
         *
         *      }
         *  }
         *
         * }
         */
    }