public override float ActionCharAnimRun(ActionCharAnim action) { string clip2DNew = action.clip2D; if (action.includeDirection) { clip2DNew += action.animChar.GetSpriteDirection(); } if (!action.isRunning) { action.isRunning = true; if (action.method == ActionCharAnim.AnimMethodChar.PlayCustom && action.clip2D != "") { if (action.animChar.spriteChild && action.animChar.spriteChild.GetComponent <Animator>()) { action.animChar.charState = CharState.Custom; action.animChar.spriteChild.GetComponent <Animator>().CrossFade(clip2DNew, action.fadeTime, action.layerInt); } } else if (action.method == ActionCharAnim.AnimMethodChar.ResetToIdle) { if (action.idleAfterCustom) { action.layerInt = 0; return(action.defaultPauseTime); } else { action.animChar.ResetBaseClips(); action.animChar.charState = CharState.Idle; } } else if (action.method == ActionCharAnim.AnimMethodChar.SetStandard) { if (action.clip2D != "") { if (action.standard == AnimStandard.Idle) { action.animChar.idleAnimSprite = action.clip2D; } else if (action.standard == AnimStandard.Walk) { action.animChar.walkAnimSprite = action.clip2D; } else if (action.standard == AnimStandard.Talk) { action.animChar.talkAnimSprite = action.clip2D; } else if (action.standard == AnimStandard.Run) { action.animChar.runAnimSprite = action.clip2D; } } if (action.changeSpeed) { if (action.standard == AnimStandard.Walk) { action.animChar.walkSpeedScale = action.newSpeed; } else if (action.standard == AnimStandard.Run) { action.animChar.runSpeedScale = action.newSpeed; } } if (action.changeSound) { if (action.standard == AnimStandard.Walk) { if (action.newSound != null) { action.animChar.walkSound = action.newSound; } else { action.animChar.walkSound = null; } } else if (action.standard == AnimStandard.Run) { if (action.newSound != null) { action.animChar.runSound = action.newSound; } else { action.animChar.runSound = null; } } } } if (action.willWait && action.clip2D != "") { if (action.method == ActionCharAnim.AnimMethodChar.PlayCustom) { return(action.defaultPauseTime); } } } else { if (action.animChar.spriteChild && action.animChar.spriteChild.GetComponent <Animator>()) { // Calc how much longer left to wait float totalLength = action.animChar.spriteChild.GetComponent <Animator>().GetCurrentAnimatorStateInfo(action.layerInt).length; float timeLeft = (1f - action.animChar.spriteChild.GetComponent <Animator>().GetCurrentAnimatorStateInfo(action.layerInt).normalizedTime) * totalLength; // Subtract a small amount of time to prevent overshooting timeLeft -= 0.1f; if (timeLeft > 0f) { return(timeLeft); } else { if (action.method == ActionCharAnim.AnimMethodChar.ResetToIdle) { action.animChar.ResetBaseClips(); action.animChar.charState = CharState.Idle; } else if (action.idleAfter) { action.animChar.charState = CharState.Idle; } action.isRunning = false; return(0f); } } else { action.isRunning = false; action.animChar.charState = CharState.Idle; return(0f); } } return(0f); }