diff options
Diffstat (limited to 'GameCode/RemoteControl.cs')
| -rw-r--r-- | GameCode/RemoteControl.cs | 128 | 
1 files changed, 128 insertions, 0 deletions
| diff --git a/GameCode/RemoteControl.cs b/GameCode/RemoteControl.cs new file mode 100644 index 0000000..c0049bb --- /dev/null +++ b/GameCode/RemoteControl.cs @@ -0,0 +1,128 @@ +using Photon.Pun; +using Sonigon; +using SoundImplementation; +using UnityEngine; + +public class RemoteControl : MonoBehaviour +{ +	[Header("Sound")] +	public SoundEvent soundRemoteSteeringLoop; + +	private bool soundIsPlaying; + +	[Header("Settings")] +	public bool snap; + +	public float rotateSpeed = 1f; + +	private SpawnedAttack spawned; + +	private MoveTransform move; + +	private float startVelocity; + +	private bool isOn; + +	private ProjectileHit hit; + +	private ParticleSystem part; + +	public ParticleSystem boopPart; + +	private float c; + +	private PhotonView view; + +	private ChildRPC childRPC; + +	private void OnDestroy() +	{ +		if (soundRemoteSteeringLoop != null && spawned != null && spawned.spawner != null && soundIsPlaying) +		{ +			soundIsPlaying = false; +			SoundStaticRemoteControl.remoteControl.AddNumberOf(spawned.spawner.transform, -1); +			if (SoundStaticRemoteControl.remoteControl.GetNumberOf(spawned.spawner.transform) <= 0) +			{ +				SoundManager.Instance.Stop(soundRemoteSteeringLoop, spawned.spawner.transform); +			} +		} +	} + +	private void Start() +	{ +		childRPC = GetComponentInParent<ChildRPC>(); +		view = GetComponentInParent<PhotonView>(); +		hit = GetComponentInParent<ProjectileHit>(); +		move = GetComponentInParent<MoveTransform>(); +		spawned = GetComponentInParent<SpawnedAttack>(); +		startVelocity = move.velocity.magnitude; +		part = GetComponentInChildren<ParticleSystem>(); +		GetComponentInParent<SyncProjectile>().active = true; +		if (soundRemoteSteeringLoop != null && spawned != null && spawned.spawner != null && !soundIsPlaying) +		{ +			soundIsPlaying = true; +			if (SoundStaticRemoteControl.remoteControl.GetNumberOf(spawned.spawner.transform) <= 0) +			{ +				SoundManager.Instance.Play(soundRemoteSteeringLoop, spawned.spawner.transform); +			} +			SoundStaticRemoteControl.remoteControl.AddNumberOf(spawned.spawner.transform, 1); +		} +	} + +	public void ToggleOn(bool isOn) +	{ +	} + +	private void Update() +	{ +		if (!view.IsMine) +		{ +			return; +		} +		Vector3 zero = Vector3.zero; +		if (spawned.spawner.data.playerActions.Device != null) +		{ +			zero = spawned.spawner.data.input.aimDirection; +		} +		else +		{ +			zero = MainCam.instance.cam.ScreenToWorldPoint(Input.mousePosition) - base.transform.position; +			zero.z = 0f; +			zero.Normalize(); +		} +		zero += Vector3.Cross(Vector3.forward, zero) * move.selectedSpread; +		c += TimeHandler.deltaTime; +		if (snap) +		{ +			if (spawned.spawner.data.block.blockedThisFrame) +			{ +				part.Play(); +				move.velocity *= -1f; +				base.enabled = false; +			} +		} +		else if (zero.magnitude > 0.2f && hit.sinceReflect > 2f) +		{ +			move.velocity = Vector3.RotateTowards(move.velocity, zero.normalized * startVelocity, rotateSpeed * TimeHandler.deltaTime, rotateSpeed * TimeHandler.deltaTime * 10f); +			if (c > 0.1f) +			{ +				boopPart.transform.parent.rotation = Quaternion.LookRotation(zero); +				boopPart?.Emit(1); +				c = 0f; +			} +			if (!isOn) +			{ +				move.simulateGravity++; +			} +			isOn = true; +		} +		else +		{ +			if (isOn) +			{ +				move.simulateGravity--; +			} +			isOn = false; +		} +	} +} | 
