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(); }
// 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); }