Example #1
0
    void Shoot(Vector3 dir, float defaultMargin = 0, float maxDistance = 500f)
    {
        switch (weaponComponent.weapon)
        {
        case 0:

            break;

        case 1:

            //Mouse and playerTorso position variables.
            Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            Vector3 pos      = playerTorso.transform.position + new Vector3(0, heightOffsetY, playerTorso.transform.position.z);

            //Ray Propierties
            RaycastHit2D hit;
            float        rayMargin    = Random.Range(-defaultMargin, defaultMargin);
            Vector3      rayDirection = (new Vector3(0, rayMargin, 0) + dir);
            float        rayDistance  = maxDistance;

            //Calculate Offset
            float ang = Vector2.Angle(Vector2.right, dir);
            offsetPosition = OffsetCalculator.GetOffsetPosition(mousePos.y > pos.y, pos, ang, lengthOffsetX, lengthOffsetY);

            //Shoot
            hit = Physics2D.Raycast(pos, rayDirection, rayDistance, shootingLayer);

            //Cosmetic
            //TODO: Clamp shotLength to the distance between offsetPosition and hit.point
            Vector3 lineOffset = OffsetCalculator.GetOffsetPosition(mousePos.y > pos.y, pos, ang, shotLength, shotLength);
            DrawLine(offsetPosition, lineOffset, Color.white, 0.1f);

            // TODO: effect
            if (hit.collider != null)
            {
                //Debug Actual hit
                Debug.DrawRay(offsetPosition, hit.point - (Vector2)offsetPosition, Color.red, 0);

                Rigidbody2D hitRb = hit.collider.GetComponent <Rigidbody2D>();
                if (hitRb.bodyType != RigidbodyType2D.Static)
                {
                    hitRb.velocity = new Vector2(30, 0);                            //temporal kickback targert
                    hit.collider.GetComponent <HealthComponent>().Damage(50);       //placeholder damager
                }
            }
            break;
        }
    }
Example #2
0
    // Update is called once per frame
    void Update()
    {
        if (player != null)
        {
            //this.transform.position = new Vector3(player.transform.position.x,this.transform.position.y,-10);
            //TODO: make it less terrible
            if (player.GetComponent <MainScriptPlayer>().isAiming&& zoomEnabled)
            {
                Vector3 plypos   = player.transform.position;
                Vector3 mousePos = OffsetCalculator.GetMousePos();
                float   angle    = Vector2.Angle(Vector2.right, mousePos - plypos);
                Vector3 aimPos   = OffsetCalculator.GetOffsetPosition(plypos.y < mousePos.y, plypos, angle, zoomSize, zoomSize);

                Debug.DrawRay(plypos, mousePos - plypos, Color.cyan);

                this.transform.position = new Vector3(aimPos.x, aimPos.y, -10);
            }
            else
            {
                this.transform.position = new Vector3(player.transform.position.x, player.transform.position.y, -10);
            }
        }
    }