203 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			203 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C#
		
	
	
	
| namespace SRF
 | |
| {
 | |
|     using System.Diagnostics;
 | |
|     using UnityEngine;
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Base MonoBehaviour which provides useful common functionality
 | |
|     /// </summary>
 | |
|     public abstract class SRMonoBehaviour : MonoBehaviour
 | |
|     {
 | |
|         /// <summary>
 | |
|         /// Get the Transform component, using a cached reference if possible.
 | |
|         /// </summary>
 | |
|         public Transform CachedTransform
 | |
|         {
 | |
|             [DebuggerStepThrough]
 | |
|             [DebuggerNonUserCode]
 | |
|             get
 | |
|             {
 | |
|                 if (_transform == null)
 | |
|                 {
 | |
|                     _transform = base.transform;
 | |
|                 }
 | |
| 
 | |
|                 return _transform;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Get the Collider component, using a cached reference if possible.
 | |
|         /// </summary>
 | |
|         public Collider CachedCollider
 | |
|         {
 | |
|             [DebuggerStepThrough]
 | |
|             [DebuggerNonUserCode]
 | |
|             get
 | |
|             {
 | |
|                 if (_collider == null)
 | |
|                 {
 | |
|                     _collider = GetComponent<Collider>();
 | |
|                 }
 | |
| 
 | |
|                 return _collider;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Get the Collider component, using a cached reference if possible.
 | |
|         /// </summary>
 | |
|         public Collider2D CachedCollider2D
 | |
|         {
 | |
|             [DebuggerStepThrough]
 | |
|             [DebuggerNonUserCode]
 | |
|             get
 | |
|             {
 | |
|                 if (_collider2D == null)
 | |
|                 {
 | |
|                     _collider2D = GetComponent<Collider2D>();
 | |
|                 }
 | |
| 
 | |
|                 return _collider2D;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Get the Rigidbody component, using a cached reference if possible.
 | |
|         /// </summary>
 | |
|         public Rigidbody CachedRigidBody
 | |
|         {
 | |
|             [DebuggerStepThrough]
 | |
|             [DebuggerNonUserCode]
 | |
|             get
 | |
|             {
 | |
|                 if (_rigidBody == null)
 | |
|                 {
 | |
|                     _rigidBody = GetComponent<Rigidbody>();
 | |
|                 }
 | |
| 
 | |
|                 return _rigidBody;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Get the Rigidbody2D component, using a cached reference if possible.
 | |
|         /// </summary>
 | |
|         public Rigidbody2D CachedRigidBody2D
 | |
|         {
 | |
|             [DebuggerStepThrough]
 | |
|             [DebuggerNonUserCode]
 | |
|             get
 | |
|             {
 | |
|                 if (_rigidbody2D == null)
 | |
|                 {
 | |
|                     _rigidbody2D = GetComponent<Rigidbody2D>();
 | |
|                 }
 | |
| 
 | |
|                 return _rigidbody2D;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Get the GameObject this behaviour is attached to, using a cached reference if possible.
 | |
|         /// </summary>
 | |
|         public GameObject CachedGameObject
 | |
|         {
 | |
|             [DebuggerStepThrough]
 | |
|             [DebuggerNonUserCode]
 | |
|             get
 | |
|             {
 | |
|                 if (_gameObject == null)
 | |
|                 {
 | |
|                     _gameObject = base.gameObject;
 | |
|                 }
 | |
| 
 | |
|                 return _gameObject;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         // Override existing getters for legacy usage
 | |
| 
 | |
|         // ReSharper disable InconsistentNaming
 | |
|         public new Transform transform
 | |
|         {
 | |
|             get { return CachedTransform; }
 | |
|         }
 | |
| 
 | |
| #if !UNITY_5 && !UNITY_2017_1_OR_NEWER
 | |
| 
 | |
| 		public new Collider collider
 | |
| 		{
 | |
| 			get { return CachedCollider; }
 | |
| 		}
 | |
| 		public new Collider2D collider2D
 | |
| 		{
 | |
| 			get { return CachedCollider2D; }
 | |
| 		}
 | |
| 		public new Rigidbody rigidbody
 | |
| 		{
 | |
| 			get { return CachedRigidBody; }
 | |
| 		}
 | |
| 		public new Rigidbody2D rigidbody2D
 | |
| 		{
 | |
| 			get { return CachedRigidBody2D; }
 | |
| 		}
 | |
| 		public new GameObject gameObject
 | |
| 		{
 | |
| 			get { return CachedGameObject; }
 | |
| 		}
 | |
| 
 | |
| #endif
 | |
| 
 | |
|         // ReSharper restore InconsistentNaming
 | |
| 
 | |
|         private Collider _collider;
 | |
|         private Transform _transform;
 | |
|         private Rigidbody _rigidBody;
 | |
|         private GameObject _gameObject;
 | |
|         private Rigidbody2D _rigidbody2D;
 | |
|         private Collider2D _collider2D;
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Assert that the value is not null, disable the object and print a debug error message if it is.
 | |
|         /// </summary>
 | |
|         /// <param name="value">Object to check</param>
 | |
|         /// <param name="fieldName">Debug name to pass in</param>
 | |
|         [DebuggerNonUserCode]
 | |
|         [DebuggerStepThrough]
 | |
|         protected void AssertNotNull(object value, string fieldName = null)
 | |
|         {
 | |
|             SRDebugUtil.AssertNotNull(value, fieldName, this);
 | |
|         }
 | |
| 
 | |
|         [DebuggerNonUserCode]
 | |
|         [DebuggerStepThrough]
 | |
|         protected void Assert(bool condition, string message = null)
 | |
|         {
 | |
|             SRDebugUtil.Assert(condition, message, this);
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Assert that the value is not null, disable the object and print a debug error message if it is.
 | |
|         /// </summary>
 | |
|         /// <param name="value">Object to check</param>
 | |
|         /// <param name="fieldName">Debug name to pass in</param>
 | |
|         /// <returns>True if object is not null</returns>
 | |
|         [Conditional("UNITY_EDITOR")]
 | |
|         [DebuggerNonUserCode]
 | |
|         [DebuggerStepThrough]
 | |
|         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);
 | |
|         }
 | |
|     }
 | |
| }
 |