Organize custom scripts under Assets/Baba_yaga and merge Opsive folders to Assets root
This commit is contained in:
107
Assets/Scripts/Character/Abilities/MeleeCounterAttackResponse.cs
Normal file
107
Assets/Scripts/Character/Abilities/MeleeCounterAttackResponse.cs
Normal file
@@ -0,0 +1,107 @@
|
||||
/// ---------------------------------------------
|
||||
/// Ultimate Character Controller
|
||||
/// Copyright (c) Opsive. All Rights Reserved.
|
||||
/// https://www.opsive.com
|
||||
/// ---------------------------------------------
|
||||
|
||||
namespace Opsive.UltimateCharacterController.Character.Abilities
|
||||
{
|
||||
using Opsive.Shared.Events;
|
||||
using Opsive.Shared.Game;
|
||||
using Opsive.UltimateCharacterController.Utility;
|
||||
using UnityEngine;
|
||||
|
||||
/// <summary>
|
||||
/// Plays a full body animation in response to a melee counter attack.
|
||||
/// </summary>
|
||||
[DefaultStartType(AbilityStartType.Manual)]
|
||||
[DefaultStopType(AbilityStopType.Manual)]
|
||||
[DefaultUseRootMotionPosition(AbilityBoolOverride.True)]
|
||||
[DefaultAbilityIndex(13)]
|
||||
public class MeleeCounterAttackResponse : Ability
|
||||
{
|
||||
[Tooltip("Specifies if the ability should stop when the OnAnimatorMeleeCounterAttackResponseComplete event is received or wait the specified amount of time before ending the ability.")]
|
||||
[SerializeField] protected AnimationEventTrigger m_StopEvent = new AnimationEventTrigger(true, 0.2f);
|
||||
|
||||
public AnimationEventTrigger StopEvent { get { return m_StopEvent; } set { m_StopEvent = value; } }
|
||||
|
||||
private int m_ResponseID;
|
||||
|
||||
public override int AbilityIntData { get { return m_ResponseID; } }
|
||||
|
||||
/// <summary>
|
||||
/// Initialize the default values.
|
||||
/// </summary>
|
||||
public override void Awake()
|
||||
{
|
||||
base.Awake();
|
||||
|
||||
EventHandler.RegisterEvent(m_GameObject, "OnAnimatorMeleeCounterAttackResponseComplete", OnComplete);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The character has been counter attacked. Play a response animation.
|
||||
/// </summary>
|
||||
/// <param name="id">The ID of the counter attack.</param>
|
||||
public void StartResponse(int id)
|
||||
{
|
||||
m_ResponseID = id;
|
||||
StartAbility();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The ability has started.
|
||||
/// </summary>
|
||||
protected override void AbilityStarted()
|
||||
{
|
||||
base.AbilityStarted();
|
||||
|
||||
if (!m_StopEvent.WaitForAnimationEvent) {
|
||||
Scheduler.ScheduleFixed(m_StopEvent.Duration, OnComplete);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called when another ability is attempting to start and the current ability is active.
|
||||
/// Returns true or false depending on if the new ability should be blocked from starting.
|
||||
/// </summary>
|
||||
/// <param name="startingAbility">The ability that is starting.</param>
|
||||
/// <returns>True if the ability should be blocked.</returns>
|
||||
public override bool ShouldBlockAbilityStart(Ability startingAbility)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called when the current ability is attempting to start and another ability is active.
|
||||
/// Returns true or false depending on if the active ability should be stopped.
|
||||
/// </summary>
|
||||
/// <param name="activeAbility">The ability that is currently active.</param>
|
||||
/// <returns>True if the ability should be stopped.</returns>
|
||||
public override bool ShouldStopActiveAbility(Ability activeAbility)
|
||||
{
|
||||
if (activeAbility is Items.Use) {
|
||||
return true;
|
||||
}
|
||||
return base.ShouldStopActiveAbility(activeAbility);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The animation is done playing - stop the ability.
|
||||
/// </summary>
|
||||
private void OnComplete()
|
||||
{
|
||||
StopAbility();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The object has been destroyed.
|
||||
/// </summary>
|
||||
public override void OnDestroy()
|
||||
{
|
||||
base.OnDestroy();
|
||||
|
||||
EventHandler.UnregisterEvent(m_GameObject, "OnAnimatorMeleeCounterAttackResponseComplete", OnComplete);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user