using System.Diagnostics; using UnityEngine; namespace SRF { public abstract class SRMonoBehaviour : MonoBehaviour { private Collider _collider; private Transform _transform; private Rigidbody _rigidBody; private GameObject _gameObject; private Rigidbody2D _rigidbody2D; private Collider2D _collider2D; public Transform CachedTransform { [DebuggerStepThrough] [DebuggerNonUserCode] get { if (_transform == null) { _transform = base.transform; } return _transform; } } public Collider CachedCollider { [DebuggerStepThrough] [DebuggerNonUserCode] get { if (_collider == null) { _collider = GetComponent(); } return _collider; } } public Collider2D CachedCollider2D { [DebuggerStepThrough] [DebuggerNonUserCode] get { if (_collider2D == null) { _collider2D = GetComponent(); } return _collider2D; } } public Rigidbody CachedRigidBody { [DebuggerStepThrough] [DebuggerNonUserCode] get { if (_rigidBody == null) { _rigidBody = GetComponent(); } return _rigidBody; } } public Rigidbody2D CachedRigidBody2D { [DebuggerStepThrough] [DebuggerNonUserCode] get { if (_rigidbody2D == null) { _rigidbody2D = GetComponent(); } return _rigidbody2D; } } public GameObject CachedGameObject { [DebuggerStepThrough] [DebuggerNonUserCode] get { if (_gameObject == null) { _gameObject = base.gameObject; } return _gameObject; } } public new Transform transform { get { return CachedTransform; } } public Collider collider { get { return CachedCollider; } } public Collider2D collider2D { get { return CachedCollider2D; } } public Rigidbody rigidbody { get { return CachedRigidBody; } } public Rigidbody2D rigidbody2D { get { return CachedRigidBody2D; } } public new GameObject gameObject { get { return CachedGameObject; } } [DebuggerStepThrough] [DebuggerNonUserCode] protected void AssertNotNull(object value, string fieldName = null) { SRDebugUtil.AssertNotNull(value, fieldName, this); } [DebuggerStepThrough] [DebuggerNonUserCode] protected void Assert(bool condition, string message = null) { SRDebugUtil.Assert(condition, message, this); } [DebuggerStepThrough] [DebuggerNonUserCode] [Conditional("UNITY_EDITOR")] protected void EditorAssertNotNull(object value, string fieldName = null) { AssertNotNull(value, fieldName); } [Conditional("UNITY_EDITOR")] [DebuggerNonUserCode] [DebuggerStepThrough] protected void EditorAssert(bool condition, string message = null) { Assert(condition, message); } } }