示例#1
0
    public void OnActionFrame(string param)
    {
        //Debug.Log(param + "|" + m_clipname + "||" + param.Contains(m_clipname));

        if (!param.Contains(m_clipname))
        {
            return;
        }

        if (param.Contains("|DONOTUSE"))
        {
            Debug.Log(param);
            Debug.Break();
            return;
        }

        //if (param == m_clipname)
        {
            //OnLastFrame();
        }
        m_state = m_state.OnLastFrame();
        PlayClip(GetAnim());
        return;
        //Debug.Log("animation finish:" + param);
    }
示例#2
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="other"></param>
 /// <param name="tracker"></param>
 /// <returns>value of next state in chain</returns>
 public TRAMState AddAnyFrameCondition(TRAMState other, Func <bool> tracker)
 {
     m_anyFrameTransitions.Add(new Transitioner()
     {
         m_nextState = other, m_valueTracker = tracker
     });
     return(other);
 }
示例#3
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="other"></param>
 /// <param name="tracker"></param>
 /// <returns>value of next state in chain</returns>
 public TRAMState AddLangingCondition(TRAMState other, Func <bool> tracker)
 {
     m_landingTransitions.Add(new Transitioner()
     {
         m_nextState = other, m_valueTracker = tracker
     });
     return(other);
 }
示例#4
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="other"></param>
 /// <param name="tracker"></param>
 /// <returns>value of next state in chain</returns>
 public TRAMState AddLastFrameCondition(TRAMState other, Func <bool> tracker)
 {
     Debug.Log(this.m_correspondingValue + " > " + other.m_correspondingValue);
     m_lastFrameTransitions.Add(new Transitioner()
     {
         m_nextState = other, m_valueTracker = tracker
     });
     return(other);
 }
示例#5
0
 void OnLand()
 {
     m_state             = m_state.OnLand();
     m_lastFlags         = m_state.m_correspondingValue;
     m_upperVector       = 0;
     m_jumpStart         = -1;
     m_waitingForLanding = false;
     m_rememberedSpeed   = Vector3.zero;
 }
示例#6
0
        public TRAMState OnLastFrame()
        {
            TRAMState l_res = null;

            foreach (Transitioner tr in m_lastFrameTransitions)
            {
                if (tr.m_valueTracker())
                {
                    if (l_res != null)
                    {
                        Debug.LogWarning("CONFICTING TRANSITIONS : " + l_res.m_correspondingValue + " and " + tr.m_nextState.m_correspondingValue);
                    }

                    l_res = tr.m_nextState;
                }
            }

            if (l_res != null && l_res.OnActivate != null)
            {
                l_res.OnActivate();
            }
            return(l_res ?? this);
        }
示例#7
0
    // Use this for initialization
    void Start()
    {
        transform.position += Vector3.up * 2;
        Vector3 angles = transform.eulerAngles;

        m_camera = GetComponentInChildren <Camera>().transform;
        m_camera.transform.parent = null;
        m_x = angles.y;
        m_y = angles.x;

        #region input axis accessors
        Func <bool> l_forwardPositive       = () => m_channel[ChannelKind.Forward];
        Func <bool> l_forwardNegative       = () => !m_channel[ChannelKind.Forward];
        Func <bool> l_backwardPositive      = () => m_channel[ChannelKind.Backward];
        Func <bool> l_backwardNegative      = () => !m_channel[ChannelKind.Backward];
        Func <bool> l_sidestepLeftPositive  = () => m_channel[ChannelKind.Left];
        Func <bool> l_sidestepLeftNegative  = () => !m_channel[ChannelKind.Left];
        Func <bool> l_sidestepRightPositive = () => m_channel[ChannelKind.Right];
        Func <bool> l_sidestepRightNegative = () => !m_channel[ChannelKind.Right];
        Func <bool> l_crouchNegative        = () => !m_channel[ChannelKind.Crouch];
        Func <bool> l_crouchPositive        = () => m_channel[ChannelKind.Crouch];
        Func <bool> l_jumpPositive          = () => m_channel[ChannelKind.Jump];
        Func <bool> l_jumpNegative          = () => !m_channel[ChannelKind.Jump];
        #endregion

        TRAMState l_idle1         = TRAMState.FormState(AnimFlags.idle1);
        TRAMState l_idle2         = TRAMState.FormState(AnimFlags.idle2);
        TRAMState l_run1stepa     = TRAMState.FormState(AnimFlags.run | AnimFlags.stepa);
        TRAMState l_run_bk_1stepa = TRAMState.FormState(AnimFlags.run_bk | AnimFlags.stepa);
        TRAMState l_ss_lt_1stepa  = TRAMState.FormState(AnimFlags.ss_lt | AnimFlags.stepa);
        TRAMState l_ss_rt_1stepa  = TRAMState.FormState(AnimFlags.ss_rt | AnimFlags.stepa);
        TRAMState l_ss_rt_Lt      = TRAMState.FormState(AnimFlags.ss_rt | AnimFlags.lt);
        TRAMState l_ss_rt_Rt      = TRAMState.FormState(AnimFlags.ss_rt | AnimFlags.rt);
        TRAMState l_ss_rt_Start   = TRAMState.FormState(AnimFlags.ss_rt | AnimFlags.start);
        TRAMState l_ss_rt_stop    = TRAMState.FormState(AnimFlags.ss_rt | AnimFlags.stop);
        TRAMState l_ss_lt_Lt      = TRAMState.FormState(AnimFlags.ss_lt | AnimFlags.lt);
        TRAMState l_ss_lt_Rt      = TRAMState.FormState(AnimFlags.ss_lt | AnimFlags.rt);
        TRAMState l_ss_lt_Start   = TRAMState.FormState(AnimFlags.ss_lt | AnimFlags.start);
        TRAMState l_ss_lt_stop    = TRAMState.FormState(AnimFlags.ss_lt | AnimFlags.stop);

        #region run
        TRAMState l_runLt     = TRAMState.FormState(AnimFlags.run | AnimFlags.lt);
        TRAMState l_runRt     = TRAMState.FormState(AnimFlags.run | AnimFlags.rt);
        TRAMState l_runStart  = TRAMState.FormState(AnimFlags.run | AnimFlags.start);
        TRAMState l_runstepb  = TRAMState.FormState(AnimFlags.run | AnimFlags.stepb);
        TRAMState l_runstop   = TRAMState.FormState(AnimFlags.run | AnimFlags.stop);
        TRAMState l_run_ss_rt = TRAMState.FormState(AnimFlags.run | AnimFlags.ss_rt);
        TRAMState l_run_ss_lt = TRAMState.FormState(AnimFlags.run | AnimFlags.ss_lt);
        TRAMState l_crouch_fw = TRAMState.FormState(AnimFlags.crouch | AnimFlags.fw);

        {
            l_run1stepa.AddAnyFrameCondition(l_crouch_fw, l_crouchPositive);
            l_runStart.AddAnyFrameCondition(l_crouch_fw, l_crouchPositive);
            l_runLt.AddAnyFrameCondition(l_crouch_fw, l_crouchPositive);
            l_runRt.AddAnyFrameCondition(l_crouch_fw, l_crouchPositive);
            l_crouch_fw.AddLastFrameCondition(l_idle1, l_forwardNegative);
            l_crouch_fw.AddLastFrameCondition(l_run1stepa, l_forwardPositive);

            Func <bool> l_run_specific_negative = () =>
            {
                m_targetAngle = Quaternion.Euler(0, l_sidestepLeftPositive() ? -45 : l_sidestepRightPositive() ? 45 : 0, 0);
                return(l_forwardNegative());
            };

            l_run1stepa
            .AddLastFrameCondition(l_runStart, l_forwardPositive)
            .AddLastFrameCondition(l_runRt, l_forwardPositive)
            .AddLastFrameCondition(l_runLt, l_forwardPositive)
            .AddLastFrameCondition(l_runRt, l_forwardPositive);
            l_run1stepa.AddLastFrameCondition(l_runstepb, l_forwardNegative);
            l_runLt.AddAnyFrameCondition(l_runstop, l_run_specific_negative);
            l_runRt.AddAnyFrameCondition(l_runstop, l_run_specific_negative);
            l_runRt.AddAnyFrameCondition(l_run_ss_rt, () => l_forwardNegative() && l_sidestepRightPositive());
            l_runLt.AddAnyFrameCondition(l_run_ss_rt, () => l_forwardNegative() && l_sidestepRightPositive());
            l_runRt.AddAnyFrameCondition(l_run_ss_lt, () => l_forwardNegative() && l_sidestepLeftPositive());
            l_runLt.AddAnyFrameCondition(l_run_ss_lt, () => l_forwardNegative() && l_sidestepLeftPositive());
            l_run_ss_rt.AddLastFrameCondition(l_ss_rt_Rt, l_sidestepRightPositive);
            l_run_ss_rt.AddLastFrameCondition(l_ss_rt_stop, l_sidestepRightNegative);
            l_run_ss_lt.AddLastFrameCondition(l_ss_lt_Lt, l_sidestepLeftPositive);
            l_run_ss_lt.AddLastFrameCondition(l_ss_lt_stop, l_sidestepLeftNegative);
            l_runLt.AddAnyFrameCondition(l_run_bk_1stepa, () => l_forwardNegative() && l_backwardPositive());
            l_runRt.AddAnyFrameCondition(l_run_bk_1stepa, () => l_forwardNegative() && l_backwardPositive());
            l_runstop.AddLastFrameCondition(l_idle1, l_forwardNegative);
            l_runstepb.AddLastFrameCondition(l_idle1, l_forwardNegative);
            l_runstepb.AddAnyFrameCondition(l_run1stepa, l_forwardPositive);
            l_runstop.AddAnyFrameCondition(l_run1stepa, l_forwardPositive);
            l_runStart.AddLastFrameCondition(l_runstop, l_forwardNegative);
        }
        #endregion

        #region run bk
        TRAMState l_run_bk_Lt        = TRAMState.FormState(AnimFlags.run_bk | AnimFlags.lt);
        TRAMState l_run_bk_Rt        = TRAMState.FormState(AnimFlags.run_bk | AnimFlags.rt);
        TRAMState l_run_bk_Start     = TRAMState.FormState(AnimFlags.run_bk | AnimFlags.start);
        TRAMState l_run_bk_stepb     = TRAMState.FormState(AnimFlags.run_bk | AnimFlags.stepb);
        TRAMState l_run_bk_stop      = TRAMState.FormState(AnimFlags.run_bk | AnimFlags.stop);
        TRAMState l_run_bk_ss_rt     = TRAMState.FormState(AnimFlags.run_bk | AnimFlags.ss_rt);
        TRAMState l_run_bk_ss_lt     = TRAMState.FormState(AnimFlags.run_bk | AnimFlags.ss_lt);
        TRAMState l_crouch_bk        = TRAMState.FormState(AnimFlags.crouch | AnimFlags.bk);
        TRAMState l_run_bk_slide     = TRAMState.FormState(AnimFlags.run_bk | AnimFlags.slide);
        TRAMState l_run_bk_slide_run = TRAMState.FormState(AnimFlags.run_bk | AnimFlags.slide_run);
        TRAMState l_run_bk_slide_id  = TRAMState.FormState(AnimFlags.run_bk | AnimFlags.slide | AnimFlags.id);

        {
            l_run_bk_1stepa.AddAnyFrameCondition(l_crouch_bk, l_crouchPositive);
            l_run_bk_Start.AddAnyFrameCondition(l_run_bk_slide, l_crouchPositive);
            l_run_bk_Lt.AddAnyFrameCondition(l_run_bk_slide, l_crouchPositive);
            l_run_bk_Rt.AddAnyFrameCondition(l_run_bk_slide, l_crouchPositive);
            l_run_bk_slide.AddLastFrameCondition(l_run_bk_slide_run, l_backwardPositive);
            l_run_bk_slide.AddLastFrameCondition(l_run_bk_slide_id, l_backwardNegative);
            l_crouch_bk.AddLastFrameCondition(l_idle1, () => true);
            l_run_bk_slide_id.AddLastFrameCondition(l_idle1, () => true);
            l_run_bk_slide_run.AddLastFrameCondition(l_idle1, l_backwardNegative);
            l_run_bk_slide_run.AddLastFrameCondition(l_run_bk_Lt, l_backwardPositive);

            Func <bool> l_run_bk_specific_negative = () =>
            {
                m_targetAngle = Quaternion.Euler(0, l_sidestepLeftPositive() ? 45 : l_sidestepRightPositive() ? -45 : 0, 0);
                return(l_backwardNegative());
            };

            l_run_bk_1stepa
            .AddLastFrameCondition(l_run_bk_Start, l_backwardPositive)
            .AddLastFrameCondition(l_run_bk_Rt, l_backwardPositive)
            .AddLastFrameCondition(l_run_bk_Lt, l_backwardPositive)
            .AddLastFrameCondition(l_run_bk_Rt, l_backwardPositive);
            l_run_bk_1stepa.AddLastFrameCondition(l_run_bk_stepb, l_backwardNegative);
            l_run_bk_Lt.AddAnyFrameCondition(l_run_bk_stop, l_run_bk_specific_negative);
            l_run_bk_Rt.AddAnyFrameCondition(l_run_bk_stop, l_run_bk_specific_negative);
            l_run_bk_Lt.AddAnyFrameCondition(l_run1stepa, () => l_backwardNegative() && l_forwardPositive());
            l_run_bk_Rt.AddAnyFrameCondition(l_run1stepa, () => l_backwardNegative() && l_forwardPositive());
            l_run_bk_Lt.AddAnyFrameCondition(l_run_bk_ss_rt, () => l_backwardNegative() && l_sidestepRightPositive());
            l_run_bk_Rt.AddAnyFrameCondition(l_run_bk_ss_rt, () => l_backwardNegative() && l_sidestepRightPositive());
            l_run_bk_Lt.AddAnyFrameCondition(l_run_bk_ss_lt, () => l_backwardNegative() && l_sidestepLeftPositive());
            l_run_bk_Rt.AddAnyFrameCondition(l_run_bk_ss_lt, () => l_backwardNegative() && l_sidestepLeftPositive());
            l_run_bk_ss_rt.AddLastFrameCondition(l_ss_rt_Rt, l_sidestepRightPositive);
            l_run_bk_ss_rt.AddLastFrameCondition(l_ss_rt_stop, l_sidestepRightNegative);
            l_run_bk_ss_lt.AddLastFrameCondition(l_ss_lt_Lt, l_sidestepLeftPositive);
            l_run_bk_ss_lt.AddLastFrameCondition(l_ss_lt_stop, l_sidestepLeftNegative);
            l_run_bk_stop.AddLastFrameCondition(l_idle1, l_backwardNegative);
            l_run_bk_stepb.AddLastFrameCondition(l_idle1, l_backwardNegative);
            l_run_bk_stepb.AddAnyFrameCondition(l_run_bk_1stepa, l_backwardPositive);
            l_run_bk_stop.AddAnyFrameCondition(l_run_bk_1stepa, l_backwardPositive);
            l_run_bk_Start.AddLastFrameCondition(l_run_bk_stop, l_backwardNegative);
        }
        #endregion

        #region ss_lt
        l_ss_lt_1stepa
        .AddLastFrameCondition(l_ss_lt_Start, l_sidestepLeftPositive)
        .AddLastFrameCondition(l_ss_lt_Lt, l_sidestepLeftPositive)
        .AddLastFrameCondition(l_ss_lt_Rt, l_sidestepLeftPositive)
        .AddLastFrameCondition(l_ss_lt_Lt, l_sidestepLeftPositive);
        TRAMState l_ss_lt_stepb     = TRAMState.FormState(AnimFlags.ss_lt | AnimFlags.stepb);
        TRAMState l_ss_lt_run       = TRAMState.FormState(AnimFlags.ss_lt_run);
        TRAMState l_jump_lt_start   = TRAMState.FormState(AnimFlags.jump_lt | AnimFlags.start, DoJump);
        TRAMState l_jump_lt_idle    = TRAMState.FormState(AnimFlags.jump_lt | AnimFlags.idle);
        TRAMState l_jump_lt_land    = TRAMState.FormState(AnimFlags.jump_lt | AnimFlags.land);
        TRAMState l_jump_lt_land_lt = TRAMState.FormState(AnimFlags.jump_lt | AnimFlags.land | AnimFlags.lt);
        TRAMState l_jump_lt_crouch  = TRAMState.FormState(AnimFlags.jump_lt | AnimFlags.crouch);
        TRAMState l_ss_lt_slide     = TRAMState.FormState(AnimFlags.ss_lt | AnimFlags.slide);
        TRAMState l_crouch_lt       = TRAMState.FormState(AnimFlags.crouch | AnimFlags.lt);
        l_ss_lt_1stepa.AddAnyFrameCondition(l_crouch_lt, l_crouchPositive);
        l_ss_lt_Lt.AddAnyFrameCondition(l_ss_lt_slide, l_crouchPositive);
        l_ss_lt_Rt.AddAnyFrameCondition(l_ss_lt_slide, l_crouchPositive);
        l_ss_lt_Start.AddAnyFrameCondition(l_ss_lt_slide, l_crouchPositive);
        l_ss_lt_slide.AddLastFrameCondition(l_ss_lt_stop, l_sidestepLeftNegative);
        l_ss_lt_slide.AddLastFrameCondition(l_ss_lt_Lt, l_sidestepLeftPositive);
        l_crouch_lt.AddLastFrameCondition(l_idle1, () => true);
        l_ss_lt_1stepa.AddLastFrameCondition(l_ss_lt_stepb, l_sidestepLeftNegative);
        l_ss_lt_Lt.AddAnyFrameCondition(l_ss_lt_stop, l_sidestepLeftNegative);
        l_ss_lt_Rt.AddAnyFrameCondition(l_ss_lt_stop, l_sidestepLeftNegative);
        l_ss_lt_Lt.AddAnyFrameCondition(l_run_bk_Lt, l_backwardPositive);
        l_ss_lt_Rt.AddAnyFrameCondition(l_run_bk_Lt, l_backwardPositive);
        l_ss_lt_Lt.AddAnyFrameCondition(l_ss_lt_run, l_forwardPositive);
        l_ss_lt_Rt.AddAnyFrameCondition(l_ss_lt_run, l_forwardPositive);
        l_ss_lt_Lt.AddAnyFrameCondition(l_jump_lt_start, l_jumpPositive);
        l_ss_lt_Rt.AddAnyFrameCondition(l_jump_lt_start, l_jumpPositive);
        l_jump_lt_start.AddLastFrameCondition(l_jump_lt_idle, l_crouchNegative);
        l_jump_lt_start.AddLastFrameCondition(l_jump_lt_crouch, l_crouchPositive);
        l_jump_lt_idle.AddAnyFrameCondition(l_jump_lt_crouch, l_crouchPositive);
        l_jump_lt_idle.AddLangingCondition(l_jump_lt_land_lt, l_sidestepLeftPositive);
        l_jump_lt_idle.AddLangingCondition(l_jump_lt_land, l_sidestepLeftNegative);
        l_jump_lt_crouch.AddLangingCondition(l_jump_lt_land_lt, l_sidestepLeftPositive);
        l_jump_lt_crouch.AddLangingCondition(l_jump_lt_land, l_sidestepLeftNegative);
        l_jump_lt_land.AddLastFrameCondition(l_ss_lt_1stepa, l_sidestepLeftPositive);
        l_jump_lt_land.AddLastFrameCondition(l_idle1, l_sidestepLeftNegative);
        l_jump_lt_land_lt.AddLastFrameCondition(l_ss_lt_Rt, l_sidestepLeftPositive);
        l_jump_lt_land_lt.AddLastFrameCondition(l_ss_lt_stop, l_sidestepLeftNegative);
        l_ss_lt_run.AddLastFrameCondition(l_runRt, l_forwardPositive);
        l_ss_lt_run.AddLastFrameCondition(l_ss_lt_stop, l_forwardNegative);
        l_ss_lt_stop.AddLastFrameCondition(l_idle1, l_sidestepLeftNegative);
        l_ss_lt_stepb.AddLastFrameCondition(l_idle1, l_sidestepLeftNegative);
        l_ss_lt_stepb.AddAnyFrameCondition(l_ss_lt_1stepa, l_sidestepLeftPositive);
        l_ss_lt_stop.AddAnyFrameCondition(l_ss_lt_1stepa, l_sidestepLeftPositive);
        l_ss_lt_Start.AddLastFrameCondition(l_ss_lt_stop, l_sidestepLeftNegative);
        #endregion

        #region ss_rt
        l_ss_rt_1stepa
        .AddLastFrameCondition(l_ss_rt_Start, l_sidestepRightPositive)
        .AddLastFrameCondition(l_ss_rt_Rt, l_sidestepRightPositive)
        .AddLastFrameCondition(l_ss_rt_Lt, l_sidestepRightPositive)
        .AddLastFrameCondition(l_ss_rt_Rt, l_sidestepRightPositive);
        TRAMState l_ss_rt_stepb     = TRAMState.FormState(AnimFlags.ss_rt | AnimFlags.stepb);
        TRAMState l_ss_rt_run       = TRAMState.FormState(AnimFlags.ss_rt_run);
        TRAMState l_jump_rt_start   = TRAMState.FormState(AnimFlags.jump_rt | AnimFlags.start, DoJump);
        TRAMState l_jump_rt_idle    = TRAMState.FormState(AnimFlags.jump_rt | AnimFlags.idle);
        TRAMState l_jump_rt_land    = TRAMState.FormState(AnimFlags.jump_rt | AnimFlags.land);
        TRAMState l_jump_rt_land_lt = TRAMState.FormState(AnimFlags.jump_rt | AnimFlags.land | AnimFlags.rt);
        TRAMState l_jump_rt_crouch  = TRAMState.FormState(AnimFlags.jump_rt | AnimFlags.crouch);
        TRAMState l_ss_rt_slide     = TRAMState.FormState(AnimFlags.ss_rt | AnimFlags.slide);
        TRAMState l_crouch_rt       = TRAMState.FormState(AnimFlags.crouch | AnimFlags.rt);
        l_ss_rt_1stepa.AddAnyFrameCondition(l_crouch_rt, l_crouchPositive);
        l_ss_rt_Lt.AddAnyFrameCondition(l_ss_rt_slide, l_crouchPositive);
        l_ss_rt_Rt.AddAnyFrameCondition(l_ss_rt_slide, l_crouchPositive);
        l_ss_rt_Start.AddAnyFrameCondition(l_ss_rt_slide, l_crouchPositive);
        l_ss_rt_slide.AddLastFrameCondition(l_ss_rt_stop, l_sidestepRightNegative);
        l_ss_rt_slide.AddLastFrameCondition(l_ss_rt_Lt, l_sidestepRightPositive);
        l_crouch_rt.AddLastFrameCondition(l_idle1, () => true);
        l_ss_rt_1stepa.AddLastFrameCondition(l_ss_rt_stepb, l_sidestepRightNegative);
        l_ss_rt_Lt.AddAnyFrameCondition(l_ss_rt_stop, l_sidestepRightNegative);
        l_ss_rt_Rt.AddAnyFrameCondition(l_ss_rt_stop, l_sidestepRightNegative);
        l_ss_rt_Lt.AddAnyFrameCondition(l_run_bk_Rt, l_backwardPositive);
        l_ss_rt_Rt.AddAnyFrameCondition(l_run_bk_Rt, l_backwardPositive);
        l_ss_rt_Lt.AddAnyFrameCondition(l_ss_rt_run, l_forwardPositive);
        l_ss_rt_Rt.AddAnyFrameCondition(l_ss_rt_run, l_forwardPositive);
        l_ss_rt_Lt.AddAnyFrameCondition(l_jump_rt_start, l_jumpPositive);
        l_ss_rt_Rt.AddAnyFrameCondition(l_jump_rt_start, l_jumpPositive);
        l_jump_rt_start.AddLastFrameCondition(l_jump_rt_idle, l_crouchNegative);
        l_jump_rt_start.AddLastFrameCondition(l_jump_rt_crouch, l_crouchPositive);
        l_jump_rt_idle.AddAnyFrameCondition(l_jump_rt_crouch, l_crouchPositive);
        l_jump_rt_idle.AddLangingCondition(l_jump_rt_land_lt, l_sidestepRightPositive);
        l_jump_rt_idle.AddLangingCondition(l_jump_rt_land, l_sidestepRightNegative);
        l_jump_rt_crouch.AddLangingCondition(l_jump_rt_land_lt, l_sidestepRightPositive);
        l_jump_rt_crouch.AddLangingCondition(l_jump_rt_land, l_sidestepRightNegative);
        l_jump_rt_land.AddLastFrameCondition(l_ss_rt_1stepa, l_sidestepRightPositive);
        l_jump_rt_land.AddLastFrameCondition(l_idle1, l_sidestepRightNegative);
        l_jump_rt_land_lt.AddLastFrameCondition(l_ss_rt_Rt, l_sidestepRightPositive);
        l_jump_rt_land_lt.AddLastFrameCondition(l_ss_rt_stop, l_sidestepRightNegative);
        l_ss_rt_run.AddLastFrameCondition(l_runLt, l_forwardPositive);
        l_ss_rt_run.AddLastFrameCondition(l_ss_rt_stop, l_forwardNegative);
        l_ss_rt_stop.AddLastFrameCondition(l_idle1, l_sidestepRightNegative);
        l_ss_rt_stepb.AddLastFrameCondition(l_idle1, l_sidestepRightNegative);
        l_ss_rt_stepb.AddAnyFrameCondition(l_ss_rt_1stepa, l_sidestepRightPositive);
        l_ss_rt_stop.AddAnyFrameCondition(l_ss_rt_1stepa, l_sidestepRightPositive);
        l_ss_rt_Start.AddLastFrameCondition(l_ss_rt_stop, l_sidestepRightNegative);
        #endregion

        TRAMState l_jump_start = TRAMState.FormState(AnimFlags.jump | AnimFlags.start, DoJump);

        #region idle -> jump
        TRAMState l_jump_idle    = TRAMState.FormState(AnimFlags.jump | AnimFlags.idle);
        TRAMState l_jump_land    = TRAMState.FormState(AnimFlags.jump | AnimFlags.land);
        TRAMState l_jump_land_fw = TRAMState.FormState(AnimFlags.jump | AnimFlags.land | AnimFlags.fw);
        TRAMState l_jump_crouch  = TRAMState.FormState(AnimFlags.jump | AnimFlags.crouch);
        l_jump_start.AddLastFrameCondition(l_jump_idle, () => true);
        l_jump_idle.AddAnyFrameCondition(l_jump_crouch, l_crouchPositive);
        l_jump_idle.AddLangingCondition(l_jump_land, l_forwardNegative);
        l_jump_idle.AddLangingCondition(l_jump_land_fw, l_forwardPositive);
        l_jump_crouch.AddLangingCondition(l_jump_land, l_forwardNegative);
        l_jump_crouch.AddLangingCondition(l_jump_land_fw, l_forwardPositive);
        l_jump_land_fw.AddLastFrameCondition(l_runLt, l_forwardPositive);
        l_jump_land_fw.AddLastFrameCondition(l_runstop, l_forwardNegative);
        l_jump_land.AddLastFrameCondition(l_run1stepa, l_forwardPositive);
        l_jump_land.AddLastFrameCondition(l_run_bk_1stepa, l_backwardPositive);
        l_jump_land.AddLastFrameCondition(l_ss_lt_1stepa, l_sidestepLeftPositive);
        l_jump_land.AddLastFrameCondition(l_ss_rt_1stepa, l_sidestepRightPositive);
        l_jump_land.AddLastFrameCondition(l_idle1, () => !(m_channel[ChannelKind.Forward] || m_channel[ChannelKind.Backward] || m_channel[ChannelKind.Right] || m_channel[ChannelKind.Left]));
        #endregion

        #region crouch motion
        TRAMState l_idle2croucha = TRAMState.FormState(AnimFlags.idle2croucha);
        TRAMState l_idle2crouchb = TRAMState.FormState(AnimFlags.idle2crouchb);
        TRAMState l_crouch2idlea = TRAMState.FormState(AnimFlags.crouch2idlea);
        TRAMState l_crouch2idleb = TRAMState.FormState(AnimFlags.crouch2idleb);
        TRAMState l_crouch_idle  = TRAMState.FormState(AnimFlags.crouch | AnimFlags.idle);
        l_crouch_idle.AddLastFrameCondition(l_crouch_idle, l_crouchPositive);
        l_crouch_idle.AddAnyFrameCondition(l_crouch2idleb, l_crouchNegative);
        l_crouch2idleb.AddLastFrameCondition(l_idle2crouchb, l_crouchPositive);
        l_crouch2idleb.AddLastFrameCondition(l_crouch2idlea, l_crouchNegative);
        l_crouch2idlea.AddLastFrameCondition(l_idle1, l_crouchNegative);
        l_crouch2idlea.AddLastFrameCondition(l_idle2croucha, l_crouchPositive);
        l_idle2croucha.AddLastFrameCondition(l_idle2crouchb, l_crouchPositive);
        l_idle2crouchb.AddLastFrameCondition(l_crouch_idle, l_crouchPositive);
        l_idle2crouchb.AddLastFrameCondition(l_crouch_idle, l_crouchNegative);
        l_idle2croucha.AddLastFrameCondition(l_crouch2idlea, l_crouchNegative);
        #endregion

        #region crouch run
        TRAMState l_crouch_run_lt = TRAMState.FormState(AnimFlags.crouch | AnimFlags.run | AnimFlags.lt);
        TRAMState l_crouch_run_rt = TRAMState.FormState(AnimFlags.crouch | AnimFlags.run | AnimFlags.rt);
        {
            Func <bool> l_crouch_run_specific_input     = () => l_crouchPositive() && (l_sidestepLeftPositive() | l_sidestepRightPositive() | l_forwardPositive());
            Func <bool> l_crouch_run_specific_input_neg = () => l_crouchPositive() && (!l_sidestepLeftPositive() && !l_sidestepRightPositive() && !l_forwardPositive());

            Func <bool> l_crouch_miltidirection = () =>
            {
                m_targetAngle = Quaternion.Euler(0, (m_channel[ChannelKind.Left] ? -90 : m_channel[ChannelKind.Right] ? 90f : 0) / (m_channel[ChannelKind.Forward] ? 2f : 1f), 0);
                return(l_crouchNegative());
            };

            l_crouch_run_lt.AddLastFrameCondition(l_crouch_run_rt, l_crouch_run_specific_input);
            l_crouch_run_rt.AddLastFrameCondition(l_crouch_run_lt, l_crouch_run_specific_input);
            l_crouch_run_lt.AddAnyFrameCondition(l_runStart, l_crouch_miltidirection);
            l_crouch_run_rt.AddAnyFrameCondition(l_runStart, l_crouch_miltidirection);
            l_crouch_run_lt.AddAnyFrameCondition(l_crouch_idle, l_crouch_run_specific_input_neg);
            l_crouch_run_rt.AddAnyFrameCondition(l_crouch_idle, l_crouch_run_specific_input_neg);
            l_crouch_idle.AddAnyFrameCondition(l_crouch_run_lt, l_crouch_run_specific_input);
        }
        #endregion

        #region crouch run bk
        TRAMState l_crouch_run_bk_lt = TRAMState.FormState(AnimFlags.crouch | AnimFlags.run_bk | AnimFlags.lt);
        TRAMState l_crouch_run_bk_rt = TRAMState.FormState(AnimFlags.crouch | AnimFlags.run_bk | AnimFlags.rt);
        {
            Func <bool> l_crouch_run_bk_specific_input     = () => l_crouchPositive() && (l_sidestepLeftPositive() | l_sidestepRightPositive() | l_backwardPositive());
            Func <bool> l_crouch_run_bk_specific_input_neg = () => l_crouchPositive() && (!l_sidestepLeftPositive() && !l_sidestepRightPositive() && !l_backwardPositive());

            Func <bool> l_crouch_bk_miltidirection = () =>
            {
                m_targetAngle = Quaternion.Euler(0, (m_channel[ChannelKind.Left] ? 90 : m_channel[ChannelKind.Right] ? -90f : 0) / (m_channel[ChannelKind.Backward] ? 2f : 1f), 0);
                return(l_crouchNegative() && l_forwardNegative());
            };

            l_crouch_run_bk_lt.AddLastFrameCondition(l_crouch_run_bk_rt, l_crouch_run_bk_specific_input);
            l_crouch_run_bk_rt.AddLastFrameCondition(l_crouch_run_bk_lt, l_crouch_run_bk_specific_input);
            l_crouch_run_bk_lt.AddAnyFrameCondition(l_run_bk_Start, l_crouch_bk_miltidirection);
            l_crouch_run_bk_rt.AddAnyFrameCondition(l_run_bk_Start, l_crouch_bk_miltidirection);
            l_crouch_run_bk_lt.AddAnyFrameCondition(l_crouch_idle, l_crouch_run_bk_specific_input_neg);
            l_crouch_run_bk_rt.AddAnyFrameCondition(l_crouch_idle, l_crouch_run_bk_specific_input_neg);
            l_crouch_idle.AddAnyFrameCondition(l_crouch_run_bk_lt, () => m_channel[ChannelKind.Backward | ChannelKind.Crouch]);
        }
        #endregion

        #region jump fw
        TRAMState l_jump_fw_start   = TRAMState.FormState(AnimFlags.jump_fw | AnimFlags.start, DoJump);
        TRAMState l_jump_fw_idle    = TRAMState.FormState(AnimFlags.jump_fw | AnimFlags.idle);
        TRAMState l_jump_fw_land    = TRAMState.FormState(AnimFlags.jump_fw | AnimFlags.land);
        TRAMState l_jump_fw_land_fw = TRAMState.FormState(AnimFlags.jump_fw | AnimFlags.land | AnimFlags.fw);
        TRAMState l_jump_fw_crouch  = TRAMState.FormState(AnimFlags.jump_fw | AnimFlags.crouch);
        l_runLt.AddAnyFrameCondition(l_jump_fw_start, l_jumpPositive);
        l_runRt.AddAnyFrameCondition(l_jump_fw_start, l_jumpPositive);
        l_jump_fw_start.AddLastFrameCondition(l_jump_fw_idle, l_crouchNegative);
        l_jump_fw_start.AddLastFrameCondition(l_jump_fw_crouch, l_crouchPositive);
        l_jump_fw_idle.AddAnyFrameCondition(l_jump_fw_crouch, l_crouchPositive);
        l_jump_fw_idle.AddLangingCondition(l_jump_fw_land, l_forwardNegative);
        l_jump_fw_idle.AddLangingCondition(l_jump_fw_land_fw, l_forwardPositive);
        l_jump_fw_crouch.AddLangingCondition(l_jump_fw_land, l_forwardNegative);
        l_jump_fw_crouch.AddLangingCondition(l_jump_fw_land_fw, l_forwardPositive);
        l_jump_fw_land.AddLastFrameCondition(l_run1stepa, l_forwardPositive);
        l_jump_fw_land.AddLastFrameCondition(l_idle1, l_forwardNegative);
        l_jump_fw_land_fw.AddLastFrameCondition(l_runstop, l_forwardNegative);
        l_jump_fw_land_fw.AddLastFrameCondition(l_runLt, l_forwardPositive);
        #endregion

        #region jump bk
        TRAMState l_jump_bk_start   = TRAMState.FormState(AnimFlags.jump_bk | AnimFlags.start, DoJump);
        TRAMState l_jump_bk_idle    = TRAMState.FormState(AnimFlags.jump_bk | AnimFlags.idle);
        TRAMState l_jump_bk_land    = TRAMState.FormState(AnimFlags.jump_bk | AnimFlags.land);
        TRAMState l_jump_bk_land_bk = TRAMState.FormState(AnimFlags.jump_bk | AnimFlags.land | AnimFlags.bk);
        TRAMState l_jump_bk_crouch  = TRAMState.FormState(AnimFlags.jump_bk | AnimFlags.crouch);
        l_run_bk_Lt.AddAnyFrameCondition(l_jump_bk_start, l_jumpPositive);
        l_run_bk_Rt.AddAnyFrameCondition(l_jump_bk_start, l_jumpPositive);
        l_jump_bk_start.AddLastFrameCondition(l_jump_bk_idle, l_crouchNegative);
        l_jump_bk_start.AddLastFrameCondition(l_jump_bk_crouch, l_crouchPositive);
        l_jump_bk_idle.AddAnyFrameCondition(l_jump_bk_crouch, l_crouchPositive);
        l_jump_bk_idle.AddLangingCondition(l_jump_bk_land, l_backwardNegative);
        l_jump_bk_idle.AddLangingCondition(l_jump_bk_land_bk, l_backwardPositive);
        l_jump_bk_crouch.AddLangingCondition(l_jump_bk_land, l_backwardNegative);
        l_jump_bk_crouch.AddLangingCondition(l_jump_bk_land_bk, l_backwardPositive);
        l_jump_bk_land.AddLastFrameCondition(l_run_bk_1stepa, l_backwardPositive);
        l_jump_bk_land.AddLastFrameCondition(l_idle1, l_backwardNegative);
        l_jump_bk_land_bk.AddLastFrameCondition(l_run_bk_stop, l_backwardNegative);
        l_jump_bk_land_bk.AddLastFrameCondition(l_run_bk_Lt, l_backwardPositive);
        #endregion

        #region idle
        l_idle1.AddLastFrameCondition(l_idle2, () => !m_channel[ChannelKind.Any]);
        l_idle2.AddLastFrameCondition(l_idle1, () => !m_channel[ChannelKind.Any]);
        l_idle1.AddAnyFrameCondition(l_run1stepa, l_forwardPositive);
        l_idle2.AddAnyFrameCondition(l_run1stepa, l_forwardPositive);
        l_idle1.AddAnyFrameCondition(l_run_bk_1stepa, l_backwardPositive);
        l_idle2.AddAnyFrameCondition(l_run_bk_1stepa, l_backwardPositive);
        l_idle1.AddAnyFrameCondition(l_ss_lt_1stepa, l_sidestepLeftPositive);
        l_idle2.AddAnyFrameCondition(l_ss_lt_1stepa, l_sidestepLeftPositive);
        l_idle1.AddAnyFrameCondition(l_ss_rt_1stepa, l_sidestepRightPositive);
        l_idle2.AddAnyFrameCondition(l_ss_rt_1stepa, l_sidestepRightPositive);
        l_idle1.AddAnyFrameCondition(l_jump_start, l_jumpPositive);
        l_idle2.AddAnyFrameCondition(l_jump_start, l_jumpPositive);
        l_idle1.AddAnyFrameCondition(l_idle2croucha, l_crouchPositive);
        l_idle2.AddAnyFrameCondition(l_idle2croucha, l_crouchPositive);
        #endregion

        m_state = l_idle1;
    }
示例#8
0
    string GetAnim()
    {
        m_prevFlags   = m_lastFlags;
        m_targetAngle = Quaternion.Euler(0, 0, 0);
        m_state       = m_state.OnAnyFrame();
        m_lastFlags   = m_state.m_correspondingValue;

        string animname = "";

        foreach (string s in m_lastFlags.ToString().Split(",".ToCharArray()))
        {
            switch (s.Replace(" ", ""))
            {
            case "ss_rt":
                animname += "ss_rt";
                break;

            case "ss_lt":
                animname += "ss_lt";
                break;

            case "run_bk":
                animname += "run_bk";
                break;

            case "stepa":
                animname += "1stepa";
                break;

            case "stepb":
                animname += "1stepb";
                break;

            default:
                animname += s.Replace(" ", "");
                break;

            case "rt":
                animname += "rt";
                break;

            case "lt":
                animname += "lt";
                break;
            }

            animname += "_";
        }

        animname = animname.Remove(animname.Length - 1);

        if ((m_lastFlags & AnimFlags.run) != 0)
        {
            switch (animname)
            {
            case "run_1stepa":
                animname = "run1stepa";
                break;

            case "run_1stepb":
                animname = "run1stepb";
                break;

            case "run_start":
                animname = "runstart";
                break;

            case "run_stop":
                animname = "runstop";
                break;
            }
        }

        return(animname);
    }