/* * 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; }
/// <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; }
/// <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; }
/// <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; }
///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; }
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; }
/// <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; }
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; } }
/// <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; }