using System.Collections; using System.Collections.Generic; using UnityEngine; public enum WaveMovementDirection { horizontal, vertical } public class WaveMovement : MonoBehaviour { [SerializeField] private bool playOnStart = false; [SerializeField] private bool disableEventCall = false; [Header("Wave Settings")] [SerializeField] private Transform _parentTransform; [SerializeField] private WaveMovementDirection waveDirection; [SerializeField] private float maxWave = 10f; [Header("Movement Settings")] [SerializeField] private bool moveObject = false; [SerializeField] private float moveSpeed = 0f; [SerializeField] private Vector2 moveDirection; //Internal vars private bool _canMove = false; private float _waveNum = 0f; private float _yMotion = 0f; private float _xMotion = 0f; private Vector3 _movementVector; private Transform _transform; private float _xPos; private float _yPos; private void Awake() { //Cache the transform _transform = transform; } // Start is called before the first frame update void Start() { //Check if the motion should play on start if (playOnStart) _canMove = true; } // Update is called once per frame void FixedUpdate() { //Check if we can move if(_canMove) WaveMove(); } private void WaveMove() { //Get the current x and y positions _xPos = _transform.position.x; _yPos = _transform.position.y; //Check which direction we need to calculate if (waveDirection == WaveMovementDirection.horizontal) { //Calculate horizontal motion _xMotion = _parentTransform != null ? _parentTransform.position.x : _transform.position.x; _xPos = _xMotion + Mathf.Cos(_waveNum) * maxWave; //Check if the object should move vertically if (moveObject) _yPos += moveSpeed * moveDirection.y; } else { //Calculate vertical motion _yMotion = _parentTransform != null ? _parentTransform.position.y : _transform.position.y; _yPos = _yMotion + Mathf.Cos(_waveNum) * maxWave; //Check if the object should move horizontally if (moveObject) _xPos += moveSpeed * moveDirection.x; } //Assign x and y positions to transform _movementVector.Set(_xPos, _yPos, 0); _transform.position = _movementVector; //Increment _waveNum to get the motion going _waveNum += 0.1f; } public void PlayWaveMovement(bool value) { if(!disableEventCall) _canMove = value; } }