diff options
author | chai <215380520@qq.com> | 2023-10-27 11:05:14 +0800 |
---|---|---|
committer | chai <215380520@qq.com> | 2023-10-27 11:05:14 +0800 |
commit | 766cdff5ffa72b65d7f106658d1603f47739b2ba (patch) | |
tree | 34d7799a94dfa9be182825577583c0fa6dc935f7 /GameCode/Homing.cs |
+ init
Diffstat (limited to 'GameCode/Homing.cs')
-rw-r--r-- | GameCode/Homing.cs | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/GameCode/Homing.cs b/GameCode/Homing.cs new file mode 100644 index 0000000..39a12c1 --- /dev/null +++ b/GameCode/Homing.cs @@ -0,0 +1,104 @@ +using Photon.Pun; +using Sonigon; +using UnityEngine; + +public class Homing : MonoBehaviour +{ + [Header("Sound")] + public SoundEvent soundHomingFound; + + private bool soundHomingCanPlay = true; + + [Header("Settings")] + public float amount = 1f; + + public float scalingDrag = 1f; + + public float drag = 1f; + + public float spread = 1f; + + private MoveTransform move; + + private bool isOn; + + public RotSpring rot1; + + public RotSpring rot2; + + private FlickerEvent[] flicks; + + private PhotonView view; + + private void Start() + { + move = GetComponentInParent<MoveTransform>(); + flicks = GetComponentsInChildren<FlickerEvent>(); + view = GetComponentInParent<PhotonView>(); + GetComponentInParent<SyncProjectile>().active = true; + } + + private void Update() + { + Player closestPlayer = PlayerManager.instance.GetClosestPlayer(base.transform.position, needVision: true); + if ((bool)closestPlayer) + { + Vector3 vector = closestPlayer.transform.position + base.transform.right * move.selectedSpread * Vector3.Distance(base.transform.position, closestPlayer.transform.position) * spread; + float num = Vector3.Angle(base.transform.root.forward, vector - base.transform.position); + if (num < 70f) + { + move.velocity -= move.velocity * num * TimeHandler.deltaTime * scalingDrag; + move.velocity -= move.velocity * TimeHandler.deltaTime * drag; + move.velocity += Vector3.ClampMagnitude(vector - base.transform.position, 1f) * TimeHandler.deltaTime * move.localForce.magnitude * 0.025f * amount; + move.velocity.z = 0f; + move.velocity += Vector3.up * TimeHandler.deltaTime * move.gravity * move.multiplier; + if (!isOn) + { + move.simulateGravity++; + if (soundHomingCanPlay) + { + soundHomingCanPlay = false; + SoundManager.Instance.PlayAtPosition(soundHomingFound, SoundManager.Instance.GetTransform(), base.transform); + } + } + isOn = true; + for (int i = 0; i < flicks.Length; i++) + { + flicks[i].isOn = true; + } + rot1.target = 10f; + rot2.target = -10f; + } + else + { + if (isOn) + { + move.simulateGravity--; + soundHomingCanPlay = true; + } + isOn = false; + for (int j = 0; j < flicks.Length; j++) + { + flicks[j].isOn = false; + } + rot1.target = 50f; + rot2.target = -50f; + } + } + else + { + if (isOn) + { + move.simulateGravity--; + soundHomingCanPlay = true; + } + isOn = false; + for (int k = 0; k < flicks.Length; k++) + { + flicks[k].isOn = false; + } + rot1.target = 50f; + rot2.target = -50f; + } + } +} |