Пример #1
0
        /*
         * returns "true", if the animation was changed
         * returns "false", if the animation is already playing or not set
         */
        public virtual bool setCurrentAnimation(EMovementState newState, bool interrupt)
        {
            if (currentState == newState)
                return false;
            else
                currentState = newState;

            if (interrupt)
            {
                print("anim interrupted");
                // clear pending anim, if set before
                bHasPendingAnimation = false;
                pendingAnim = null;
                // switch to new animation directly
                currentAnim = getSpriteAnimation(newState);
                currentAnim.startAnimation();
                framesPerSecond = currentAnim.framesPerSecond;
            }
            else
            {
                // check, if we already have a pending animation
                // in this case, we do not need to call "end animation" again and just override pendingAnim
                if (!bHasPendingAnimation)
                {
                    print("made Pending");
                    bHasPendingAnimation = true;
                    currentAnim.endAnimation();
                }

                // remember the next animation
                pendingAnim = getSpriteAnimation(newState);
            }

            return true;
        }
Пример #2
0
        /// <summary>
        /// Player either stops holding against the wall or holds the opposite direction, going back to airborn state
        /// </summary>
        /// <returns></returns>
        private IEnumerator SubstateFallOffWall()
        {
            m_inSubState = true;
            //Landing Animation Logic
            yield return(null);

            m_state      = EMovementState.Airborn;
            m_inSubState = false;
        }
Пример #3
0
        /// <summary>
        /// Lands from a jump and transitions to idle
        /// </summary>
        /// <returns></returns>
        private IEnumerator SubstateLand()
        {
            m_inSubState = true;
            //Landing Animation Logic
            yield return(null);

            m_state      = EMovementState.Idle;
            m_inSubState = false;
        }
Пример #4
0
        /// <summary>
        /// Stopping movement after moving
        /// </summary>
        /// <returns></returns>
        private IEnumerator SubstateMoveStop()
        {
            m_inSubState = true;
            //Animation Here
            yield return(null);

            m_state      = EMovementState.Idle;
            m_inSubState = false;
        }
Пример #5
0
        ///Make sure all of these set m_inSubState to true at the start and false at the end

        ///<summary>
        ///	Jumping from either an idle or moving state.
        ///</summary>
        private IEnumerator SubstateJump()
        {
            m_inSubState = true;
            //Animation here
            yield return(null);

            m_rb.AddForce(Vector2.up * m_jumpHeight, ForceMode2D.Impulse);
            m_state      = EMovementState.Airborn;
            m_holdJump   = true;
            m_inSubState = false;
        }
Пример #6
0
        private IEnumerator SubstateDie()
        {
            m_inSubState = true;
            //Death initial animation logic
            transform.GetChild(0).gameObject.SetActive(false);
            GameObject particle = (GameObject)Resources.Load("Particles/DieParticle");

            Instantiate(particle, transform.position + Vector3.back * 3, Quaternion.identity);
            yield return(new WaitForSeconds(0.4f));

            GameObject.Find("Canvas").transform.GetChild(0).gameObject.SetActive(true);
            m_state      = EMovementState.Dead;
            m_inSubState = false;
        }
Пример #7
0
        /// <summary>
        /// Starts a wallslide
        /// </summary>
        /// <returns></returns>
        private IEnumerator SubstateWallslide()
        {
            m_inSubState   = true;
            m_slideOnRight = m_moveAccel > 0;
            m_moveAccel    = 0;
            Vector2 velocity = m_rb.velocity;

            velocity.x    = 0;
            m_rb.velocity = velocity;
            //Wallslide animation logic
            yield return(null);

            m_state      = EMovementState.Wallslide;
            m_inSubState = false;
        }
Пример #8
0
 public SpriteAnimation getSpriteAnimation(EMovementState state)
 {
     switch (state)
     {
         case EMovementState.idle: return IdleAnim;
         case EMovementState.walking: return WalkAnim;
         case EMovementState.running: return RunAnim;
         case EMovementState.jumpUp: return JumpUpAnim;
         case EMovementState.jumpForward: return JumpForwAnim;
         case EMovementState.jumpBackward: return JumpBackAnim;
         default:
             print("Could not set anim for state " + state + " : Did you forget that entry?");
             return null;
     }
 }
Пример #9
0
        /// <summary>
        /// Jumps off the side of a wall, going to Airborn state
        /// </summary>
        /// <returns></returns>
        private IEnumerator SubstateWallJump()
        {
            int jumpDir = m_slideOnRight ? -1 : 1;

            m_inSubState = true;
            //Landing Animation Logic
            yield return(null);

            Vector2 dir = m_walljumpDirection;

            dir.x *= jumpDir;
            dir.Normalize();
            m_rb.AddForce(dir * m_walljumpForce, ForceMode2D.Impulse);
            yield return(new WaitForSeconds(0.1f));

            m_walljumpMod = m_walljumpAirControlMod;
            m_state       = EMovementState.Airborn;
            m_inSubState  = false;
        }