/******************************************************************************************* * Author: Lane Gresham, AKA LaneMax * Websites: http://resurgamstudios.com * Description: Used for cgf mod, creates a pulse effect using the cgf. *******************************************************************************************/ using UnityEngine; using System.Collections; namespace CircularGravityForce { [RequireComponent(typeof(CGF))] public class CGF_Pulse : MonoBehaviour { #region Classis //Pulse properties [System.Serializable] public class PulseProperties { [SerializeField, Tooltip("Enable/Disable's the pulse.")] private bool pulse = true; public bool Pulse { get { return pulse; } set { pulse = value; } } [SerializeField, Tooltip("Speed of the pulse.")] private float speed = 10f; public float Speed { get { return speed; } set { speed = value; } } [SerializeField, Tooltip("Min pulse size.")] private float minSize = 1f; public float MinSize { get { return minSize; } set { MinSize = value; } } [SerializeField, Tooltip("Max pulse size.")] private float maxSize = 5f; public float MaxSize { get { return maxSize; } set { maxSize = value; } } [SerializeField, Tooltip("Min pulse box size.")] private Vector3 minBoxSize = Vector3.one; public Vector3 MinBoxSize { get { return minBoxSize; } set { minBoxSize = value; } } [SerializeField, Tooltip("Max pulse box size.")] private Vector3 maxBoxSize = Vector3.one * 5f; public Vector3 MaxBoxSize { get { return maxBoxSize; } set { maxBoxSize = value; } } } #endregion #region Properties/Constructor [SerializeField, Tooltip("Pulse properties.")] private PulseProperties pulseProperties; public PulseProperties _pulseProperties { get { return pulseProperties; } set { pulseProperties = value; } } private CGF cgf; //Used to tell whether to add or subtract to pulse private bool pulse_Positive; private bool pulse_PositiveBoxX; private bool pulse_PositiveBoxY; private bool pulse_PositiveBoxZ; public CGF_Pulse() { _pulseProperties = new PulseProperties(); } #endregion #region Unity Functions void Start() { cgf = this.GetComponent(); //Sets up pulse if (_pulseProperties.Pulse) { cgf.Size = _pulseProperties.MinSize; pulse_Positive = true; pulse_PositiveBoxX = true; pulse_PositiveBoxY = true; pulse_PositiveBoxZ = true; } } void Update() { if (cgf.Enable) { if (_pulseProperties.Pulse) { CalculatePulse(); } } } #endregion #region Functions //Calculatie the given pulse void CalculatePulse() { if (_pulseProperties.Pulse) { if (cgf._shape != CGF.Shape.Box) CalculatePulseBySize(); else CalculatePulseByBoxSize(); } } void CalculatePulseBySize() { if (pulse_Positive) { if (cgf.Size <= _pulseProperties.MaxSize) cgf.Size = cgf.Size + (_pulseProperties.Speed * Time.deltaTime); else pulse_Positive = false; } else { if (cgf.Size >= _pulseProperties.MinSize) cgf.Size = cgf.Size - (_pulseProperties.Speed * Time.deltaTime); else pulse_Positive = true; } } void CalculatePulseByBoxSize() { if (pulse_PositiveBoxX) { if (cgf.BoxSize.x <= _pulseProperties.MaxBoxSize.x) cgf.BoxSize = new Vector3(cgf.BoxSize.x + (_pulseProperties.Speed * Time.deltaTime), cgf.BoxSize.y, cgf.BoxSize.z); else pulse_PositiveBoxX = false; } else { if (cgf.BoxSize.x >= _pulseProperties.MinBoxSize.x) cgf.BoxSize = new Vector3(cgf.BoxSize.x - (_pulseProperties.Speed * Time.deltaTime), cgf.BoxSize.y, cgf.BoxSize.z); else pulse_PositiveBoxX = true; } if (pulse_PositiveBoxY) { if (cgf.BoxSize.y <= _pulseProperties.MaxBoxSize.y) cgf.BoxSize = new Vector3(cgf.BoxSize.x, cgf.BoxSize.y + (_pulseProperties.Speed * Time.deltaTime), cgf.BoxSize.z); else pulse_PositiveBoxY = false; } else { if (cgf.BoxSize.y >= _pulseProperties.MinBoxSize.y) cgf.BoxSize = new Vector3(cgf.BoxSize.x, cgf.BoxSize.y - (_pulseProperties.Speed * Time.deltaTime), cgf.BoxSize.z); else pulse_PositiveBoxY = true; } if (pulse_PositiveBoxZ) { if (cgf.BoxSize.z <= _pulseProperties.MaxBoxSize.z) cgf.BoxSize = new Vector3(cgf.BoxSize.x, cgf.BoxSize.y, cgf.BoxSize.z + (_pulseProperties.Speed * Time.deltaTime)); else pulse_PositiveBoxZ = false; } else { if (cgf.BoxSize.z >= _pulseProperties.MinBoxSize.z) cgf.BoxSize = new Vector3(cgf.BoxSize.x, cgf.BoxSize.y, cgf.BoxSize.z - (_pulseProperties.Speed * Time.deltaTime)); else pulse_PositiveBoxZ = true; } } #endregion } }