Advertisement
Pro_Unit

ObservableTriggerExtensions.cs

Dec 25th, 2023
865
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 17.44 KB | None | 0 0
  1. using System; // require keep for Windows Universal App
  2. using UnityEngine;
  3.  
  4. namespace UniRx.Triggers
  5. {
  6.     // for GameObject
  7.     public static partial class ObservableTriggerExtensions
  8.     {
  9.         #region ObservableAnimatorTrigger
  10.  
  11.         /// <summary>Callback for setting up animation IK (inverse kinematics).</summary>
  12.         public static IObservable<int> OnAnimatorIKAsObservable(this GameObject gameObject)
  13.         {
  14.             if (gameObject == null) return Observable.Empty<int>();
  15.             return GetOrAddComponent<ObservableAnimatorTrigger>(gameObject).OnAnimatorIKAsObservable();
  16.         }
  17.  
  18.         /// <summary>Callback for processing animation movements for modifying root motion.</summary>
  19.         public static IObservable<Unit> OnAnimatorMoveAsObservable(this GameObject gameObject)
  20.         {
  21.             if (gameObject == null) return Observable.Empty<Unit>();
  22.             return GetOrAddComponent<ObservableAnimatorTrigger>(gameObject).OnAnimatorMoveAsObservable();
  23.         }
  24.  
  25.         #endregion
  26.  
  27.         #region ObservableCollision2DTrigger
  28.  
  29.         /// <summary>Sent when an incoming collider makes contact with this object's collider (2D physics only).</summary>
  30.         public static IObservable<Collision2D> OnCollisionEnter2DAsObservable(this GameObject gameObject)
  31.         {
  32.             if (gameObject == null) return Observable.Empty<Collision2D>();
  33.             return GetOrAddComponent<ObservableCollision2DTrigger>(gameObject).OnCollisionEnter2DAsObservable();
  34.         }
  35.  
  36.  
  37.         /// <summary>Sent when a collider on another object stops touching this object's collider (2D physics only).</summary>
  38.         public static IObservable<Collision2D> OnCollisionExit2DAsObservable(this GameObject gameObject)
  39.         {
  40.             if (gameObject == null) return Observable.Empty<Collision2D>();
  41.             return GetOrAddComponent<ObservableCollision2DTrigger>(gameObject).OnCollisionExit2DAsObservable();
  42.         }
  43.  
  44.         /// <summary>Sent each frame where a collider on another object is touching this object's collider (2D physics only).</summary>
  45.         public static IObservable<Collision2D> OnCollisionStay2DAsObservable(this GameObject gameObject)
  46.         {
  47.             if (gameObject == null) return Observable.Empty<Collision2D>();
  48.             return GetOrAddComponent<ObservableCollision2DTrigger>(gameObject).OnCollisionStay2DAsObservable();
  49.         }
  50.  
  51.         #endregion
  52.  
  53.         #region ObservableCollisionTrigger
  54.  
  55.         /// <summary>OnCollisionEnter is called when this collider/rigidbody has begun touching another rigidbody/collider.</summary>
  56.         public static IObservable<Collision> OnCollisionEnterAsObservable(this GameObject gameObject)
  57.         {
  58.             if (gameObject == null) return Observable.Empty<Collision>();
  59.             return GetOrAddComponent<ObservableCollisionTrigger>(gameObject).OnCollisionEnterAsObservable();
  60.         }
  61.  
  62.  
  63.         /// <summary>OnCollisionExit is called when this collider/rigidbody has stopped touching another rigidbody/collider.</summary>
  64.         public static IObservable<Collision> OnCollisionExitAsObservable(this GameObject gameObject)
  65.         {
  66.             if (gameObject == null) return Observable.Empty<Collision>();
  67.             return GetOrAddComponent<ObservableCollisionTrigger>(gameObject).OnCollisionExitAsObservable();
  68.         }
  69.  
  70.         /// <summary>OnCollisionStay is called once per frame for every collider/rigidbody that is touching rigidbody/collider.</summary>
  71.         public static IObservable<Collision> OnCollisionStayAsObservable(this GameObject gameObject)
  72.         {
  73.             if (gameObject == null) return Observable.Empty<Collision>();
  74.             return GetOrAddComponent<ObservableCollisionTrigger>(gameObject).OnCollisionStayAsObservable();
  75.         }
  76.  
  77.         #endregion
  78.  
  79.         #region ObservableDestroyTrigger
  80.  
  81.         /// <summary>This function is called when the MonoBehaviour will be destroyed.</summary>
  82.         public static IObservable<Unit> OnDestroyAsObservable(this GameObject gameObject)
  83.         {
  84.             if (gameObject == null) return Observable.Return(Unit.Default); // send destroy message
  85.             return GetOrAddComponent<ObservableDestroyTrigger>(gameObject).OnDestroyAsObservable();
  86.         }
  87.  
  88.         #endregion
  89.  
  90.  
  91.         #region ObservableEnableTrigger
  92.  
  93.         /// <summary>This function is called when the object becomes enabled and active.</summary>
  94.         public static IObservable<Unit> OnEnableAsObservable(this GameObject gameObject)
  95.         {
  96.             if (gameObject == null) return Observable.Empty<Unit>();
  97.             return GetOrAddComponent<ObservableEnableTrigger>(gameObject).OnEnableAsObservable();
  98.         }
  99.  
  100.         /// <summary>This function is called when the behaviour becomes disabled () or inactive.</summary>
  101.         public static IObservable<Unit> OnDisableAsObservable(this GameObject gameObject)
  102.         {
  103.             if (gameObject == null) return Observable.Empty<Unit>();
  104.             return GetOrAddComponent<ObservableEnableTrigger>(gameObject).OnDisableAsObservable();
  105.         }
  106.  
  107.         #endregion
  108.  
  109.         #region ObservableFixedUpdateTrigger
  110.  
  111.         /// <summary>This function is called every fixed framerate frame, if the MonoBehaviour is enabled.</summary>
  112.         public static IObservable<Unit> FixedUpdateAsObservable(this GameObject gameObject)
  113.         {
  114.             if (gameObject == null) return Observable.Empty<Unit>();
  115.             return GetOrAddComponent<ObservableFixedUpdateTrigger>(gameObject).FixedUpdateAsObservable();
  116.         }
  117.  
  118.         #endregion
  119.  
  120.         #region ObservableLateUpdateTrigger
  121.  
  122.         /// <summary>LateUpdate is called every frame, if the Behaviour is enabled.</summary>
  123.         public static IObservable<Unit> LateUpdateAsObservable(this GameObject gameObject)
  124.         {
  125.             if (gameObject == null) return Observable.Empty<Unit>();
  126.             return GetOrAddComponent<ObservableLateUpdateTrigger>(gameObject).LateUpdateAsObservable();
  127.         }
  128.  
  129.         #endregion
  130.  
  131. #if !(UNITY_IPHONE || UNITY_ANDROID || UNITY_METRO)
  132.  
  133.         #region ObservableMouseTrigger
  134.  
  135.         /// <summary>OnMouseDown is called when the user has pressed the mouse button while over the GUIElement or Collider.</summary>
  136.         public static IObservable<Unit> OnMouseDownAsObservable(this GameObject gameObject)
  137.         {
  138.             if (gameObject == null) return Observable.Empty<Unit>();
  139.             return GetOrAddComponent<ObservableMouseTrigger>(gameObject).OnMouseDownAsObservable();
  140.         }
  141.  
  142.         /// <summary>OnMouseDrag is called when the user has clicked on a GUIElement or Collider and is still holding down the mouse.</summary>
  143.         public static IObservable<Unit> OnMouseDragAsObservable(this GameObject gameObject)
  144.         {
  145.             if (gameObject == null) return Observable.Empty<Unit>();
  146.             return GetOrAddComponent<ObservableMouseTrigger>(gameObject).OnMouseDragAsObservable();
  147.         }
  148.  
  149.         /// <summary>OnMouseEnter is called when the mouse entered the GUIElement or Collider.</summary>
  150.         public static IObservable<Unit> OnMouseEnterAsObservable(this GameObject gameObject)
  151.         {
  152.             if (gameObject == null) return Observable.Empty<Unit>();
  153.             return GetOrAddComponent<ObservableMouseTrigger>(gameObject).OnMouseEnterAsObservable();
  154.         }
  155.  
  156.         /// <summary>OnMouseExit is called when the mouse is not any longer over the GUIElement or Collider.</summary>
  157.         public static IObservable<Unit> OnMouseExitAsObservable(this GameObject gameObject)
  158.         {
  159.             if (gameObject == null) return Observable.Empty<Unit>();
  160.             return GetOrAddComponent<ObservableMouseTrigger>(gameObject).OnMouseExitAsObservable();
  161.         }
  162.  
  163.         /// <summary>OnMouseOver is called every frame while the mouse is over the GUIElement or Collider.</summary>
  164.         public static IObservable<Unit> OnMouseOverAsObservable(this GameObject gameObject)
  165.         {
  166.             if (gameObject == null) return Observable.Empty<Unit>();
  167.             return GetOrAddComponent<ObservableMouseTrigger>(gameObject).OnMouseOverAsObservable();
  168.         }
  169.  
  170.         /// <summary>OnMouseUp is called when the user has released the mouse button.</summary>
  171.         public static IObservable<Unit> OnMouseUpAsObservable(this GameObject gameObject)
  172.         {
  173.             if (gameObject == null) return Observable.Empty<Unit>();
  174.             return GetOrAddComponent<ObservableMouseTrigger>(gameObject).OnMouseUpAsObservable();
  175.         }
  176.  
  177.         /// <summary>OnMouseUpAsButton is only called when the mouse is released over the same GUIElement or Collider as it was pressed.</summary>
  178.         public static IObservable<Unit> OnMouseUpAsButtonAsObservable(this GameObject gameObject)
  179.         {
  180.             if (gameObject == null) return Observable.Empty<Unit>();
  181.             return GetOrAddComponent<ObservableMouseTrigger>(gameObject).OnMouseUpAsButtonAsObservable();
  182.         }
  183.  
  184.         #endregion
  185.  
  186. #endif
  187.  
  188.         #region ObservableTrigger2DTrigger
  189.  
  190.         /// <summary>Sent when another object enters a trigger collider attached to this object (2D physics only).</summary>
  191.         public static IObservable<Collider2D> OnTriggerEnter2DAsObservable(this GameObject gameObject)
  192.         {
  193.             if (gameObject == null) return Observable.Empty<Collider2D>();
  194.             return GetOrAddComponent<ObservableTrigger2DTrigger>(gameObject).OnTriggerEnter2DAsObservable();
  195.         }
  196.  
  197.  
  198.         /// <summary>Sent when another object leaves a trigger collider attached to this object (2D physics only).</summary>
  199.         public static IObservable<Collider2D> OnTriggerExit2DAsObservable(this GameObject gameObject)
  200.         {
  201.             if (gameObject == null) return Observable.Empty<Collider2D>();
  202.             return GetOrAddComponent<ObservableTrigger2DTrigger>(gameObject).OnTriggerExit2DAsObservable();
  203.         }
  204.  
  205.         /// <summary>Sent each frame where another object is within a trigger collider attached to this object (2D physics only).</summary>
  206.         public static IObservable<Collider2D> OnTriggerStay2DAsObservable(this GameObject gameObject)
  207.         {
  208.             if (gameObject == null) return Observable.Empty<Collider2D>();
  209.             return GetOrAddComponent<ObservableTrigger2DTrigger>(gameObject).OnTriggerStay2DAsObservable();
  210.         }
  211.  
  212.         #endregion
  213.  
  214.         #region ObservableTriggerTrigger
  215.  
  216.         /// <summary>OnTriggerEnter is called when the Collider other enters the trigger.</summary>
  217.         public static IObservable<Collider> OnTriggerEnterAsObservable(this GameObject gameObject)
  218.         {
  219.             if (gameObject == null) return Observable.Empty<Collider>();
  220.             return GetOrAddComponent<ObservableTriggerTrigger>(gameObject).OnTriggerEnterAsObservable();
  221.         }
  222.  
  223.  
  224.         /// <summary>OnTriggerExit is called when the Collider other has stopped touching the trigger.</summary>
  225.         public static IObservable<Collider> OnTriggerExitAsObservable(this GameObject gameObject)
  226.         {
  227.             if (gameObject == null) return Observable.Empty<Collider>();
  228.             return GetOrAddComponent<ObservableTriggerTrigger>(gameObject).OnTriggerExitAsObservable();
  229.         }
  230.  
  231.         /// <summary>OnTriggerStay is called once per frame for every Collider other that is touching the trigger.</summary>
  232.         public static IObservable<Collider> OnTriggerStayAsObservable(this GameObject gameObject)
  233.         {
  234.             if (gameObject == null) return Observable.Empty<Collider>();
  235.             return GetOrAddComponent<ObservableTriggerTrigger>(gameObject).OnTriggerStayAsObservable();
  236.         }
  237.  
  238.         #endregion
  239.  
  240.         #region ObservableUpdateTrigger
  241.  
  242.         /// <summary>Update is called every frame, if the MonoBehaviour is enabled.</summary>
  243.         public static IObservable<Unit> UpdateAsObservable(this GameObject gameObject)
  244.         {
  245.             if (gameObject == null) return Observable.Empty<Unit>();
  246.             return GetOrAddComponent<ObservableUpdateTrigger>(gameObject).UpdateAsObservable();
  247.         }
  248.  
  249.         #endregion
  250.  
  251.         #region ObservableVisibleTrigger
  252.  
  253.         /// <summary>OnBecameInvisible is called when the renderer is no longer visible by any camera.</summary>
  254.         public static IObservable<Unit> OnBecameInvisibleAsObservable(this GameObject gameObject)
  255.         {
  256.             if (gameObject == null) return Observable.Empty<Unit>();
  257.             return GetOrAddComponent<ObservableVisibleTrigger>(gameObject).OnBecameInvisibleAsObservable();
  258.         }
  259.  
  260.         /// <summary>OnBecameVisible is called when the renderer became visible by any camera.</summary>
  261.         public static IObservable<Unit> OnBecameVisibleAsObservable(this GameObject gameObject)
  262.         {
  263.             if (gameObject == null) return Observable.Empty<Unit>();
  264.             return GetOrAddComponent<ObservableVisibleTrigger>(gameObject).OnBecameVisibleAsObservable();
  265.         }
  266.  
  267.         #endregion
  268.  
  269. #if !(UNITY_4_0 || UNITY_4_1 || UNITY_4_2 || UNITY_4_3 || UNITY_4_4 || UNITY_4_5)
  270.  
  271.         #region ObservableTransformChangedTrigger
  272.  
  273.         /// <summary>Callback sent to the graphic before a Transform parent change occurs.</summary>
  274.         public static IObservable<Unit> OnBeforeTransformParentChangedAsObservable(this GameObject gameObject)
  275.         {
  276.             if (gameObject == null) return Observable.Empty<Unit>();
  277.             return GetOrAddComponent<ObservableTransformChangedTrigger>(gameObject).OnBeforeTransformParentChangedAsObservable();
  278.         }
  279.  
  280.         /// <summary>This function is called when the parent property of the transform of the GameObject has changed.</summary>
  281.         public static IObservable<Unit> OnTransformParentChangedAsObservable(this GameObject gameObject)
  282.         {
  283.             if (gameObject == null) return Observable.Empty<Unit>();
  284.             return GetOrAddComponent<ObservableTransformChangedTrigger>(gameObject).OnTransformParentChangedAsObservable();
  285.         }
  286.  
  287.         /// <summary>This function is called when the list of children of the transform of the GameObject has changed.</summary>
  288.         public static IObservable<Unit> OnTransformChildrenChangedAsObservable(this GameObject gameObject)
  289.         {
  290.             if (gameObject == null) return Observable.Empty<Unit>();
  291.             return GetOrAddComponent<ObservableTransformChangedTrigger>(gameObject).OnTransformChildrenChangedAsObservable();
  292.         }
  293.  
  294.         #endregion
  295.  
  296.         #region ObservableCanvasGroupChangedTrigger
  297.  
  298.         /// <summary>Callback that is sent if the canvas group is changed.</summary>
  299.         public static IObservable<Unit> OnCanvasGroupChangedAsObservable(this GameObject gameObject)
  300.         {
  301.             if (gameObject == null) return Observable.Empty<Unit>();
  302.             return GetOrAddComponent<ObservableCanvasGroupChangedTrigger>(gameObject).OnCanvasGroupChangedAsObservable();
  303.         }
  304.  
  305.         #endregion
  306.  
  307.         #region ObservableRectTransformTrigger
  308.  
  309.         /// <summary>Callback that is sent if an associated RectTransform has it's dimensions changed.</summary>
  310.         public static IObservable<Unit> OnRectTransformDimensionsChangeAsObservable(this GameObject gameObject)
  311.         {
  312.             if (gameObject == null) return Observable.Empty<Unit>();
  313.             return GetOrAddComponent<ObservableRectTransformTrigger>(gameObject).OnRectTransformDimensionsChangeAsObservable();
  314.         }
  315.  
  316.         /// <summary>Callback that is sent if an associated RectTransform is removed.</summary>
  317.         public static IObservable<Unit> OnRectTransformRemovedAsObservable(this GameObject gameObject)
  318.         {
  319.             if (gameObject == null) return Observable.Empty<Unit>();
  320.             return GetOrAddComponent<ObservableRectTransformTrigger>(gameObject).OnRectTransformRemovedAsObservable();
  321.         }
  322.  
  323.         #endregion
  324. #endif
  325.  
  326.         #region ObservableParticleTrigger
  327.  
  328.         /// <summary>OnParticleCollision is called when a particle hits a collider.</summary>
  329.         public static IObservable<GameObject> OnParticleCollisionAsObservable(this GameObject gameObject)
  330.         {
  331.             if (gameObject == null) return Observable.Empty<GameObject>();
  332.             return GetOrAddComponent<ObservableParticleTrigger>(gameObject).OnParticleCollisionAsObservable();
  333.         }
  334.         /// <summary>OnParticleCollision is called when a particle hits a collider.</summary>
  335.         public static IObservable<Unit> OnParticleDurationCompleteAsObservable(this GameObject gameObject) =>
  336.             gameObject == null
  337.                 ? Observable.Empty<Unit>()
  338.                 : GetOrAddComponent<ObservableParticleTrigger>(gameObject).OnParticleDurationCompleteAsObservable();
  339.  
  340. #if UNITY_5_4_OR_NEWER
  341.  
  342.         /// <summary>OnParticleTrigger is called when any particles in a particle system meet the conditions in the trigger module.</summary>
  343.         public static IObservable<Unit> OnParticleTriggerAsObservable(this GameObject gameObject)
  344.         {
  345.             if (gameObject == null) return Observable.Empty<Unit>();
  346.             return GetOrAddComponent<ObservableParticleTrigger>(gameObject).OnParticleTriggerAsObservable();
  347.         }
  348.  
  349. #endif
  350.  
  351.         #endregion
  352.  
  353.  
  354.         static T GetOrAddComponent<T>(GameObject gameObject)
  355.             where T : Component
  356.         {
  357.             var component = gameObject.GetComponent<T>();
  358.             if (component == null)
  359.             {
  360.                 component = gameObject.AddComponent<T>();
  361.             }
  362.  
  363.             return component;
  364.         }
  365.     }
  366. }
  367.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement