123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- // over Unity5 added StateMachineBehaviour
- #if !(UNITY_4_7 || UNITY_4_6 || UNITY_4_5 || UNITY_4_4 || UNITY_4_3 || UNITY_4_2 || UNITY_4_1 || UNITY_4_0_1 || UNITY_4_0 || UNITY_3_5 || UNITY_3_4 || UNITY_3_3 || UNITY_3_2 || UNITY_3_1 || UNITY_3_0_0 || UNITY_3_0 || UNITY_2_6_1 || UNITY_2_6)
- using System; // require keep for Windows Universal App
- using UnityEngine;
- namespace UniRx.Triggers
- {
- [DisallowMultipleComponent]
- public class ObservableStateMachineTrigger : StateMachineBehaviour
- {
- public class OnStateInfo
- {
- public Animator Animator { get; private set; }
- public AnimatorStateInfo StateInfo { get; private set; }
- public int LayerIndex { get; private set; }
- public OnStateInfo(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
- {
- Animator = animator;
- StateInfo = stateInfo;
- LayerIndex = layerIndex;
- }
- }
- public class OnStateMachineInfo
- {
- public Animator Animator { get; private set; }
- public int StateMachinePathHash { get; private set; }
- public OnStateMachineInfo(Animator animator, int stateMachinePathHash)
- {
- Animator = animator;
- StateMachinePathHash = stateMachinePathHash;
- }
- }
- // OnStateExit
- Subject<OnStateInfo> onStateExit;
- public override void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
- {
- if (onStateExit != null) onStateExit.OnNext(new OnStateInfo(animator, stateInfo, layerIndex));
- }
- public IObservable<OnStateInfo> OnStateExitAsObservable()
- {
- return onStateExit ?? (onStateExit = new Subject<OnStateInfo>());
- }
- // OnStateEnter
- Subject<OnStateInfo> onStateEnter;
- public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
- {
- if (onStateEnter != null) onStateEnter.OnNext(new OnStateInfo(animator, stateInfo, layerIndex));
- }
- public IObservable<OnStateInfo> OnStateEnterAsObservable()
- {
- return onStateEnter ?? (onStateEnter = new Subject<OnStateInfo>());
- }
- // OnStateIK
- Subject<OnStateInfo> onStateIK;
- public override void OnStateIK(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
- {
- if(onStateIK !=null) onStateIK.OnNext(new OnStateInfo(animator, stateInfo, layerIndex));
- }
- public IObservable<OnStateInfo> OnStateIKAsObservable()
- {
- return onStateIK ?? (onStateIK = new Subject<OnStateInfo>());
- }
- // Does not implments OnStateMove.
- // ObservableStateMachine Trigger makes stop animating.
- // By defining OnAnimatorMove, you are signifying that you want to intercept the movement of the root object and apply it yourself.
- // http://fogbugz.unity3d.com/default.asp?700990_9jqaim4ev33i8e9h
- //// OnStateMove
- //Subject<OnStateInfo> onStateMove;
- //public override void OnStateMove(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
- //{
- // if (onStateMove != null) onStateMove.OnNext(new OnStateInfo(animator, stateInfo, layerIndex));
- //}
- //public IObservable<OnStateInfo> OnStateMoveAsObservable()
- //{
- // return onStateMove ?? (onStateMove = new Subject<OnStateInfo>());
- //}
- // OnStateUpdate
- Subject<OnStateInfo> onStateUpdate;
- public override void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
- {
- if (onStateUpdate != null) onStateUpdate.OnNext(new OnStateInfo(animator, stateInfo, layerIndex));
- }
- public IObservable<OnStateInfo> OnStateUpdateAsObservable()
- {
- return onStateUpdate ?? (onStateUpdate = new Subject<OnStateInfo>());
- }
- // OnStateMachineEnter
- Subject<OnStateMachineInfo> onStateMachineEnter;
- public override void OnStateMachineEnter(Animator animator, int stateMachinePathHash)
- {
- if (onStateMachineEnter != null) onStateMachineEnter.OnNext(new OnStateMachineInfo(animator, stateMachinePathHash));
- }
- public IObservable<OnStateMachineInfo> OnStateMachineEnterAsObservable()
- {
- return onStateMachineEnter ?? (onStateMachineEnter = new Subject<OnStateMachineInfo>());
- }
- // OnStateMachineExit
- Subject<OnStateMachineInfo> onStateMachineExit;
- public override void OnStateMachineExit(Animator animator, int stateMachinePathHash)
- {
- if (onStateMachineExit != null) onStateMachineExit.OnNext(new OnStateMachineInfo(animator, stateMachinePathHash));
- }
- public IObservable<OnStateMachineInfo> OnStateMachineExitAsObservable()
- {
- return onStateMachineExit ?? (onStateMachineExit = new Subject<OnStateMachineInfo>());
- }
- }
- }
- #endif
|