Beispiel #1
0
    void Shoot()
    {
        Transform      currentFirePoint = GetComponent <MovingInCircle>().currentFirePoint.transform;
        GameObject     fish             = Instantiate(fishPrefab, currentFirePoint.position, Quaternion.identity);
        FishProperties fishProperties   = (FishProperties)fish.GetComponent(typeof(FishProperties));

        FishCollider fishCollider = (FishCollider)fish.GetComponent(typeof(FishCollider));

        fishCollider.audioSrc = hitSoundSource;

        SpriteRenderer renderer = (SpriteRenderer)fish.GetComponent(typeof(SpriteRenderer));
        // TODO: Don't use firePoint.rotation, calculate the angle from the mouse like in PlayerMovement.cs
        float angle = Quaternion.Angle(currentFirePoint.rotation, Quaternion.identity);

        SpriteDirectionResolver.Direction direction = SpriteDirectionResolver.ResolveDirection(currentFirePoint.rotation);

        switch (direction)
        {
        case SpriteDirectionResolver.Direction.W:
            renderer.sprite = fishProperties.W;
            break;

        case SpriteDirectionResolver.Direction.NW:
            renderer.sprite = fishProperties.NW;
            break;

        case SpriteDirectionResolver.Direction.N:
            renderer.sprite = fishProperties.N;
            break;

        case SpriteDirectionResolver.Direction.NE:
            renderer.sprite = fishProperties.NE;
            break;

        case SpriteDirectionResolver.Direction.E:
            renderer.sprite = fishProperties.E;
            break;

        case SpriteDirectionResolver.Direction.SE:
            renderer.sprite = fishProperties.SE;
            break;

        case SpriteDirectionResolver.Direction.S:
            renderer.sprite = fishProperties.S;
            break;

        case SpriteDirectionResolver.Direction.SW:
            renderer.sprite = fishProperties.SW;
            break;
        }

        Rigidbody2D rigidBody = fish.GetComponent <Rigidbody2D>();

        rigidBody.AddForce(currentFirePoint.right * fishForce, ForceMode2D.Impulse);
        Destroy(fish, 5.0f);

        shootSound.Play();
    }
Beispiel #2
0
    // Update is called once per frame
    void Update()
    {
        movement.x = Input.GetAxisRaw("Horizontal");
        movement.y = Input.GetAxisRaw("Vertical");

        mousePosition = camera.ScreenToWorldPoint(Input.mousePosition);

        //}

        //private void FixedUpdate()
        //{
        rigidBody.MovePosition(rigidBody.position + movement * moveSpeed * Time.fixedDeltaTime);

        Vector2 lookDirection = mousePosition - rigidBody.position;
        float   angle         = Mathf.Atan2(lookDirection.y, lookDirection.x) * Mathf.Rad2Deg - 180f;

        //rigidBody.rotation = angle;
        //this.gameObject.transform.GetChild(0).transform.Rotate(new Vector3(0, 0, angle));
        // TODO(geran): This can be made faster if we give the firepoint a rigidbody and use rigidbody.rotation
        //this.gameObject.transform.GetChild(0).transform.rotation = Quaternion.Euler(0, 0, angle-180);

        SpriteDirectionResolver.Direction direction = SpriteDirectionResolver.ResolveDirection(-angle);
        SpriteRenderer renderer = GetComponent <SpriteRenderer>();

        switch (direction)
        {
        case SpriteDirectionResolver.Direction.W:
            break;

        case SpriteDirectionResolver.Direction.NW:
            renderer.sprite  = N;
            currentFirePoint = dirToFirePoint[SpriteDirectionResolver.Direction.NW];
            Debug.Log($"Sprite is now N, angle is {angle}");
            renderer.flipX = false;
            break;

        case SpriteDirectionResolver.Direction.N:
            break;

        case SpriteDirectionResolver.Direction.NE:
            renderer.sprite  = N;
            currentFirePoint = dirToFirePoint[SpriteDirectionResolver.Direction.NE];
            Debug.Log($"Sprite is now N flip, angle is {angle}");
            renderer.flipX = true;
            break;

        case SpriteDirectionResolver.Direction.E:
            break;

        case SpriteDirectionResolver.Direction.SE:
            renderer.sprite  = S;
            currentFirePoint = dirToFirePoint[SpriteDirectionResolver.Direction.SE];
            Debug.Log($"Sprite is now S flip, angle is {angle}");
            renderer.flipX = true;
            break;

        case SpriteDirectionResolver.Direction.S:
            break;

        case SpriteDirectionResolver.Direction.SW:
            renderer.sprite  = S;
            currentFirePoint = dirToFirePoint[SpriteDirectionResolver.Direction.SW];
            Debug.Log($"Sprite is now S, angle is {angle}");
            renderer.flipX = false;
            break;
        }

        Vector2 shootDirection = mousePosition - (Vector2)currentFirePoint.transform.position;
        // TODO: This might be an issue with the -180
        float shootAngle = Mathf.Atan2(shootDirection.y, shootDirection.x) * Mathf.Rad2Deg;

        currentFirePoint.transform.rotation = Quaternion.Euler(0, 0, shootAngle);
    }