You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.2 KiB
81 lines
2.2 KiB
using System;
|
|
using System.Threading.Tasks;
|
|
using Babushka.scripts.CSharp.Common.Util;
|
|
using Godot;
|
|
|
|
namespace Babushka.scripts.CSharp.Common.Fight;
|
|
|
|
public abstract class FighterAction
|
|
{
|
|
public class TargetSelection
|
|
{
|
|
// ReSharper disable once MemberHidesStaticFromOuterClass
|
|
public static readonly TargetSelection Skip = new() { skipTargetSelection = () => true };
|
|
public Func<bool> skipTargetSelection = () => false;
|
|
}
|
|
|
|
public abstract class FighterActionDetail
|
|
{
|
|
public abstract bool DetailComplete();
|
|
}
|
|
|
|
private bool _abort = false;
|
|
|
|
#region Shortcuts
|
|
|
|
protected static FightWorld.FightHappeningData HappeningData =>
|
|
FightWorld.Instance.fightHappeningData ?? throw new NoFightHappeningException();
|
|
|
|
#endregion
|
|
|
|
/// <summary>
|
|
/// Executes the data modification for the action. This must happen instantly and not via a coroutines or callbacks.
|
|
/// To get a multiple hit effect for one action, use appropriate Visual Manipulation functions in AnimateAction.
|
|
/// </summary>
|
|
public virtual void ExecuteAction()
|
|
{
|
|
}
|
|
|
|
/// <summary>
|
|
/// Returns a way to determine, when an action animation is done
|
|
/// </summary>
|
|
/// <returns>
|
|
/// A variant that can be <c>float</c> or <c>Func<bool></c>.<br/>
|
|
/// When the return type is <c>float</c>, the animation will take the return value amount of seconds.<br/>
|
|
/// When the return type is <c>Func<bool></c>, the animation will be done, when the function returns true.
|
|
/// </returns>
|
|
public abstract Variant<float, Func<bool>> GetAnimationEnd();
|
|
|
|
/// <summary>
|
|
/// Animates the action.
|
|
/// </summary>
|
|
public virtual async Task AnimateAction()
|
|
{
|
|
}
|
|
|
|
public void MarkAbort()
|
|
{
|
|
_abort = true;
|
|
}
|
|
|
|
public bool MarkedForAbort()
|
|
{
|
|
return _abort;
|
|
}
|
|
|
|
public abstract FighterActionDetail? NeededDetail();
|
|
|
|
public class Skip : FighterAction
|
|
{
|
|
public override Variant<float, Func<bool>> GetAnimationEnd()
|
|
{
|
|
return 0f;
|
|
}
|
|
|
|
public override FighterActionDetail? NeededDetail()
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
}
|