コード例 #1
0
        /// <summary>
        /// Evaluates possible state transitions, and updates <see cref="CurrentState"/> approriately.
        /// </summary>
        /// <param name="context">the context object for evaluating the chnage against</param>
        /// <returns>the new current state</returns>
        public State UpdateState(State src, CharacterContext context)
        {
            State dst;

            src?.OnStateUpdate(context);
            dst = src.EvaluateTransitions(context);
            if (dst == null)
            {
                return(src);
            }
            else
            {
                switch (dst.GetEntryPolicy(context))
                {
                case StateEntryPolicy.Normal:
                case StateEntryPolicy.Passthrough:
                    ChangeState(src, dst, context);
                    break;

                case StateEntryPolicy.Blocked:
                    break;
                }
                return(dst);
            }
        }
コード例 #2
0
 public override void OnStateEnter(CharacterContext context)
 {
     base.OnStateEnter(context);
     if (component != null)
     {
         component.Jump(ref context.State);
         Debug.Log(context.State.JumpCount);
     }
 }
コード例 #3
0
        public override void OnStateUpdate(CharacterContext context)
        {
            var charge = context.State.Charge;

            if (charge == byte.MaxValue)
            {
                return;
            }
            context.State.Charge++;
        }
コード例 #4
0
 public State EvaluateTransitions(CharacterContext context)
 {
     foreach (var transition in _transitions)
     {
         var newState = transition(context);
         if (newState != null && newState?.Data?.EntryPolicy != StateEntryPolicy.Blocked)
         {
             return(newState);
         }
     }
     return(null);
 }
コード例 #5
0
 void ChangeState(State src, State dst, CharacterContext context)
 {
     if (src == dst)
     {
         return;
     }
     if (context != null)
     {
         src?.OnStateExit(context);
         dst?.OnStateEnter(context);
     }
     OnStateChange?.Invoke(src, dst);
 }
コード例 #6
0
 public override void OnStateExit(CharacterContext context)
 {
     context.State.Charge = 0;
 }
コード例 #7
0
 public virtual void OnStateExit(CharacterContext context)
 {
 }
コード例 #8
0
 public virtual void OnStateUpdate(CharacterContext context)
 {
 }
コード例 #9
0
 public virtual void OnStateEnter(CharacterContext context)
 {
     context.State.StateTick = 0;
     context.State.ResetPlayersHit();
 }
コード例 #10
0
 public virtual StateEntryPolicy GetEntryPolicy(CharacterContext context) => StateEntryPolicy.Normal;
コード例 #11
0
 public virtual State Passthrough(CharacterContext context) => EvaluateTransitions(context);