ARBullet.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. using System;
  2. using System.Collections;
  3. using UnityEngine;
  4. public class ARBullet : BaseBehaviour
  5. {
  6. private bool isOnGround
  7. {
  8. get
  9. {
  10. RaycastHit2D hit = Physics2D.Raycast(base.transform.position, -Vector2.up, 0.36f, LayerManager.GroundMask);
  11. return hit;
  12. }
  13. }
  14. private void OnEnable()
  15. {
  16. this.player = R.Player.Transform;
  17. this.direction = this.player.transform.position + new Vector3(0f, 1.24f, 0f) - base.transform.position;
  18. base.transform.localRotation = Quaternion.Euler(new Vector3(0f, 0f, (float)((this.direction.x <= 0f) ? 90 : -90)));
  19. this.isUseExplosion = false;
  20. base.StartCoroutine(this.CalculateDirection());
  21. }
  22. private void Start()
  23. {
  24. }
  25. private void Update()
  26. {
  27. this.CalculateAngle();
  28. if (this.isOnGround)
  29. {
  30. if (!this.isUseExplosion)
  31. {
  32. this.isUseExplosion = true;
  33. R.Effect.Generate(75, base.transform, new Vector3(0f, 0.4f, 0f), default(Vector3), default(Vector3), true);
  34. R.Audio.PlayEffect(UnityEngine.Random.Range(136, 139), new Vector3?(base.transform.position));
  35. }
  36. EffectController.TerminateEffect(base.gameObject);
  37. }
  38. }
  39. private void CalculateAngle()
  40. {
  41. this.dir = ((this.direction.x <= 0f) ? 1 : -1);
  42. float z = Vector2.Angle(base.GetComponent<Rigidbody2D>().velocity, Vector2.up) * (float)this.dir;
  43. base.transform.localRotation = Quaternion.Euler(new Vector3(0f, 0f, z));
  44. }
  45. private IEnumerator CalculateDirection()
  46. {
  47. yield return new WaitForSeconds(this.waitTime);
  48. if (this.canUse)
  49. {
  50. R.Audio.PlayEffect(88, new Vector3?(base.transform.position));
  51. }
  52. this.direction = this.player.transform.position + (Vector3)new Vector2(0f, 1.24f) - base.transform.position;
  53. this.direction = Quaternion.AngleAxis((float)this.rotation, Vector3.back) * this.direction;
  54. Rigidbody2D component = base.GetComponent<Rigidbody2D>();
  55. Quaternion quaternion = Quaternion.AngleAxis((float)this.rotation, Vector3.back);
  56. Vector2 vector = new Vector2(this.direction.x, this.direction.y);
  57. component.velocity = quaternion * vector.normalized * 10f;
  58. this.canUse = false;
  59. yield break;
  60. }
  61. public float waitTime;
  62. public int rotation = -15;
  63. public bool canUse;
  64. private float speedAngle;
  65. private int dir;
  66. private Transform player;
  67. private Vector3 direction;
  68. private bool isUseExplosion;
  69. }