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(); flicks = GetComponentsInChildren(); view = GetComponentInParent(); GetComponentInParent().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; } } }