using UnityEngine;

namespace Projectiles
{
	public abstract class CoreBehaviour : MonoBehaviour
	{
		// PUBLIC MEMBERS

		public new string name
		{
			get
			{
#if UNITY_EDITOR
				if (Application.isPlaying == false)
					return base.name;
#endif
				if (_nameCached == false)
				{
					_cachedName = base.name;
					_nameCached = true;
				}

				return _cachedName;
			}
			set
			{
				if (string.CompareOrdinal(_cachedName, value) != 0)
				{
					base.name = value;
					_cachedName = value;
					_nameCached = true;
				}
			}
		}

		public new GameObject gameObject
		{
			get
			{
#if UNITY_EDITOR
				if (Application.isPlaying == false)
					return base.gameObject;
#endif
				if (_gameObjectCached == false)
				{
					_cachedGameObject = base.gameObject;
					_gameObjectCached = true;
				}

				return _cachedGameObject;
			}
		}

		public new Transform transform
		{
			get
			{
#if UNITY_EDITOR
				if (Application.isPlaying == false)
					return base.transform;
#endif
				if (_transformCached == false)
				{
					_cachedTransform = base.transform;
					_transformCached = true;
				}

				return _cachedTransform;
			}
		}

		// PRIVATE MEMBERS

		private string _cachedName;
		private bool _nameCached;
		private GameObject _cachedGameObject;
		private bool _gameObjectCached;
		private Transform _cachedTransform;
		private bool _transformCached;
	}
}
